Compter message boite de reception
- Accueil
- Forum
- Programmation
- PHP
- Compter message boite de reception
laurent09 Le 22 avril 2017 à 21:39 (Édité le 25 janvier 2019 à 17:53)
je débute et j'apprends avec en php.
J'ai suivis le tuto sur le profil puis la boite de messagerie privée ici :
http://www.primfx.com/article/tuto-php-envoyer-des-messages-prives-232 .
tout est nickel, j'aurai aimé savoir:
-comment faire pour compter le nombre de message reçu dans sa boite de réception.
- et comment avoir les message non lus et les message lus dans deux tableau différent?
merci
Zbuu Le 22 avril 2017 à 22:28 (Édité le 1 janvier 1970 à 01:00)
Je ne connais pas ton code, et je n'ai pas non plus regardé le tutoriel. Mais si tu souhaites récupérer le nombre de messages de l'utilisateur il te suffit de faire un rowCount() sur la requête ou tu récupères les messages de ton utilisateur.
un exemple (avec pdo) :
$q = $bdd->prepare("SELECT * FROM ta_table_contenant_les_messages WHERE ton_champ_destinataire = ?");
$q->execute([$_SESSION['auth']['id']]);
$nbr_message = $q->rowCount();
$q->closeCursor();
Si tu ne comprends pas bien, poste nous ton code de la page ou tu récupères les messages :)
laurent09 Le 23 avril 2017 à 10:35 (Édité le 1 janvier 1970 à 01:00)
sinon voici mon code, c'est juste celui du tuto de primfx .
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=', '', '');
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
$msg = $bdd->prepare('SELECT * FROM messages WHERE id_destinataire = ?');
$msg->execute(array($_SESSION['id']));
$msg_nbr = $msg->rowCount();
?>
<!DOCTYPE html>
<html>
<head>
<title>Boîte de réception</title>
<meta charset="utf-8" />
</head>
<body>
<a href="envoi.php">Nouveau message</a><br /><br /><br />
<h3>Votre boîte de réception:</h3>
<?php
if($msg_nbr == 0) { echo "Vous n'avez aucun message..."; }
while($m = $msg->fetch()) {
$p_exp = $bdd->prepare('SELECT username FROM user WHERE id = ?');
$p_exp->execute(array($m['id_expediteur']));
$p_exp = $p_exp->fetch();
$p_exp = $p_exp['username'];
?>
<b><?= $p_exp ?></b> vous a envoyé: <br />
<?= nl2br($m['message']) ?><br />
-------------------------------------<br/>
<?php } ?>
</body>
</html>
<?php } ?>
merci Zbuu Le 23 avril 2017 à 12:01 (Édité le 1 janvier 1970 à 01:00)
$msg_nbr = $msg->rowCount();
Donc suffit de faire un echo du style :
<p>Vous avez <?= $msg_nbr; ?> messages</p>
Pour info <?= $une_variable; ?> c'est comme ci je faisais <?php echo $ma_variable; ?>
Balatharas Le 23 avril 2017 à 13:45 (Édité le 23 avril 2017 à 14:46)
<?php
$reqNBR = $bdd->prepare('ta requête 😉 ');
$reqNBR->execute([$argument]);
$msg_nonlus = $reqNBR->rowCount();
echo "Vous avez reçu ".$msg_nonlus." messages non lus.";
?>
Ta requête vaut mieux que tu la fasses pour comprendre: Sélectionne dans la table message toute les lignes qui ont la colonne id_destinataire = ? et lu = 0
Ensuite $argument sera le $_SESSION['id']
Du coup pour les messages non lus copier-coller:
<?php
$reqNBRlu = $bdd->prepare('ta requête 😉 ');
$reqNBRlu->execute([$argument]);
$msg_lus = $reqNBRlu->rowCount();
echo "Vous avez reçu ".$msg_lus." messages lus.";
?>
Ta requête vaut mieux que tu la fasses pour comprendre: Sélectionne dans la table message toute les lignes qui ont la colonne id_destinataire = ? et lu = 1
Ensuite $argument sera le $_SESSION['id']
Normalement tu devrais y arriver sans pb 😋
laurent09 Le 27 avril 2017 à 10:46 (Édité le 1 janvier 1970 à 01:00)
je débute et j'apprend et ça fait plaisirs de voir que l'on peut recevoir de l'aide.
laurent09 Le 27 avril 2017 à 11:01 (Édité le 1 janvier 1970 à 01:00)
Mais le truc c'est que quand j'ai ajouté la ligne "lu" dans ma bdd mes message ne s'envoie plus, et lorsque je la supprime mes message ce renvoie.
je cherche mais je ne voie pas.
laurent09 Le 27 avril 2017 à 14:07 (Édité le 1 janvier 1970 à 01:00)
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=testinfinity', 'testinfinity', '1234');
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
if(isset($_POST['envoi_message'])) {
if(isset($_POST['destinataire'],$_POST['message'],$_POST['objet']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']) AND !empty($_POST['objet'])) {
$destinataire = htmlspecialchars($_POST['destinataire']);
$message = htmlspecialchars($_POST['message']);
$objet = htmlspecialchars($_POST['objet']);
$id_destinataire = $bdd->prepare('SELECT id FROM user WHERE username = ?');
$id_destinataire->execute(array($destinataire));
$dest_exist = $id_destinataire->rowCount();
if($dest_exist == 1) {
$id_destinataire = $id_destinataire->fetch();
$id_destinataire = $id_destinataire['id'];
$ins = $bdd->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message,objet) VALUES (?,?,?,?)');
$ins->execute(array($_SESSION['id'],$id_destinataire,$message,$objet));
$error = "Votre message a bien été envoyé !";
} else {
$error = "Cet utilisateur n'existe pas...";
}
} else {
$error = "Veuillez compléter tous les champs";
}
}
$destinataires = $bdd->query('SELECT username FROM user ORDER BY username');
if(isset($_GET['r']) AND !empty($_GET['r'])) {
$r = htmlspecialchars($_GET['r']);
}
if(isset($_GET['o']) AND !empty($_GET['o'])) {
$o = urldecode($_GET['o']);
$o = htmlspecialchars($_GET['o']);
if(substr($o,0,3) != 'RE:') {
$o = "RE:".$o;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Envoi de message</title>
<meta charset="utf-8" />
</head>
<body>
<form method="POST">
<label>Destinataire:</label>
<input type="text" name="destinataire" <?php if(isset($r)) { echo 'value="'.$r.'"'; } ?> />
<br /><br />
<label>Objet:</label>
<input type="text" name="objet" <?php if(isset($o)) { echo 'value="'.$o.'"'; } ?> />
<br /><br />
<textarea placeholder="Votre message" name="message"></textarea>
<br /><br />
<input type="submit" value="Envoyer" name="envoi_message" />
<br /><br />
<?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } ?>
</form>
<br />
<a href="reception.php">Boîte de réception</a>
</body>
</html>
<?php
}
?>
lorsque j’enlève la ligne "lu" a la fin de ma table "messages" les message s'envoie, et lorsque je le rajoute les messages ne s'envois plus.
Balatharas Le 27 avril 2017 à 17:36 (Édité le 1 janvier 1970 à 01:00)
$bdd = new PDO('mysql:host=127.0.0.1;dbname=testinfinity', 'testinfinity', '1234');
Par ceci:try {
$bdd = new PDO('mysql:host=127.0.0.1;dbname=testinfinity', 'testinfinity', '1234');
} catch(Exception $e) {
echo 'Erreur: ', $e->getMessage(), "\n";
}
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
De plus tu devrais éviter les mdp type 1234 ou azerty et tu devrais mettre le code de connexion à la bdd dans un fichier à part, fichier que tu inclus avec include/include_once/require/require_once en haut de tes fichiers.
Ton problème vient du fait que ne met pas la colonne lu dans ta requête d'insertion. Du coup il faut que tu ajoute la colonne "lu" ici
$ins = $bdd->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message,objet) VALUES (?,?,?,?)');
dans messages( ICI ), et un autre point d'interrogation "?"
Puis tu rajoutes dans l'exécution "0".
laurent09 Le 27 avril 2017 à 18:01 (Édité le 1 janvier 1970 à 01:00)
pour le mot de passe c'est des test que je fait pour le moment, je vais voir pour ce que tu ma dit pour le fichier inclus.
une autres question désolé mais je débute et j'apprend en même temps.
pour quoi tu ma fait mettre ceci :
try {
$bdd = new PDO('mysql:host=127.0.0.1;dbname=testinfinity', 'testinfinity', '1234');
} catch(Exception $e) {
echo 'Erreur: ', $e->getMessage(), "\n";
}
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
merci encore
Balatharas Le 27 avril 2017 à 18:08 (Édité le 1 janvier 1970 à 01:00)
une autres question désolé mais je débute et j'apprend en même tempsVoilà l'utilité du forum 😀
Le code que je t'ai donné (c'est vrai j'aurais du t'expliquer) permet d'afficher les erreurs, comme ça, par exemple essaie de mettre un nom de table qui n'existe pas dans ta requête d'insertion.
Zbuu Le 27 avril 2017 à 19:17 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 27 avril 2017 à 20:51 (Édité le 1 janvier 1970 à 01:00)
laurent09 Le 28 avril 2017 à 20:20 (Édité le 1 janvier 1970 à 01:00)
merci
Balatharas Le 28 avril 2017 à 21:37 (Édité le 28 avril 2017 à 21:39)
Tu crée un fichier .php que tu appelles par exemple: bdd.inc.php et que tu range dans un dossier appelé include, tu mets ça dedans
<?php
// ta connexion
?>
Ensuite en haut de chaque fichier et en dessous de session_start(); tu mets cecirequire 'include/bdd.inc.php';
Et normalement rien ne devrait changer a part le fait que tu n'auras pas a editer tout tes fichiers si tu change quelque chose dans ta connexion.
Si le problème responsable du topic est résolu, clique sur le bouton en haut de la page 😉
laurent09 Le 28 avril 2017 à 21:43 (Édité le 1 janvier 1970 à 01:00)