Page 1 sur 2

Problème de UPDATE (mysql)

Posté : 27 mai 2007, 00:40
par chrislabricole
Bonjour,

j'ai fais un espace membres, dont il y a déjà des infos dans la table mysql nommé "table_utilisateurs" , j'ai fais un formulaire pour q'il puisse modifier leurs infos, mais sa marche pas...

code de modification.php (fichier avec le formulaire...)
... connection mysql etc (pour que les champs puisses récupérer les valeurs), pas de problème... ...
<form action="modif_membre.php" method="post">
Nom : <input type="text" name="nom" value="<?php echo $enreg["nom"] ?>"></input><br />
Prénom : <input type="text" name="prenom" value="<?php echo $enreg["prenom"] ?>"></input><br />
Né le : <input type="text" name="dn" value="<?php echo $enreg["dn"] ?>"></input><br />
Adresse e-mail : <input type="text" name="mail" value="<?php echo $enreg["mail"] ?>"></input><br />
<input type="hidden" name="id" value="<?php echo $enreg["id"] ?>"></input>
<input type="submit" value="Recharger vos paramettres..."></input>
</form>
code de "modif_membre.php", c'est tout la que sa se joue...
<?php
    // Parametres de connexion à la base de données
    $BD_serveur     = "localhost";
    $BD_utilisateur = "mon_user";
    $BD_motDePasse  = "mon_mdp";
    $BD_base        = "ma_base";

    // Récupération des paramètres POST
	$id = $_POST["id"];
    $prenom = $_POST["prenom"];
    $nom = $_POST["nom"];
    $dn = $_POST["dn"];
    $mail = $_POST["mail"];

    echo "Bonjour ".stripSlashes($prenom)." ".stripSlashes($nom).",<br />";
    
    mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
        or die("Impossible de se connecter au serveur de bases de données.");
    mysql_select_db($BD_base)
        or die("Impossible de se connecter à la base de données.");
    
    mysql_query("UPDATE table_utilisateurs SET nom='".$nom."' prenom='".$prenom."' dn='".$dn."' mail='".$mail."' WHERE id='".$id."'");
               
    $result = mysql_query($requete);
    if (!$result) {
        echo "L'enregistrement de vos données a échoué !<br />";
    } else {
        echo "Infos modifiers avec succès !<br />";
    }
?>
le pire c'est que sa met "Infos modifiers avec succès !" alors que sa a rien modifier !

Merci de votre future aide qui se trouve être très présieuse...
00:40 ! déja ! :shock: j'ai trop chercher.... :roll: :wink:

Posté : 27 mai 2007, 01:20
par Sékiltoyai
1) Pourquoi fais tu 2 fois un mysql_query(), surtout que la seconde fois, la requète en paramètre en une variable qui à priori n'existe pas.
2) Quand tu fais une requète UPDATE, mysql_query() ne retourne FALSE que s'il y avait une erreur dans la requète. Pour savoir s'il y a eu des enregistrements modifiés, il faut utiliser mysql_affected_rows()

Posté : 27 mai 2007, 10:13
par chrislabricole
A oui, effectivement, je me suis tromper, mais sa marche toujours pas....

voici mon nouveau code :
<?php
    // Parametres de connexion a la base de données
    $BD_serveur     = "localhost";
    $BD_utilisateur = "mon_user";
    $BD_motDePasse  = "mon_mdp";
    $BD_base        = "ma_base";

    // Récupération des parametres POST
	$id = $_POST["id"];
    $prenom = $_POST["prenom"];
    $nom = $_POST["nom"];
    $dn = $_POST["dn"];
    $mail = $_POST["mail"];

    echo "Bonjour ".stripSlashes($prenom)." ".stripSlashes($nom).",<br />";
    
    mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
        or die("Impossible de se connecter au serveur de bases de données.");
    mysql_select_db($BD_base)
        or die("Impossible de se connecter a la base de données.");
    
    $requete = "UPDATE table_utilisateurs SET nom='".$nom."' prenom='".$prenom."' dn='".$dn."' mail='".$mail."' WHERE id='".$id."'";
               
    $result = mysql_affected_rows($requete);
   if (!$result) {
        echo "L'enregistrement de vos données a échoué !<br />";
    } else {
        echo "Infos modifiers avec succès !<br />";
    }
?>
Mais le petit éléphant me dit que à la ligne 24 :
mysql_affected_rows($requete);
il y a une erreur, voici son message :
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in *:\***\*******\modif_membre.php on line 24
(sous windows)

Merci de vos réponses ! ! :wink: :wink:

Posté : 27 mai 2007, 10:19
par orgerix
IL faut que tu mette la variable corespondant à la conneion à la BDD et non à la dernière requete

Posté : 27 mai 2007, 10:24
par chrislabricole
hum.. hum... irk !
comment on fais??
mais il y a déja sa .... :
    mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
        or die("Impossible de se connecter au serveur de bases de données.");
    mysql_select_db($BD_base)
        or die("Impossible de se connecter a la base de données.");

Posté : 27 mai 2007, 13:27
par Sékiltoyai
Quand je t'ai dis que mettre 2 fois mysql_query(), c'était une erreur, je ne te disais pas de les supprimer tous les 2 !
Regarde la doc php sur les fonctions mysql : http://fr3.php.net/mysql
mysql_affected_rows() prend comme argument optionnel la ressource de connexionà la base de données, et n'est valide que quand on a exécuté la requète auparavant...

Posté : 27 mai 2007, 14:04
par chrislabricole
Mais alors, c'est sa !! :?:
$requete = mysql_query("UPDATE table_utilisateurs SET nom='".$nom."' prenom='".$prenom."' dn='".$dn."' mail='".$mail."' WHERE id='".$id."'");
		 
    $result = mysql_affected_rows($requete);
:ordi:

Posté : 27 mai 2007, 14:41
par Sékiltoyai
Je t'ai dis que mysql_query() renvoyait simplement TRUE ou FALSE pour des requètes UPDATE.
Et mysql_affected_rows() prend en argument optionnel la ressource de connexion, qui est fournie par mysql_connect().
Les fonctions sont bonnes, mais l'argument de mysql_affected_rows() est à changer ou enlever, et le retour de mysql_query() doit être utilisé autrement...

Posté : 27 mai 2007, 16:06
par chrislabricole
hola... c'est un peut compliquer tout sa... :? je change quoi par quoi ? la "$requete", je le laisse !!!???? :?:

Posté : 27 mai 2007, 17:55
par Sékiltoyai
mysql_query("UPDATE table_utilisateurs SET nom='".$nom."' prenom='".$prenom."' dn='".$dn."' mail='".$mail."' WHERE id='".$id."'") or die('Erreur SQL : '. mysql_error());

$nb_modif = mysql_affected_rows();
Tout simplement :-/

Posté : 27 mai 2007, 18:14
par chrislabricole
eu !

sa me dit sa, que dois-je faire ??
Erreur SQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'prenom='testprenom' dn='testdn' mail='testaemail' WHERE id=''' at line 1
apparament, les paramettre post sont bien récuperers...

PS: dans phpMyAdmin :
Version du serveur: 5.0.27-community-nt
Pourtant ! c'est la dernière version ! nan ??
ou peut-être, c'est une version trop avancé....

Posté : 27 mai 2007, 18:34
par ouckileou
ça n'a rien à voir avec la version, c'est que ton update comporte des erreurs de syntaxe, comme le message l'indique.

Voir dans la doc...
http://dev.mysql.com/doc/refman/5.0/fr/update.html

Et les trucs simples pour débugger, tu aurais vu cette erreur dès le début :
http://www.phpfrance.com/forums/voir_sujet-19378.php

(ce qui n'annule pas les remarques que Sékiltoyai a faites)

Posté : 27 mai 2007, 20:38
par chrislabricole
Des Erreurs de Syntax... il y en a une qui m'échappe... et je la trouve pas... :x :cry:

Posté : 27 mai 2007, 21:33
par ouckileou
Tu as regardé le modèle dans la documentation ?

Posté : 27 mai 2007, 21:54
par chrislabricole
Ahhh !!!!!!!!!!!!!

ENFIN du résultat... juste pour des simples virgules.... |*() :mrgreen:

Merci à :google: et à ElePHPant (mon copain) et surtout, un grand merci à VOUS ! :wink: :wink: