multiple update casse-tête !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : multiple update casse-tête !

Re: multiple update casse-tête !

par AB » 27 juin 2011, 03:03

je ne sait pas si on peut mettre une requête dans une boucle et si oui comment faire ?
On évite si possible pour un select mais pas de souci pour faire des update dans une boucle, et les requêtes préparées prennent d'ailleurs tout leur intérêt dans ces conditions puisqu'elle accélèrent l'exécution. On utilise alors souvent bindParam comme montré dans ce lien

multiple update casse-tête !

par babasdu24 » 26 juin 2011, 03:22

bonsoir à tous.
je me casse les dents depuis quelques jours sur un truc qui me parait pourtant pas infaisable(mais j'avoue que je pratique depuis peu de temps).
j'ai créé une page qui permet à mes clients de laisser une évaluation sur les produits qu'ils m'ont acheter stocker dans une table préparation_commande.
cette page affiche donc les produit les uns sous les autre avec un while et des boutons radios permettent de mettre une note à chaque produits.

je cherche donc comment annoncer à ma requete sql toutes les notes atribuer et les updater au champ note_marchandise du produit nom_marchandise ayant le meme n° de ref_liste_commande
le resultat devrais ressemble à ça :

boucle
nom_marchandise'x' de ref_liste_commande'y' =>note_marchandise 0 a 5 par bouton radio nommé ref_marchandise'p'
nom_marchandise'o' de ref_liste_commande'y' =>note_marchandise 0 a 5 par bouton radio nommé ref_marchandise't'
nom_marchandise'r' de ref_liste_commande'y' =>note_marchandise 0 a 5 par bouton radio nommé ref_marchandise'u'
fin boucle

si le client coche les bouton radio et clique sur validé

boucle
updater note_marchandise nommé ref_marchandise'p' du produit nom_marchandise'x' de la liste ref_liste commande'y'
updater note_marchandise nommé ref_marchandise't' du produit nom_marchandise'o' de la liste ref_liste commande'y'
updater note_marchandise nommé ref_marchandise'u' du produit nom_marchandise'r' de la liste ref_liste commande'y'
fin de boucle

voila pour le principe,

maintenant.....le code !

<?php
$req = $bdd->prepare('SELECT * FROM preparation_commande WHERE ref_liste_commande=:ref_liste_commande' );
$req->execute(array('ref_liste_commande' => $ref_liste_commande));
while ($data = $req->fetch()):
?>
<form action="evaluation.php" method="POST" name="formulaire">
<?php 
echo $data['nom_marchandise'];
?>
<input type="radio" name="note_prod<?php echo $data['ref_marchandise']?>" value="0">
<input type="radio" name="note_prod<?php echo $data['ref_marchandise']?>" value="1">
<input type="radio" name="note_prod<?php echo $data['ref_marchandise']?>" value="2">
<input type="radio" name="note_prod<?php echo $data['ref_marchandise']?>" value="3">
<input type="radio" name="note_prod<?php echo $data['ref_marchandise']?>" value="4">
<input type="radio" name="note_prod<?php echo $data['ref_marchandise']?>" value="5">
<?php endwhile;
					
if(!empty($_POST))
{
$note = 'note_prod'.$data['ref_marchandise'];
extract($_POST);
{		
$req = $bdd->prepare('UPDATE preparation_commande SET note_marchandise=:note_marchandise WHERE ref_marchandise=:ref_marchandise');
$req->execute(array(
'note_marchandise'=>$note,
'ref_marchandise'=>$data['ref_marchandise']
));
$req->closeCursor();
}
}
?>
évidemment, ma requête sql est nase et c'est la le problème : je ne sais pas comment écrire ma requête !!

je ne sait pas si on peut mettre une requête dans une boucle et si oui comment faire ?
je suis donc à la recherche d'une âme charitable qui saurra m'expliquer comment faire...
merci par avance à tous ! :priere: