[PHP]Verschillende rijen in DB aanpassen met 1 var

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een klein vraagje. Ik heb in een database data staan voor een winkelmandje. Ik kan dit nu inporteren, zodat de bezoeker een overzicht krijgt met de artikelen in het winkelmandje.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
   $select = mysql_query("SELECT * FROM mandje WHERE IP='$ip' ORDER BY ID ASC"); 
   $aantal = mysql_num_rows($select); 
   if ($aantal == 0) 
    { 
     echo "Er zitten nog geen producten in uw winkelmand"; 
    } 
   else 
    { 
     echo "<form action=\"mandje.php?actie=update\" method=\"post\">"; 
     while ($data = mysql_fetch_array($select)) 
      { 
       $select2 = mysql_query("SELECT * FROM artikelen WHERE ID='$data[Artikelnr]'"); 
       $data2 = mysql_fetch_array($select2);  
       $prijstotaal = $data2[Prijs] * $data[aantal]; 
       echo "$data2[ID] | <input type=\"text\" value=\"$data[aantal]\" name=\"aantal\" size=\"3\" maxlength=\"3\"> | $data2[Omschrijving] | $data2[Prijs] | $prijstotaal | <a href=\"mandje.php?actie=verwijder&amp;ID=$data[ID]\">Verwijderen</a><br>"; 
      } 
     echo "<br><input type=\"submit\" value=\"Update\"></form>"; 
    } 
?>  


Nu krijg je dus een winkelmandje met allemaal producten erin en bij aantal staat een veranderbare "input" met het aantal keer dat artikel erin. Als iemand dit update en er zitten meerdere artikelen in de winkelmand, dan komt er op de pagina die de het aantal artikelen moet wijzigen in de database het volgende binnen:


PHP:
1
2
3
4
5
<?php 
 $aantal[1] = 4; 
 $aantal[3] = 2; 
 $aantal[4] = 1; 
?>  


wat in de array staat [1]/[2]/[4] zijn de artikel nummers van de artikelen (productcodes) en ieder IP heeft maar 1 keer een bepaalde artikelen in de database staan. Nu zou wil willen vragen hoe dat ik dus bij de artikelen die moeten worden geupdate het veld aantal (in de DB) bij artikel nummer wat in de database staat moet veranderen in het aantal wat wordt meegegeven door de klant/bezoeker. (dus hier 4/2/1 (de aantallen)). Alvast bedankt (ik dacht zelf een een loop)
Dit had ik zelf al in elkaar gezet, maar werkt niet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
   $select = mysql_query("SELECT * FROM mandje WHERE IP='$ip'");
   while ($artikelnr <= 25)
    {
     $artikelnr = 0;
     if (IsSet ($aantal[$artikelnr]))
      {
       $update = mysql_query("UPDATE mandje SET aantal='$aantal[$artikelnr]' WHERE IP='$ip' AND Artikelnr='$artikelnr'");
      }
     else  {}
     $artikelnr += 1; 
    }

Acties:
  • 0 Henk 'm!

Verwijderd

om te beginnen hoef je niet eerst een select-query uit te voeren.
verder zet je nu telkens de waarde van artikelnr op 0, zo kom je dus nooit door je while-loop heen
je kunt efficienter door je array heen lopen door middel van foreach
(die haalt info uit array zoals iin voorbeeld van php.net hieronder)
PHP:
4
5
6
foreach ($arr as $key => $value) {
    echo "Key: $key; Waarde: $value<br>\n";
}

Acties:
  • 0 Henk 'm!

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 21:58

Koffie

Koffiebierbrouwer

Braaimeneer

* Koffie wil zich niet ergens mee bemoeien hoor , maareuh :

PHP:
1
$select = mysql_query("SELECT * FROM mandje WHERE IP='$ip' ORDER BY ID ASC");


Wat nou als er 2 klanten zijn die via een zelfde proxy binnenkomen :?

Tijd voor een nieuwe sig..


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Of nog leuker.. via een proxy? :P

Waarom gebruik je ipv IP geen cookie? Of session?

[ Voor 73% gewijzigd door gorgi_19 op 01-12-2003 11:35 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
PHP:
1
2
3
4
5
if (IsSet ($aantal[$artikelnr])) 
      { 
       $update = mysql_query("... aantal='$aantal[$artikelnr]' WHERE ..."); 
      } 
     else  {}
Huh? Regel 5.
Probeer eens
PHP:
1
mysql_query("UPDATE mandje SET aantal='${aantal[$artikelnr]}' WHERE IP='$ip' AND Artikelnr='$artikelnr'");
Dus met accolades.

[ Voor 20% gewijzigd door Skaah op 01-12-2003 13:52 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Of een combinatie van ip en sessionnr

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zal me dus weer eens in sessies gaan verdiepen. Maar bedankt, ga nu het systeem ombouwen. (bedankt Koffie!) Ik kan zeker beter sessies nemen dan cookies?

Kan gewoon sessie starten en dan sessie id in DB zetten, ipv het IP adres...

[ Voor 39% gewijzigd door Verwijderd op 01-12-2003 16:52 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goed de sessies zijn nu geïmplanteerd en dit werkt ook super! Bedankt daarvoor. Nu zit alleen nog met mijn oorspronkelijke probleem.

Update: inmiddels is het met jullie opmerking gaan werken (naar heel veel gedoe). Nu zou ik nog iets om uit een tabel uit te lezen wat het volgende nummer is wat de autoindex gaat geven (aantal rijen != aan laatste artikel ID). Zoek dus nu iets om laatste product nummer op te laten zoeken.

[ Voor 53% gewijzigd door Verwijderd op 01-12-2003 21:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Kijk eens naar de functie "mysql_insert_id", volgens mij doet die wat je wilt...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt, werkt helaas niet:
PHP:
1
2
3
 $select = mysql_query("SELECT * FROM artikelen"); 
 $aantal = mysql_insert_id($select);
 echo "$aantal";

Acties:
  • 0 Henk 'm!

  • MrData
  • Registratie: Februari 2000
  • Laatst online: 25-07-2022
Verwijderd schreef op 02 december 2003 @ 21:19:
Bedankt, werkt helaas niet:
PHP:
1
2
3
 $select = mysql_query("SELECT * FROM artikelen"); 
 $aantal = mysql_insert_id($select);
 echo "$aantal";
Werkt ook niet zo, probeer dit 's:

PHP:
1
2
$select = mysql_query("SELECT * FROM artikelen"); 
$id = mysql_insert_id();

"We set sail on this new sea because there is new knowledge to be gained and new rights to be won." - John F. Kennedy - USS Valiant NCC-74210 dedication plaque


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Vreemd, nu geeft ie 0 terug, maar het zou dus 3 moeten zijn.

Acties:
  • 0 Henk 'm!

  • MrData
  • Registratie: Februari 2000
  • Laatst online: 25-07-2022
Verwijderd schreef op 02 december 2003 @ 21:45:
Vreemd, nu geeft ie 0 terug, maar het zou dus 3 moeten zijn.
Wacht ff, insert je eigenlijk wel iets? Volgens mij werkt mysql_insert_id() alleen als er ook iets geinsert wordt, maar dat weet ik niet zeker. Kun je niet gewoon het hoogste nummer ophalen?

"We set sail on this new sea because there is new knowledge to be gained and new rights to be won." - John F. Kennedy - USS Valiant NCC-74210 dedication plaque


Acties:
  • 0 Henk 'm!

  • themaxter
  • Registratie: Juli 2001
  • Laatst online: 13-09 15:37

themaxter

Bugged..

MrData schreef op 02 december 2003 @ 21:58:
[...]


Wacht ff, insert je eigenlijk wel iets? Volgens mij werkt mysql_insert_id() alleen als er ook iets geinsert wordt, maar dat weet ik niet zeker. Kun je niet gewoon het hoogste nummer ophalen?
Je moet inderdaad iets inserten. M.a.w. hij moet weten welke id is geinsert/gewijzigd.

En met hoogste nummer ophalen kun je inconsistentie krijgen. Want stel dat er een id is aangemaakt en meteen weer weggehaald. Als er dan een nieuwe id wordt aangemaakt is het hoogste id wat bestond niet opeenvolgend met het nieuwe id.

@topicstarter:

mysql_insert_id geeft een nul terug als de tabel niet autoincrement is. M.a.w de id van de tabel wordt niet automatisch gegenereerd, klopt dat?
Pagina: 1