Avatar billede snigeren Nybegynder
03. august 2007 - 15:21 Der 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"?

Eller på anden vis få data fra form ud?
Avatar billede sw_red_6 Nybegynder
03. august 2007 - 15:35 #1
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!
Avatar billede snigeren Nybegynder
03. august 2007 - 16:17 #2
uhm jeg kunne godt tænke mig hvis det kunne laves i php eller noget så jeg ikke skulle bruge JS, eftersom nogen slår JS fra =|
Avatar billede yHec Novice
03. august 2007 - 20:29 #3
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

Virker fin for mig

/y
Avatar billede olebole Juniormester
03. august 2007 - 21:36 #4
<ole>

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)

/mvh
</bole>
Avatar billede way3000 Nybegynder
04. august 2007 - 20:24 #5
Dem skal der jo også være nogen der tager sig af :) tænk på det som 4 faste brugere hehe.
Avatar billede snigeren Nybegynder
05. august 2007 - 22:21 #6
hehe nice1 ole =)
Var ikke klar over det var så lidt der slog det fra =)

Uhm ja ok v, sådan kan man jo bare gøre...

Så mangler jeg bare lige en sidste ting. Når jeg nu sender alle data viddere med en opdater knap så får jeg f.eks. følgende poster:

id1, vare 1, antal=3
id2, vare 2, antal=4
id3, vare 3, antal=2
id4, vare 4, antal=9

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 :|
Avatar billede snigeren Nybegynder
07. august 2007 - 06:55 #7
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.
Avatar billede jakobdo Ekspert
07. august 2007 - 08:30 #8
foreach($_POST AS $field => $value)
{
echo 'FELT : ' . $field . '<br />';
echo 'V&AElig;RDI : ' . $value . '<hr />';
}
Avatar billede snigeren Nybegynder
08. august 2007 - 22:15 #9
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&AElig;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 =|
Avatar billede jakobdo Ekspert
09. august 2007 - 07:43 #10
Start med at lav din form, hvor du har alle dine input felter.
Smid så en action="noget.php"

Og inden du begynder at arbejde på data, så skriv følgende ud i toppen:

echo '<pre>';
print_r($_POST);
echo '</pre>';

Så kan vi se hvilke data du arbejder med.
Avatar billede snigeren Nybegynder
09. august 2007 - 20:49 #11
uhm jeg ved ikke helt hvad det var jeg havde lavet men der sker lidt mere nu =)

Jeg roder lige videre, så hører i nærmere her i weekenden =)
Avatar billede snigeren Nybegynder
10. august 2007 - 15:01 #12
v: hvordan får jeg lige din metode til at virke? Jeg har lige lavet en testform der således ud:

<form name="form1" method="post">
  <table width="100%"  border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><input type="text" name="textfield"></td>
    </tr>
    <tr>
      <td><input type="text" name="textfield2"></td>
    </tr>
    <tr>
      <td><input type="submit" name="opdater" value="opdater"></td>
    </tr>
    <tr>
      <td><input type="submit" name="bestil" value="bestil"></td>
    </tr>
  </table>
  <?php
  if(isset($_POST['opdater']) {action="knaptestside2.php";}
  if(isset($_POST['bestil']) {action="knaptestside3.php";}
  ?>
</form>
Avatar billede jakobdo Ekspert
10. august 2007 - 15:19 #13
I linien: <form name="form1" method="post">
tilføjer du:
<form name="form1" method="post" action="noget.php">

på noget.php siden, laver du så:
<?php
if(isset($_POST['opdater'])
{
echo 'Opdateringskode kommer her...';
}

if(isset($_POST['bestil'])
{
echo 'Bestillingskode kommer her...';
}
?>
Avatar billede snigeren Nybegynder
10. august 2007 - 15:29 #14
ahh ok, men hvad nu hvis knap1 går til opdater.php og knap2 går til bestil.php?
Avatar billede jakobdo Ekspert
10. august 2007 - 19:09 #15
Det bør du så ordne på en og samme side.
opdater_bestil.php
Du kan jo godt have 2 "sider" i på en side. :o)
Avatar billede erikjacobsen Ekspert
10. august 2007 - 19:17 #16
Øh, hvorfor ikke have 2 <form>-s på siden, een til opdater og een til bestil?
Avatar billede snigeren Nybegynder
11. august 2007 - 11:26 #17
erik: fordi det bare er antallet af de forskellige varere der skal kunne opdateres i en indkøbskurv =)

Jakob: ja det er jeg også kommet frem til hvilket jeg også gør med f.eks. opret/rediger varer som admin und so weiter :D
Avatar billede snigeren Nybegynder
11. august 2007 - 12:59 #18
Jeg har problemer med at få min foreach til virke som opdatering af indkøbskurven:

min indkøbskurv ser således ud:

<?php
while($row = mysql_fetch_array($result))
{
?>
<tr>
      <td align="left"><input name="itemId<?php echo $row["itemId"]; ?>" type="hidden" value="<?php echo $row["itemId"]; ?>"><?php echo $row["varenr"]; ?></td>
      <td align="left" width="50%"><input name="beskrivelse<?php echo $row["itemId"]; ?>" type="hidden" value="<?php echo $row["beskrivelse"]; ?>"><?php echo $row["beskrivelse"]; ?></td>
      <td align="right"><?php echo $row["dimension"]; ?></td>
      <td align="right"><input name="surfacenavn<?php echo $row["itemId"]; ?>" type="hidden" value="<?php echo $row["surfacenavn"]; ?>"><?php echo $row["surfacenavn"]; ?></td>
      <td align="right"><?php echo $row["enhed"]; ?></td>
      <td align="right"><INPUT onkeypress="return isNumberKey(event)" type="text" name="qty<?php echo $row["itemId"]; ?>" value="<?php echo $row["qty"]; ?>" size="3"></td>
</tr>
<?php
}
?>


Min foreach til at opdatere ser således ud:

<?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?
Avatar billede jakobdo Ekspert
12. august 2007 - 11:44 #19
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)
Avatar billede snigeren Nybegynder
12. august 2007 - 13:21 #20
ye det har jeg gjort nu efter jeg fik lidt hjælp af barklund i http://www.eksperten.dk/spm/791248

Men det fungerer stadig ikke helt,.. så noget gør jeg jo forkert =|
Avatar billede jakobdo Ekspert
12. august 2007 - 13:54 #21
Hvordan ser print_r($_POST) ud nu?
Og hvordan ser din update kode ud?
Avatar billede snigeren Nybegynder
12. august 2007 - 14:16 #22
min $_POST:
Array
(
    [mixId] => Array
        (
            [105] => 105
            [292] => 292
        )

    [itemId] => 2
    [beskrivelse] => 2. ting i db´en
    [surfacenavn] => 2127, blå
    [qty] => Array
        (
            [1] => 5
            [2] => 7
        )

    [kundenavn] =>
    [Submit] => Bestil
)


min updatekode:

global $dbServer, $dbUser, $dbPass, $dbName;

// Get a connection to the database
$cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);
           
//$result = mysql_query("select * from cart inner join shop_content on cart.itemId = shop_content.itemId where cart.cookieId = '" . GetCartId() . "' order by shop_content.beskrivelse asc")or die(mysql_error());

foreach($_POST['qty'] AS $mixId => $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());
        mysql_query("update cart set qty = '" . $value . "' where cookieId = '" . GetCartId() . "' and mixId = '$mixId'") or die(mysql_error());
    }
}
Avatar billede jakobdo Ekspert
12. august 2007 - 14:26 #23
Der mangler da flere itemId'er, beskrivelser og surfaceNavne?
Avatar billede snigeren Nybegynder
12. august 2007 - 14:40 #24
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
        )

    [surfacenavn] => Array
        (
            [1] => RAL 7016
            [2] => 2127, blå
        )

    [qty] => Array
        (
            [1] => 5
            [2] => 7
        )

    [kundenavn] =>
    [Submit] => Bestil
)
Avatar billede jakobdo Ekspert
12. august 2007 - 14:51 #25
De tal der står mellem [ og ] er jo ikke ens hele vejen ned.
Avatar billede snigeren Nybegynder
12. august 2007 - 14:53 #26
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'
Avatar billede snigeren Nybegynder
12. august 2007 - 14:55 #27
endnu engang mybad, det er de nu:
Array
(
    [mixId] => Array
        (
            [1] => 105
            [2] => 292
        )

    [itemId] => Array
        (
            [1] => 1
            [2] => 2
        )

    [beskrivelse] => Array
        (
            [1] => 1. ting i db´en
            [2] => 2. ting i db´en
        )

    [surfacenavn] => Array
        (
            [1] => RAL 7016
            [2] => 2127, blå
        )

    [qty] => Array
        (
            [1] => 3
            [2] => 6
        )

    [kundenavn] =>
    [Submit] => Bestil
)
Avatar billede snigeren Nybegynder
12. august 2007 - 14:57 #28
men ser min foreach og update query rigtig ud?
Avatar billede jakobdo Ekspert
12. august 2007 - 15:14 #29
Noget i denne stil:

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());
    }
}
Avatar billede snigeren Nybegynder
12. august 2007 - 15:50 #30
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!
Avatar billede snigeren Nybegynder
12. august 2007 - 15:57 #31
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?
Avatar billede jakobdo Ekspert
12. august 2007 - 16:01 #32
Det er ok med mig!

foreach($_POST['qty'] AS $id => $value)

Gør vi lopper igennem elementer i arrayet: $_POST['qty']

elementernes KEY puttes i $id
elementernes VALUE puttes i $value
Avatar billede snigeren Nybegynder
12. august 2007 - 17:17 #33
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.
Avatar billede snigeren Nybegynder
12. august 2007 - 17:35 #34
jeg har her prøvet at lave en helt ny php side hvor der ikke er andet end følgende på og der får jeg stadig parse error, unexpected '{'....

<?php
if(isset($_POST['bestil'])
{
include("bestil.php");
}
else
{
$action="update_item";
}
?>
Avatar billede jakobdo Ekspert
12. august 2007 - 17:37 #35
if(isset($_POST['bestil']) <---- Her mangler en )
Avatar billede snigeren Nybegynder
12. august 2007 - 17:48 #36
ja det fandt jeg også... men den melder det stadig så jeg vil lave hele cart.php skriptet om så det hele står på følgende måde:

if($action=="ny"){
echo '<form action="add_product.php?varegruppeID=' . $_GET["varegruppeID"] . '&action=gem" method="post" enctype="multipart/form-data" name="form1">';
echo '<table width="100%"  border="0" cellspacing="0" cellpadding="0">';


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...
Avatar billede jakobdo Ekspert
12. august 2007 - 17:59 #37
Hvor kommer $action fra?
Er det fra: action=ny i linket?
Det bør i så fald være: $_GET['action'] == 'ny'
Avatar billede snigeren Nybegynder
12. august 2007 - 18:44 #38
ahh hehe det er fra et helt andet script det var bare et eks. bare for at forvirre lidt =)

men bare princippet i det,.. at lave hele html scriptet om så det står inde i <?php om det var godt eller skidt...
uhm jeg finder ud af noget =)
Avatar billede jakobdo Ekspert
12. august 2007 - 21:54 #39
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.
Avatar billede snigeren Nybegynder
12. august 2007 - 22:35 #40
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>";
}
Avatar billede jakobdo Ekspert
13. august 2007 - 07:48 #41
Jeg griner ikke, jeg græder! :o)
Avatar billede jakobdo Ekspert
16. august 2007 - 21:27 #42
Er problemet løst her?
Avatar billede snigeren Nybegynder
16. august 2007 - 21:27 #43
yesh sir bare smid et svar =)
Avatar billede jakobdo Ekspert
16. august 2007 - 21:45 #44
Svar!
Avatar billede jakobdo Ekspert
16. august 2007 - 22:01 #45
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester