Aide pour requete UPDATE depuis un formulaire checkbox

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 : Aide pour requete UPDATE depuis un formulaire checkbox

par Craac » 13 sept. 2007, 17:10

hop je me suis enregistré !

par craac » 13 sept. 2007, 15:31

encore merci !

par Ryle » 13 sept. 2007, 15:22

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 :))

par Invité » 13 sept. 2007, 15:09

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 !

par Ryle » 13 sept. 2007, 14:57

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;

par craac » 13 sept. 2007, 14:38

pour les espace , si tu parles de

Code : Tout sélectionner

value="<?php echo $row_req['activite_id'] ?> ">


je l'ai corrigé ainsi :

Code : Tout sélectionner

value="<?php echo $row_req['activite_id']; ?>">

par Invité » 13 sept. 2007, 14:32

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());

par Ryle » 13 sept. 2007, 14:30

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 :)

par craac » 13 sept. 2007, 14:26

correction effectué, mais toujours pas le resultat escompté (toujours pas de modif dans la table sql)

par Invité » 13 sept. 2007, 14:24

merci , je vais voir ce que ca me donne aprés correction !

par Ryle » 13 sept. 2007, 14:22

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 :)

Aide pour requete UPDATE depuis un formulaire checkbox

par craac » 13 sept. 2007, 14:12

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.