CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

PHP : variable dans requête en PDO, pfff

Cisla57
Cisla57
Niveau 10
29 juillet 2014 à 21:30:26

Bonsoir à tous.

J'apprends le PHP le soir, avec un mal de chien. J'ai jamais fait de programmation et je me fais vraiment du mal pour tenter d'avoir un minimum de base.

Evidemment, comme je n'ai aucun autre moyen, j'apprends par le site du Zéro, mais certains cours sont difficiles à comprendre (ou peut-être que je vise trop haut d'un coup).
Le soucis c'est que pas mal de leurs tutos sont périmés. La raison : l'imposition du PDO comme unique moyen de contacter la base de données.

Bref.

Je suis actuellement le cours sur l'inscription de membres sur un site et la validation de ceux-ci par l'administrateur.
Avec beaucoup de mal, j'ai réussi à faire entrer les informations des inscrits dans la base de données (ben oui, quand on a un niveau zéro, traduire du mysql_query en PDO, c'est super difficile, du pur hasard même, faut s'accrocher).

Cependant, je bloque à la page de validation.
Il doit y avoir un problème avec mes requêtes, qui contiennent une variable.
En clair, ma requête sélectionne l'id du pseudo qui est dans mon lien en GET.

La version du site du Zéro est :

$id = $_GET['id'];
$quete2 = mysql_query("SELECT * FROM validation WHERE id='$id'");

Ma version qui ne fonctionne pas :

$id = $_GET['id'];
$requete2 = $pdo->prepare("SELECT * FROM validation WHERE id < :id"); 
$requete2->bindParam(':id', $id, PDO::PARAM_STR);
$requete2->execute();

Je suis désespéré. Si quelqu'un peut m'aider...

lisarael
lisarael
Niveau 13
29 juillet 2014 à 21:37:23

Je ne fais plus suffisamment de PHP pour te dire s'il y a une erreur dans ton code PHP, mais dans ta requête MySQL, tu as remplacé le "=" par un "<".
Ça n'a pas du tout la même valeur, en toute logique.

Cisla57
Cisla57
Niveau 10
29 juillet 2014 à 21:47:17

En effet, merci pour ta réponse rapide.

j'ai modif pour ceci :

$id = $_GET['id'];
$requete2 = $pdo->prepare("SELECT * FROM validation WHERE id = :id"); // je récupère l'id qui est dans le lien sur lequel je suis
$requete2->bindParam(':id', $id, PDO::PARAM_STR);
$requete2->execute();

Mais toujours rien ne fonctionne.

Et je sais pas pourquoi j'ai aucun message d'erreur. C'est dû au PDO?

vava740
vava740
Niveau 10
29 juillet 2014 à 21:52:07

Tu fais quoi avec $requete2 après ?

Cisla57
Cisla57
Niveau 10
29 juillet 2014 à 22:03:56

Je poste toute la suite du code tant que j'y suis :

$id = $_GET['id'];
$requete2 = $pdo->prepare("SELECT * FROM validation WHERE id = :id"); // je récupère l'id qui est dans le lien sur lequel je suis
$requete2->bindParam(':id', $id, PDO::PARAM_STR);
$requete2->execute();

while($connexion = $requete2->fetch())
{
$pseudo = $connexion['pseudo'];
$passe = $connexion['passe'];
$email = $connexion['email'];

$requete3 = $pdo->prepare("INSERT INTO connexion VALUES(:id, :pseu, :pass, :mail)"); // j'insère dans la table connexion les membres acceptés (les données qui étaient dans la table validation)
$requete3->execute(array(
':id' => $id,
':pseu' => $pseudo,
':pass' => $password,
':mail' => $email,
));
}

$requete4 = $pdo->prepare("DELETE FROM validation WHERE id = :id"); // et je supprime les données de la table validation
$requete4->bindParam(':id', $id, PDO::PARAM_STR);
$requete4->execute();
}
elseif($action == "refuser")
{
$id = $_GET['id'];
$requete5 = $pdo->prepare("DELETE FROM validation WHERE id = :id"); //si je refuse, je supprime le compte de la table validation
$requete5->bindParam(':id', $id, PDO::PARAM_STR);
$requete5->execute();
}

}

else {
echo 'erreur';
}
?>

trymort
trymort
Niveau 9
30 juillet 2014 à 03:04:50

pas que je sois un expert mais dans ta requet "WHERE id= :id" je vois pas ce qu'est ":id" tu voulais pas mettre $id ? si c'est ca pense bien a concatener la chaine

vava740
vava740
Niveau 10
30 juillet 2014 à 09:24:41

trymort : C'est une requête préparée avec PDO, le `:id` sera substitué et échappé par la suite avec la valeur du `bindParam`.

Cisla57 : Tu ne sembles pas traiter les erreurs, à moins que ton PDO soit configuré pour lancer des exceptions. Que retourne `$requete2->execute()` ?

Tu peux aussi faire un `var_dump($requete2->fetchAll())` après le `execute`, ça te permettra de voir directement ce qui a été retourné.

Pseudo supprimé
Pseudo supprimé 31 juillet 2014 à 10:13:13

$requete5->bindParam(':id', $id, PDO::PARAM_STR); ???????

PARAM_STR c'est pour dire que le paramètre donné est de type string...

Après je ne connais pas ton code, mais es-tu sûr que ton paramètre est un string car en général un id est un int donc je serais plus en clin a faire

$requete5->bindParam(':id', $id, PDO::PARAM_INT);
OU
$requete5->bindParam(':id', $id);

car Pdo est censé associé es bon types de données :)

Cisla57
Cisla57
Niveau 10
31 juillet 2014 à 20:58:31

Oui j'ai vu mon erreur après coup, j'ai remplacé tous les PARAM_STR par PARAM_INT lorsqu'il y avait un id en jeu, mais ça ne change toujours rien malheureusement.

NPIay
NPIay
Niveau 12
01 août 2014 à 07:30:59

Yop, pour commencer ce serait pratique si tu pouvais nous donner un lien vers le tuto que tu essaies de suivre.
De mémoire plusieurs tutos là-bas ne marchent pas pour diverses raisons, donc on pourrait voir si le problème vient du passage à PDO ou au tuto en entier. :oui:

Ensuite, PDO n'est pas obligatoire pour se connecter à une base de données, loin de là. Par contre c'est effectivement le moyen le plus simple et actuellement recommandé par tous. :oui:

Je te conseillerais de changer tous tes bindParam en bindValue, sans rentrer dans les détails cela évitera que tes variables soient modifiées lors d'un appel à PDO (un cast inattendu par exemple).

Enfin, je demanderais bien à voir le code source en entier ( :d) avec tes identifiants de connexion censurés :g) ), parce que dans le code posté plus haut ça n'a aucune raison d'échouer, et comme je vois un else plus bas qui n'est associé à aucun if plus haut, je me dis que tu n'entres peut-être jamais dans le if initial. :noel:

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment