Problème de UPDATE (mysql)

Mammouth du PHP | 959 Messages

27 mai 2007, 00:40

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:

ViPHP
ViPHP | 5924 Messages

27 mai 2007, 01:20

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

Mammouth du PHP | 959 Messages

27 mai 2007, 10:13

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:

Mammouth du PHP | 693 Messages

27 mai 2007, 10:19

IL faut que tu mette la variable corespondant à la conneion à la BDD et non à la dernière requete

Mammouth du PHP | 959 Messages

27 mai 2007, 10:24

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.");

ViPHP
ViPHP | 5924 Messages

27 mai 2007, 13:27

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...

Mammouth du PHP | 959 Messages

27 mai 2007, 14:04

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:

ViPHP
ViPHP | 5924 Messages

27 mai 2007, 14:41

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...

Mammouth du PHP | 959 Messages

27 mai 2007, 16:06

hola... c'est un peut compliquer tout sa... :? je change quoi par quoi ? la "$requete", je le laisse !!!???? :?:

ViPHP
ViPHP | 5924 Messages

27 mai 2007, 17:55

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

Mammouth du PHP | 959 Messages

27 mai 2007, 18:14

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é....

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 mai 2007, 18:34

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

Mammouth du PHP | 959 Messages

27 mai 2007, 20:38

Des Erreurs de Syntax... il y en a une qui m'échappe... et je la trouve pas... :x :cry:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 mai 2007, 21:33

Tu as regardé le modèle dans la documentation ?

Mammouth du PHP | 959 Messages

27 mai 2007, 21:54

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:
Modifié en dernier par chrislabricole le 28 mai 2007, 00:49, modifié 2 fois.