8791 sujets

Développement web côté serveur, CMS

Bonjour !
J'ai un petit soucis avec un script PHP, que je n'arrive toujours pas à régler.
Voici mon code :

<?php
mysql_connect("mysql5-2", "base", "mot_de_passe");
mysql_select_db("base");

$_GET['id'] = $id;

$retour = mysql_query('SELECT * FROM news WHERE id='.$id.'');
$donnees = mysql_fetch_assoc($retour);

echo '<h3>';
echo stripslashes($donnees['titre']); 
echo '</h3><div class="date">Publié le '.date('d/m/Y' , $donnees['timestamp']).'</div><p><div style="text-align:justify">';
$contenu = nl2br(stripslashes($donnees['contenu']));
echo $contenu;
echo '<br><br>';
echo'<table align="center" width="500px">';

$retour_commentaires = mysql_query('SELECT * FROM commentaires WHERE id_news='.$id.'');
while($donnees_commentaires = mysql_fetch_array($retour_commentaires))
{
echo '<tr><td align="justify" width="20%">'.$donnees_commentaires['pseudo'].'</td>';
echo '<td align="justify" width="80%">'.nl2br(stripslashes($donnees_commentaires['contenu'])).'</td></tr>';
}

echo '</table>';

if(isset($_COOKIE['pseudo']))
{
echo '<center><strong>Poster un commentaire</strong><br><br>';
echo '<form action="http://www.metroidmaster.com/index.php?section=news&sub=commentaires&page=envoi&id='.$id.'" method="post">';
echo '<textarea name="contenu" id="contenu" rows="10" cols="50"></textarea><br>';
echo '<input type="submit" name="envoyer" id="envoyer" value="Envoyer"></form></center>';
}

else
{
echo 'Vous devez être connecté pour poster un commentaire.';
}

?>


Sur ma page d'index, le code utilisé pour récupérer les news dans la base de données est presque le même. Seulement, mes news s'affichent sur ma page index, alors que la news demandée ne s'affiche pas ici...

Au début du script, j'obtiens une variable $_GET['id'], et j'ai remarqué dans l'adresse qu'elle était bien là. Je demande donc par une requête de me sortir la news n° $id. Et là, je ne sais pas encore pourquoi, mais la news n'apparaît pas. Quelqu'un aurait-il trouvé l'erreur ?

Merci !

Edit : Un autre problème, lorsque je clique sur "Envoyer" pour poster le commentaire, la variable $id n'est pas transmise...
Modifié par MetroidMaster (09 Aug 2007 - 20:07)
Salut MetroidMaster Smiley cligne ,

cette ligne :
$_GET['id'] = $id;
est incorrecte Smiley murf .

Essayes plutôt :
$id = (isset($_GET['id'])) ? $_GET['id'] : 0;


A+
Salut, Heyoan !

Merci beaucoup pour ta réponse, ça fonctionne ! T'es génial >_<
Mais j'avoue que j'ai pas compris le code, tu pourrais m'expliquer ?

A+ !

Edit :
J'ai un problème avec ce code, aussi Smiley decu
<?php
if(isset($_GET['id']) && $_GET['contenu'])
{
$_GET['id'] = $id_news;
$_GET['contenu'] = $contenu;
}
else
{
die ('Erreur');
}

mysql_connect("mysql5-2", "base", "mdp");
mysql_select_db("metroidmSQL");

mysql_query("INSERT INTO commentaires(id_news, pseudo, contenu) VALUES('$id_news', '$_COOKIE['pseudo']', '$contenu')");

echo 'Votre commentaire a été ajouté';

?>


Il me retourne cette erreur :
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home.25/m/e/t/metroidm/www/news/commentaires/envoi.php on line 15

C'est une erreur de syntaxe, j'ai beaucoup de mal avec les variables dans les requêtes, mais je vois pas comment l'arranger...
Modifié par MetroidMaster (09 Aug 2007 - 19:53)
Yep !

Ta variable $_GET['id'] existe ou non dans ton url "page.php?id=33".

Pour la récupérer dans ta variable $id il faut donc faire un test. La forme que j'ai utilisée s'appelle un test avec opérateur ternaire (qui est un bonus PHP Smiley lol ). Cela correspond à :
if (isset($_GET['id'])) { // [b] si $_GET['id'] existe...[/b]
     $id = $_GET['id'];
}
else
{
     $id = 0;
}


A+
Merci pour l'explication, j'essaierais de pas faire l'erreur une deuxième fois ^^
Enfin, j'aurais pas trouvé tout seul, je te remercie.

J'ai toujours un problème avec ce code :
$requete = "INSERT INTO commentaires(id_news,pseudo,contenu) VALUES('$id_news','$_COOKIE['pseudo']','$contenu')";
mysql_query($requete);


Voilà, donc si tu vois le problème... Après ça, je pourrais poster mes commentaires, enfin ^^

A+ !
Re',

pour ton 2ème code, je mettrais plutôt ça :
<?php
if (!isset($_GET['id']) || !isset($_GET['contenu'])) {
die('Erreur');
}

$id = $_GET['id'];
$contenu = $_GET['contenu'];

mysql_connect("mysql5-2", "base", "mdp");
mysql_select_db("metroidmSQL");

mysql_query("INSERT INTO commentaires(id_news, pseudo, contenu) VALUES('$id_news', '".$_COOKIE['pseudo']."', '$contenu')");

echo 'Votre commentaire a été ajouté'; 
?>

Problème classique de quotes et de doubles quotes. Smiley langue

A+
Merci ! Ca a fonctionné ! J'ai plus qu'à mettre au point l'affichage des commentaires maintenant, mais ça va aller tout seul.
Encore merci !

Salut ! Smiley ravi
Administrateur
Bonjour,

l'opérateur ternaire a ? b : c est l'équivalent de:

si (a) {
  b
}
sinon {
  c
}


autrement dit:
test ? agir_si_vrai : agir_si_faux

On peut vivre sans mais c'est bien pratique pour les petits tests de rien du tout (pas ceux qui prennent 15 lignes!)

EDIT: l'opérateur ternaire
Modifié par Felipe (09 Aug 2007 - 21:49)