Bonjour,
J'ai suivi le tutoriel du système de commentaire, et j'ai un problème alors que je pense avoir fait le même code que le tuto. Mais cela m'affiche une erreur SQL qui est

Notice: Undefined index: id in C:\Program Files\EasyPHP-5.3.8.1\www\voir.php on line 26
Erreur SQL !
SELECT * FROM comment WHERE news_id= ORDER BY id ASC
Erreur de syntaxe pr?s de 'ORDER BY id ASC' ? la ligne 1

Et le code PHP est

<?php
                    $id = $_GET'id'];
                    $sql ="SELECT * FROM news WHERE id=$id";
                    $req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                    $data=mysql_fetch_assoc($req);
                        echo "<h1>{$data"titre"]}</h1>";
                        echo "<p>{$data"contenu"]}</p>";
                        echo "<p>".date("d F Y", strtotime($data"date"]))."<p>";

                    $sql="SELECT * FROM comment WHERE news_id=$id ORDER BY id ASC";
                    $req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                    while($data2=mysql_fetch_assoc($req)){
                        echo $data2"pseudo"];
                        echo "<p>{$data2"contenu"]}</p>";
                        echo "-------------------";
                    }
            ?>

Donc je ne sais pas d'ou elle vient :/

26 réponses


Essaye de remplacer la ligne 10 par celle ci :

$sql="SELECT * FROM comment WHERE news_id=".$id." ORDER BY id ASC";
Scats
Auteur

J'ai toujours la même erreur :/

Notice: Undefined index: id in C:\Program Files\EasyPHP-5.3.8.1\www\voir.php on line 26
Erreur SQL !
SELECT * FROM news WHERE id=
Erreur de syntaxe pr?s de '' ? la ligne 1

Dans ton url tu as bien quelque chose de ce type : ?id=1 ( ou un autre nombre )?

Scats
Auteur

Oui j'ai ça: voir.php?id=39

Remplace également ta ligne 3 par :

$sql ="SELECT * FROM news WHERE id=".$id."";
Scats
Auteur

Toujours pas, des que je clique pour pouvoir mettre un commentaire sa m'affiche directement l'erreur

Erreur SQL !
SELECT * FROM comment WHERE news_id=41ORDER BY id ASC
Erreur de syntaxe pr?s de 'BY id ASC' ? la ligne 1
<strong></strong>

Il manque un espace devant le ORDER car si tu regarde l'erreur y a pas d'espace entre 41 et ORDER

Scats
Auteur

J'ai régler le problème du message d'avant mais dés que j'envoie mon commentaire, j'ai ce message

Notice: Undefined index: id in C:\Program Files\EasyPHP-5.3.8.1\www\voir.php on line 26
Erreur SQL !
SELECT * FROM news WHERE id=
Erreur de syntaxe pr?s de '' ? la ligne 1

<?php   
    require "admin/config.php";
    mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
    mysql_select_db(DB_BDD); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>

    <form method="addcom.php" method="post" >
        Pseudo: <input type="text" name="speudo" /><br />
        Site Web: <input type="text" name="url" /><br />
        E-mail: <input type="text" name="mail" /><br />
        <textarea style="width:500px; height:200px;" name="contenu"></textarea>
        <input type="submit" value="Envoyer" />
        <input type="hidden" name="news_id" value="<?php echo $data"id"]; ?>"   
    </form>

    <?php
                    $id = $_GET'id'];
                    $sql ="SELECT * FROM news WHERE id=$id";
                    $req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                    $data=mysql_fetch_assoc($req);
                    echo "<h1>{$data"titre"]}</h1>";
                    echo "<p>{$data"contenu"]}</p>";
                    echo "<p>".date("d F Y", strtotime($data"date"]))."<p>";

                    $sql="SELECT * FROM comment WHERE news_id=".$id. " ORDER BY id ASC";
                    $req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                    while($data2=mysql_fetch_assoc($req)){
                        echo $data2"pseudo"];
                        echo "<p>{$data2"contenu"]}</p>";
                        echo "-------------------";
                    }
            ?>

</body>
</html>

Remplace également ta ligne 3 par :

$sql ="SELECT * FROM news WHERE id=".$id."";

;)

Scats
Auteur

Toujours la même erreur ...

Notice: Undefined index: id in C:\Program Files\EasyPHP-5.3.8.1\www\voir.php on line 26
Erreur SQL !
SELECT * FROM news WHERE id=
Erreur de syntaxe pr?s de '' ? la ligne 1

Salut, teste avec ce code.

<?php
        $id = intval ($_GET 'id']);
        $sql = 'SELECT * FROM news WHERE id=' . $id;
        $req = mysql_query ($sql) or exit ('Erreur SQL !<br />' . $sql . '<br />' . mysql_error ());
        $data = mysql_fetch_assoc ($req);
        echo "<h1>{$data"titre"]}</h1>";
        echo "<p>{$data"contenu"]}</p>";
        echo "<p>".date("d F Y", strtotime($data"date"]))."<p>";
        $sql = 'SELECT * FROM comment WHERE news_id=' . $id . ' ORDER BY id ASC';
        $req = mysql_query($sql) or exit ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        while($data2=mysql_fetch_assoc($req)){
            echo $data2"pseudo"];
            echo "<p>{$data2"contenu"]}</p>";
            echo "-------------------";
        }
Scats
Auteur

J'ai essayé ton code, l'erreur à changer

Elle vient du

$id = intval ($_GET 'id']);

Notice: Undefined index: id in C:\Program Files\EasyPHP-5.3.8.1\www\voir.php on line 26

Essaye ceci

$id = intval($_GET"id"]);
Scats
Auteur

Non toujours pareil :/

Copie un de tes urls avec le ?id= s'il te plais :)

Scats
Auteur
http://127.0.0.1:8080/voir.php?id=42

C'est étrange ton problème.
Essaye plutôt de remplacer tous tes $id par $_GET'id']

Scats
Auteur

Toujours pas ... Tu veux voir tous mes fichiers sinon, peut être que ce problème peux venir d'un fichier parallèle ?

Re bonsoir, le problème viens de ton formulaire. Dans le champs de type 'hidden', tu demande l'id de la new avec $data, hors $data n'existe pas encore. Il faut mettre $_GET a la place.

Ce qui donne avec ta manière de coder :

<?php    
    require "admin/config.php";
    mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
    mysql_select_db(DB_BDD); ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>

<body>

    <form method="addcom.php" method="post" >
        Pseudo: <input type="text" name="speudo" /><br />
        Site Web: <input type="text" name="url" /><br />
        E-mail: <input type="text" name="mail" /><br />
        <textarea style="width:500px; height:200px;" name="contenu"></textarea>
        <input type="submit" value="Envoyer" />
        <input type="hidden" name="news_id" value="<?php echo $_GET"id"]; ?>"  
    </form>

    <?php
        $id = isset ($_GET 'id']) ? intval ($_GET 'id']) : $id_new_default = 1;

        $sql = 'SELECT * FROM news WHERE id=' . $id;
        $req = mysql_query ($sql) or exit ('Erreur SQL !<br />' . $sql . '<br />' . mysql_error ());
        $data = mysql_fetch_assoc ($req);

        echo "<h1>{$data"titre"]}</h1>";
        echo "<p>{$data"contenu"]}</p>";
        echo "<p>".date("d F Y", strtotime($data"date"]))."<p>";

        $sql = 'SELECT * FROM comment WHERE news_id=' . $id . ' ORDER BY id ASC';
        $req = mysql_query($sql) or exit ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        while($data2=mysql_fetch_assoc($req)){
            echo $data2"pseudo"];
            echo "<p>{$data2"contenu"]}</p>";
            echo "-------------------";
        }
            ?>

</body>
</html>

Avec une manière plus évoluer :

<?php
    require_once ('admin/config.php');
    mysql_connect (DB_HOST, DB_LOGIN, DB_PASS) or exit ('Erreur SQL !<br />' . mysql_error ());
    mysql_select_db (DB_BDD) or exit ('Erreur SQL !<br />' . mysql_error ());
    define ('ID_NEWS_DEFAULT', 1);  // ID de la news par defaut //

    $news_id    = isset ($_GET 'id']) ? intval ($_GET 'id']) : ID_NEWS_DEFAULT;
    $sql = "SELECT * FROM news WHERE id='$news_id'";
    $req = mysql_query ($sql) or exit ('Erreur SQL !<br />' . $sql . '<br />' . mysql_error ());
    $news = mysql_fetch_assoc ($req);
    $sql = "SELECT * FROM comment WHERE news_id='$news_id' ORDER BY id ASC";
    $req = mysql_query ($sql) or exit ('Erreur SQL !<br />' . $sql . '<br />' . mysql_error ());
                while ($data = mysql_fetch_assoc ($req)) {
                    $comments ] = $data;
                }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Document sans nom</title>
        <link href="css/style.css" rel="stylesheet" type="text/css" />
    </head>
<body>
<form method="addcom.php" method="post" >
    Pseudo: <input type="text" name="speudo" /><br />
    Site Web: <input type="text" name="url" /><br />
    E-mail: <input type="text" name="mail" /><br />
    <textarea style="width:500px; height:200px;" name="contenu"></textarea>
    <input type="hidden" name="news_id" value="<?php echo $_GET"id"]; ?>"/>
</form>
<h1><?php echo htmlentities ($news 'titre']); ?></h1>
<p><?php echo htmlentities ($news 'contenu'])?></p>
<p><?php echo date("d F Y", strtotime($news 'date']))?></p>
<?php
    foreach ($comments as $comment):
?>
    <p>
        <h3><?php echo htmlentities ($comment 'pseudo']);?></h3>
        <?php echo htmlentities ($comment 'contenu']); ?>
    </p>
<?php
    endforeach;
?>

Et voilà.

Scats
Auteur

Merci, donc j'ai essayé t'es 2 codes

Avec le premier plus aucun message d'erreur sauf une fois le Message envoyer, cela n'affiche rien sa m'enlève le message de la news et sa me met une date du style:
Avant j'ai la new qui s'affiche normalement

Pour sa marche pas ?
Ce système de commentaire m'énerve ..?
04 December 2011

Et après avoir envoyer le message j'ai ceci qui s'affiche

01 January 1970

Et le second la sur celui il y a un message qui est

Notice: Undefined variable: comments in C:\Program Files\EasyPHP-5.3.8.1\www\voir.php on line 45
Warning: Invalid argument supplied for foreach() in C:\Program Files\EasyPHP-5.3.8.1\www\voir.php on line 45

Alors sur le seconds code rajoute avant la boucle while :

<?php
$comments = Array ();

Pour le 1er code, je vois pas trop. Le problème doit se situer au niveau de ton fichier addcom.php. La news et telle toujours présente dans la base de données après l'ajouts du commentaire ?

Scats
Auteur

Voilà, je n'ai plus aucune erreur SQL, mais quand je fait "Envoyer", la new s'en va et sa m'affiche une date

01 January 1970

Voici mes codes
voir.php

<?php

    require_once ('admin/config.php');

    mysql_connect (DB_HOST, DB_LOGIN, DB_PASS) or exit ('Erreur SQL !<br />' . mysql_error ());
    mysql_select_db (DB_BDD) or exit ('Erreur SQL !<br />' . mysql_error ());

    define ('ID_NEWS_DEFAULT', 1); // ID de la news par defaut //

    $news_id = isset ($_GET 'id']) ? intval ($_GET 'id']) : ID_NEWS_DEFAULT;

    $sql = "SELECT * FROM news WHERE id='$news_id'";
    $req = mysql_query ($sql) or exit ('Erreur SQL !<br />' . $sql . '<br />' . mysql_error ());
    $news = mysql_fetch_assoc ($req);

    $sql = "SELECT * FROM comment WHERE news_id='$news_id' ORDER BY id ASC";
    $req = mysql_query ($sql) or exit ('Erreur SQL !<br />' . $sql . '<br />' . mysql_error ());
    $comments = Array ();
                while ($data = mysql_fetch_assoc ($req)) {
                    $comments ] = $data;
                }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Document sans nom</title>
        <link href="css/style.css" rel="stylesheet" type="text/css" />
    </head>
<body>

<form method="addcom.php" method="post" >
    Pseudo: <input type="text" name="pseudo" /><br />
    Site Web: <input type="text" name="url" /><br />
    E-mail: <input type="text" name="mail" /><br />
    <textarea style="width:500px; height:200px;" name="contenu"></textarea>
    <input type="submit" value="Envoyer" />
    <input type="hidden" name="news_id" value="<?php echo $_GET"id"]; ?>"/>
</form>

<h1><?php echo htmlentities ($news 'titre']); ?></h1>
<p><?php echo htmlentities ($news 'contenu'])?></p>
<p><?php echo date("d F Y", strtotime($news 'date']))?></p>

<?php
    foreach ($comments as $comment):
?>
    <p>
        <h3><?php echo htmlentities ($comment 'pseudo']);?></h3>
        <?php echo htmlentities ($comment 'contenu']); ?>
    </p>
<?php
    endforeach;
?>

addcom.php

<?php
if(!empty($_POST'mail']));
    require "config.php";
    mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
    mysql_select_db(DB_BDD);

    extract($_POST);
    $sql ="INSERT INTO comment(pseudo,url,mail,contenu,news_id) VALUES ('$pseudo','$url','$mail','$contenu','$news_id')";
    $req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

    header("Location: voir.php?id=$news_id");   /*redirection*/
?>

Ok alors remplace la ligne 33 de voir.php par :

<form action="addcom.php" method="post" />
Scats
Auteur

ENFIN sa marche ! :D

Dernière questions avez vous un moyen pour afficher les accents à la palce de ça

Tinquète

Il faut que tu encodes tes fichiers en utf-8 (sans bom) via ton éditeur de texte (dans notepad c'est dans l'onglet "Encodage").

Et aussi que tu ajoutes ceci :

mysql_query('SET NAMES utf8');

après ça :

mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
    mysql_select_db(DB_BDD);

Si tu a :

Undefined index: id

C'est qu'il ne trouve pas id, regarde la structure de ta BDD ?