IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête Update probleme


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut Requête Update probleme
    J'ai un site qui gère des membres. Il est possible de modifier le profil du membre avec une page php, lorsque je fais par exemple la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $comments = form($_POST['comments']);
    mysql_query("UPDATE users 
      SET comments='$comments' 
      WHERE username='$username'") or die (mysql_error());
    La variable $comments est bien affecté et contient vraiment le commentaire mais la base de donnée ne se met pas à jour, pourquoi? Je peux faire des INSERT, DELETE, etc, mais pas d'updates. Donc, ce n'est pas un problème de connection ou quoi que ce soit (et en passant, mon $username est dans ma session et est défini plus haut et fonctionne bien)

    Antoun :

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Je te propose de modifier ton code ainsi :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $comments = form($_POST['comments']);
    $sql = "UPDATE users 
      SET comments='$comments' 
      WHERE username='$username'" ;
    echo $sql ;
    mysql_query($sql) OR die (mysql_error());

    Ensuite, tu récupères ce qu'il y a dans $sql et tu le testes directement sur ta base de données.

    Si par hasard le problème venait d'une apostrophe dans ton commentaire, il suffit de modifier la première ligne :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $comments = str_replace("'", "''", form($_POST['comments']));
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    ça ne marche toujours pas :S j'ai pourtant fait ce que tu m'a dit. La table ne s'update pas.....je ne sais vraiment plus quoi faire...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    en passant, si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE `bd`.`users` SET `comments` = 'salut3' WHERE `users`.`username` = '0ColdZero0';" ;
    il le modifie sans problème, mais lorsque j'écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE `bd`.`users` SET `comments` = 'salut3' WHERE `users`.`username` = '$username';" ;   ($username au lieu de 0ColdZero0)
    Cela n'a aucun effet, bizarre?, pourtant si je fais un echo de mon $username, c'est bien le bon qu'il m'envoit

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Fais un echo de ton $sql, et poste-le ici.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut




    J'ai fait un echo de mon user_id (en bas du text area), il affiche bien mon id qui est le numéro 1. Par la suite, le UPDATE users blablabla est ma commande SQL, c'est normal que comments = rien parce qu'aucun comments n'a été posté encore. Mais lorsque j'en poste un, il ne se passe rien. En fait pour etre vraiment clair, lorsque je fais EXACTEMENT ce code, rien ne se passe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE users SET comments = '$comments' WHERE user_id = '$user_id'") OR die (mysql_error());
    mais quand je fais ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE users SET comments = '$comments' WHERE user_id = 1") OR die (mysql_error());
    Il fonctionne à merveille, mais pourtant quand je fais un echo de ma variable user_id, il affiche bien le bon...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    personne ne sait quel est le problème ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    fort bizarre comme problème...

    cette requête fonctionne:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE users SET comments = 'premier commentaire' WHERE user_id = '1'

    mais si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo "UPDATE users SET comments = '$comments' WHERE user_id = '$user_id'";
    mysql_query("UPDATE users SET comments = '$comments' WHERE user_id = '$user_id'") OR die (mysql_error());
    que la requête affichée est :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE users SET comments = 'deuxième commentaire' WHERE user_id = '1'

    il n'y a pas d'effet.. ben suis pas sûr que qlqu'un puisse t'aider

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    ah d'accord je devrais avoir quoi comme sorte d'echo alors ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    je veux juste dire que ce n'est pas possible que la 1° fonctionne et pas l'autre, si elle sont identiques.. mais tu peux toujours poster ton code complet, au cas où..

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Quelques idées de test (et sans garantir ma syntaxe PHP un peu rouillée) :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    echo strlen($user_id) . "<br>" ;
    echo ord($user_id)  . "<br>" ;
     
    $user_id = (int) $user_id ;
    mysql_query("UPDATE users SET comments = '$comments' WHERE user_id = $user_id") OR die (mysql_error()); // sans les apostrophes aberrantes autour de '1'
    echo mysql_affected_rows() . "<br>" ;
    $warnings = mysql_query("SHOW WARNINGS") ;
    $warnings = mysql_fetch_assoc($warnings) ;
    echo join("<br>", $warnings) ;
     
    $autoco = mysql_query("SELECT @@autocommit ; ") OR die (mysql_error());
    $autoco = mysql_fetch_array($autoco) ;
    echo $autoco[0] . "<br>" ;

    et éventuellement :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE users ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    haha je suis tellement désespéré, je sais que c'est bizarre mais c'est comme ça, la ligne de code contenant '' where user_id = 1'' fonctionne parfaitement, mais la ligne ""user_id = $user_id" ne fonctionne pas du tout...c'est complètement fou loll même si je fais un affectation du type: $user_id = 1; juste avant d'appeler ma fonction SQL, ça ne fonctionne pas plus. Je vais vraiment devenir fou lol

  13. #13
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par 0ColdZero0 Voir le message
    même si je fais un affectation du type: $user_id = 1; juste avant d'appeler ma fonction SQL
    Fonction ? Que dirais-tu d'ajouter ceci au début de ta fonction :
    En effet, à l'intérieur des fonctions PHP, on ne voit pas les variables du script principal, et réciproquement... sauf celles qui sont déclarées avec global.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. probleme dans la requête update c#
    Par x2005man dans le forum C#
    Réponses: 11
    Dernier message: 19/03/2015, 14h26
  3. [VB.NET] [ODBC] Pb requête UPDATE avec clé primaire..?
    Par Pleymo dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/03/2005, 18h46
  4. requête update qui marche pas
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 08h16
  5. PB Requête update
    Par cassi2 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 25/10/2004, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo