Message interne

Signaler
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007
-
 malalam -
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

// 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 !
'.$sql.'
'.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']))) , ' [ Message de ' , stripslashes(htmlentities(trim($data['num_expediteur']))) , ' ]

';
echo nl2br(stripslashes(htmlentities(trim($data['message']))));

24 réponses

Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

Je viens de modifier mon code comme ceci

$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 !
'.$sql.'
'.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']))) , ' [ Message de ' , stripslashes(htmlentities(trim($data['num_expediteur']))) , ' ]

';
echo nl2br(stripslashes(htmlentities(trim($data['message']))));

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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,



il faut vérifier la valeur de $_SESSION['num'] et $_POST['num_message']

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
et essaie de remplacer $_POST['num_message'] par $_GET['num_message']

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

Voici mon script au complet apres ta recommandation car cela n'a rien donné


<?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>




[membres.php Retour à l'accueil]


<?php


// on teste si notre paramètre existe bien et qu'il n'est pas vide


if (!isset($_GET['num_message']) && empty($_GET['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_message = ".$_GET['num_message'];




// on lance cette requete SQL à MySQL


$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.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']))) , ' [ Message de ' , stripslashes(htmlentities(trim($data['num_expediteur']))) , ' ]

';


echo nl2br(stripslashes(htmlentities(trim($data['message']))));




echo '

[supprimer.php?num_message=' , $_GET['num_message'] , ' Supprimer ce message]';


}


mysql_free_result($req);




}


?>



[deconnexion.php D
éconnexion]




</html>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,



if (!isset($_GET['num_message']) && empty($_GET['num_message'])) {


remplace-le par ça :



if (!isset($_GET['num_message']) OR empty($_GET['num_message']) OR !is_numeric($_GET['num_message'])) {



rajoute aussi un mysql_close() après le mysql_query()


<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

La correction n'a rien donné.J'ai enlevé cette partie


// on teste si notre paramètre existe bien et qu'il n'est pas vide


if (!isset($_GET['num_message']) OR empty($_GET['num_message']) OR !is_numeric $_GET['num_message'])) {





echo 'Aucun message reconnu.';


}


else


{

Voici le message que j'ai

Notice: Undefined index: num_message in c:\easyphp1-8\www\web\liremessage.php on line 41
Erreur SQL !SELECT titre, date, message, membres.num as num_expediteur FROM messages, membres WHERE num_destinataire 2 AND messages.num_message
Erreur de syntaxe près de '' à la ligne 1
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

voici la ligne 41


$sql = "SELECT titre, date, message, membres.num as num_expediteur ".


"FROM messages, membres ".


"WHERE num_destinataire = ".$_SESSION['num']." ".


"AND messages.num_message = ".$_GET['num_message'];
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
il ne reconnait pas le num_message



je précise que ton url pour consulter un message doit être de cette forme :



url.php?num_message=x ou x étant un nombre.



Par contre quelle est ta version de php ? (tu peux l'obtenir en utilisant la fonction phpinfo() qui va te générer du code html)



tu tapes <?php phpinfo() ?> dans ton fichier et hop :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

PHP Version 4.3.10
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
ok ça devrait fonctionner alors, quand tu cliques sur ton lien quelle est l'url de ta page ?

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

c:\easyphp1-8\www\web\liremessage.php
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
bah c'est normal ton lien n'est pas de la form "liremessage.php?num_message=x"

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

J'y arrive pas car le num_message est un champ de type int auto- increment
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Je vois pas le rapport avec le lien... file-moi le code que tu utilises
pour afficher la liste des messages du membre (et donc le lien
correspondant)



merci :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

<?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>




Bienvenue <?php echo stripslashes(htmlentities(trim($_SESSION['pseudo']))); ?> !


<?php


// information pour la connection à le DB


$host = 'localhost';


$user = 'root';


$pass = '';


$db = 'mabase';


// connection à la DB


$link = 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 cherchant tous les titres, les dates ainsi que l'auteur des messages pour le membre connecté


$sql = 'SELECT titre, date,message, membres.pseudo as expediteur, messages.num_message as pseudo_message FROM messages, membres WHERE num_destinataire="'.$_SESSION['num'].'" AND num_expediteur=membres.num ORDER BY date DESC';


// lancement de la requete SQL


$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());


$nb = mysql_num_rows($req);


if ($nb == 0) {


echo 'Vous n\'avez aucun message.';


}


else


{


//si on a des messages,on affiche la date,un lien vers la page lire.php ainsi que le titre et l'auteur du


while ($data = mysql_fetch_array($req)) {


echo $data['date'] , ' - [liremessage.php?message=',$data['message'],' ' , stripslashes(htmlentities(trim($data['titre']))) , '][ Message de ', stripslashes(htmlentities(trim($data['expediteur']))) ,']
';


}


}


mysql_free_result($req);


mysql_close();


?>



[envoyer_message.php Envoyer un message]




</html>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
[liremessage.php?num_message=',$data['pseudo_message'],' '
ou encore



]'
<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

En utlisant cette ligne
'
j'ai eu ce message
Erreur SQL !SELECT titre, date, message, membres.num as num_expediteur FROM messages, membres WHERE num_destinataire 2 AND messages.num comment vas tu
Erreur de syntaxe près de 'vas tu' à la ligne 1
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
et en utilisant la première ?


[liremessage.php?num_message=',$data['pseudo_message'],' '
<hr size="2" width="100%"><li>]Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

J'ai :
Parse error: parse error in c:\easyphp1-8\www\web\message.php on line 30


$sql = 'SELECT titre,date,message,membres.pseudo as expediteur, messages.num_message as pseudo_message FROM messages, membres WHERE num_destinataire='".$_SESSION['num']."' AND num_expediteur=membres.num ORDER BY date DESC';
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
non mais regarde bien avant de copier-coller un code sans faire attention :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>