Exposition Graphique : ZeRTy Darki et 17 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Probleme requete sql PDO avec easyphp5.3.2

 
n°3301
edgy
Profil : New Penguin
Avatar
profil
Posté le 14-07-2010 à 19:45:45  
 

Salut à tous,
Voilà j'ai cette requête dans ma page:
Code PHP:
------------
27if(isset($_GET['pass']))
28 {
29 $cherche=$bdd->query('select * from tracker where pass='.$_GET['pass'].'');
30 $affiche=$cherche->fetch();
31 $cherche->closeCursor();
...
... ?>
... (...)<?php echo $affiche['x']; ?>
 
... <?php;}
---------
Si mon $_GET['pass'] vaut un nombre,pa de probleme,le script fonctionne.
Par contre si ce dernier contient des lettres(par exp:"AB123456" ),
Un message d'erreur s'affiche:
Fatal error: Call to a member function fetch() on a non-object in E:\EasyPHP-5.3.2\www\pato\all_reservations.php on line 30 qui correspond à:$affiche=$cherche->fetch();
 
Merci bien tout en esperant avoir été assez clair.
 
 
 

answer
mood
GoogleAds
profil
Posté le 14-07-2010 à 19:45:45  
 

answer
n°3302
Narco
Voodoo child
Profil : Modo
Avatar
profil
Posté le 15-07-2010 à 09:28:42  
 

As-tu bien fait un new PDO avant ta requête? Quelque chose du style:
 

Code :
  1. <?php
  2. try
  3. {
  4.      $bdd = new PDO('mysql:host=nom_hôte;dbname=nom_base', 'login', 'pass');
  5. }
  6. catch (Exception $e)
  7. {
  8.      die('Erreur : ' . $e->getMessage());
  9. }
  10. ?>


---------------
http://img532.imageshack.us/img532/4012/ban2.png
answer
n°3304
edgy
Profil : New Penguin
Avatar
profil
Posté le 15-07-2010 à 13:36:00  
 

Oui,j'ai oublié de le mentionner,elle est en "include" en debut de code.

answer
n°3305
edgy
Profil : New Penguin
Avatar
profil
Posté le 15-07-2010 à 14:57:53  
 

Peut-tu s'il te plait m'expliquer ce message d'erreur?:
----------
Warning: include(affiche_reservations.php?pass=PE000243125) [function.include]: failed to open stream: No such file or directory in D:\EasyPHP-5.3.2\www\pato\all_reservations.php on line 26
 
Warning: include() [function.include]: Failed opening 'affiche_reservations.php?pass=PE000243125' for inclusion (include_path='.;C:\php5\pear') in D:\EasyPHP-5.3.2\www\pato\all_reservations.php on line 26
---------

answer
n°3306
Narco
Voodoo child
Profil : Modo
Avatar
profil
Posté le 15-07-2010 à 16:15:28  
 

A la ligne 26 de ton fichier all_reservations.php, tu utilises la fonction include() pour chercher le fichier "affiche_reservations.php?pass=PE000243125"... Du coup je ne pense pas que tu puisses envoyer une variable en utilisant ?pass= puisque include() attend le nom exact du fichier à inclure.
 
J'aurais écrit include(affiche_reservations.php) en trouvant un autre moyen de passer la variable contenant le mot de passe (une session PHP par exemple). De cette manière, sous réserve que affiche_reservations.php soit dans le même dossier que all_reservations.php, include fonctionnera bien ;)
 
Et aussi, fais attention aux double posts, utilise plutôt la fonction éditer! http://www.crystalxp.net/forum/themes_static/images_forum/1/edit.gif


Message édité par Narco le 15-07-2010 à 16:17:21

---------------
http://img532.imageshack.us/img532/4012/ban2.png
answer
n°3307
edgy
Profil : New Penguin
Avatar
profil
Posté le 15-07-2010 à 16:25:48  
 

Mouais c'est clair,t'as raison...sais ou j'avais la tête.Merci bien.
En ce qui concerne mon problème plus haut,j'ai toujours pas trouvé de solutions.
C'est drôle,les champs dans ma table sont de type 'VARCHAR'  pourtant le message m'indique que la variable n'existe pas(dans le cas où cette dernière contient des lettres.
 
Ca fait pas bon d'être débutant.... :(


Message édité par edgy le 15-07-2010 à 16:27:30
answer
n°3308
Narco
Voodoo child
Profil : Modo
Avatar
profil
Posté le 15-07-2010 à 16:39:20  
 

Pour l'erreur restante:
 
Le système PDO se ramène à la programmation orientée objet, et l'erreur indique que $cherche n'a pas été reconnu comme étant un objet à mon avis. Es-tu certain que ta requête SQL est correcte? Pour le vérifier, tu peux la tester sur PHPMyAdmin si c'est ce que tu utilises.
 
http://www.crystalxp.net/forum/mesimages/3292/phpmyadmn.jpg
 
(en remplaçant bien sûr password par un de tes mots de passe, par exemple PE000243125 :yes:)


Message édité par Narco le 15-07-2010 à 16:41:13

---------------
http://img532.imageshack.us/img532/4012/ban2.png
answer
n°3309
edgy
Profil : New Penguin
Avatar
profil
Posté le 16-07-2010 à 16:24:09  
 

Salut,Narco
Je t'explique.En fait ce que je veux faire est simple,peut-être pourrais-tu m'aider:
J'ai des données dans ma table que j'aimerais transmettre dans ma page à l'aide d'une requête PDO(elle donne l'impression d'être plus rapide que mysql).
Le probleme est que quand les données de ma table contiennent uniquement des chiffres,ca fonctionne mais quand elles contiennent la moindre lettre,PDO me dit que ma variable n'existe pas.
 
Entre autre,j'ai 2 ou 3 autres petits soucis:
En faisant cette boucle avec PDO:

Code :
  1. $quest=$bdd->query('SELECT * FROM tracker order by id desc');
  2. $screen=$quest->fetch();
  3. while ($screen=$quest->fetch())
  4. {
  5. echo '
  6. <tr id="band">
  7. <td id="id"><a href="all_reservations.php?pass='.$screen['pass'].'">'.$screen['id'].'</a></td><td id="name"><a href="all_reservations.php?pass='.$screen['pass'].'">'.$screen['name'].'</a></td><td id="mail"><a href="all_reservations.php?pass='.$screen['pass'].'">'.$screen['mail'].'</a></td><td id="pass"><a href="all_reservations.php?pass='.$screen['pass'].'">'.$screen['pass'].'</a></td><td id="date"><a href="all_reservations.php?pass='.$screen['pass'].'">'.$screen['date'].'|'.$view['time'].'</a></td><td id="status"><a href="all_reservations.php?pass='.$screen['pass'].'">'.$screen['status'].'</a></td><td id="mark"><a href="all_reservations.php?pass='.$screen['pass'].'"><img src="pictures/mark.gif" alt="mark" title="Marquer" /></a></td></a></tr>';
  8. }

avec PDO tout s'affiche convenablement sauf la premiere ligne:je m'explique:
Si j'ai 5 enregistrements,uniquement les 4 derniers apparaissent,si l'ordre de selection  est normal;si l'ordre de selection est decroissant,uniquement les 4premiers appraissent.
En fait la ligne de tableau est bien visible sauf qu'elle est vide.
 
Alors pour en venir à bout j'ai ajouté ce ceci juste avant la boucle:

Code :
  1. $count=$bdd->query('select count(*) as nbr from tracker');
  2. $result=$count->fetch();
  3. $step=$bdd->query('select * from tracker where id='.$result['nbr'].'');
  4. $view=$step->fetch();
  5. echo '<tr id="band">
  6. <td id="id"><a href="all_reservations.php?pass='.$view['pass'].'">'.$view['id'].'</a></td><td id="name"><a href="all_reservations.php?pass='.$view['pass'].'">'.$view['name'].'</a></td><td id="mail"><a href="all_reservations.php?pass='.$view['pass'].'">'.$view['mail'].'</a></td><td id="pass"><a href="all_reservations.php?pass='.$view['pass'].'">'.$view['pass'].'</a></td><td id="date"><a href="all_reservations.php?pass='.$view['pass'].'">'.$view['date'].'|'.$view['time'].'</a></td><td id="status"><a href="all_reservations.php?pass='.$view['pass'].'">'.$view['status.'].'</a></td><td id="mark"><a href="all_reservations.php?pass='.$view['pass'].'"><img src="picts/mark.gif" alt="mark" title="Marquer" /></a></td></tr>';


Mon souhait est de pas avoir à ajouter ce bout de code,j'aimerais donc savoir quel est le probleme dans la boucle que j'ai effectué plus haut.
 
Autre bobo:
J'ai un formulaire à transmettre,ce dernier contient des balises de type<select></select>;j'aimerais à la reception de ces données dans ma page de traitement,reconvertir ces dernieres;bah treve de bavardages,voici mon code:
Mon formulaire:

Code :
  1. Parmis ces animaux le quel preferez vous?  <select name="type">
  2. <option value="" select="selected">Choisissez le type...</option>
  3. <option value="betail">Bétail</option>
  4. <option value="chat">Chats</option>
  5. <option value="cheval">Chevaux</option>
  6. <option value="chevre">Chèvres</option>
  7. <option value="chien">Chiens</option>
  8. <option value="chinchillas">Chinchillas</option>
  9. <option value="clapier">Clapier</option>
  10. <option value="cochon">Cochons d'inde</option>
  11. <option value="furet">Furets</option>
  12. <option value="rat">Hamsters - Rats - Souris</option>
  13. <option value="lapin">Lapins</option>
  14. <option value="mouton">Moutons</option>
  15. <option value="oiseau">Oiseaux</option>
  16. <option value="perroquet">Perroquets</option>
  17. <option value="perruche">Perruches</option>
  18. <option value="poisson">Poissons</option>
  19. <option value="poney">Poneys</option>
  20. <option value="poule">Poules</option>
  21. <option value="reptile">Reptiles</option>
  22. <option value="tortue">Tortues</option>
  23. <option value="tourterelle">Tourterelles</option>
  24. <option value="voiliere">Voilières</option>
  25. </select> <br>
  26. Votre mois de naissance:
  27. <select name="birth_Month">
  28.                                       <option value="1">jan</option>
  29.                                       <option value="2">fév</option>
  30.                                       <option value="3">mar</option>
  31.                                       <option value="4">avr</option>
  32.                                       <option value="5">mai</option>
  33.                                       <option value="6">jun</option>
  34.                                       <option value="7">jul</option>
  35.                                       <option value="8">août</option>
  36.                                       <option value="9">sep</option>
  37.                                       <option value="10">oct</option>
  38.                                       <option value="11">nov</option>
  39.                                       <option value="12">déc</option> 
  40.                                     </select>
  41. Votre sexe::   <input name="m" value="m" type="radio">Homme<br>
  42. <input name="sexe" value="f" type="radio">Femme<br>


 
Ma page de traitement:

Code :
  1. <?php
  2. if ($_POST['type']="betail" ) $type='Bétail';
  3. elseif ($_POST['type']="mouton" ) $type='Mouton';
  4. elseif ($_POST['type']="chien" ) $type='Chien';
  5. elseif ($_POST['type']="chat" ) $type='Chat';
  6. elseif ($_POST['type']="cheval" ) $type='Cheval';
  7. elseif ($_POST['type']="chevre" ) $type='Chèvre';
  8. elseif ($_POST['type']="chinchillas" ) $type='Chinchillas';
  9. elseif ($_POST['type']="clapier" ) $type='Clapier';
  10. elseif ($_POST['type']="cochon" ) $type='Cochon d\'Inde';
  11. elseif ($_POST['type']="furet" ) $type='Furet';
  12. elseif ($_POST['type']="rat" ) $type='Rat,souris';
  13. elseif ($_POST['type']="lapin" ) $type='Lapin';
  14. elseif ($_POST['type']="oiseau" ) $type='Oiseau';
  15. elseif ($_POST['type']="perroquet" ) $type='Pérroquet';
  16. elseif ($_POST['type']="poisson" ) $type='Poisson';
  17. elseif ($_POST['type']="poney" ) $type='Poney';
  18. elseif ($_POST['type']="poule" ) $type='Poule';
  19. elseif ($_POST['type']="reptile" ) $type='Reptile';
  20. elseif ($_POST['type']="voiliere" ) $type='Voiliere';
  21. elseif ($_POST['type']="tortue" ) $type='Tortue';
  22. elseif ($_POST['type']="tourterelle" ) $type='Tourterelle';
  23. if ($_POST['sexe']="f" ) $sexe='Femme';
  24. elseif ($_POST['sexe']="m" ) $sexe='Homme';
  25. if ($_POST['birth_Month']="1" ) $birth_Month='Janvier';
  26. elseif ($_POST['birth_Month']="2" ) $birth_Month='Février';
  27. elseif ($_POST['birth_Month']="3" ) $birth_Month='Mars';
  28. elseif ($_POST['birth_departureMonth']="4" ) $birth_Month='Avril';
  29. elseif ($_POST['birth_Month']="5" ) $birth_Month='Mai';
  30. elseif ($_POST['birth_Month']="6" ) $birth_Month='Juin';
  31. elseif ($_POST['birth_Month']="7" ) $birth_Month='Juillet';
  32. elseif ($_POST['birth_Month']="8" ) $birth_Month='Aout';
  33. elseif ($_POST['birth_Month']="9" ) $birth_Month='Septembre';
  34. elseif ($_POST['birth_Month']="10" ) $birth_Month='Octobre';
  35. elseif ($_POST['birth_Month']="11" ) $birth_Month='Novembre';
  36. elseif ($_POST['birth_Month']="12" ) $birth_Month='Decembre';
  37. ?>


Seulement quelque soit la valeur qu'on choisit,il m'affiche la premiere valeur de chaque 'select'
,bref, il m'affiche ceci:
---------------------
 
Parmis ces animaux le quel preferez vous?:Bétail
Votre mois de naissance:Janvier
Votre sexe:Homme
 
---------------------
J'ai eu comme la vague impression de maîtriser pas grand chose en PHP  :paf:  
J'aurais vraiment besoin d'aide.
Merci bien.


Message édité par edgy le 16-07-2010 à 16:37:48
answer
n°3310
Narco
Voodoo child
Profil : Modo
Avatar
profil
Posté le 16-07-2010 à 18:31:38  
 

Problème 1:  
 
Tu fais 2 fetch(), l'un dont tu ne te sers pas, et l'autre que tu met comme condition d'arrêt dans une boucle while. C'est le premier fetch() qui enlève toujours la première ligne dans tes résultats :he: Supprime le et ça ira déjà mieux je pense! Ainsi ce code:
 

Code :
  1. $quest=$bdd->query('SELECT * FROM tracker order by id desc');
  2. $screen=$quest->fetch();
  3. while ($screen=$quest->fetch())
  4. {
  5.    [...]
  6. }


 
devient:
 

Code :
  1. $quest=$bdd->query('SELECT * FROM tracker order by id desc');
  2. while ($screen=$quest->fetch())
  3. {
  4.    [...]
  5. }


 
Problème 2:  
 
Erreur classique lorsqu'on débute en programmation. Prenons cette ligne de code:
 

Code :
  1. if ($_POST['type']="betail" ) $type='Bétail';


 
Il s'agit d'un test. Or la condition que tu a écris est une assignation, c'est à dire que tu donnes la valeur "betail" à la variable $_POST['type']. Ainsi le if est toujours vrai, et comme c'est le premier dans la liste, tu as toujours "Bétail" comme valeur :he:  
Pour écrire un test et pas une assignation, il faut utiliser "==" et pas "=", ce qui donne:
 

Code :
  1. if ($_POST['type']=="betail" ) $type='Bétail';


 
Tu dois faire cela pour tous les if et elseif qui suivent ;)


Message édité par Narco le 16-07-2010 à 18:33:10

---------------
http://img532.imageshack.us/img532/4012/ban2.png
answer
n°3311
edgy
Profil : New Penguin
Avatar
profil
Posté le 16-07-2010 à 19:36:02  
 

Merci,l'ancien.
Crois moi,tu m'as été d'un tres grand recours.
Merci bien.
Reste plus qu'à élucider le mystere de départ,je continue de chercher l'erreur,elle doit pas être bien loin;mais sinon merci encore Narco.

answer
n°3312
edgy
Profil : New Penguin
Avatar
profil
Posté le 16-07-2010 à 20:02:25  
 

C'est drôle,mais on dirait bien que Easyphp ne reconnaît pas ceci:

Code :
  1. if(condition)
  2. {
  3. ?>
  4. Du html
  5. <?php;
  6. }


Je precise:

Code :
  1. {
  2. ?>
  3. Du html
  4. <?php;
  5. }

answer
n°3313
Chaodam
Everybody lies
Profil : Penguin Pro
Avatar
profil
Posté le 16-07-2010 à 20:15:52  
 

edgy a écrit :

C'est drôle,mais on dirait bien que Easyphp ne reconnaît pas ceci:

Code :
  1. if(condition)
  2. {
  3. ?>
  4. Du html
  5. <?php;
  6. }


Je precise:

Code :
  1. {
  2. ?>
  3. Du html
  4. <?php;
  5. }



 

Code :
  1. <?php if ($blabla == "truc" ) { ?>
  2. Lorem
  3. <?php } else { ?>
  4. ipsum
  5. <?php ?>


 
Tu veux dire ? Si oui, j'ai déjà eu à faire à ça dans Easyphp si je me souviens bien, et c'est toujours passé, mais je peux me gourrer, y'as aucune raison que ça passe pas


---------------
Tweet me I'm famous - Last.fm, because music is my drug - Portfolio
answer
n°3314
edgy
Profil : New Penguin
Avatar
profil
Posté le 16-07-2010 à 20:29:33  
 

Ouf,enfin je l'ai résolu.
En fait cette ligne:

Code :
  1. 29 $cherche=$bdd->query('select * from tracker where pass='.$_GET['pass'].'');


devrait être ainsi:

Code :
  1. 29 $cherche=$bdd->query('select * from tracker where pass=\''.$_GET['pass'].'\'');

answer
n°3315
Narco
Voodoo child
Profil : Modo
Avatar
profil
Posté le 17-07-2010 à 11:24:30  
 

Pour revenir à ton problème initial, je maintiens que ça doit être une erreur dans ta requète SQL, qui fait que query ne renvoie pas l'objet attendu dans $cherche. En regardant de plus près ta requète, c'est à mon avis une erreur dans tes quotes.
 
A la place de:
 

Code :
  1. 'select * from tracker where pass='.$_GET['pass'].''


 
J'écrirais plutôt ceci:
 

Code :
  1. "select * from tracker where pass='.$_GET['pass'].'"


 
La différence est minime, mais suffit mettre un joyeux foutoir :p


Message édité par Narco le 17-07-2010 à 11:24:56

---------------
http://img532.imageshack.us/img532/4012/ban2.png
answer

Aller à :
Ajouter une réponse