login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Vaker insert tegelijk?

Offline shonda - 29/02/2008 01:25 (laatste wijziging 04/03/2008 00:59)
Avatar van shondaLid Ik wil vaker een insert in de db zetten met maar 1 query.
Helaas werkt dat niet

  1. $sql = "INSERT INTO personen(naam, leeftijd, woonplaats) VALUES ('".$naam."', '".$leeftijd."', '".$woonplaats."')";


Nu wil ik meerdere personen tegelijk erin plaatsen.
Dus dat ik krijg in de db:

Citaat:
id | naam | leeftijd | woonplaats
1 | Piet | 30 | Amsterdam
2 | Klaas | 42 | Utrecht
3 | Henk | 42 | Berlin


Door maar 1 keer een insert query uit te voeren
Helaas is dit mijn resultaat:
Citaat:
id | naam | leeftijd | woonplaats
1 | Piet | 30 | Amsterdam


Hoe zorg ik er nou voor dat ik meerdere inserts tegelijk kan doen?

12 antwoorden

Gesponsorde links
Offline Abbas - 29/02/2008 01:58
Avatar van Abbas Gouden medaille

Crew .NET
  1. $myArray[1] = array("naam" => "piet", "leeftijd" => 30, "woonplaats" => "hier");
  2. $myArray[2] = array("naam" => "jan", "leeftijd" => 20, "woonplaats" => "daar");
  3.  
  4. for($i = 1; $i < 3; $i++)
  5. {
  6. mysql_query("INSERT INTO leden(naam, leeftijd, plaats) VALUES('".$myArray[$i]["naam"]."', '".$myArray[$i]["leeftijd"]."', '".$myArray[$i]["woonplaats"]."')") or die(mysql_error());
  7. }
Offline shonda - 29/02/2008 02:57
Avatar van shonda Lid bedankt, maar hoe gebruik ik dit als ik zelf niet weet hoeveel personen in de database moeten worden geplaatst?
Offline ranco - 29/02/2008 09:31
Avatar van ranco PHP gevorderde Dan laat je door de gebruiker het aantal personen invullen in je form, hetzelfde form waar je al deze gegevens in laat voeren (aanname).

Of tel het aantal ingevulde velden van het form, en dan weet je je aantal.
Offline Rens - 29/02/2008 11:51
Avatar van Rens Gouden medaille

Crew algemeen
Je kunt het ook in 1 query doen.
Dan geef je gewoon meerdere values aan:
  1. INSERT INTO <tbl> (naam, adres, woonplaats) VALUES ($gegevens[0][naam], $gegevens[0][adres], $gegevens[0][woonplaats]), ($gegevens[1][naam], $gegevens[1][adres], $gegevens[1][woonplaats]), ($gegevens[2][naam], $gegevens[2][adres], $gegevens[2][woonplaats]);

Zo kun je je values opbouwen door er met een for loop doorheen te lopen.
  1. <?PHP
  2. $sQuery = "INSERT INTO <tbl> (naam, adres, woonplaats) VALUES ('".$gegevens[0]['naam']."', '".$gegevens[0]['adres']."', '".$gegevens[0]['woonplaats']."')";
  3. $iCount = count($gegevens);
  4. for($i = 1; $i < $iCount; $i++)
  5. {
  6. $sQuery = ", ('".$gegevens[$i]['naam']."', '".$gegevens[$i]['adres']."', '".$gegevens[$i]['woonplaats']."')";
  7. }
  8. mysql_query($sQuery);


Snap je wat ik bedoel? 
Offline shonda - 29/02/2008 14:23 (laatste wijziging 01/03/2008 03:10)
Avatar van shonda Lid Snap het wel, maar het mag geen form bevatten.
Er komt geen gebruiker aan het script het gaat via cronjobs.

Ik haal uit de database de gegevens die nodig zijn,
Waarna ik ze weer in een ander tabel plaats.
Offline yetti4 - 01/03/2008 12:17
Avatar van yetti4 JS interesse dat kan je input type="hidden" maken met value van wat je uit de database heeft gehaald en daarna post je het gewoon mee ;)
Offline shonda - 01/03/2008 16:35
Avatar van shonda Lid
Rens schreef:
Je kunt het ook in 1 query doen.
Dan geef je gewoon meerdere values aan:
[..code..]
Zo kun je je values opbouwen door er met een for loop doorheen te lopen.
[..code..]

Snap je wat ik bedoel? 


Moet ik nou de bovenste of de onderste gebruiken?
En hoe gebruik ik het?
Kom er niet helemaal uit.
Wat ik eruit kan halen is dat ik zelf moet aangeven hoeveel inserts er worden gedaan?
En als ik de ene keer 5 wil en de andere keer maar 2? Zonder steeds de code aan te moeten passen?
Offline Martijn - 01/03/2008 16:41 (laatste wijziging 01/03/2008 16:43)
Avatar van Martijn Crew PHP je hebt nu iets voor <input typ=text name=1> tot name=4

  1. $max=5; // uitgaand van 4 invulvakjes
  2. $i=1;
  3.  
  4. while($i<$max){
  5. if(isset($_POST['$i'])){
  6. insert_query;
  7. $i++;
  8. }
  9. }

weet niet zeker of $_POST['$i'] is toegestaan, maar t is een snel voorbeeldje. En ik zou ff een sql-injection beveiliging maken.
Offline shonda - 02/03/2008 22:01 (laatste wijziging 03/03/2008 01:24)
Avatar van shonda Lid Dus een hidden form waarmee ik het uit de db haal?
En dan daaronder bovenaand scriptje plaatsen,
max aantal queries geven?
Kan ik het ook zonder max?

En wat werkt het snelst?

Verder, hoe bouw ik er een mailfunctie op aan?
Hoe ik mailfunctie moet gebruiken weet ik, maar zodat de mail wordt verstuurd naar alle geregistreerde gebruikers die uit de db zijn gehaald?
Het gaat er dus niet om alle leden in de tabel, maar enkel de uitgehaalde leden.
Offline TriX - 03/03/2008 10:30
Avatar van TriX HTML interesse De email adressen die je ophaalt zet je in een Array...

Die Array loop je door in je mailfunctie d.m.v. een For loop...
Offline shonda - 04/03/2008 01:00
Avatar van shonda Lid Ik ga dat proberen.

Iemand een idee over het volgende?

Dus een hidden form waarmee ik het uit de db haal?
En dan daaronder bovenaand scriptje plaatsen,
max aantal queries geven?
Kan ik het ook zonder max?
En wat werkt het snelst?
Offline Gerard - 04/03/2008 01:28
Avatar van Gerard Ouwe rakker http://dev.mysq...elect.html
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.299s