message interne

Eléphant du PHP | 131 Messages

24 sept. 2005, 12:38

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']))));

Eléphant du PHP | 199 Messages

24 sept. 2005, 13:00

$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']."'"; 
Les 2 font la paire : coder ET commenter :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

24 sept. 2005, 13:14

Que donne echo $sql; ? Copie et colle la requête vraiment générée, afin de la tester....
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 131 Messages

24 sept. 2005, 14:46

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>';

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 sept. 2005, 15:02

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>';

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 131 Messages

24 sept. 2005, 15:14

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 sept. 2005, 15:19

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 131 Messages

24 sept. 2005, 15:59

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.

Mammouth du PHP | 19672 Messages

24 sept. 2005, 16:06

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'];
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 131 Messages

24 sept. 2005, 16:20

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>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 sept. 2005, 16:23

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.';
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 131 Messages

24 sept. 2005, 16:35

la modif n'a rien donné

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 sept. 2005, 16:42

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 131 Messages

24 sept. 2005, 16:52

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']))

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 sept. 2005, 17:36

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute