Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: Personne...
Auteur Sujet: Probléme PDO

Smveee

Messages: 13

Jai un autre problème, lorsque j'envoie mon message, cette erreur PDO apparait : 

[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
Publicité

julienb

Messages: 34

Salut,
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

Messages: 13

Merci ça marche ! Grand sourire

Smveee

Messages: 13

Une autre question, dans le tuto pour envoyer des messages, il affiche le pseudo de la personne avant le "a envoyé" mais comment faire si je veux afficher le nom + prénom ? Je sais que ça se fais ici : 
        <?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

Messages: 34

Tu fais une requète sql qui récupère le nom et le prénom. En utilisant fetch, ça devient tableau exploitable ensuite tu utilises un echo + la concaténation php pour afficher nom + prenom, ça donne quelquechose de ce style:
echo "Nom :".$tab['nom']." Prenom :".$tab['prenom'];

Smveee

Messages: 13

ça donne ça pour la requête ? : 
  $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

Messages: 34

Si tu veux la totalité des utilisateurs c'est bon oui. Ensuire echo $user['nom'].$user['prenom'] et c'est bon

Smveee

Messages: 13

Je ne sais pas si tu as vue le tuto de prim sur les messages, mais lui fais ça avec les pseudos, mais moi j'aimerai faire ça avec le nom + prénom, du coup grâce à cette technique, ça fais bien ceci ? 
<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

Smveee

Messages: 13

UP

Nobodief

Messages: 73

Salut, pour faire une concaténation il faut utiliser le même type de guillemet et en plus tu n'as pas besoin d'utiliser un ; voici ton code erroné :
<?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

Messages: 34

J'ai toujours mis des " pour les concaténations dans les echo mais ça revient peut-être à la même chose.

Nobodief

Messages: 73

Oui c'est la même chose avec les guillemets cela donnerais :
<?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

Messages: 13

J'ai un peu changé le code depuis, du coup je ne sais plus où le mettre (je suis un boulet oui)

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

Messages: 13

Je ne peux pas éditer mon message précédent je ne sais pas pourquoi, je voulais rajouter ça : 

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

Nobodief

Messages: 73

Et bien non, je en vois pas pourquoi tu as mis $p_exp = $p_exp['email']; cela te retourne "null", puisque dans ta requête tu récupère uniquement le nom et prenom.

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

Messages: 13

J'ai pas très bien compris pour la 2eme partie de ton code, je dois les mettre où ? (pour ce qui est de la requête SQL, j'ai compris ^^)

Florian

Messages: 73

L'erreur est tout simplement, tu demandes l'email alors que dans le select tu lui demande pas alors remplace par ça 
$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

Messages: 13

Oui, mais je veux les nom et prenoms, du coup 'jai fais ça : 
  $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

Messages: 73

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

Messages: 13

ça marche ! Mais en bas de ceci, j'ai un bouton normalement pour répondre et ça m'affiche ça : http://puu.sh/optCC/ac9b9ac547.png

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');
}
?>

Smveee

Messages: 13

UP :(


Veuillez vous connecter ou créer un compte pour poster une réponse