[php] multiple insert in mysql database

Pagina: 1
Acties:

  • rickmans
  • Registratie: Juli 2001
  • Niet online
Even een klein vraagje: ik heb een formulier waar, om het heel simpel te houden dit staat:

code:
1
2
3
4
Naam     bier     cola     ijs
Jan
Kees
Piet

Bij bier cola en ijs kunnen vinkjes komen in een checkbox en indien deze zijn aangevinkt dient er de waarde 1 aan de betreffende persoon bij de betreffende consumptie te worden toegevoegd.

Dus stel Jan neemt nu een ijskoud biertje :9 dan wordt er dus in de tabel bij Jan de waarde 1 toegevoegd in de kolom bier.

Nu is dat steeds met 1 persoon vrij eenvoudig te doen, maar ik wil niet steeds 40 formuliertjes invullen dus zou het ook met 1 formulier moeten kunnen. Alleen hoe gaat het inserten/ updaten dan in zijn gang :?

Don't mind Rick


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 01-09 21:47

JSchut

.....

misschien for loopie of zoiets

PSN jschut_82 | Xbox: JSchut82


  • rickmans
  • Registratie: Juli 2001
  • Niet online
JSchut schreef op 19 augustus 2002 @ 16:42:
misschien for loopie of zoiets
Maar welk statement moet ik dan gebruiken in dat loopje :?

for(statement)
{
INSERT INTO....
}

Don't mind Rick


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
moet je zorgen dat het arrays worden, dan kun je er met een foreach loop doorheen.
als je bijvoorbeeld dit doet
<input type="checkbox" name="drinken[bier]">
<input type="checkbox" name="drinken[cola]">
dan heb je in je post een array $drinken tot je beschikking waar bier en cola in zitten (als ze aangevinkt zijn)

hangt dan een beetje van de rest van je ontwerp af hoe je die arrays moet maken

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
We gaan hier echt niet alles voor jou voorkauwen hoor.....

Als je het voor 1 record kunt, dan kun je het ook voor 40. Je gebruikt een lus en dan ga je het statement gebruiken dat je nodig hebt. Update, Insert, Delete, whatever.

https://fgheysels.github.io/


  • rickmans
  • Registratie: Juli 2001
  • Niet online
marty schreef op 19 augustus 2002 @ 16:47:
moet je zorgen dat het arrays worden, dan kun je er met een foreach loop doorheen.
als je bijvoorbeeld dit doet
<input type="checkbox" name="drinken[bier]">
<input type="checkbox" name="drinken[cola]">
dan heb je in je post een array $drinken tot je beschikking waar bier en cola in zitten (als ze aangevinkt zijn)

hangt dan een beetje van de rest van je ontwerp af hoe je die arrays moet maken
moeten ze dan niet 2 dimensionaal worden :? of zit ik even fout te denken :)
whoami schreef op 19 augustus 2002 @ 16:47:
We gaan hier echt niet alles voor jou voorkauwen hoor.....

Als je het voor 1 record kunt, dan kun je het ook voor 40. Je gebruikt een lus en dan ga je het statement gebruiken dat je nodig hebt. Update, Insert, Delete, whatever.
Sorry maar dat is dus de ultieme drogredenatie. Ik mag het dan wel voor 1 ding kunnen maar zaken inserten met een loop is nog vrij nieuw voor mij, tenminste het is nog nooit op mijn pad gekomen. Dus sorry dat ik zoveel vragen stel ik wil gewoon net zo goed worden als jullie ;)

Don't mind Rick


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
Sorry, maar dat is niet de ultieme drogredenatie. Als je een statement begrijpt, begrijp je dat ook als het in een loop gebruikt wordt. Ik zie niet in wat voor een verschil er zou zijn (behalve dan dat je met parameters kunt/moet werken).

Als je niet begrijpt hoe een loop werkt, dan raad ik je aan om dat eerst even op te zoeken in een manual.

https://fgheysels.github.io/


  • rickmans
  • Registratie: Juli 2001
  • Niet online
whoami schreef op 19 augustus 2002 @ 16:58:
Sorry, maar dat is niet de ultieme drogredenatie. Als je een statement begrijpt, begrijp je dat ook als het in een loop gebruikt wordt. Ik zie niet in wat voor een verschil er zou zijn (behalve dan dat je met parameters kunt/moet werken).

Als je niet begrijpt hoe een loop werkt, dan raad ik je aan om dat eerst even op te zoeken in een manual.
Het verschil zit hem ogenschijnlijk in de loop, welke ik dus wel begrijp. Daarbij had ik niet direct gedaan aan een array constructie met een for each loop. Mijn vraag die nu nog loopt is de vraag dus of de arrays niet multidimensionaal moeten zijn.

Don't mind Rick


  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
insert.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function bierUpdate($value, $key) {

    if ($value=="JA")
       mysql_query("UPDATE bestelling SET bier=1 WHERE id=$key");
    else
       mysql_query("UPDATE bestelling SET bier=0 WHERE id=$key");

}

function colaUpdate($value, $key) {

    if ($value=="JA")
       mysql_query("UPDATE bestelling SET cola=1 WHERE id=$key" );
    else
       mysql_query("UPDATE bestelling SET cola=0 WHERE id=$key");

}


array_walk($bier,"bierUpdate");
array_walk($cola, "colaUpdate");


In je HTML code moet je de checkboxjes als volgt gebruiken, waarbij aan elke checkbox het ID wordt meegegeven:
....
<FORM ACTION="insert.php" METHOD="post">
<INPUT TYPE="checkbox" NAME="bier[1]" VALUE="JA">
<INPUT TYPE="checkbox" NAME="cola[1]" VALUE="JA">
....
<INPUT TYPE="checkbox" NAME="bier[2]" VALUE="JA">
<INPUT TYPE="checkbox" NAME="cola[2]" VALUE="JA">

</FORM>
enz...

Ik heb dit nu niet ff getest, maar op deze manier los ik het altijd op.

[EDIT] Er zat een fout in de PHP code

  • rickmans
  • Registratie: Juli 2001
  • Niet online
KillR-B schreef op 19 augustus 2002 @ 17:41:
insert.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function bierUpdate($value, $key) {

    if ($value=="JA")
       mysql_query("UPDATE bestelling SET bier=1 WHERE id=$key");
    else
       mysql_query("UPDATE bestelling SET bier=0 WHERE id=$key");

}

function colaUpdate($value, $key) {

    if ($value=="JA")
       mysql_query("UPDATE bestelling SET cola=1 WHERE id=$key" );
    else
       mysql_query("UPDATE bestelling SET cola=0 WHERE id=$key");

}


array_walk($bier,"bierUpdate");
array_walk($cola, "colaUpdate");


In je HTML code moet je de checkboxjes als volgt gebruiken, waarbij aan elke checkbox het ID wordt meegegeven:
....
<FORM ACTION="insert.php" METHOD="post">
<INPUT TYPE="checkbox" NAME="bier[1]" VALUE="JA">
<INPUT TYPE="checkbox" NAME="cola[1]" VALUE="JA">
....
<INPUT TYPE="checkbox" NAME="bier[2]" VALUE="JA">
<INPUT TYPE="checkbox" NAME="cola[2]" VALUE="JA">

</FORM>
enz...

Ik heb dit nu niet ff getest, maar op deze manier los ik het altijd op.

[EDIT] Er zat een fout in de PHP code
wow dit is zelfs meer dan ik om gevraagd had :) in ieder geval hartstikke bedankt!

Don't mind Rick


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Het is sneller om in plaats van 40 aparte queries één grote query dynamisch samen te stellen.

voorbeeldje (gaat uit van een geposte array zoals hierboven beschreven; de array key is gelijk aan het id in de DB):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$welbier = array();
$geenbier = array();

foreach ($_POST["bier"] as $k => $v)
{
    if ($v == "JA")
    {
        $welbier[] = $k;
    }
    else
    {
        $geenbier[] = $k;
    }
}

$welbierquery = "UPDATE bestelling SET bier = 1 WHERE id IN (" . implode(", ", $welbier) . ")";
$geenbierquery = "UPDATE bestelling SET bier = 0 WHERE id IN (" . implode(", ", $geenbier) . ")";

mysql_query($welbierquery);
mysql_query($geenbierquery);


Verder raad ik je aan om je DB model eens te herzien (wat doe je als je klant een nieuw product heeft? Al je queries/scripts aanpassen?).

[off topic] Waarschijnlijk is het een bekend probleem, maar ik meld het toch nog even: ik kan geen ' gebruiken in mijn script! [/off topic]

Pas de replâtrage, la structure est pourrie.


  • rickmans
  • Registratie: Juli 2001
  • Niet online
Apollo_Futurae schreef op 19 augustus 2002 @ 18:07:
Het is sneller om in plaats van 40 aparte queries één grote query dynamisch samen te stellen.

voorbeeldje (gaat uit van een geposte array zoals hierboven beschreven; de array key is gelijk aan het id in de DB):
Hoei, weer iets dat ik nog niet kon, ziet er wel ingewikkeld uit, maar de onderdeeltjes an sich komen me wel bekend voor.
Verder raad ik je aan om je DB model eens te herzien (wat doe je als je klant een nieuw product heeft? Al je queries/scripts aanpassen?).
Ik kan gelukkig met een gerust hart zeggen dat dat niet gebeurt, het bier, de cola en het ijs waren slechts voorbeelden met dit warme weer. Het model zit wel goed in elkaar. Maar bedankt voor de tip!

Don't mind Rick

Pagina: 1