Problème d'invitation et function recup_invitation

Résolu
Zakarya93 Messages postés 1026 Statut Membre -  
Zakarya93 Messages postés 1026 Statut Membre -
Bonjour,

1/ Quand je me connecte sur mon site avec le compte xzak47 qui recoit l'invitation, normalement il devrait y avoir sur le profil de l'émetteur (jean) : Demande en cours, verifiez vos invitations / quand il clique sur le profil qui lui a envoyé la demande

voici mon code :
<?php
//-----------------------------
 //Profile.php 
//-----------------------------

include_once('body/header.php');
include_once('body/menu.php');

$pseudo = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
$arr_infos = recuperer_info_membre_choisi($pseudo);
$accepter_demande = accepter_demande();
$demande_existe = demande_existe();
$verifier_expediteur = verifier_expediteur();

// Le temps des tests :
echo "<div id='debug'>
            <br>accepter_demande => ".$accepter_demande."
            <br>demande_existe => ".$demande_existe."
            <br>verifier_expediteur => ".$verifier_expediteur."
           </div>";


echo "<div class='info'>";

 if(count($arr_infos)>0 && $pseudo != $_SESSION['pseudo']){

  foreach($arr_infos as $R) {
  if($demande_existe == 0){
     echo "<div class='error'>
           Vous n'êtes pas ami(e) avec ".$R['pseudo']."<br />
          <a href='index.php?page=envoi&pseudo=".$R['pseudo']."'>Envoyer une invitation</a>
        </div>";  
    }else if( $accepter_demande == 0 && $verifier_expediteur == 1){    
     echo "<div class='success'>Demande envoyée 
     <a href='index.php?page=annuler&pseudo=".$R['pseudo']."'>Annuler la demande</a></div>";   
   }else if($accepter_demande == 0 && $verifier_expediteur == 0){
        echo "<div class='success'>Demande en cours<br />
      Verifiez vos invitations
      </div>";     
     }
     echo"<img src='avatar/". $R['avatar']."' height='200' width='200' alt='avatar'>";
     echo "<p><strong>Email : </strong><em>".$R['email']."</em></p>";
     echo "<p><strong>Sexe : </strong><em>".$R['sexe']."</em></p>";
     echo "<p><strong>A propos de vous : </strong><em>".$R['apropos']."</em></p>";
  }//fin du foreach  
 }else{
  header("Location:index.php?page=membre"); 
 }
 echo "</div>";
?>


2/ Sachant que le script mysql_ de ma function recup_invitation est :
<?php
//la functions va recuperer les invitations
 
function recup_invitations()
{
     
$query = mysql_query("SELECT pseudo_exp,date_invitation,active,avatar
FROM amis
INNER JOIN users ON users.pseudo=amis.pseudo_exp
WHERE pseudo_dest='{$_SESSION['pseudo']}'
ORDER BY date_invitation DESC
");
$results=array();
while($row=mysql_fetch_assoc($query))
{
$results[]=$row;
}
return $results;
 
}
?>


pouvez-vous corrigé le code que j'ai fais ?

<?php
//la function qui va recuperer les invitations
function recup_invitations() {
global $bdd;

  //récupération des variables PROPREMENT !
  $pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
  $pseudo_dest = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;

 $result= array();
 if($pseudo_exp && $pseudo_dest){
  $sql = "SELECT pseudo_exp,date_invitation,active,avatar
         FROM amis
   INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
        WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)
            OR  (pseudo_exp = :get_pseudo AND pseudo_dest = :session_pseudo)";

  // je place les  params dans une variable avant de l'utiliser :
  $params = array('session_pseudo' => $pseudo_exp , 'get_pseudo' => $pseudo_dest);
  
  $query = $bdd->prepare($sql);
  $query ->execute($params);  
  $requete = $query->fetchall();
 }
 // le return
 return $result;
}


Merci d'avance :)

5 réponses

Résumé de la discussion

Un utilisateur cherche à afficher le statut des invitations lors de la connexion et à corriger la récupération des invitations dans la base via PHP et MySQL. Des réponses techniques indiquent que la requête échoue principalement à cause du nom de table incorrect (amis vs utilisateurs) et d'un mauvais alignement entre les paramètres liés et les placeholders. Pour corriger, harmoniser les noms de tables avec la base et faire correspondre les placeholders et les paramètres liés, en utilisant une requête préparée correctement et de manière sécurisée. Plusieurs échanges soulignent qu'un copier-coller incorrect a conduit à des appels sur des tables erronées et recommandent de tester directement les requêtes pour diagnostiquer et identifier rapidement les causes.

Bobot (l'IA à votre service)
  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Dans ta requête ...
      $sql = "SELECT pseudo_exp,date_invitation,active,avatar
             FROM amis
    		 INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
             WHERE (pseudo_dest = :get_pseudo)";	
    

    Tu y as combien de paramètres ??

    Et dans le params.... tu en as combien ?
      $params = array('session_pseudo' => $pseudo_exp , 'get_pseudo' => $pseudo_dest);
      
    


    ... à ton avis... est-ce bon ?

    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Requete : 4 paramètres
      params : 2 paramètres
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      params : 2 => Oui
      Requête 4 ????

      Combien de variable avec les ":" ?
      Il n'y a que :get_pseudo
      ...
      Quoi qu'il en soit ... le nombre doit être identique entre la requête et le params...
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      C'est mieux comme ça ?
      $sql = "SELECT pseudo_exp,date_invitation,active,avatar
               FROM amis
         INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
              WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)
                  OR  (pseudo_exp = :get_pseudo AND pseudo_dest = :session_pseudo)";
      
      0
    4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > Zakarya93 Messages postés 1026 Statut Membre
       
      Je ne pense pas que le souci venait de la requête ........ mais plutôt du $params....
      0
    5. Zakarya93 Messages postés 1026 Statut Membre 10
       
        $params = array('get_pseudo' => $pseudo_dest);

      comme ceci ?
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Donc... le code devrait donner :
    <?php
    //la function qui va recuperer les invitations
    function recup_invitations() {
    global $bdd;
    
      //récupération des variables PROPREMENT !
      $pseudo_get= isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
    
     $result= array();
     if($pseudo_exp && $pseudo_dest){
      $sql = "SELECT pseudo_exp
                          ,date_invitation
                          ,active
                          ,avatar
                FROM amis
    	    INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
                WHERE pseudo_dest = :get_pseudo";
    
      // je place les  params dans une variable avant de l'utiliser :
      $params = array(':get_pseudo' => $pseudo_get);
      
      $query = $bdd->prepare($sql);
      $query ->execute($params);  
      $requete = $query->fetchall();
     }
     // le return
     return $result;
    }
    
    


    Après... que doit retournée cette fonction ?
    un booleen ( 1 ou 0 )
    ou bien .. un tableau contenant toutes les données de la BDD corresponds à la requête ?

    Si c'est un booleen que tu veux... il faut modifier le return ainsi
    return count($result)>0?1:0;
    


    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      je devrais avoir un array avec les données de l'utilisateur qui envoie la demande (j'ai fais un print sur annuler.php)

      j'obtiens ça sinon : Notice: Undefined variable: pseudo_exp in C:\wamp\www\rs\functions\invitations.func.php on line 10
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      oupsss...

      <?php
      //la function qui va recuperer les invitations
      function recup_invitations() {
      global $bdd;
      
        //récupération des variables PROPREMENT !
        $pseudo_get= isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
      
       $result= array();
       if($pseudo_get){
        $sql = "SELECT pseudo_exp
                            ,date_invitation
                            ,active
                            ,avatar
                  FROM amis
           INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
                  WHERE pseudo_dest = :get_pseudo";
      
        // je place les  params dans une variable avant de l'utiliser :
        $params = array(':get_pseudo' => $pseudo_get);
        
        $query = $bdd->prepare($sql);
        $query ->execute($params);  
        $requete = $query->fetchall();
       }
       // le return
       return $result;
      }
      
      
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      j'obtiens toujours : Notice: Undefined variable: pseudo_dest in C:\wamp\www\rs\functions\invitations.func.php on line 10

      avec un Array()
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > Zakarya93 Messages postés 1026 Statut Membre
         
        Change dans le IF
         if($pseudo_get){
        
        0
    4. Zakarya93 Messages postés 1026 Statut Membre 10
       
      j'ai mtn un Array ( ) qui s'affiche
      0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Tu obtiens quoi dans phpmyadmin si tu lances la requête
    SELECT pseudo_exp
                          ,date_invitation
                          ,active
                          ,avatar
                FROM amis
         INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
                WHERE pseudo_dest = 'jean'
    


    et avec

    SELECT pseudo_exp
                          ,date_invitation
                          ,active
                          ,avatar
                FROM amis
         INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
                WHERE pseudo_dest = 'xzak47'
    


    Et aussi .. que donnes ce code ?

    
    /la function qui va recuperer les invitations
    function recup_invitations() {
    global $bdd;
    
      //récupération des variables PROPREMENT !
      $pseudo_get= isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
    
     $result= array();
     if($pseudo_get){
      $sql = "SELECT pseudo_exp
                          ,date_invitation
                          ,active
                          ,avatar
                FROM amis
         INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
                WHERE pseudo_dest = :get_pseudo";
    
      // je place les  params dans une variable avant de l'utiliser :
      $params = array(':get_pseudo' => $pseudo_get);
      
      $query = $bdd->prepare($sql);
      $query ->execute($params);  
      $requete = $query->fetchall();
     }
    
    // pour les tests :
    echo "<br> PARAMS :<br>";
    print_r($params);
    
     // le return
     return $result;
    }
    


    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      le code me donne : Notice: Undefined variable: params in C:\wamp\www\rs\functions\invitations.func.php on line 29 avec un params et un array qui s'affichent

      pour la première requete 1/ : MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0200 sec)

      respectivement, la 2/ : MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0010 sec)
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > Zakarya93 Messages postés 1026 Statut Membre
       
      Visiblement;.. tu n'as rien dans la variable GET ...
      testes ça :
      function recup_invitations() {
      global $bdd;
      
        //récupération des variables PROPREMENT !
        $pseudo_get= isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
        
       $result= array();
       if($pseudo_get){
        $sql = "SELECT pseudo_exp
                            ,date_invitation
                            ,active
                            ,avatar
                  FROM amis
           INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
                  WHERE pseudo_dest = :get_pseudo";
      
        // je place les  params dans une variable avant de l'utiliser :
        $params = array(':get_pseudo' => $pseudo_get);
        
        // pour les tests :
        echo "<br> PARAMS :<br>";
        print_r($params);
      
        $query = $bdd->prepare($sql);
        $query ->execute($params);  
        $requete = $query->fetchall();
       }else{
         echo "<br> Erreur .. aucun pseudo ! ";
         print_r($_GET);
      }
       // le return
       return $result;
      }
      
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      pas d'erreurs mais j'obtiens : Erreur .. aucun pseudo ! Array ( [page] => invitations ) Array ( )
      0
    4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > Zakarya93 Messages postés 1026 Statut Membre
       
      C'est un souci de requête ET de variable ...
      En fait .. c'est par rapport à la variable en SESSION que tu veux récupérer les infos ... donc:
      function recup_invitations() {
      global $bdd;
      
        //récupération des variables PROPREMENT !
        $pseudo_dest= isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
        
       $result= array();
       if($pseudo_dest){
        $sql = "SELECT pseudo_exp
                            ,date_invitation
                            ,active
                            ,avatar
                  FROM amis
                INNER JOIN utilisateurs ON utilisateurs.pseudo = amis.pseudo_exp
                  WHERE pseudo_dest = :session_pseudo";
      
        // je place les  params dans une variable avant de l'utiliser :
        $params = array(':session_pseudo' => $pseudo_dest);
        
        // pour les tests :
        echo "<br> PARAMS :<br>";
        print_r($params);
      
        $query = $bdd->prepare($sql);
        $query ->execute($params);  
        $requete = $query->fetchall();
       }else{
         echo "<br> Erreur .. aucun pseudo ! ";
      }
       // le return
       return $result;
      }
      
      
      0
    5. Zakarya93 Messages postés 1026 Statut Membre 10
       
      j'obtiens :
      PARAMS :
      Array ( [:session_pseudo] => xzak47 ) Array ( )

      or je devrais avoir les données du profil :/
      0
  4. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Ah oui dans la requete ! j'obtiens : MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0170 sec)
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Tu peux nous dire ce que donne :
      SELECT *
      FROM amis
       WHERE pseudo_dest = 'xzak47'
      
      0
    2. Zakarya93 Messages postés 1026 Statut Membre 10 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0000 sec)
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      .... zak a reçu une invitation au moins ????
      Ne te tromperais tu pas avec jean ???

      essayes avec jean pour voir
      SELECT *
      FROM amis
       WHERE pseudo_dest = 'jean'
      
      0
    4. Zakarya93 Messages postés 1026 Statut Membre 10 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      j'ai : MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0010 sec)
      Oui c'est zak qui a recu
      0
    5. hharchi9 Messages postés 693 Statut Membre 24
       
      L'enregistrement de la demande est-il bien présent dans la base de données ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Zakarya93 Messages postés 1026 Statut Membre 10
     
    MERCI A VOUS 2 :D
    0