8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je débute en php.. Voilà mon problème :

Sur une page (disponible.php) j'affiche l'ensemble des enregistrements d'une table, j'ajoute un input text pour récupérer la quantité (qtte) d'article souhaités (une forme de bon de commande), et un autre input hidden (champ caché) pour récupérer l'idref (ID de ma référence article).

J'envoi mon formulaire dans ma page d'enregistrement pour intégrer ces variables dans une table commande. J'arrive avec FOREACH à intégrer correctement les quantités mais l'idref reste toujours sur le dernier de la liste....

Je ne trouve pas comment intégrer en plus des quantités, les références, ligne par ligne...

Pouvez vous m'aider ?

Ci dessous script du ma page disponible.php :


<?php
$pdv = mysql_connect('localhost', 'root', '')
or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>');


mysql_select_db('pdv', $pdv);

$query="SELECT *, FROM plante, reference WHERE idplante=planteid ORDER BY nomsc ASC" ;
$result = mysql_query( $query )or exit ('Erreur SQL !'.$query.'<br>'.mysql_error());
while($data = mysql_fetch_array($result))
{
echo"<ul><li class='photo'><input type='text' size='3' maxlength='5' name='qtte[]' value=''></li>";
echo"<li class='ref'>".$data['reference']."</li>";
echo"<li class='nomsc'>".$data['nomsc']."</li>";
echo"<li class='condi'>".$data['condiid']."</li>";
echo"<li class='prix'>".$data['prixht']." €</li>";
echo"<li><input name='idref' type='hidden' value=".$data['idref']."></li>";
echo"</ul>";
}
mysql_close();
?>



Puis le traitement de mon formulaire : enregistre.php

  
<?php
if (sizeof($_POST['qtte'])==0) {
header('Location:disponible.php');
exit;}
else{

$pdv = mysql_connect('localhost', 'root', '')
or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>');
mysql_select_db('pdv',$pdv);
foreach ($_POST['qtte'] as $_POST['valeur']) 
{
	$sql="INSERT INTO commande (idcommande, refid, qtte) VALUES(NULL, $_POST[idref], $_POST[valeur])";
	$req= mysql_query($sql);
}
mysql_close();
header('Location:disponible.php');
exit;
}
?> 


J'ai essayé d'imbriquer plusieurs FOREACH mais sans résulats....
Bonjour,

c’est normal tous tes champs cachés ont le même nom.
Essaye de remplacer :
echo"<li><input name='idref' type='hidden' value=".$data['idref']."></li>";


par :
echo"<li><input name='idref$num_champ_cache' type='hidden' value=".$data['idref']."></li>";
$num_champ_cache = $num_champ_cache + 1;
Bonjour Adrien,

Les champs cachés sont bien différents, j'ai même testé avec la methode GET pour voir comment est envoyé les variables. Le problème a mon avis est dans la syntaxe de Foreach... Je suis pas sur que foreach est bien adapté...
Modérateur
Bonjour, premièrement il faut aussi mettre le champ idref en tableau :

name="idref[]"

ensuite cela implique de parcourir 2 tableaux côte-à-côte. Le plus simple serait un tableau multidimensionnel:

input 1: name="plantes[]qtte"
input 2: name="plantes[]idref"

ensuite dans le foreach:


foreach($_POST['plantes'] as $plante) {
  $qtte = $plante['qtte'];
  $idref = $plante['idref'];
}