Probléme PDO
- Accueil
- Forum
- Programmation
- PHP
- Probléme PDO
Smveee Le 9 avril 2016 à 19:35 (Édité le 25 janvier 2019 à 17:50)
[url=http://puu.sh/obieQ/c3b9826ba3.png]
http://puu.sh/obieQ/c3b9826ba3.png
[/url]
La ligne 28 et 29 :
$ins = $dbh->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message) VALUES (?,?,?)');
$ins->execute(array($_SESSION['id_utilisateur'],$id_destinataire,$message));
ma table "messages" : http://puu.sh/oc4cf/e0cb837924.png
Cordialement
julienb Le 9 avril 2016 à 20:36 (Édité le 1 janvier 1970 à 01:00)
les champs dans ta table sont définis comme étant non nuls, ça veut dire qu'il est impossible d'insérer un champ dans ta table si tu ne remplis pas tous les champs à par id_message. C'est à dire :
- message
- date_envoi
- date_lecture
- id_expediteur
- id_destinataire
Hors, tu essayes de faire un INSERT avec uniquement:
- id_expediteur
- id_destinataire
- message
Il manque donc :
- date_envoi
- date_lecture
Si tu souhaites pouvoir faire un insert avec uniquement 3 valeurs, il faut définir date_envoi et date_lecture comme étant null dans ta table. C'est à dire que le champ peut ne pas être remplit.
Smveee Le 9 avril 2016 à 22:20 (Édité le 1 janvier 1970 à 01:00)
<?php
while($m = $msg->fetch()) {
$p_exp = $dbh->prepare('SELECT email FROM utilisateurs WHERE id_utilisateur = ?');
$p_exp->execute(array($m['id_expediteur']));
$p_exp = $p_exp->fetch();
$p_exp = $p_exp['email'];
?>
Mais prenom et nom sont 2 variables distinctes, comment puis-je faire ?
Cordialement
julienb Le 10 avril 2016 à 12:52 (Édité le 12 avril 2016 à 13:58)
echo "Nom :".$tab['nom']." Prenom :".$tab['prenom'];
Smveee Le 10 avril 2016 à 16:17 (Édité le 1 janvier 1970 à 01:00)
$destinataires = $dbh->query('SELECT nom,prenom FROM utilisateurs ORDER BY nom'); // Classer par ordre alphabétique tous les utilisateurs du site
$destinataires->execute(array($_SESSION['id_utilisateur']));
$user = $destinataires->fetch();
// dans le html :
<input id="icon_prefix" type="text" name="destinataire" <?php if(isset($r)) { echo 'value=" "Nom :".user['nom']." Prenom :".$user['prenom'];} ?> />
julienb Le 10 avril 2016 à 16:59 (Édité le 1 janvier 1970 à 01:00)
Smveee Le 10 avril 2016 à 17:12 (Édité le 1 janvier 1970 à 01:00)
<input id="icon_prefix" type="text" name="destinataire" <?php if(isset($r)) { echo 'value= "Nom : " .$user['nom'] . $user['prenom'];'} ?> />
Avec ceci, j'ai cette erreur : http://puu.sh/od9Mh/fc3c909b1e.png Nobodief Le 12 avril 2016 à 13:00 (Édité le 12 avril 2016 à 13:02)
<?php if(isset($r)) { echo 'value= "Nom : " .$user['nom'] . $user['prenom'];'} ?>
Voici mon code fonctionnel
<?php if(isset($r)) { echo 'value=Nom : '.$user['nom'].' '.$user['prenom'].' '; } ?>
Dans la théorie de la théorie de la logique théorique, cela fonctionne. julienb Le 12 avril 2016 à 14:02 (Édité le 1 janvier 1970 à 01:00)
Nobodief Le 12 avril 2016 à 16:33 (Édité le 12 avril 2016 à 16:33)
<?php if(isset($r)) { echo "value=Nom : ".$user['nom']." ".$user['prenom']." "; } ?>
Seulement ce que je te t'explique, c'est que tes concaténations sont mal placé regarde ton code :
<?php if(isset($r)) { echo 'value= "Nom : " .$user['nom'] . $user['prenom'];'} ?>
Smveee Le 12 avril 2016 à 19:53 (Édité le 12 avril 2016 à 19:55)
Ligne 22 : La requête SQL a l'air bonne, par contre,
J'ai ça :
<?php
session_start();
$bdd = 'mysql:host=localhost;dbname=sitesocialnetwork';
$user = 'root';
$password2 = '';
try{
$dbh = new PDO($bdd, $user,$password2, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}
catch (PDOException $e) {
echo 'Echec de la connexion : ' . $e->getMessage();
exit;
}
if(isset($_SESSION['id_utilisateur']) AND !empty($_SESSION['id_utilisateur']))
{
if(isset($_GET['id']) AND !empty($_GET['id']))
{
$id_message = intval($_GET['id']);
$msg = $dbh->prepare('SELECT * FROM messages WHERE id = ? AND id_destinataire = ?');
$msg->execute(array($_GET['id'],$_SESSION['id_utilisateur']));
$msg_nbr = $msg->rowCount();
$m = $msg->fetch();
$p_exp = $dbh->prepare('SELECT nom,prenom FROM utilisateurs WHERE id_utilisateur = ?');
$p_exp->execute(array($m['id_expediteur']));
$p_exp = $p_exp->fetch();
$p_exp = $p_exp['email'];
?>
<!DOCTYPE html>
<html>
<header>
<meta charset="utf-8" />
<title>Lecture du message #<?= $id_message ?></title>
<link href="materialize.css" rel="stylesheet" media="all" type="text/css">
<link href="footer.css" rel="stylesheet" media="all" type="text/css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</header>
<body>
<main>
<nav class ="blue darken-2">
<div class=" nav-wrapper container">
<a href="#!" class="brand-logo">TSN </a>
<ul class="right">
<li><a href="acceuil.php">Acceuil</a></li>
<li><a href="<?php echo 'profil.php?id_utilisateur='.$_SESSION['id_utilisateur']?>">Profile</a></li>
<li><a href="choixMessage.php">Messages</a></li>
<li><a href="deconnexion.php">Deconnexion</a></li>
</ul>
</div>
</nav>
<h3 align ="center"> Lecture du message #<?= $id_message ?></h3>
<div align="center">
<br><br><br><br><br><br><br><br><br><br>
<?php if($msg_nbr == 0) { echo "Erreur"; } else { ?>
<b><?= $p_exp ?></b>- vous a envoyé: <br>
<?= nl2br($m['message']) ?><br>
<?php } ?>
<br><br><br><br><br><br><br><br><br><br>
<a class="waves-effect waves-light btn" href="envoie.php?r=<?= $p_exp ?>">Répondre</a>
<a class="waves-effect waves-light btn" href="supprimer.php?id=<?= $m['id'] ?>">Supprimer</a>
</div>
</main>
<footer class ="page-footer blue darken-2">
<div class="footer-copyright">
Copyright © 2016 thesocialnetwork.com | All rights reserved
</div>
</footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/init.js"></script>
</body>
</html>
<?php
$lu = $dbh->prepare('UPDATE messages SET lu = 1 WHERE id = ?');
$lu->execute(array($m['id']));
}
}
?>
Smveee Le 12 avril 2016 à 19:58 (Édité le 1 janvier 1970 à 01:00)
Ligne 22 : La requête SQL a l'air bonne, par contre, ligne 25, je dois changer l'email par nom et prenom, je fais une concaténation ? Et ligne 53 je met ce que vous m'avez dis ?
Nobodief Le 16 avril 2016 à 02:21 (Édité le 1 janvier 1970 à 01:00)
Donc du coup essaye avec ce code :
$p_exp = $dbh->prepare('SELECT (nom, prenom, email) FROM utilisateurs WHERE id_utilisateur = ?');
$p_exp->execute(array($m['id_expediteur']));
$p_exp = $p_exp->fetch();
Et pour récupérer les valeurs :
$p_exp['nom'];
$p_exp['prenom'];
$p_exp['email'];
Smveee Le 19 avril 2016 à 18:19 (Édité le 1 janvier 1970 à 01:00)
Florian Le 19 avril 2016 à 21:45 (Édité le 19 avril 2016 à 21:50)
$p_exp = $dbh->prepare('SELECT * FROM utilisateurs WHERE id_utilisateur = ?');
$p_exp->execute(array($m['id_expediteur']));
$p_exp = $p_exp->fetch(); / ça va
$p_exp = $p_exp['email'];
Smveee Le 20 avril 2016 à 15:36 (Édité le 1 janvier 1970 à 01:00)
$p_exp = $dbh->prepare('SELECT nom,prenom FROM utilisateurs WHERE id_utilisateur = ?');
$p_exp->execute(array($m['id_expediteur']));
$p_exp = $p_exp->fetch();
$p_exp = $p_exp['email']; // sauf qu'ici je dois mettre nom et prenom a la place de l'email, mais comment ? Comme ça ? : $p_exp = $p_exp['nom']; $p_exp = $p_exp['prenom']; ???
Et Pour dire que c'est cette personne qui m'a envoyé le message, j'ai ça :
<?php if($msg_nbr == 0) { echo "Erreur"; } else { ?>
<b><?= $p_exp ?></b>- vous a envoyé: <br>
<?= nl2br($m['message']) ?><br>
<?php } ?>
Florian Le 20 avril 2016 à 17:23 (Édité le 20 avril 2016 à 17:25)
<?php
$p_exp = $dbh->prepare('SELECT nom,prenom FROM utilisateurs WHERE id_utilisateur = ?');
$p_exp->execute(array($m['id_expediteur']));
$p_exp = $p_exp->fetch();
$nom = $p_exp['nom'];
$prenom = $p_exp['prenom'];
echo ''.$nom.'-'.$prenom.' Vous a envoyé un message: <br /> '.nl2br($m['message'].'';
?>
Smveee Le 20 avril 2016 à 19:15 (Édité le 20 avril 2016 à 19:17)
La ligne 77 :
<a class="waves-effect waves-light btn" href="envoie.php?r=<?= $p_exp ?>">Répondre</a>
Donc le problème vient de envoie.php je suppose.
J'ai suivis le tuto de prim pour envoyer un message, et j'ai fais en sorte que pour choisir son destinataire, on choisit l'email. Du coup j'aimerai faire en sorte qu'on prenne le nom et le prénom à la place (je pense qu'il faut faire ça pour résoudre le problème). Il faut simplement changer les requêtes SQL où l'on prends l'email et d'y ajouter nom et prénom ?
Envoie.php :
<?php
session_start();
$bdd = 'mysql:host=localhost;dbname=sitesocialnetwork';
$user = 'root';
$password2 = '';
try{
$dbh = new PDO($bdd, $user,$password2, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}
catch (PDOException $e) {
echo 'Echec de la connexion : ' . $e->getMessage();
exit;
}
if(isset($_SESSION['id_utilisateur']) AND !empty($_SESSION['id_utilisateur']))
{
if(isset($_POST['envoi_message']))
{
if(isset($_POST['destinataire'],$_POST['message']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']))
{
$destinataire = htmlspecialchars($_POST['destinataire']);
$message = htmlspecialchars($_POST['message']);
$id_destinataire = $dbh->prepare('SELECT id_utilisateur FROM utilisateurs WHERE email = ?');
$id_destinataire->execute(array($destinataire));
$dest_exist = $id_destinataire->rowCount(); // parcous id_destinataire
if($dest_exist == 1) // si l'utisateur existe, alors
{
$id_destinataire = $id_destinataire->fetch();
$id_destinataire = $id_destinataire['id_utilisateur'];
$ins = $dbh->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message) VALUES (?,?,?)');
$ins->execute(array($_SESSION['id_utilisateur'],$id_destinataire,$message));
$erreur = "Votre message a bien été envoyé !";
}
else
{
$erreur = "Cet utilisateur n'existe pas ";
}
}
else
{
$erreur = "Veuillez completer tous les champs";
}
}
$destinataires = $dbh->query('SELECT email FROM utilisateurs ORDER BY email'); // Classer par ordre alphabétique tous les utilisateurs du site
$destinataires->execute(array($_SESSION['id_utilisateur']));
$user = $destinataires->fetch();
if(isset($_GET['r']) AND !empty($_GET['r']))
{
$r = htmlspecialchars($_GET['r']);
}
?>
<!DOCTYPE html>
<html>
<header>
<meta charset="utf-8" />
<title>Envoyer un message</title>
<link href="materialize.css" rel="stylesheet" media="all" type="text/css">
<link href="footer.css" rel="stylesheet" media="all" type="text/css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</header>
<body>
<main>
<nav class ="blue darken-2">
<div class=" nav-wrapper container">
<a href="#!" class="brand-logo">TSN </a>
<ul class="right">
<li><a href="acceuil.php">Acceuil</a></li>
<li><a href="<?php echo 'profil2.php?id_utilisateur='.$_SESSION['id_utilisateur']?>">Profile</a></li>
<li><a href="choixMessage.php">Messages</a></li>
<li><a href="deconnexion.php">Deconnexion</a></li>
</ul>
</div>
</nav>
<form method="POST" class="col s12">
<br><br>
<div class="row">
<div class="input-field col s2">
<!--<select name="destinataire" class="browser-default" >
<option value="" disabled selected>Destinataire(s)</option>
<?php while($d = $destinataires->fetch()) { ?>
<option value=""><?php echo $d['nom']; echo " "; echo $d['prenom']; ?></option>
<?php } ?> -->
<i class="material-icons prefix">account_circle</i>
<label for="icon_prefix">Destinataire</label>
<input id="icon_prefix" type="text" name="destinataire" <?php if(isset($r)) { echo 'value="'.$r.'"'; } ?>/>
</div>
</select>
</div>
</div>
<br><br>
<div class="row">
<div class="input-field col s6">
<i class="material-icons prefix">mode_edit</i>
<textarea name="message" id="icon_prefix2" class="materialize-textarea" ></textarea>
<label for="icon_prefix2">Votre message</label>
</div>
</div>
<button name ="envoi_message" class="btn waves-effect waves-light" type="submit" >Envoyer
<i class="material-icons right">send</i>
</button>
<br><br>
<?php if(isset($erreur)) { echo '<span style="color:red">'.$erreur.'</span>'; } ?>
</form>
</main>
<footer class ="page-footer blue darken-2">
<div class="footer-copyright">
Copyright © 2016 thesocialnetwork.com | All rights reserved
</div>
</footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/init.js"></script>
</body>
</html>
<?php
}
else
{
header('Location: connexion.php');
}
?>