Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1750 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] Lien ID

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Lien ID

n°2192624
hogz
Posté le 03-06-2013 à 16:32:02  profilanswer
 

Bonjour,  
N'étant un spécialiste de PHP, je m'exerce à apprendre....et là je butte.  
J'ai une première page liste.php où s'affichent différents membres sous forme de tableau.  
Ces membres sont issus d'une base de données qui est affichée par une requête SQL.
Jusque là ça marche..  
 
J'ai fait un lien sur l'ID pour que l'on puisse en cliquent sur l'ID ouvrir la fiche.php du membre.  
En cliquant sur le ID la page fiche.php s'ouvre...
 
LIEN DE MA PAGE liste.php
<a href="fiche.php?id=<?php echo ($donnees['id']); ?></a></span></th>  
 
 
Donc, si j'ai bien compris j'ai bien récupérer le bon id...et ma page liste.php s'affichant "http://monsite.fr/fiche.php?id=11"
 
Dans ma page fiche.php le bon ( id ) s'affiche dans mon tableau mais pas les autres données...  
 
Donc là, je cale...car je vois pas d'où peut provenir l'erreur...le GET est appelé et s'affiche... pour le reste se sont des echo de la base de données.  
Encore merci de m'aider et surtout à comprendre...  
 
REQUETE  
 
$requete = 'SELECT * FROM base WHERE id=' $bdd->quote( $_GET['id']);  
$reponse = $bdd->query($requete);  
if ($reponse === false) {  
echo 'Erreur sur la requête ' . $requete;  
echo '<br />';  
var_dump($bdd->errorInfo());  
} else {  
while ($donnees = $reponse->fetch()) {  
}  
?>  
<table width="580" border="0">  
<th scope width="30" class="Style500"><?php echo ($_GET['id']); ?></span></th>  
<th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['date'])); ?></span></th>  
<th scope width="150" class="Style500"><?php echo htmlentities ($donnees['nom']); ?></span></th>  
<th scope width="150" class="Style500"><?php echo htmlentities ($donnees['prenom']); ?></span></th>  
<th scope width="90" class="Style500"><?php echo htmlentities ($donnees['section']); ?></span></th>  
<th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['daten'])); ?></span></th>  
</tr>  
</table>  
<?php  
}  
$reponse->closeCursor(); // Termine le traitement de la requête  
?>
 
Je suppose qu'il y a un problème dans ma requête de ma page fiche.php, mais je n'arrive pas trouver...  :pt1cable:  
Merci pour votre aide.


Message édité par hogz le 26-06-2013 à 20:14:17
mood
Publicité
Posté le 03-06-2013 à 16:32:02  profilanswer
 

n°2192711
x1fr
Posté le 04-06-2013 à 13:47:39  profilanswer
 

Code :
  1. $requete = 'SELECT * FROM base WHERE id=' $bdd->quote( $_GET['id']);


 
il ne manquerai pas un "." pour faire la concaténation entre le string 'Select...' et $bdd->quote ?
 
Tu peux aussi tester si $reponse contient au moins 1 ligne, et dans le cas contraire afficher que l'id est incorrect


Message édité par x1fr le 04-06-2013 à 13:48:43

---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2192753
KLeMiX
Laisse pas trainer ton site
Posté le 04-06-2013 à 17:20:49  profilanswer
 

De plus si  "$bdd->quote( $_GET['id'])"  met entre quote ton ID qui doit etre un numérique c'est pas bon.
 


---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
n°2192777
xaeon
Profil: TT
Posté le 04-06-2013 à 19:57:01  profilanswer
 

La fonction quote de PDO accepte un second paramètre permettant de définir le type de données. Cependant, mettre entre quote un entier n'est pas très problématique, MySQL va caster la valeur pour qu'elle puisse être interprétée correctement, je n'ai jamais eu de souci avec cette méthode.


Message édité par xaeon le 04-06-2013 à 19:57:12
n°2193020
hogz
Posté le 05-06-2013 à 20:45:46  profilanswer
 

J'ai changé mais toujours même problème affichage du tableau sans le contenu sauf l'ID car il est amené par le GET
$requete = 'SELECT * FROM base WHERE id=' .$bdd->quote( $_GET['id']);
 
J'ai rajouté un point avant $bdd

n°2193053
x1fr
Posté le 06-06-2013 à 08:47:35  profilanswer
 

Dans les lignes de ton tableau, tu as des balises </span>, mais aucune balise ouvrante.
 
Ton tableau est également mal construit!
 
Le problème ne vient pas de là, mais ça ne fera pas de mal de corriger :p
 
Le problème vient de la ligne après while (je n'avais pas vu la première fois) :

Code :
  1. while ($donnees = $reponse->fetch()) {
  2. }


 
Il faut supprimer le  } car il rend le fetch inutile!


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2193199
hogz
Posté le 06-06-2013 à 17:28:21  profilanswer
 

Merci pour ta réponse, mais si j'enlève
}
une erreur
Parse error: syntax error, unexpected $end in /htdocs/***/***/fiche.php on line 363
Ligne 363 est la dernière de mes lignes après
</body>
</html>

n°2193207
dreameddea​th
Posté le 06-06-2013 à 18:24:47  profilanswer
 

Le

Code :
  1. while ($donnees = $reponse->fetch()) {
  2. }


"Consomme" l'ensemble de la requête. Donc php "sort" du while avec $donnees==null.
 
Sinon  

Citation :


Il faut supprimer le  } car il rend le fetch inutile!


est faux, au mieux il faut le déplacer dans le bloc php de fin (celui qui fait la clôture du curseur), ce qui explique le message d'erreur d'ailleurs.
Mais la boucle, ça n'est pas trop dans l'esprit du code qui doit n'avoir qu'un résultat pas N.
De plus il faut absoluement prendre l'habitude des prepare/bind/execute : ça évite le sql injection.  
 
Il faut mieux donc :
 

Code :
  1. $requete = $bdd->prepare('SELECT * FROM base WHERE id=?');
  2. $requete->bindValue(1,$_GET['id'],PDO::PARAM_INT); 
  3. $reponse = $requete->execute(); 
  4. if ($reponse === false) { 
  5.      echo 'Erreur sur la requête ' . $requete; 
  6.      echo '<br />'; 
  7.      var_dump($bdd->errorInfo()); 
  8. }
  9. else{
  10.     if($donnees = $reponse->fetch()) {  //Récupère la première ligne  
  11. ?> 
  12. <table width="580" border="0"> 
  13. <th scope width="30" class="Style500"><?php echo ($_GET['id']); ?></span></th> 
  14. <th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['date'])); ?></span></th> 
  15. <th scope width="150" class="Style500"><?php echo htmlentities ($donnees['nom']); ?></span></th> 
  16. <th scope width="150" class="Style500"><?php echo htmlentities ($donnees['prenom']); ?></span></th> 
  17. <th scope width="90" class="Style500"><?php echo htmlentities ($donnees['section']); ?></span></th> 
  18. <th scope width="80" class="Style500"><?php echo date ("d/m/Y",strtotime($donnees['daten'])); ?></span></th> 
  19. </tr> 
  20. </table> 
  21. <?php
  22.     }
  23.     else{
  24.          echo $_GET['id'] . ' not found!!!';
  25.     }
  26.     $reponse->closeCursor(); // Termine le traitement de la requête   
  27. }
  28. ?>


Message édité par dreameddeath le 06-06-2013 à 18:25:58
n°2193209
hogz
Posté le 06-06-2013 à 18:59:00  profilanswer
 

Merci pour ton coup de main...
 
Après vérification----Affichage
Fatal error: Call to a member function fetch() on a non-object in /htdocs/****/***/fiche.php on line 337
 
Donc------ligne 337
}
 else{
     if($donnees = $reponse->fetch()) {  //Recupere la première ligne  
 ?>


Message édité par hogz le 07-06-2013 à 08:26:20
n°2193264
KLeMiX
Laisse pas trainer ton site
Posté le 07-06-2013 à 11:05:24  profilanswer
 


$requete = $bdd->prepare('SELECT * FROM base WHERE id=?');
$requete->bindValue(1,$_GET['id'],PDO::PARAM_INT);  
$reponse = $requete->execute();  
 
$htmlreponse=$_GET['id'] . ' not found!!!';
foreach ($reponse as $donnees)
{
$htmlreponse='<table width="580" border="0"> ';
$htmlreponse=$htmlreponse.'<th scope width="30" class="Style500">'.$_GET['id']).'</span></th> ';
$htmlreponse=$htmlreponse.'<th scope width="80" class="Style500">'. date ("d/m/Y",strtotime($donnees['date'])).'</span></th> ';
$htmlreponse=$htmlreponse.'<th scope width="150" class="Style500">'. htmlentities ($donnees['nom']).'</span></th> ';
$htmlreponse=$htmlreponse.'<th scope width="150" class="Style500">'. htmlentities ($donnees['prenom']).'</span></th> ';
$htmlreponse=$htmlreponse.'<th scope width="90" class="Style500">'. htmlentities ($donnees['section']).'</span></th> ';
$htmlreponse=$htmlreponse.'<th scope width="80" class="Style500">'. date ("d/m/Y",strtotime($donnees['daten'])).'</span></th> ';
$htmlreponse=$htmlreponse.'</tr> ';
$htmlreponse=$htmlreponse.'</table> ';
}
}
echo $htmlreponse;
 
 
 
bon le mieux c'est qd meme de séparer ton code de l'affichage (smarty ou twig sont tes amis)


---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
mood
Publicité
Posté le 07-06-2013 à 11:05:24  profilanswer
 

n°2193307
hogz
Posté le 07-06-2013 à 14:11:16  profilanswer
 

Merci pour ton aide...
 
ça modifie ma logique, mais bon je suis là pour appendre... :pt1cable:  
Mais une erreur ligne Parse error: syntax error, unexpected ')' in /htdocs/***/***/fiche.php on line 337
Toujours la même chose.
J'écrit avec TEXTMATE ce qui me permet de voir les petites erreurs et il
n'y a pas de problème visuel sur ton code...
Ligne 337
$htmlreponse=$htmlreponse.'<th scope width="80" class="Style500">'. date ("d/m/Y",strtotime ($donnees['date']).'</span></th> ';
Je vois pas le problème de syntax....


Message édité par hogz le 07-06-2013 à 14:14:51
n°2193323
KLeMiX
Laisse pas trainer ton site
Posté le 07-06-2013 à 15:05:15  profilanswer
 

'.$_GET['id']).'<
 
ligne du dessus


---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
n°2193335
hogz
Posté le 07-06-2013 à 16:57:39  profilanswer
 

Ok vu....  :)  
 
Modifié==
 
// Si tout va bien, on peut continuer
$requete = $bdd->prepare('SELECT * FROM base WHERE id=?');
$requete->bindValue(1,$_GET['id'],PDO::PARAM_INT);
$reponse = $requete->execute();
 
$htmlreponse='.$_GET['id'].'<not found!!!';
foreach ($reponse as $donnees)
{  
 
Mais il m'indique une erreur de T_STRING
Parse error: syntax error, unexpected T_STRING in /htdocs/***/***/fiche.php
 
J'ai controlé ';' et ',' mais bon...pas succès

n°2193526
KLeMiX
Laisse pas trainer ton site
Posté le 10-06-2013 à 14:00:25  profilanswer
 

htmlreponse='.$_GET['id']
 
 
htmlreponse=$_GET['id']


Message édité par KLeMiX le 10-06-2013 à 14:00:35

---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
n°2193589
dreameddea​th
Posté le 10-06-2013 à 18:27:27  profilanswer
 

Oupps pardon !  
dans mon code :

Code :
  1. if($donnees = $reponse->fetch()) {


 
doit être remplacé par
 

Code :
  1. if($donnees = $requete->fetch()) {


 
Et j'abonde totalement  

Citation :

bon le mieux c'est qd meme de séparer ton code de l'affichage (smarty ou twig sont tes amis)


Message édité par dreameddeath le 10-06-2013 à 18:28:43
n°2194229
hogz
Posté le 14-06-2013 à 09:44:20  profilanswer
 

Merci pour vos réponses...
Je me suis absenté quelques jours, mais je reprends le problème...J'ai testé le changement de code de dreameddeath.
Voici la réponse:
 
not found!!!
Fatal error: Call to a member function closeCursor() on a non-object in /htdocs/public/***/fiche.php on line 353
 
Donc:
    }
        else{
             echo $_GET['id'] . ' not found!!!';
        }
        $reponse->closeCursor(); // Termine le traitement de la requête    
    }
    ?>

n°2194232
dreameddea​th
Posté le 14-06-2013 à 09:58:26  profilanswer
 

Bon ok, mon code a encore un soucis, mais c'est le même problème que précédemment $reponse doit être remplacé par $requete...
 
Sinon, il va falloir apprendre à analyser ce genre d'erreur : vu que PHP est un langage non typé, c'est à l'exécution que les problèmes se posent et il n'y a pas de vérification à la compilation.
 
Dans ce cas 3 possibilités :
- nom de la methode fausse (inexistante ou mal orthographiée)
- l'objet n'est pas du type espéré (ici un boolean au lieu d'un PDOStatement) et ce de manière structurelle (au sens jamais)
- une exception mal gérée revoie un "null" dans la variable
 
Les cas 2 et 3 sont les plus durs à analyser car ça peut dépendre de :
- le contexte (bdd indispo, ...)
- du chemin pour parvenir au bout de code
 
Bon là c'est facile car dans tous les cas le code est faux :)
 
Mais faut pas poster sans chercher un minimum à comprendre l'erreur et de tenter trouver sa cause : c'est ça qui fait progresser...

n°2194245
hogz
Posté le 14-06-2013 à 11:05:10  profilanswer
 

Effectivement, je vais vais revoir tout cela.
Merci pour l'aide.

n°2194260
hogz
Posté le 14-06-2013 à 11:40:32  profilanswer
 

Après avoir refait ma requête j'ai introduit <?php $id=$_GET['id'];?>
au dessus de la connexion au serveur et ça marche....


Message édité par hogz le 22-06-2013 à 17:10:40

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] Lien ID

 

Sujets relatifs
changer le contenu de la balise "ul" en cliquant sur un lien[HTML/CSS/Javascript] Lien et script à partir de l'attribut alt
couleur de lien dans un tableau en hoverProblème de script de compte à rebours + affichage lien
Effectuer une action en cliquant sur image/lienlien vers la page d'accueil
[VBA] Pied de page en lien avec une cellule [Résolu]lien vers nouvelle onglet
lien vers un fichier d'une partition sur un serveurHyper lien pour éditer un fichier parmi plusieurs
Plus de sujets relatifs à : [RESOLU] Lien ID


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR