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.

Généré automatiquement par IA
sur la base des meilleures réponses
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
 
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
Zakarya93 Messages postés 1026 Statut Membre 10
 
Requete : 4 paramètres
params : 2 paramètres
0
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
 
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
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
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > 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
Zakarya93 Messages postés 1026 Statut Membre 10
 
  $params = array('get_pseudo' => $pseudo_dest);

comme ceci ?
0
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
 
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
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
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
 
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
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
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Zakarya93 Messages postés 1026 Statut Membre
 
Change dans le IF
 if($pseudo_get){
0
Zakarya93 Messages postés 1026 Statut Membre 10
 
j'ai mtn un Array ( ) qui s'affiche
0
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
 
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
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
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > 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
Zakarya93 Messages postés 1026 Statut Membre 10
 
pas d'erreurs mais j'obtiens : Erreur .. aucun pseudo ! Array ( [page] => invitations ) Array ( )
0
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > 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
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
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
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
 
Tu peux nous dire ce que donne :
SELECT *
FROM amis
 WHERE pseudo_dest = 'xzak47'
0
Zakarya93 Messages postés 1026 Statut Membre 10 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
 
MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0000 sec)
0
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
 
.... 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
Zakarya93 Messages postés 1026 Statut Membre 10 > jordane45 Messages postés 30426 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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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