Hoi

Ik ben bezig met een digitale Winkelwagen te maken. Als men op een knop drukt, dan wordt het product toegevoegd aan de winkelwagen (lees: als rij opgeslagen in een tabel). Wat ik nu wil is een formulier aanmaken waarbij men het aantal kan invullen om de producten vervolgens te bestellen.

Hierbij haal ik eerst de gegevens uit de database middels een Foreach.

Probleem waar ik tegenaan loop is dat als ik een update query uitvoer dat dan alleen de laatste waarde wordt geupdate en niet alle rijen.

Kan iemand mij misschien verder helpen?

De rijen uit de winkelwagen haal ik op middels het volgende script (dit is een gedeelte van het script, dus het kan zijn dat er wat dingen missen, tot zover werkt het in ieder geval :-)):

Gedeelte van het script:
<?php

$database = "SELECT * FROM lima_cart AS a LEFT JOIN productbook AS cc ON cc.id = a.prod_id WHERE a.user_id='$id'";
$res = mysql_query($database);
$rows = mysql_fetch_array($res)

?>

<form action='update.php' method = 'post' name = 'adminForm' id='adminForm'>
<table class='contenttoc'>
<tr>
<th>
Product
</th>
<th>
Aantal
</th>
</tr>

<?php
foreach ($rows as $r)
{
echo '<tr>';
echo " <td>". $r->imgtitle ."</td>";
echo " <td><input type='text' name='aantal' maxlength='4' size='4'></td>";
echo "</tr>";
}
?>
<tr>
<td colspan="2">
<center><input class="button" type="submit" name="submit" value="Bestel"></center>
</table>
</form>
Duik eens in de html-broncode, dan zul je zien dat daar een fout in staat. Jij gebruikt tig-keer een text-box met de naam 'aantal'. Wanneer je deze allemaal invult en verstuurt naar de server, wordt de inhoud overschreven door de volgende waarde.


<td><input type='text' name='aantal' maxlength='4' size='4'></td>";

Jij moet er dus voor zorgen dat ze allemaal een unieke waarde hebben en dat er een koppeling is met de gegevens die moeten worden bijgewerkt.

Offtopic:
- Waar is de foutafhandeling van de query? Queries hebben de neiging te mislukken...
- Waar is de while-lus met daarin mysql_fetch_array()?
- Waarom mysql_fetch_array() wanneer mysql_fetch_assoc() sneller is?
- Waarom een foreach wanneer je de lus al met de while (zie vorige opmerking) kunt doorlopen?
Hoi Frank,

Bedankt voor je reactie.

Zoals gezegd, heb ik maar een klein gedeelte van het script geplaatst. De foutafhandeling zit in de het bestand update.php dat wordt uitgevoerd als er "ge-submit" wordt.

Ik dacht dat ik met de foreach alle items in de array kon doorlopen. Maakt het veel verschil of het met foreach of met while is?

Probleem zal inderdaad in de naam 'aantal' zitten.
Ik zou deze wel uniek kunnen maken, door bijvoorbeeld aantal 1, aantal 2 etc etc. Maar hoe maak ik dan de koppeling met de gegevens die bijgewerkt moeten worden? Ze hebben allemaal een uniek id nummer.
Wat betreft dat probleem met de naam, daar kun je ook een array van maken, dus bijvoorbeeld als naam 'aantal[]' meegeven.

Alle restulaten komen dan ook in de array $_POST['aantal'] te staan die je weer kunt uitlezen met een foreach loop. Je kunt natuurlijk ook een while loop gebruiken, maar bij array's is een foreach het gebruikelijkst (en makkelijkst).
Ik zou deze wel uniek kunnen maken, door bijvoorbeeld aantal 1, aantal 2 etc etc. Maar hoe maak ik dan de koppeling met de gegevens die bijgewerkt moeten worden? Ze hebben allemaal een uniek id nummer.
Ik bespeur hier een oplossing...
Ik ook, maar ik krijg hem dus net even niet te pakken ;(
@blanche
Misschien gaat het mis als ik de gegevens wil "opvangen" in de array $_POST['aantal'].
Ik gebruik nu:

$aantalarray = array ($_POST['aantal']);
Nee $_POST['aantal'] is dan opzich al een array. Dus:

$aantalarray = $_POST['aantal'];

Alleen is dit erg onzinnig aangezien je ook gewoon $_POST['aantal'] kunt gebruiken.
Ok,

Ik krijg nu de jusite waardes uit de Array, maar hoe koppel ik deze dan aan de unieke id's?
Dat zul je ook nog in je formulier moeten doen. Je haalt de gegevens op uit je winkelwagen tabel, daar staat ook het id in neem ik aan. Je zou dat id dus bijvoorbeeld als key aan de array mee kunnen geven.


<?php
    $id = 1; // of wat uit de database komt
    echo '<input type="text" name="aantal['.$id.']">';
?>
@Blanche

HOERA!!!! Het is gelukt.
Mijn dank is enorm!

Reageren