Page 1 sur 1
Aide pour requete UPDATE depuis un formulaire checkbox
Posté : 13 sept. 2007, 14:12
par craac
Bonjour, cela fait 5heures que je cherche partout la solution a mon probleme, sans progression hélas.
Ma requete : je selectionne les activités où facture = 0 (non facturé)
Code : Tout sélectionner
$query_req = "SELECT * FROM listing WHERE listing.facture = 0";
$req = mysql_query($query_req, $sql) or die(mysql_error());
$row_req = mysql_fetch_assoc($req);
Je crée mon formulaire à base de checkbox (boucle php):
Code : Tout sélectionner
<?php $sommeTotaux = 0; do { ?>
<form method="post" action="facture2.php">
<input type='checkbox' name='updatefacture[]' value="<?php echo $row_req['activite_id'] ?> ">
<?php $sommeTotaux += $total;} while ($row_req = mysql_fetch_assoc($req)); ?>
<input name="submit" type="submit" value="Facturer les activités séléctionnées">
</form>
ensuite, je passe sur la page facture2.php
Code : Tout sélectionner
$update_facture = $_POST['updatefacture'];
foreach($update_facture as $fact)
{ $req2 = "UPDATE listing SET facture = '1' WHERE 'activite_id' = '$fact' " ;
mysql_query ($req2);
}
La valeur de facture dans la table Mysql reste inchangée et je ne trouve pas ce qui cloche !
Merci de votre aide , Craac.
Posté : 13 sept. 2007, 14:22
par Ryle
Ta balise <form> ne devrait pas être dans la boucle do/while .. tu créer un formulaire pour chaque case (et ton bouton submit n'envoi que le dernier) au lieu d'en avoir un global contenant toutes les cases à soumettre

Posté : 13 sept. 2007, 14:24
par Invité
merci , je vais voir ce que ca me donne aprés correction !
Posté : 13 sept. 2007, 14:26
par craac
correction effectué, mais toujours pas le resultat escompté (toujours pas de modif dans la table sql)
Posté : 13 sept. 2007, 14:30
par Ryle
print_r($_POST['updatefacture']); //-> pour vérifier que les données ont bien été envoyées et que tu as bien les ids des factures à mettre à jour
or die(mysql_error()); //-> pour vérifier que l'exécution de la requête n'a pas généré d'erreur sql
Remarque : tu as un espace en trop dans le champ value="..", les valeurs de tes ids sont donc altérés ce qui expliquerais qu'aucune correspondance ne soit trouvée pour l'update

Posté : 13 sept. 2007, 14:32
par Invité
avec print j'obtient :
Array ( [0] => 20 [1] => 24 [2] => 22 [3] => 23 ), ce qui est juste. et je n'ai pas d'erreur signalée avec or die(mysql_error());
Posté : 13 sept. 2007, 14:38
par craac
pour les espace , si tu parles de
je l'ai corrigé ainsi :
Posté : 13 sept. 2007, 14:57
par Ryle
hum... bizare... Arf ! ca y est, vu !
C'est parce que tu as mis des apostrophes autour du nom du champ, et que MySQL le considère alors comme une chaine.. du coup la comparaison est fausse et aucune ligne n'set mise à jour :
$req2 = "UPDATE listing SET facture = '1' WHERE 'activite_id' = '$fact' " ;
A noter que si ton champ est numérique (tinyint, int, etc.) il ne faut pas mettre d'apostrophe non plus autour des valeurs (et sortir les variables des chaines ne fait pas de mal

) :
$req2 = "UPDATE listing SET facture = 1 WHERE activite_id = " . $fact;
Posté : 13 sept. 2007, 15:09
par Invité
Ca marche !
sortir les variables des chaines ne fait pas de mal : peut tu développer ton idée, je ne comprends pas ce que tu veux me dire.
En tout cas merci beaucoup !
Posté : 13 sept. 2007, 15:22
par Ryle
En fait, au lieu de faire
$req2 = "UPDATE listing SET facture = 1 WHERE activite_id = $fact";
Ecrire
$req2 = "UPDATE listing SET facture = 1 WHERE activite_id = " . $fact;
Rend le code plus lisible avec la coloration syntaxique, et cela évite les risques d'erreur (problèmes que l'on rencontre fréquemment) de variable interprétées lorsqu'elles sont placées entre guillemets mais pas entre apostrophes :
$chaine1 = 'chaine 1';
echo "Ma chaine est : $chaine1"; // affiche : Ma chaine est : chaine 1
echo 'Ma chaine est : $chaine1'; // affiche : Ma chaine est : $chaine1 (la variable n'est pas interprétée)
echo 'Ma chaine est : ' . $chaine1; // affiche : Ma chaine est : chaine 1
J'en profite pour marquer le sujet comme résolu, mais n'hésite pas à t'inscrire et à t'authentifier pour pouvoir le faire toi même sur les prochains (et accessoirement pouvoir éditer tes messages

)
Posté : 13 sept. 2007, 15:31
par craac
encore merci !
Posté : 13 sept. 2007, 17:10
par Craac
hop je me suis enregistré !