Hallo,

Ik probeer een winkel te maken voor een spelletje, nu moet de speler in de winkel producten kunnen kopen. Achter elk item staat een input veld, hierin moet de speler kunnen aangeven hoeveel hij van het item wil. Dit moet hij bij alle items kunnen doen. Ik gebruik nu een foreach om alles uit te lezen, maar het enige wat niet wil is elk product zijn eigen ID meegeven.


$q3 = 'SELECT * FROM `shop_items` WHERE category="'.$_GET['subcat'].'"';
			$a3 = mysql_query ($q3);
			
			echo '<h3>Producten</h3>';
			
			if (isset($_POST['buy'])) {
			
				foreach($_POST['weapon'] as $amount) {
					echo 'U koopt Aantal:'.$amount.' - ID:'.$_POST['weapon_id'].'<br>';
				}
			
			}
			
			echo '<form method="post">';
			echo '<table>';
			echo '<tr>
    				<td><b>Artikel</b></td>
					<td><b>Prijs</b></td>
					<td><b>In bezit</b></td>
					<td>&nbsp;</td>
				  </tr>';
				  
			$i=1;
			while ($items = mysql_fetch_assoc ($a3)) {
				echo '
					<tr>
						<td>'.$items['name'].'</td>
						<td>$ '.$items['price'].'</td>
						<td>3423</td>
						<td><input type="text" name="weapon[]" style="width:25px;" />
							<input type="hidden" name="weapon_id" value="'.$items['id'].'" /></td>
				</tr>';
				$i++;
			}


Het volgende probleem is natuurlijk het opslaan van alle gegevens in de database, hoe zou ik dit moeten doen?

Vriendelijke groet,

Paul
Wat als je nou van de hidden input weapon_id ook een array maakt, net als weapon....
weapon_id is inderdaad geen array. Ook zal ik weapon en weapon_id in 1 array zetten zodat deze bij elkaar blijven en makkelijk kunt uitlezen.
[0] => Array (weapon => 'Zwaard', weapon_id => 45)
of Array ([weapon_id] => 'Zwaard')

Verder wordt mysql_* uitgefaseerd en houd dus op met bestaan. Kijk eens naar mysqli of PDO.
En zoek eens op SQL Injection. Jouw script is nou kwetsbaar omdat je $_GET['subcat'] erin gaat zonder controle.
Om te controleren of een formulier gepost is gebruik je if($_SERVER['REQUEST_METHOD'] == 'POST')
Bedankt voor jullie reacties. Ik heb het nu volgens mij redelijk goed voor elkaar, alleen is het nu zo dat alleen de laatste uit de array wordt weergegeven, hoe kan dit?


foreach($_POST['weapon'] as $key => $value) {
				
					echo 'Name:'.$key.'- Value:'.$value.'<br>';
					
				}



while ($items = mysql_fetch_assoc ($a3)) {
				echo '
					<tr>
						<td>'.$items['name'].'</td>
						<td>$ '.$items['price'].'</td>
						<td>3423</td>
						<td><input type="text" name="weapon[amount]" style="width:25px;" />
							<input type="hidden" name="weapon[id]" value="'.$items['id'].'" /></td>
				</tr>';
				$i++;
			}
Kijk eens naar print_ r($weapon); dan zie je dat er ook maar 1 in staat. Je overschrijft hem namelijk ipv eraan toevoegen. Zet er dus [] bij achter.
Ik heb er nu [] achtergezet, maar als ik het goed begrijp heb ik nu een array in een array, hoe kan ik deze dan vervolgens weer uitlezen met 'foreach'?
Ja klopt. Wat je eigenlijk wil is dat je weapon en id bij elkaar blijven, dit is ook makkelijker weer uit te lezen.

Ik zal het als volgt doen

<?php
$i = 1;
while ($items = mysql_fetch_assoc ($a3)) {
	echo '<tr>'
	.'<td>'.$items['name'].'</td>'
	.'<td>$ '.$items['price'].'</td>'
	.'<td>3423</td>'
	.'<td><input type="text" name="weapon['.$i.'][amount]" style="width:25px;" />'
	.'<input type="hidden" name="weapon['.$i.'][id]" value="'.$items['id'].'" /></td>'
	.'</tr>';
$i++;
}
?>


Dit zou je dan als volgt kunnen uitlezen

foreach($_POST['weapon'] AS $val){
		
	echo 'Amount: ' . htmlentities($val['amount'])
	.'<br/>ID: ' . (int)$val['id'] . '<br />';

}
Of direct het weapon id gebruiken in de array:

<?php
$i = 1;
while ($items = mysql_fetch_assoc ($a3)) {
    echo '<tr>'
    .'<td>'.$items['name'].'</td>'
    .'<td>$ '.$items['price'].'</td>'
    .'<td>3423</td>'
    .'<td><input type="text" name="weapon['.$items['id'].'][amount]" style="width:25px;" /></td>'
    .'</tr>';
$i++;
}
?>

Reageren