03. august 2007 - 15:21Der er
44 kommentarer og 1 løsning
kan man lave 2 forskellige submit buttons i en form?
Kan man lave to forskellige actions i en form, så man kan sende data fra en form to forskellige steder hen?? Således at man kan lave en knap der sender al data til "gi mig varerne!.php" og en knap der sender al data til "opdater mine varer!.php"?
det kan godt lade sig gøre hvis du bruge javascript.. muligvis også på andre måder <script text="text/javascript"> function submit_form(knap) { formen = document.getElementById('varer'); if(knap == 'giv_varer') { formen.action='givmigvarerne.php'; formen.submit; } else { formen.action='opdaterminevarer.php'; formen.submit; } } </script> <form id="varer"> <button onclick="submit_form('giv_varer')">giv mig varerne</button> <button onclick="submit_form('opdater_varer')">opdater mine varer</button> </form>
Det er kun pseudo-kode så du kan få en ide til hvordan det kan gøres!
Du kan jo også lave to submit-knapper, give dem hvert sit navn, og efter submit tjekker du hvilken knap der er trykket på således: if(isset($_POST['knap1']) gør noget if(isset($_POST['knap2']) gør npget andet
99% af alle de, der i statistikkerne optræder med JS slået fra, er søgerobotter - men selvfølgelig er det da venligt at tage sig af de fire, der faktisk har disabled JS ;o)
hvordan bruger jeg så de data efter jeg har reloadet siden for at få disse værdier smidt i cart tabellen på DB´en? Når man henter noget med en query er det jo nemt nok for de er i DB´en. Men jeg ved ikke lige hvordan jeg bruger de data der kommer fra en form :|
Barklund sagde noget om at jeg kunne bruge foreach til at bearbejde data når det kommer fra formen. for det eneste jeg egentlig skal er at opdatere antallet af varene i min cart tabel.
kan ikke lige få det til at virke,.. mit "antal" felt ser således ud: <INPUT onkeypress="return isNumberKey(event)" type="text" name="qty<?php echo $row["itemId"]; ?>" value="<?php echo $row["qty"]; ?>" size="3">
hvad siger du så jeg skal gøre med: <?php foreach($_POST AS $field => $value) { echo 'FELT : ' . $field . '<br />'; echo 'VÆRDI : ' . $value . '<hr />'; } ?>
Jeg har smidt det ind i en test fil, men hvordan skal jeg få den til at forstå hvad der skal stå i $field? i $value tager den så ikke bare det der står i feltet?
Min form sender med post lige nu.
Sry fordi jeg ikke er den skarpeste koder i skuffen =|
<?php case "update_item": { echo '<pre>'; print_r($_POST); echo '</pre>';
global $dbServer, $dbUser, $dbPass, $dbName;
// Get a connection to the database $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);
foreach($_POST AS $field => $value) {
if($value == 0) { // Remove the item from the users cart //RemoveItem($itemId); } else { mysql_query("update cart set qty = '" . $value . "' where cookieId = '" . GetCartId() . "' and itemId = '$itemId' and surfacenavn = '$surfacenavn'") or die(mysql_error()); } } ShowCart(); break; } ?>
min array ser således ud: Array ( [itemId2] => 2 [beskrivelse2] => 2. ting i db´en [surfacenavn2] => 2127, blå [qty2] => 1 [itemId11] => 11 [beskrivelse11] => nyeste ting i db´en [surfacenavn11] => Hvid [qty11] => 7 [kundenavn] => [Submit] => Bestil ) men efter jeg har sat nr. efter itemId, beskrivelse og surfacenavn updaterer den ikke min cart, og hvis ikke jeg sætter nr på opdaterer den kun den sidste entry,.. Hvordan får jeg det nr ind i min mysql_query?
Prøv at ret navnene i din form fra: name="itemId<?php echo $row["itemId"]; ?>" til: name="itemId[<?php echo $row["itemId"]; ?>]" Så burde det begynde at give lidt mere mening igen. :o)
uhm mente ikke de andre var så vigtige,.. men det er de jo nok =)
well plejede også at have itemId med, men har rettet i det så mange gange at jeg nok har slettet den... men nu ser min $_POST således ud: Array ( [mixId] => Array ( [105] => 105 [292] => 292 )
[itemId] => Array ( [1] => 1 [2] => 2 )
[beskrivelse] => Array ( [1] => 1. ting i db´en [2] => 2. ting i db´en )
grunden til at jeg har lavet en mixId (itemId+farvekode) er at man godt kan bestille samme vare men i forskellige farver/overflader, så derfor skal der være noget andet end bare itemId til at opdatere efter, ellers skal man bruge: where cookieId = '" . GetCartId() . "' and itemId = '$itemId' and surfacenavn = '$surfacenavn'
foreach($_POST['qty'] AS $id => $count) { //Hvis antal er = 0 eller mindre, fjerner vi ITEM! if($count <= 0) { // Remove the item from the users cart RemoveItem($id); } else { mysql_query("update cart set qty = '".$count."', surfacenavn = '".$surfacenavn."' where itemId = '" . $id . "' LIMIT 1") or die(mysql_error()); } }
for dælen nu virker det jo! nu skal jeg bare have det med de to knapper til at virke =) Jeg har lavet lidt om på dit script så det bruger min mixId istedet for itemId, ellers er der problemer med to varer med samme varenr og to forskellige farver =) men her den endelig foreach kode:
foreach($_POST['qty'] AS $id => $count) { //Hvis antal er = 0 eller mindre, fjerner vi ITEM! if($count <= 0) { // Remove the item from the users cart RemoveItem($id); } else { mysql_query("update cart set qty = '".$count."' where mixId = '" . $id . "' LIMIT 1") or die(mysql_error()); } }
Hvor er det bare godt gået jakob! lige en ting kan du forklare mig helt præcis hvad de forskellige dele i foreach scriptet gør så jeg kan forstå det helt? eller er det rigtigt det jeg selv kommer frem til herunder?
$_POST['qty'] gør at vi looper over qty right? AS $id => $count her laver du en variabel der hedder $id som bliver tildelt de værdier der er puttet ind i qty felterne?
smider du ikke lige et svar her jakob,.. endnu engang tusinde tak for hjælpen!
hov forresten jeg kom til at tænke på at det her spørgsmål jo egentlig handlede om at lave to submit knapper i en form og det svarede y jo egentlig på...
y du må lige smide et svar så kan du også få point hvis det er ok med jakob? jakob kan få de 60 point fra det andet spørgsmål der ledte ham herind er det fint?
doh nu har jeg åbenbart et problem mere,.. de to knapper i min form én til at opdatere antal i cart som vi lige har brugt en forfærdelig masse tid på og én til at sende data videre til bestilling,..
Jeg har prøvet med et andet script end det jakob skrev:
<?php
if(isset($_POST['bestil']) { include("bestil.php"); } else { //her kommer resten af det store script vi lige har arbejdet med
ud for den første { får jeg så Parse error: parse error, unexpected '{' in ....... og jeg skulle mene at have husket at afslutte } helt i bunden af scriptet... men afslutningen på den første { kommer jo allerede to linier længere ned.
er det ikke en udemærket måde at gøre det på? den eneste lille ulempe jeg kan se er at man ikke kan visuelt se opbygningen af siden i dreamweaver med design slået til...
Det er jo lidt forskelligt. Det kan jo være rart at styre alt via html. Men normalt gør man jo det, at man laver php tingene i toppen og nederst laver man så selve HTMLen. Om det så bliver lavet via echo eller almindelig html, burde jo give samme resultat. Du skal bare gøre som du synes er nemmest.
jeg endte med at lave en lidt fusket løsning,.. det er nok ikke det smarteste i verdenen. men det må jeg så lave om senere,.. før du sagde jeg skulle lave det hele i én php fil havde jeg lavet en bestil.php som efterfølger til cart.php.
Men det jeg så endte med at gøre (ikke noget med at grine), jeg lavede form action: action="cart.php?action=update_item" og i toppen af cart.php lavede jeg så: if(isset($_POST['bestil'])) { echo "<script>parent.location='bestil.php?kundenavn=" . $_POST["kundenavn"] . "'</script>"; }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.