Soucis requête mysql : données commençant par

Fermé
Kir4 - Modifié par Kir4 le 21/03/2010 à 20:27
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 28 mars 2010 à 18:10
bonjour,
voila , j'ai deux pages sur mon site : l'une qui contient l'alphabet avec des liens sur chaque lettres , une autre où je voudrais afficher toutes les données comencant par la lettre sur laquelle j'ai cliqué sur la page precedente
exemple:
sur page1 je clique sur la lettre A la page2 affiche toutes mes donnes commencant par la lettre A

page1.php
 
<a href="page2.php?lettre=a" title="">A</a> 


page2.php
 
mysql_connect("localhost", "root", ""); 
mysql_select_db("nomdemabase"); 
try 
        { 
$bdd = new PDO('mysql:host=localhost;dbname=nomdemabase', 'root', ''); 
} 
catch(Exception $e) 
{ 
die('Erreur : '.$e->getMessage()); 
} 

$req = $bdd->prepare("SELECT * FROM titre WHERE nom LIKE ?% ORDER BY id DESC'"); 
$req->execute(array($_GET['lettre'])); 

while ($donnees = $req->fetch()) 
{echo $donnees['nom']; 
} 
mysql_close();?> 


question subsidiaire: je voudrais aussi pouvoir obtenir le nombre d'entrée commençant par la lettre sur laquelle j'aurais cliqué auparavant

voila j'espère que vous aurez compris mon problème et qu'il n'a pas deja été abordé ailleurs sur le forum
merci d'avance

Kir4

8 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
21 mars 2010 à 20:42
$bdd->prepare("SELECT * FROM titre WHERE nom LIKE ?% ORDER BY id DESC'");
Que vient faire l'apostophe après le "DESC" ?
Et si j'ai bien compris ta question, tu aimerais savoir le nombre d'entrée que retourne la requête ci-dessus ?
0
euh oui , c'est bien ça : afficher et compter les entrées
et mis a part l'apostrophe c'est censé fonctionner?
merci pour ta réponse

Kir4
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
21 mars 2010 à 21:02
Déjà je ne comprends pas pourquoi tu fais un mysql_connect (et mysql_close) alors que tu utilises PDO ...

Ta requête retournera tous les articles dont le titre contient la lettre sélectionnée.
Et si j'ai bien compris, tu aimeras les titres qui commencent par cette lettre ? Si oui, il faudra utiliser une regex, ou la fonction SUBSTRING()
<?php
/* Instanciation de PDO */
try {
	$pdo = new PDO('mysql:host=localhost;dbname=nomdemabase', 'root', '');
} catch(PDOException $e) {
	echo 'Erreur n°'.$e->getCode().': '.$e->getMessage().'<br/>'."\n";
	die();
}

/* Préparation et exécution de la requête */
$sql = 'SELECT * FRIM 'titre' WHERE SUBSTRING('nom', 0, 1) = :lettre ORDER BY 'id' DESC';
$req = $pdo->prepare($sql);
$req->execute(array(':lettre' => $_GET['lettre']));
$req->setFetchMode(PDO::FETCH_OBJ);

/* Nombre de résultats */
$nb = $req->rowCount();
echo 'Il y a '.$nb.' résultat(s).';

/* Affichage des titres */
while($donnees = $req->fetch()) {
	echo $donnees->nom;
}

$req->closeCursor();
?>
Je n'ai pas essayé, mais ça devrait aller.
0
merci beaucoup pour ta réponse
oui il doit sans doute y avoir des lignes qui doivent te paraitre bizarre , c'est parce que je débute alors je prend des morceau de code par-ci par-là =/
je viens de tester ton code :

Parse error: parse error in C:\wamp\www\Nouveau dossier\testanime.php on line 137

ce qui correspond a la ligne :

$req->execute(array(':lettre' => $_GET['lettre']));

je vais essayer de trouver ce qui ne va pas ...

merci beaucoup =)

Kir4
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
21 mars 2010 à 21:34
Je ne vois aucune erreur de syntaxe.
Par contre, j'ai mis "FRIM" au lieu de "FROM" dans la requête SQL.
0
bonjour,
en remplacant cette ligne:
$sql = 'SELECT * FRIM 'titre' WHERE SUBSTRING('nom', 0, 1) = :lettre ORDER BY 'id' DESC';
par celle -ci:
$sql = ("SELECT * FRIM 'titre' WHERE SUBSTRING('nom', 0, 1) = :lettre ORDER BY 'id' DESC");

plus aucune erreur n'apparait , la page s'affiche correctement
cependant quelle que soit la lettre sur laquelle je clique il est affiché :
Il y a 0 résultat(s).
alors qu'il y a bien , dans ma base , une entrée commençant par cette lettre

je ne comprend pas d'où viens le problème =/

merci Kir4
0
apres quelques modifications ça marche
voici la solution pour ceux qui aurons le meme probleme que moi :

<?php 
				try {
	$pdo = new PDO('mysql:host=localhost;dbname=mangabulle', 'root', '');
} catch(PDOException $e) {
	echo 'Erreur n°'.$e->getCode().': '.$e->getMessage().'<br/>'."\n";
	die();
}

/* Préparation et exécution de la requête */
$sql = ("SELECT * FROM titre WHERE titresm LIKE ? ORDER BY id DESC");
$req = $pdo->prepare($sql);
$req->execute(array($_GET['lettre']."%"));

$req->setFetchMode(PDO::FETCH_OBJ);

/* Nombre de résultats */
$nb = $req->rowCount();
while($donnees = $req->fetch())
 {
					}
$req->closeCursor();
?>


Kir4
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
28 mars 2010 à 18:10
Inutile de mettre des parenthèses autour de la requête.
En fait je n'avais pas fait de fautes : CCM à remplacer mes accents graves seuls par de simples apostrophes, ce qui a provoqué une erreur de syntaxe.
0