Function verifier_expediteur() en pdo
Résolu
Bonjour,
Sachant que le code mysql_ que je dois convertir est :
C'est bon si j'ai fais :
Merci d'avance :)
Sachant que le code mysql_ que je dois convertir est :
//la function qui va vérifier si le membre connecté est l'expediteur
function verifier_expediteur()
{
$query = mysql_query(""
SELECT COUNT(id_invitations) FROM amis WHERE (pseudo_exp = '{$_SESSION['pseudo']}' AND pseudo_dest = '{$_GET['pseudo']}'
");
return mysql_result($query,0);
}
C'est bon si j'ai fais :
?>
//la function qui va vérifier si le membre connecté est l'expediteur
function verifier_expediteur()
{
global $bdd;
//récupération des variables PROPREMENT !
$id_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
$id_dest = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
$sql = "SELECT active FROM amis
FROM amis
WHERE (id_exp = :session_pseudo AND id_dest = :get_pseudo)
OR (id_ dest = :get_pseudo AND id_dest = :session_pseudo)";
// je place les params dans une variable avant de l'utiliser :
$params = array('get_pseudo' => $id_exp , 'session_pseudo' => $id_dest) ;
$query = $bdd->prepare($sql);
$query ->execute($params);
$result = $query->fetchall();
//On récupère le contenu de la colonne 'active'
$active = isset($result) && count($result)>0 ? $result[0]['active'] : 0;
// le return :
// si active == 0 on retourne false .. sinon true :
return $active == 0 ? false : true ;
}
Merci d'avance :)
31 réponses
Résumé de la discussion
Pour convertir une fonction PHP utilisant mysql_ en PDO, la problématique porte sur vérifier si l'expéditeur d'une invitation est l'utilisateur connecté et autorisé. Des paramètres PDO sont utilisés :session_pseudo et :get_pseudo, et COUNT(id_invitations) est renvoyé sous l'alias NB, ce qui permet une vérification simple et scalable. En cas de récupération, fetchAll fournit le tableau, NB est extrait et le code retourne ce nombre, tout en protégeant les variables et en évitant les injections. En pratique, la correction finale montre que le COUNT est nommé NB et que le retour s'effectue via $requete[0]['NB'], fournissant une valeur entière utilisable par d'autres contrôles.
-
Modérateur
quand je me connecte sur l'autre compte qui recoit l'invitation, normalement il devrait avec : Demande en cours, verifiez vos invitations / quand il clique sur le profil qui lui a envoyé la demande
La discussion devient difficile à suivre ... il y a du code partout .. c'est le "bordel"...
bref .. ta question initiale (pour cette discussion là .. ) est résolue...
merci donc de clore ce topic .. et d'ouvrir une nouvelle discussion pour ce nouveau souci.
(penses à nous y mettre les codes nécéssaires )
-
-
Modérateur@Zakarya93peu importe la taille du souci....
Merci d'ouvrir une nouvelle discussion..... spécifique à ce "nouveau" problème. -
-
-
ModérateurParfait.
Alors ajoutons un peu de debug dans ta fonction pour voir ce qui ne fonctionne pas
J'ai également modifié la requête en y retirant le COUNT...
Dis moi ce que ça donne.
//la function qui va vérifier si le membre connecté est l'expediteur function verifier_expediteur(){ global $bdd; //récupération des variables PROPREMENT ! $pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL; $pseudo_dest = isset($_GET['pseudo'])?$_GET['pseudo']:NULL; //pour les tests: echo "<br>pseudo_exp : ".$pseudo_exp ; echo "<br>pseudo_dest : ".$pseudo_dest ; $result=0; if($pseudo_exp && $pseudo_dest){ $sql = "SELECT id_invitations FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_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(); echo "<br><br> resultat de la requete:<br>"; print_r($requete); $result= (count($requete)>0)?1:0; echo "<br> Result :".$result; }else{ echo "<br><b>ERREUR ! <br>Une erreur est survenue lors de la récupération des variables !<br>"; echo "<br>pseudo_exp : ".$pseudo_exp ; echo "<br>pseudo_dest : ".$pseudo_dest ; } // FIN DU IF !! // return return $result; }//fin de la fonction
Cordialement,
Jordane-
-
-
-
-
ah oui ! bingo !
du coup j'ai :
pseudo_exp : jean
pseudo_dest : xzak47
resultat de la requete:
Array ( [0] => Array ( [id_invitation] => 40 [0] => 40 ) )
Result :1
accepter_demande => 0
demande_existe => 1
verifier_expediteur => 1
et le annuler demande qui apparait :) mais quand je clique sur annuler j'ai :
Parse error: syntax error, unexpected 'global' (T_GLOBAL), expecting '{' in C:\wamp\www\rs\functions\annuler.func.php on line 4
<?php //la function qui va supprimer l'invitation function supprimer_invitation() 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=0; if($pseudo_exp && $pseudo_dest){ $sql = "DELETE FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_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; }
-
-
Modérateur
dans ma bdd oui visiblement mais niveau rendement j'ai pas encore ce que je veux (à savoir le "annuler demande" et j'ai tjr le "demande en cours" pour les 2 comptes existants alors que la demande avait été faite par un des 2
.... ton bouton "annuler" .. n'apparait QUE si c'est l'utilisateur qui a fait la demande est celui qui affiche la page.
Par contre... es-tu sûr que dans ta BDD tu as bien la demande d'enregistrée ? Il faut commencer par vérifier ça.
-
-
Modérateur@Zakarya93Ok et donc là. . Tu es connecté avec quel pseudo sur ton site ?
-
-
-
Regardez ici à la fin de la vidéo : https://www.youtube.com/watch?v=OgW_uzBqgfo
-
-
@jordane45ah pas de soucis :)
dans ma bdd oui visiblement mais niveau rendement j'ai pas encore ce que je veux (à savoir le "annuler demande" et j'ai tjr le "demande en cours" pour les 2 comptes existants alors que la demande avait été faite par un des 2 -
@jordane45je suis bloqué depuis 3 jours svp :/
-
-
Pas de soucis!
J'ai un "Array ()" qui s'affiche avec en dessous cette erreur : Notice: Array to string conversion in C:\wamp\www\rs\pages\profile.php on line 19
et juste en dessous :
accepter_demande => 0
demande_existe => 1
verifier_expediteur => Array-
ModérateurTu as pris le code modifié ?
//la function qui va vérifier si le membre connecté est l'expediteur function verifier_expediteur(){ 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=0; if($pseudo_exp && $pseudo_dest){ $sql = "SELECT COUNT(id_invitations) as NB FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_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(); $result= (count($requete)>0)?$requete[0]['NB']:0; // le temps des tests : print_r($requete); } // FIN DU IF !! // return return $result; } // FIN DE LA FONCTION .. A NE PAS OUBLIER ! -
@jordane45Ah je n'ai pas vu que vous l'avez remodifié ^^
du coup j'ai ça qui s'affiche :
Array ( )
accepter_demande => 0
demande_existe => 1
verifier_expediteur => 0 -
Modérateur@Zakarya93Cela signifie que ta requête ne retourne aucun résultat !
Donc... soit ta requête est fausse ... soit c'est normal .. mais ça .. c'est à toi de le savoir ! -
@jordane45Y a t-il des erreurs dans mon code ?
//la function qui va vérifier si le membre connecté est l'expediteur function verifier_expediteur(){ 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=0; if($pseudo_exp && $pseudo_dest){ $sql = "SELECT COUNT(id_invitations) as NB FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_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(); $result= (count($requete)>0)?$requete[0]['NB']:0; } // FIN DU IF !! // return return $result; }
-
-
-
J'ai : Parse error: syntax error, unexpected end of file in C:\wamp\www\rs\functions\profile.func.php on line 98
<?php //----------------------------- //Profile.func.php //----------------------------- // la fonction qui va recuperer les informations de la personne choisie par l'utilisateur function recuperer_info_membre_choisi($pseudo = NULL) { global $bdd; // déclaration globale de BDD $result = array(); $sql = "SELECT * FROM utilisateurs WHERE pseudo=:pseudo" ; $query = $bdd->prepare($sql); $query->execute(array(':pseudo' =>$pseudo)); $result=$query->fetchall(); return $result; } //la function qui va vérifier si une demande existe entre les deux membres function demande_existe() { global $bdd; // déclaration globale de BDD //récupération des variables PROPREMENT ! $pseudoSession = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL; $pseudoGet = isset($_GET['pseudo'])?$_GET['pseudo']:NULL; // je mets la requête dans une variable AVANT de l'utiliser // PS : j'ai ajouté un ALIAS (COUNT(id_invitation) as NB) afin de pouvoir plus facilement // utiliser le résultat de la requête... $sql = "SELECT COUNT(id_invitation) as NB FROM amis 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('get_pseudo' => $pseudoGet, 'session_pseudo' => $pseudoSession) ; $query = $bdd->prepare($sql); $query ->execute($params); $result = $query->fetchall(); //on récupère le NB de ta requête... $nb = $result[0]['NB']; //On fait un RETURN pour envoyer le résultat vers ton code... return $nb; } //la function qui va verifier si le destinataire a accepté la demande function accepter_demande(){ global $bdd; //récupération des variables PROPREMENT ! $pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL; $pseudo_dest = isset($_GET['pseudo'])?$_GET['pseudo']:NULL; $sql = "SELECT active FROM amis FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo) OR (pseudo_ dest = :get_pseudo AND pseudo_dest = :session_pseudo)"; // je place les params dans une variable avant de l'utiliser : $params = array('get_pseudo' => $pseudo_exp , 'session_pseudo' => $pseudo_dest) ; $query = $bdd->prepare($sql); $query ->execute($params); $result = $query->fetchall(); //On récupère le contenu de la colonne 'active' $active = isset($result) && count($result)>0 ? $result[0]['active'] : 0; // le return : // si active == 0 on retourne false .. sinon true : return $active == 0 ? 0 : 1 ; } //la function qui va vérifier si le membre connecté est l'expediteur function verifier_expediteur(){ 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=0; if($pseudo_exp && $pseudo_dest){ $sql = "SELECT COUNT(id_invitations) as NB FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_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(); return print_r($requete);-
Modérateur
//la function qui va vérifier si le membre connecté est l'expediteur function verifier_expediteur(){ 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=0; if($pseudo_exp && $pseudo_dest){ $sql = "SELECT COUNT(id_invitations) as NB FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_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(); $result= (count($requete)>0)?$requete[0]['NB']:0; // le temps des tests : print_r($requete); } // FIN DU IF !! // return return $result; } // FIN DE LA FONCTION .. A NE PAS OUBLIER !
-
-
Correction :
$sql = "DELETE FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)"; // je place les params dans une variable avant de l'utiliser : $params = array('session_pseudo' => $pseudo_exp , 'get_pseudo' => $pseudo_dest) ;
?-
-
@jordane45Sinon par de problème pour le reste?
-
Modérateur@Zakarya93Tu n'as qu'à tester pour voir si ça marche ou non.....
-
@jordane45J'ai toujours le même soucis, en plus j'ai Demande en cours
Verifiez vos invitations pour les 2 comptes... -
Modérateur@Zakarya93Je te rappel que dans tes IF .. la condition pour voir ton lien c'est :
$accepter_demande == 0 && $verifier_expediteur == 1
....
Donc... en l'état .. que te retournent tes variables ?
-
-
les variables sont pseudo_exp et pseudo_dest ?
Ah je vois ! tout à été inversé dans le $params c'est bien ça ? -
Pour ma function qui va supprimer l'invitation (la demande) justement, sachant que son mysl_ est :
<?php //la function qui va supprimer l'invitation function supprimer_invitation() { mysql_query("" DELETE FROM amis WHERE pseudo_exp='{$_SESSION['pseudo']}' AND pseudo_dest='{$_GET['pseudo']}' ""); } ?>
C'est bon si je mets :<?php //la function qui va supprimer l'invitation function supprimer_invitation() 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=0; if($pseudo_exp && $pseudo_dest){ $sql = "DELETE FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)"; // je place les params dans une variable avant de l'utiliser : $params = array('get_pseudo' => $pseudo_exp , 'session_pseudo' => $pseudo_dest) ; $query = $bdd->prepare($sql); $query ->execute($params); $requete = $query->fetchall(); } // le return return $result; }
?-
Modérateur.... ne vois tu pas une erreur quant au noms des variables ?
Une différence entre ton array de params .. et les variables indiquées dans la requête ?
Dans ce code :$sql = "DELETE FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)"; // je place les params dans une variable avant de l'utiliser : $params = array('get_pseudo' => $pseudo_exp , 'session_pseudo' => $pseudo_dest) ;
....
Quelles sont les variables indiquées dans le WHERE de ta requête ?
Est-ce que selon toi ... tu as les mêmes dans le $params ??
-
-
1/ Nickel ! le 0 apparait !
2/ Un "demande envoyée" avec "annuler la demande" en dessous -
Modérateur1 /
remplaces la lignereturn $active == 0 ? false : true ;
parreturn $active == 0 ? 0 : 1 ;
2/
2/ Il faut que je fasse :
}else if( $accepter_demande == 1 && $verifier_expediteur == 1){
?
Ben je ne sais pas .... ... que veux tu obtenir exactement ?
-
1/
//la function qui va verifier si le destinataire a accepté la demande function accepter_demande(){ global $bdd; //récupération des variables PROPREMENT ! $pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL; $pseudo_dest = isset($_GET['pseudo'])?$_GET['pseudo']:NULL; $sql = "SELECT active FROM amis FROM amis WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo) OR (pseudo_ dest = :get_pseudo AND pseudo_dest = :session_pseudo)"; // je place les params dans une variable avant de l'utiliser : $params = array('get_pseudo' => $pseudo_exp , 'session_pseudo' => $pseudo_dest) ; $query = $bdd->prepare($sql); $query ->execute($params); $result = $query->fetchall(); //On récupère le contenu de la colonne 'active' $active = isset($result) && count($result)>0 ? $result[0]['active'] : 0; // le return : // si active == 0 on retourne false .. sinon true : return $active == 0 ? false : true ; }
2/ Il faut que je fasse :}else if( $accepter_demande == 1 && $verifier_expediteur == 1){? -
Oui c'est bon, sauf que pour accepter_demande je dois avoir un 0 normalement
-
Modérateurla fonction accepter_demande .. elle ne retourne pas FALSE (et non pas 0 ) ?
Car là .. si rien n'apparait .. je pense que c'est pour ça.
A la limite .. remontre nous le code de ta fonction accepter_demande .
Ensuite... reprenons tes IF pour savoir si, en partant des valeurs affichées... tu dois afficher ton lien ou pas.
Donc le code de ton if est :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>"; }
To tu es dans le cas :
accepter_demande => 0
verifier_expediteur => 0
Donc .. normal que le lien "Annuler la demande" n'apparaisse pas....
-
-
UP !
J'ai ça qui s'affiche :
accepter_demande =>
demande_existe => 1
verifier_expediteur => 0-
ModérateurPourquoi "UP" ???
Tant que tu ne répondais pas à mes questions... de toutes façons on ne pouvait pas avancer ...... !!!!!
Donc... selon toi (il y n'y a que toi qui peu le savoir.. (pas nous..) ..) ... est ce que les valeurs de tes variables :
accepter_demande =>
demande_existe => 1
verifier_expediteur => 0
correspond bien à ce que tu devrais obtenir ??
=> Autrement dit... est-ce que c'est conforme à ce que tu attends .. et à ce que tu as dans ta BDD ??
-
-
ModérateurIl faut vérifier ce que retourne tes fonctions...
<?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>"; ?>
-
Faut il d'abord que je crée ma function supprimer_invitation avant de le faire apparaitre ??
-
Non, par contre j'ai "Demande en cours" pour les 2 comptes alors que l'émetteur c'est le compte "xzak47" et le recepteur est "jean"
-
C'est normal que le "Annuler invitation" ne s'affiche pas ?
<?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(); 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>"; ?> -
si je l'ai repris ^^
- 1
- 2
Suivant
