Update de plusieurs champs

Eléphanteau du PHP | 30 Messages

12 avr. 2011, 12:40

Me revoilà, après avoir régler les détails de Joomla, je retombe sur le même problème qu'avant :
Je gère un formulaire de quantités, suivant l'utilisateur connecté, il a un numéro de commande et ça me sort la liste des produits de ce monsieur + la quantité.

Pour la mise à jour finale, j'ai un soucis, le PHP rentre dans le isset mais pas dans le while, et je ne sais pas si ma méthode est la bonne :|
$req=mysql_query('SELECT product_libelle, product_description, order_product_qte
					FROM cc_futur_product fp, cc_order_product op, cc_order o
					WHERE o.order_id= 1
					AND op.order_id=o.order_id
					AND product_id=op.order_product_id');
					
echo '<form method="get" name="form" action="">';
echo '<table ><caption>Form</caption><tr><th>Nom</th><th>Description</th><th>Quantités</tr>';
while ($result=mysql_fetch_assoc($req)) {
$boucle=$boucle+1;
echo '<tr><td>'.$result['product_libelle'].'</td>';
echo '<td>'.$result['product_description'].'</td>';
echo '<td><input type="text" name="text'.$boucle.'" value="'.$result['order_product_qte'].'"/></td></tr>';

}
echo '</table>';
echo '<input type="submit" name="envoi"/></form>';



if (isset($_GET['envoi'])) {
echo "<script>alert('ok');</script>"; 
while ($resulta=mysql_fetch_assoc($req))
{
echo "<script>alert('ok_while');</script>"; 
$bou=$bou+1;
$maj=$_GET[$bou];
mysql_query ('UPDATE order_product_quantite SET '.$maj.'  ');
}
}

ViPHP
xTG
ViPHP | 7331 Messages

12 avr. 2011, 13:04

Les fonctions mysql_fetch_xxx font avancer le curseur dans la base de données.
Donc il est normal que ta seconde boucle ne trouve rien, le curseur a déjà tout parcouru !

Il faut utiliser la fonction [url=http://fr2.php.net/manual/fr/function.m ... _data_seek()[/url] pour remettre le curseur au début.

Eléphanteau du PHP | 30 Messages

12 avr. 2011, 14:09

Merci, je ne connaissais pas cette fonction. :)

Eléphanteau du PHP | 30 Messages

12 avr. 2011, 14:29

Voici mon code à présent.
$boucle=0;
$bou=0;
$maj;
$req=mysql_query('SELECT product_libelle, product_description, order_product_qte
					FROM cc_futur_product fp, cc_order_product op, cc_order o
					WHERE o.order_id= 1
					AND op.order_id=o.order_id
					AND product_id=op.order_product_id');
					
					
echo '<form method="get" name="form" action="">';
echo '<table ><caption>Form</caption><tr><th>Nom</th><th>Description</th><th>Quantités</tr>';
while ($result=mysql_fetch_assoc($req)) {
$boucle=$boucle+1;
echo '<tr><td>'.$result['product_libelle'].'</td>';
echo '<td>'.$result['product_description'].'</td>';
echo '<td><input type="text" name="text'.$boucle.'d" value="'.$result['order_product_qte'].'"/></td></tr>';

}
echo '</table>';
echo '<input type="submit" name="envoi"/></form>';



if (isset($_GET['envoi'])) {
$row_number=0;
mysql_data_seek ($req ,$row_number);
echo "<script>alert('ok');</script>"; 

while ($result=mysql_fetch_assoc($req))
{

$bou=$bou+1;
$maj=$_GET['text'.$bou.'d'];
echo "<script>alert('bou :$bou');</script>"; 
echo "<script>alert('maj :$maj');</script>"; 
mysql_query ('UPDATE order_product_qte SET '.$maj.' WHERE order_product_qte');
}
}
Le $maj me retourne bien les bonnes valeurs, mais cela ne se change pas dans la base de données.
Je pense avoir un soucis sur la fin, mais je ne vois pas trop comment faire ici pour que la mise à jour se fasse sur le bon produits

Mammouth du PHP | 672 Messages

12 avr. 2011, 14:39

Bonjour.

Affiche ta requête, et passe-la "à la main" (dans PHPMyAdmin, par exemple)...

Eléphanteau du PHP | 30 Messages

12 avr. 2011, 14:42

Je comprend pas ce que tu veux dire :oops:

Mammouth du PHP | 672 Messages

12 avr. 2011, 15:06

Je comprend pas ce que tu veux dire :oops:
$requete = 'UPDATE order_product_qte SET '.$maj.' WHERE order_product_qte';
echo  "<script>alert('requete :$requete');</script>";
mysql_query ($requete);}
Autre possibilité :
mysql_query ('UPDATE order_product_qte SET '.$maj.' WHERE order_product_qte') OR die ('Erreur sur la requete. Message d'erreur = '.mysql_error() );

Eléphanteau du PHP | 30 Messages

12 avr. 2011, 15:42

Merce de ta réponse, elle m'a bien aider.
A présent, la requete qui s'affiche est parfaite et correspond parfaitement à ce que je veux faire, seulement, la BDD ne se met pas à jour ...

Eléphanteau du PHP | 30 Messages

12 avr. 2011, 16:22

Voici mon code actuel :
$boucle=0;
$bou=0;
$tab=array();
$req=mysql_query('SELECT product_libelle, product_description, order_product_qte, order_product_id
					FROM cc_futur_product fp, cc_order_product op, cc_order o
					WHERE o.order_id= 1
					AND op.order_id=o.order_id
					AND product_id=op.order_product_id
					ORDER BY product_id');

					
echo '<form method="get" name="form" action="#">';
//Entetes du tableau
echo '<table ><caption>Form</caption><tr><th>Nom</th><th>Description</th><th>Quantités</tr>';
//On recup les lignes
while ($result=mysql_fetch_assoc($req)) {
//on remplit le tableau
echo '<tr><td>'.$result['product_libelle'].'</td>';
echo '<td>'.$result['product_description'].'</td>';
echo '<td><input type="text" name="text'.$boucle.'d" value="'.$result['order_product_qte'].'"/></td></tr>';
//variable pour la vérification
$tab[$boucle]=$result['order_product_id'];
$boucle=$boucle+1;
}
echo '</table>';
echo '<input type="submit" name="envoi"/></form>';



if (isset($_GET['envoi'])) {
$row_number=0;
mysql_data_seek ($req ,$row_number);


for ($i=0; $i<mysql_num_rows($req); $i++) 
{
$maj=$_GET['text'.$bou.'d'];

mysql_query ('UPDATE order_product SET `order_product_qte`="'.$maj.'" WHERE `order_product_id`="'.$tab[$bou].'" ');
$requete = 'UPDATE order_product SET `order_product_qte`="'.$maj.'" WHERE `order_product_id`="'.$tab[$bou].'" ';
echo  "<script>alert('requete :$requete');</script>";
mysql_query ($requete);
$bou=$bou+1;
}

}

?>
Le msgBox me sort :
UPDATE order_product SET `order_product_qte`="30" WHERE `order_product_id`="1"

Ce qui est exactement ce que je cherche, seulement, aucune mise à jour.
Help :(

Mammouth du PHP | 672 Messages

12 avr. 2011, 16:48

Modifie ta requête pour faire une sélection, et voit si ça te retourne quelque chose...
SELECT * FROM order_product WHERE `order_product_id`="1"

Et essaye de la passer dans PHPMyAdmin (ou autre).

Eléphanteau du PHP | 30 Messages

12 avr. 2011, 17:02

En effet, la table était introuvable, evidemment car je l'avais renommé et haut et oublier ici, en tout cas merci beaucoup d'avoir pris du temps pour moi.