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 :

Erreur dans la base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Erreur dans la base de données
    Bonjour,

    J'ai un script qui est fourni sans l'écriture de la base de données, alors j'ai créé la base de données grosso-modo en fonction du script, mais j'ai des erreurs dans mysql durant l'exécution du script. Je débute en php et je ne trouve pas cette erreur.
    Voici le script :
    Code : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <!-- Listing 17-5: editing data from database (comment_edit.php) -->
    <?php
     
    // Open connection to the database
    mysql_connect("**", "***", "***") or die("Failure to communicate with database");
    mysql_select_db("eonintermail");
     
    if ($_POST['submit'] == 'Submit') {
      // Format the data
      $comment_id = $_POST['comment_id'];
      $comment_header = $_POST['comment_header'];
      $as_comment_header = addslashes($comment_header);
      $comment = $_POST['comment']; 
      $as_comment = addslashes($_POST['comment']);
     
      // Update values
    $query = "UPDATE comments
                SET comment_header = 'uy',
                comment = 'uy'
                WHERE ID = 0";
      $result = mysql_query($query);
      if (mysql_affected_rows() == 1) {
        $success_msg = '<P>Your comment has been updated.</P>';
      } else {
        error_log(mysql_error());
        $success_msg = '<P>Something went wrong.</P>';
    	echo mysql_error(); 
      }
    } else {
      // Get the comment header and comment
      $comment_id = $_GET['comment_id'];
      $query = "SELECT comment_header, comment
                FROM comments
                WHERE ID = $comment_id";
      $result = mysql_query($query);
      $comment_arr = mysql_fetch_array($result);
      $comment_header = stripslashes($comment_arr[0]);
      $comment = stripslashes($comment_arr[1]);
      	echo mysql_error(); 
    }
     
     
    $thispage = $_SERVER['PHP_SELF']; //Have to do this for heredoc
     
    $form_page = <<< EOFORMPAGE
    <STYLE TYPE="text/css">
    <!--
    BODY, P      {color: black; font-family: verdana; font-size: 10 pt}
    H1        {color: black; font-family: arial; font-size: 12 pt}
    -->
    </STYLE>
    </HEAD>
     
    <BODY>
    <TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
    <TR>
    <TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=17%>
    </TD>
    <TD BGCOLOR="#FFFFFF" ALIGN=LEFT VALIGN=TOP WIDTH=83%>
    <H1>Comment edit</H1>
     
    $success_msg
    <FORM METHOD="post" ACTION="$thispage">
    <INPUT TYPE="text" SIZE="40" NAME="comment_header" VALUE="$comment_header"><BR><BR>
    <TEXTAREA NAME="comment" ROWS=10 COLS=50>$comment</TEXTAREA><BR><BR>
    <INPUT TYPE="hidden" NAME="comment_id" VALUE="$comment_id">
    <INPUT TYPE="submit" NAME="submit" VALUE="Submit">
    </FORM>
     
    </TD></TR></TABLE>
    </BODY>
    </HTML>
    EOFORMPAGE;
    echo $form_page;
    ?>

    Et voici un export de la base de données :


    Code SQL : 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
    --
    -- Structure de la table `comments`
    --
     
    CREATE TABLE IF NOT EXISTS `comments` (
      `ID` varchar(50) NOT NULL default '',
      `comment_header` varchar(200) NOT NULL default '',
      `comment` varchar(200) NOT NULL default ''
    ) TYPE=MyISAM;
     
    --
    -- Contenu de la table `comments`
    --
     
    INSERT INTO `comments` (`ID`, `comment_header`, `comment`) VALUES
    ('0', 'iddii', 'iii');

    Pouvez-vous m'aider à comprendre d'où vient le problème ?

    J'ai mis des echo mysql_error(); mais je ne comprends pas plus.

  2. #2
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    mysql_error(); te retourne quoi ?

    Gillou.

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    déjà il apparait que ID n'est pas un VARCHAR mais un entier, Cf la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $query = "UPDATE comments
                SET comment_header = 'uy',
                comment = 'uy'
                WHERE ID = 0";
    D'autres parts cette requête n'est pas complète je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = "UPDATE comments
                SET comment_header = 'uy',
                comment = 'uy'
                WHERE ID =".$comment_id;
    De ce fait, la requete INSERT devient incorrecte, il faut enlever les guillemets encapsulant les valeurs entières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO `comments` (`ID`, `comment_header`, `comment`) VALUES
    (0, 'iddii', 'iii');

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Je suis bête, j'ai posté un code dans lequel j'avais remplacé les variables de la requête sql par des valeurs, pour faire un test.

    Je reposte le code d'origine avec les variables.

    J'ai remplacé dans la bdd, le varchar par un integer, mais j'ai toujours l'erreur.

    Voici l'erreur au premier chargement de la page :


    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homez.63/eoninter/www/php/comment_edit.php on line 36
    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 '' at line 3

    Si ensuite je fais un essai d'envoi du formulaire, j'ai :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 '' at line 4

    Voici donc le code d'origine
    Code : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <!-- Listing 17-5: editing data from database (comment_edit.php) -->
    <?php
     
    // Open connection to the database
    mysql_connect("***", "***", "***") or die("Failure to communicate with database");
    mysql_select_db("eonintermail");
     
    if ($_POST['submit'] == 'Submit') {
      // Format the data
      $comment_id = $_POST['comment_id'];
      $comment_header = $_POST['comment_header'];
      $as_comment_header = addslashes($comment_header);
      $comment = $_POST['comment']; 
      $as_comment = addslashes($_POST['comment']);
     
      // Update values
    $query = "UPDATE comments
                SET comment_header = '$as_comment_header',
                comment = '$as_comment'
                WHERE ID = $comment_id";
      $result = mysql_query($query);
      if (mysql_affected_rows() == 1) {
        $success_msg = '<P>Your comment has been updated.</P>';
      } else {
        error_log(mysql_error());
        $success_msg = '<P>Something went wrong.</P>';
    	echo mysql_error(); 
      }
    } else {
      // Get the comment header and comment
      $comment_id = $_GET['comment_id'];
      $query = "SELECT comment_header, comment
                FROM comments
                WHERE ID = $comment_id";
      $result = mysql_query($query);
      $comment_arr = mysql_fetch_array($result);
      $comment_header = stripslashes($comment_arr[0]);
      $comment = stripslashes($comment_arr[1]);
      	echo mysql_error(); 
    }
     
     
    $thispage = $_SERVER['PHP_SELF']; //Have to do this for heredoc
     
    $form_page = <<< EOFORMPAGE
    <STYLE TYPE="text/css">
    <!--
    BODY, P      {color: black; font-family: verdana; font-size: 10 pt}
    H1        {color: black; font-family: arial; font-size: 12 pt}
    -->
    </STYLE>
    </HEAD>
     
    <BODY>
    <TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
    <TR>
    <TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=17%>
    </TD>
    <TD BGCOLOR="#FFFFFF" ALIGN=LEFT VALIGN=TOP WIDTH=83%>
    <H1>Comment edit</H1>
     
    $success_msg
    <FORM METHOD="post" ACTION="$thispage">
    <INPUT TYPE="text" SIZE="40" NAME="comment_header" VALUE="$comment_header"><BR><BR>
    <TEXTAREA NAME="comment" ROWS=10 COLS=50>$comment</TEXTAREA><BR><BR>
    <INPUT TYPE="hidden" NAME="comment_id" VALUE="$comment_id">
    <INPUT TYPE="submit" NAME="submit" VALUE="Submit">
    </FORM>
     
    </TD></TR></TABLE>
    </BODY>
    </HTML>
    EOFORMPAGE;
    echo $form_page;
    ?>

  5. #5
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    Les requètes semblent corrects.
    Laquelle pose porblème ?

    Peux-tu modifier la ligne mysql_query de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query($query) or die("ERR : " . mysql_error() . "<br />SQL : " . $query);
    et nous donner le résultat

    Gillou.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERR : 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 '' at line 3
    SQL : SELECT comment_header, comment FROM comments WHERE ID =

  7. #7
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    C'est clair : $comment_id est vide.
    Il faut contrôler avant d'éxécuter la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($comment_id)) ...
    Que souhaites tu faire si le champ 'comment_id' n'est pas renseigné ?


    Gillou

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    En fait je ne souhaite pas que le champ soit vide.
    J'ai vu que ce champ n'existait pas dans la BDD, alors je l'ai créé.

    Du coup le premier affichage du formulaire a marché, avec les valeurs écrites à l'intérieur.

    Par contre quand je mets à jour les données, j'ai à nouveau cette erreur : ERR : 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 '' at line 4
    SQL : UPDATE comments SET comment_header = 'iddii', comment = 'iiifgdfg' WHERE ID =

    C'est d'ailleurs ce que je veux faire pour répondre à ta question.
    Le formulaire affiche les données enregistrées dans la base dans les champs textes, et quand je tape de nouvelles données dans le champ texte, les données doivent être mises à jour dans la base, et je suppose que les nouvelles données doivent alors s'afficher dans le formulaire;

    Je dis "je suppose" car c'est un exercice pris sur un livre. Jusqu'ici tous les scripts étaient sans faute, mais le problème est que j'ai toute une série d'exercices sur les formulaires et les bases de données, mais l'écriture des bases n'est pas fournie !. Alors je tâtonne.

  9. #9
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    Le problème vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $comment_id = $_GET['comment_id'];
    $_GET['comment_id'] n'existe pas.

    En gros, tu veux afficher les informations d'un éléments (un commentaire dans ton exemple) sans préciser quel commentaire.
    Donc $comment_id est vide.

    Donc quand tu exécutes la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $query = "SELECT comment_header, comment
                FROM comments
                WHERE ID = $comment_id";
    Tu demandes à afficher le comment_header et comment dans la table comments dont l'ID est.
    Ca ne veux rien dire. Il manque quelque chose.

    Essayes d'appeler la page en faisant :
    http://siteweb.com/page.php?comment_id=1

    Gillou

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Ce cas de figure n'est pas envisagé. Il manquait donc comment_id dans la requete mysql. Je l'ai rajouté et cela marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      $query = "SELECT comment_header, comment, comment_id
                FROM comments
                WHERE ID = comment_id";
    Merci de ton aide.

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

Discussions similaires

  1. erreur récuperation d'un valeur int dans une base de donné mysql
    Par amintoraa dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 28/04/2014, 09h45
  2. Erreur dans la base de données
    Par MisterMok dans le forum SQLite
    Réponses: 2
    Dernier message: 18/11/2013, 08h46
  3. Erreur d'insertion dans la base de données
    Par bza88 dans le forum Android
    Réponses: 1
    Dernier message: 07/06/2013, 13h24
  4. Réponses: 0
    Dernier message: 09/07/2009, 15h10
  5. Réponses: 10
    Dernier message: 20/01/2008, 20h57

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