Lien ID [RESOLU] - PHP - Programmation
Marsh Posté le 04-06-2013 à 13:47:39
Code :
|
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
Marsh Posté le 04-06-2013 à 17:20:49
De plus si "$bdd->quote( $_GET['id'])" met entre quote ton ID qui doit etre un numérique c'est pas bon.
Marsh Posté le 04-06-2013 à 19:57:01
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.
Marsh Posté le 05-06-2013 à 20:45:46
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
Marsh Posté le 06-06-2013 à 08:47:35
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
Le problème vient de la ligne après while (je n'avais pas vu la première fois) :
Code :
|
Il faut supprimer le } car il rend le fetch inutile!
Marsh Posté le 06-06-2013 à 17:28:21
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>
Marsh Posté le 06-06-2013 à 18:24:47
Le
Code :
|
"Consomme" l'ensemble de la requête. Donc php "sort" du while avec $donnees==null.
Sinon
Citation : |
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 :
|
Marsh Posté le 06-06-2013 à 18:59:00
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
?>
Marsh Posté le 07-06-2013 à 11:05:24
$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)
Marsh Posté le 07-06-2013 à 14:11:16
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....
Marsh Posté le 07-06-2013 à 15:05:15
'.$_GET['id']).'<
ligne du dessus
Marsh Posté le 07-06-2013 à 16:57:39
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
Marsh Posté le 10-06-2013 à 14:00:25
htmlreponse='.$_GET['id']
htmlreponse=$_GET['id']
Marsh Posté le 10-06-2013 à 18:27:27
Oupps pardon !
dans mon code :
Code :
|
doit être remplacé par
Code :
|
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) |
Marsh Posté le 14-06-2013 à 09:44:20
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
}
?>
Marsh Posté le 14-06-2013 à 09:58:26
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...
Marsh Posté le 14-06-2013 à 11:05:10
Effectivement, je vais vais revoir tout cela.
Merci pour l'aide.
Marsh Posté le 14-06-2013 à 11:40:32
Après avoir refait ma requête j'ai introduit <?php $id=$_GET['id'];?>
au dessus de la connexion au serveur et ça marche....
Marsh Posté le 03-06-2013 à 16:32:02
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...
Merci pour votre aide.
Message édité par hogz le 26-06-2013 à 20:14:17