Page 1 sur 3
message interne
Posté : 24 sept. 2005, 12:38
par 001cod10
Je suis en train de faire une messagerie interne sur mon site. Lorsque je clique sur le lien titre le message ne s'affiche pas.Pouvez vous me dire ce qui pose problème. Voici mon bout de code
Code : Tout sélectionner
// on prépare une requete SQL selectionnant la date, le titre et l'expediteur du message que l'on souhaite lire, tout en prenant soin de vérifier que le message appartient bien au membre connecté
$sql = 'SELECT titre, date, message, membres.pseudo as num_expediteur FROM messages, membres WHERE pseudo_destinataire="'.$_SESSION['pseudo'].'" AND pseudo_expediteur=membres.pseudo AND messages.pseudo="'.$_POST['pseudo_message'].'"';
// on lance cette requete SQL à MySQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
if ($nb == 0) {
echo 'Aucun message reconnu.';
}
else {
// si le message a été trouvé, on l'affiche
$data = mysql_fetch_array($req);
echo $data['date'] , ' - ' , stripslashes(htmlentities(trim($data['titre']))) , '</a> [ Message de ' , stripslashes(htmlentities(trim($data['num_expediteur']))) , ' ]<br /><br />';
echo nl2br(stripslashes(htmlentities(trim($data['message']))));
Posté : 24 sept. 2005, 13:00
par smarties
$sql = 'SELECT titre, date, message, membres.pseudo as num_expediteur FROM messages, membres WHERE pseudo_destinataire="'.$_SESSION['pseudo'].'" AND pseudo_expediteur=membres.pseudo AND messages.pseudo="'.$_POST['pseudo_message'].'"';
Je crois que
" et
' ont une importance

dans les requetes donc essai avec ca :
$sql = "SELECT titre, date, message, membres.pseudo as num_expediteur FROM messages, membres WHERE pseudo_destinataire='".$_SESSION['pseudo']."' AND pseudo_expediteur=membres.pseudo AND messages.pseudo='".$_POST['pseudo_message']."'";
Posté : 24 sept. 2005, 13:14
par mere-teresa
Que donne echo $sql; ? Copie et colle la requête vraiment générée, afin de la tester....
Posté : 24 sept. 2005, 14:46
par 001cod10
Je viens de modifier mon code comme ceci
Code : Tout sélectionner
$sql = 'SELECT titre, date, message, membres.num as num_expediteur FROM messages, membres WHERE num_destinataire="'.$_SESSION['num'].'" AND num_expediteur=membres.num AND messages.num="'.$_POST['num_message'].'"';
// on lance cette requete SQL à MySQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
if ($nb == 0) {
echo 'Aucun message reconnu.';
}
else {
// si le message a été trouvé, on l'affiche
$data = mysql_fetch_array($req);
echo $data['date'] , ' - ' , stripslashes(htmlentities(trim($data['titre']))) , '</a> [ Message de ' , stripslashes(htmlentities(trim($data['num_expediteur']))) , ' ]<br /><br />';
echo nl2br(stripslashes(htmlentities(trim($data['message']))));
echo '<br /><br /><a href="supprimer.php?num_message=' , $_POST['num_message'] , '">Supprimer ce message</a>'; }
mysql_free_result($req);
mysql_close();
}
Et j'ai le message aucun message reconnu. Or il y a bel et bien un message enregistré dans la table messages. Comment puis-je résoudre cela
Pour ce que marie therese m'a demandé voici ce que j'ai comme message :
Aucun message reconnu.
Notice: Undefined variable: sql in c:\easyphp1-8\www\web\liremessage.php on line 56 que voici
echo '<br /><br /><a href="supprimer.php?num_message=' , $_POST['num_message'] , '">Supprimer ce message</a>';
Posté : 24 sept. 2005, 15:02
par Truc
la concaténation se fait avec des point ( . )
remplace
echo '<br /><br /><a href="supprimer.php?num_message=' , $_POST['num_message'] , '">Supprimer ce message</a>';
par
echo '<br /><br /><a href="supprimer.php?num_message='. $_POST['num_message'].'">Supprimer ce message</a>';
Posté : 24 sept. 2005, 15:14
par 001cod10
j'ai tjrs le même message d'erreur apres la modif de Truc. Est ce que ce n'est pas un problème au niveau de ma requete
Posté : 24 sept. 2005, 15:19
par Truc
Oui peut etre une erreur de requete, en meme temps tu n'a pas affiché le contenu de celle ci comme il ta été demandé:
$sql = 'SELECT titre, date, message, membres.num as num_expediteur FROM messages, membres WHERE num_destinataire="'.$_SESSION['num'].'" AND num_expediteur=membres.num AND messages.num="'.$_POST['num_message'].'"';
echo $sql;
et copie ici le résultat
Posté : 24 sept. 2005, 15:59
par 001cod10
quand je fais echo $sql; apres la requete et que j'exécute mon script rien ne s'affiche à part le message d'erreur que j'avais.
Posté : 24 sept. 2005, 16:06
par Cyrano
Il y a une erreur dans ta requête : Les comparaisons d'identifiants sont écrites comme des comparaisons de chaines de caractères. Ensuite la seconde clause WHERE n'a pas lieu d'être.
Modifie comme ceci:
$sql = "SELECT titre, date, message, membres.num as num_expediteur ".
"FROM messages, membres ".
"WHERE num_destinataire = ".$_SESSION['num']." ".
"AND messages.num = ".$_POST['num_message'];
Posté : 24 sept. 2005, 16:20
par 001cod10
Apres les modification de cyrano j'ai tjrs aucun message reconnu.
Code : Tout sélectionner
<?php
session_start();
// on vérifie toujours qu'il s'agit d'un membre qui est connecté
if (!isset($_SESSION['pseudo'])) {
// si ce n'est pas le cas, on le redirige vers l'accueil
header ('Location: index.php');
exit();
}
?>
<html>
<head>
<title>Espace membre</title>
</head>
<body>
<a href="message.php">Retour à l'accueil</a><br /><br />
<?php
// on teste si notre paramètre existe bien et qu'il n'est pas vide
if (!isset($_POST['num_message']) || empty($_POST['num_message'])) {
echo 'Aucun message reconnu.';
}
else {
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'mabase';
// connection à la DB
mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
// on prépare une requete SQL selectionnant la date, le titre et l'expediteur du message que l'on souhaite lire, tout en prenant soin de vérifier que le message appartient bien au membre connecté
$sql = "SELECT titre, date, message, membres.num as num_expediteur ".
"FROM messages, membres ".
"WHERE num_destinataire = ".$_SESSION['num']." ".
"AND messages.num = ".$_POST['num_message'];
// on lance cette requete SQL à MySQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
if ($nb == 0) {
echo 'message non reconnu.';
}
else {
// si le message a été trouvé, on l'affiche
$data = mysql_fetch_array($req);
echo $data['date'] , ' - ' , stripslashes(htmlentities(trim($data['titre']))) , '</a> [ Message de ' , stripslashes(htmlentities(trim($data['num_expediteur']))) , ' ]<br /><br />';
echo nl2br(stripslashes(htmlentities(trim($data['message']))));
echo '<br /><br /><a href="supprimer.php?num_message=' , $_POST['num_message'] , '">Supprimer ce message</a>'; }
mysql_free_result($req);
mysql_close();
}
?>
<br /><br /><a href="deconnexion.php">Déconnexion</a>
</body>
</html>
Posté : 24 sept. 2005, 16:23
par Truc
et en remplacant ce test
if (!isset($_POST['num_message']) || empty($_POST['num_message'])) {
echo 'Aucun message reconnu.';
}
par
if (!isset($_POST['num_message']) && empty($_POST['num_message'])) {
echo 'Aucun message reconnu.';
}
Posté : 24 sept. 2005, 16:35
par 001cod10
la modif n'a rien donné
Posté : 24 sept. 2005, 16:42
par Truc
Apres les modification de cyrano j'ai tjrs aucun message reconnu.
Quand tu dis "aucun message reconnu" est ce que c'est le "echo" du test du nombre de lignes qui affiche ça. Dans ce cas tu passe bien par le else donc en faisant un echo $sql a ce moment. Il doit forcément afficher le contenu de la variable, sinon aie aie ça a l'air serieux
Posté : 24 sept. 2005, 16:52
par 001cod10
c'est ce premier test qui affiche cela
// on teste si notre paramètre existe bien et qu'il n'est pas vide
if (!isset($_POST['num_message']) || empty($_POST['num_message']))
Posté : 24 sept. 2005, 17:36
par Truc
Donc la condition est verifié a chaque fois !
remplace par:
if ((!isset($_POST['num_message']) && ($_POST['num_message']==""))
Assure toi de bien passer une valeur dans $_POST['num_message'] qui vient d'un formulaire d'un autre page peut etre, verifie l'orthographe.