Hallo

Ik probeer een gegenereerd formulier te verwerken via mail, naar een shop oid. Ik tover een lijst met artikelen tevoorschijn, en het is de bedoeling dat enkel de aangevinkte lijnen worden verwerkt.

<?
echo "<form action='voegtoe.php' method='post'>";
		
		if(mysql_num_rows($result) > 0) 
		{
			while($record = mysql_fetch_object($result))
			{
				if($record->aantal_beschikbaar < '0')
				{
					$aantal_beschikbaar = '0';
				}
				else
				{
					$aantal_beschikbaar = $record->aantal_beschikbaar;
				}			
				echo "<tr><td class='data'><span title='".$record->printers."' >".$record->naam."</span></td><td class='datagetal'>".$aantal_beschikbaar."</td><td class='datagetal'>".$record->prijs."</td><td class='datagetal'>".$record->aantal_doos."</td><td class='datagetal'>".$record->laatste_update."</td><td><input type='hidden' name='aantal[]' value='".$aantal_beschikbaar."' /><input type='checkbox' name='id[]' value='".$record->barcode_product."' class='voegtoe' /></td></tr>";
			}
		}
		else
		{
			echo "<tr><td class='data' colspan='5' >".$geenData."</td></tr>";
		}
		echo "<input name='send' type='submit' >";
		echo "</form>";
?>


Dit wat betreft het formulier. Hier verschijnen dan enkele regels (een stuk of 80), waar de klant dan kan aanvinken wat hij nodig heeft. So far so good. Wat de eigenlijke verwerking echter betreft, loopt het mis:

<?
foreach($_POST['id'] as $barcode)
{
	$id = $_POST['id'][$barcode];
	$aantal = $_POST['aantal'][$barcode];
		
	echo "<tr><td>".$id."</td><td>".$aantal."</td></tr>";
}

echo "</table>";
?>


Hier lukt het niet meer. Wat ik ook probeer: uiteindelijk loopt het vast. Het lukt me om de juiste barcodes te plukken, maar de aantallen kan ik niet te pakken krijgen (dit zijn steeds de eerste 4 uit het formulier, wat logisch is).

Is er iemand die me weer op weg kan zetten?

Alvast merci!
Ik geloof niet dat die foreach logisch is.

Hier is $barcode de waarde die in $_POST['id'] zit
foreach($_POST['id'] as $barcode)

En hier gebruik je de waarde als een key????
$id = $_POST['id'][$barcode];
Als ik het goed begrijp wil je per artikel twee gegevens doorgeven:
1: of een artikel actief is (checkbox)
2: aantal artikelen (getal)

Het aantal beschikbare artikelen haal je echter uit je DB, dus het is niet nodig om het mee te sturen. Dit kan je in je tweede script ophalen.

De volgende opzet lijkt me handiger

Maak de lijst waaruit de klant zijn gewenste artikelen kan kiezen alleen met de checkbox

<input type='checkbox' name='id[]' value='".$record->barcode_product."' class='voegtoe' />


Wanneer je het lijstje samenstelt uit de post gebruik je een query om alle geselecteerde producten op te halen

$qry = "SELECT * FROM `artikeltable` WHERE `id` IN ('".implode("','",$_POST['id'])."')";


Het moet natuurlijk wel goed beveiligd worden tegen SQL-injecties maar dat ga ik niet allemaal uittypen.

Vervolgens print je het opgehaalde resultaat in een tabelletje.

Ik hoop dat je dit bedoelde
Succes ermee
@Fast Rotu

Bedankt voor je feedback! Het is echter niet helemaal wat ik nodig heb. Ik ben dat blijkbaar vergeten te vermelden, maar als ik alles werkend heb, is het de bedoeling dat de klant de beschikbare aantallen nog kan wijzigen (de vermelde waarde is een max, maar hij kan er ook minder nodig hebben). Dit heb ik echter nog niet gemaakt.


@SanThe

Bij nader inzien is de foreach idd niet erg logisch. Nu, ook als ik deze wél logisch opstel, blijven de waarden voor $barcode en $aantallen niet mooi samen. Het script blijft steeds de eerste 4 aantallen uit de lijst ophalen, ipv deze die bij de barcode horen.
In het formulier gebruik je array()'s zonder keys.
name = "aantal[]" name="id[]" etc.
Je kunt beter de array()'s die bij elkaar horen een unieke key geven. Bijvoorbeeld het id van het record. Stel het record-id is 23.
name = "aantal[23]" name="id[23]" etc.
@SanThe

Dat is het! Ik hoopte dat er een eenvoudiger manier bestond, maar deze heeft het gedaan! Indien er geïnteresseerden zijn, zet ik deze hier nog wel even neer.

Bedankt voor de goede richting.

Reageren