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 :

Échec de mise à jour des infos sur MySQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Échec de mise à jour des infos sur MySQL
    (Configuration: PHP 5 et MySQL 5.0.32)

    Bonjour à tous

    Je débute avec PHP et MySQL et bien qu'ayant passé trois jours à essayer de trouver et comprendre l'erreur sans grand succès, je me tourne donc vers vous.
    Le fonction que je tente de mettre en place est simple: modifier le contenu d'une base de données à partir de mon site. Pour cela, je me suis aidé du livre "PHP 5 - Le guide complet", mais j'ai dû faire une erreur quelque part car lorsque je valide les modifications, j'ai le message suivant:

    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 'WHERE ID = '806'' at line 1


    Pour info, 806 correspond à l'identifiant de la fiche. Voici la copie d'écran:



    Voici également le code, du moins la partie d'où me semble provenir l'erreur:
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    <?php
     
    include ("../include/dbconnect.inc.php");
    include ("../include/admin.inc.php");
     
    $liendb = mysql_connect($bddserver, $bddlogin, $bddpassword);
    mysql_select_db ("$bdd");
     
    if ($_REQUEST ['enregistre'] == "oui")
     
    {
     
    $sql  = "UPDATE diffusion SET Artiste = '".$_REQUEST ['Artiste']."',".
            "Nom = '".$_REQUEST ['Nom']."',".
            "Prenom = '".$_REQUEST ['Prenom']."',".
            "Titre = '".$_REQUEST ['Titre']."',".
            "Auteurcompositeur = '".$_REQUEST ["Auteurcompositeur"]."',".
            "Annee = '".$_REQUEST ['Annee']."',".
            "Label = '".$_REQUEST ['Label']."',".
            "Categorie = '".$_REQUEST ['Categorie']."',".
            "Tempo = '".$_REQUEST ['Tempo']."',".
            " WHERE ID = '".$_REQUEST ['ID']."'";
     
    mysql_query ($sql);
    echo mysql_error (); 
     
    }
     
    echo	"<h1>Modification d'un enregistrement</h1>";
    echo	"<p align=left> : : Fiche Titre [".$_REQUEST ['ID']."]</p>";
     
    $sql = "SELECT * FROM diffusion WHERE ID = '".$_REQUEST ['ID']."'";
    $resultat = mysql_query ($sql);
    $diffusion = mysql_fetch_array ($resultat);
     
    ?>

    Une idée du problème ? Merci pour votre aide éventuelle

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as une virgule avant ton where.
    Sinon les champs numériques n'ont pas besoin de guillemets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     "Tempo = '".$_REQUEST ['Tempo'] . 
    " WHERE ID = ".$_REQUEST ['ID'];
    Pour debugguer plus facilement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query($sql) or die ($sql . <br> . mysql_error());
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Le message est parfaitement clair : il y a une erreur de syntaxe devant 'WHERE'. Dans ces cas là, on met généralement :
    derrière la requête pour voir à quoi elle ressemble.
    Dans le ca présent tu va voir que ça affiche :
    Or, il s'agit d'une valeur numérique, donc pas d'apostrophe pour l'encadrer :
    Ensuite, utiliser '$_REQUEST' directement dans une requête n'est par forcément une bonne idée.

    Enfin tous ces gillemets et concaténation dans la requête sont parfaitement inutiles. Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql = 'UPDATE diffusion SET Artiste = \'' . $_REQUEST ['Artiste'] . '\',
                                 Nom = \'' . $_REQUEST ['Nom'] . '\',
                                 Prenom = \'' . $_REQUEST ['Prenom'] . '\',
                                 Titre = \'' . $_REQUEST ['Titre'] . '\',
                                 Auteurcompositeur = \'' . $_REQUEST ['Auteurcompositeur'] . '\',
                                 Annee = \'' . $_REQUEST ['Annee'] . '\',
                                 Label = \'' . $_REQUEST ['Label'] . '\',
                                 Categorie = \'' . $_REQUEST ['Categorie'] . '\',
                                 Tempo = \'' . $_REQUEST ['Tempo'] . '\',
            WHERE ID = ' . $_REQUEST ['ID'];

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne vois pas en quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Artiste = \'' . $_REQUEST ['Artiste'] . '\',
    serait mieux que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Artiste = '".$_REQUEST ['Artiste']."',
    En plus tu lui as remis sa requete avec l'erreur
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Parce qui s'il y a guillemets, PHP s'amuse à parser la totalité de la chaîne pour voir si éventuellement il n'y a pas une expression à évaluer. Et dans le cas présent, il travaille pour rien.
    Et je n'ai pas remis l'erreur, car la dernière apostrophe est la clôture de chaîne.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ah oui effectivement ca peut etre interessant d'echapper les '.

    Par contre l'erreur c'est la virgule avant le where.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Déjà, merci à vous deux de vous pencher sur mon problème
    J'ai donc remplacé:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Tempo = '".$_REQUEST ['Tempo']."',".
    " WHERE ID = '".$_REQUEST ['ID']."'";
    par le code de sabotage:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Tempo = '".$_REQUEST ['Tempo'] . 
    " WHERE ID = ".$_REQUEST ['ID'];
    Résultat: même problème avec cependant un message d'erreur différent (en utilisant la même fiche):
    server version for the right syntax to use near ''2 WHERE ID = 806' at line 1

    J'ai également remplacé le code indiqué par jeca:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql = 'UPDATE diffusion SET Artiste = \'' . $_REQUEST ['Artiste'] . '\',
                                 Nom = \'' . $_REQUEST ['Nom'] . '\',
                                 Prenom = \'' . $_REQUEST ['Prenom'] . '\',
                                 Titre = \'' . $_REQUEST ['Titre'] . '\',
                                 Auteurcompositeur = \'' . $_REQUEST ['Auteurcompositeur'] . '\',
                                 Annee = \'' . $_REQUEST ['Annee'] . '\',
                                 Label = \'' . $_REQUEST ['Label'] . '\',
                                 Categorie = \'' . $_REQUEST ['Categorie'] . '\',
                                 Tempo = \'' . $_REQUEST ['Tempo'] . '\',
            WHERE ID = ' . $_REQUEST ['ID'];
    Mais le message suivant apparait:
    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 'WHERE ID = 806' at line 10

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Yes. Désolé, j'ai oublié de virer la virgule à la dernière ligne avant 'where'.

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu retires la virgule avant le where dans le code de Jeca ca doit marcher.

    Sinon fais ce qu'on t'a proposé : echo $sql;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Je viens de retirer la virgule du script de jeca et... ça marche
    Un grand merci à vous deux !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 12/12/2011, 17h07
  2. [AC-2000] Mise à jour des frontales sur les différents postes
    Par gravier3000 dans le forum IHM
    Réponses: 4
    Dernier message: 29/09/2010, 18h49
  3. Mise à jour des packages sur linux
    Par c-top dans le forum Distributions
    Réponses: 21
    Dernier message: 12/11/2009, 17h04
  4. Problème de mise à jour des données sur un onglet
    Par PenPen_lepingouin dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2008, 17h49
  5. Faciliter la mise à jour des données sur mon site
    Par Pau dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 23/01/2007, 09h47

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