$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';
$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
if($lettre != "")
{
$sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
$sql .= strtolower($lettre) . '){1}"';
}
$sql .= 'ORDER BY nom';
Car la je vois pas $letter renvois quoi lui dans l'url<?php
/* On récupère la lettre choisie et envoyée en paramètre s'il y en a une */
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';
/* On inutialise le début de la requête SQL */
$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
/* Si il y a une lettre en paramètre, on ajoute une clause WHERE pour n'extraire
que les champs contenant cette lettre */
if($lettre != "")
{
$sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
$sql .= strtolower($lettre) . '){1}"';
}
/* On ajoute une clause ORDER BY por trier les résultat en ordre (ici alphabétique) */
$sql .= 'ORDER BY nom';
?>
Le problème qu'il y a là est que l'expression régulière semble ne pouvoir correspondre qu'avec les champs qui contiennent la lettre choisie, et rien d'autre. Donc si on clique sur "A", on aura les lignes où le champ "nom" contiendra uniquement "A" ou "a", rien d'autre.<p><a href="indexe.php?lettre=<?php echo($lettre); ?>">A</a></p>
C'est bien cela<p><a href="index.php?lettre=<?php echo($lettre = "A"); ?>">A</a></p>
Cela fonctionne parfaitement, merci encore d'avoir détaillé le code.<?php
$alphabet = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
/* Création des liens */
$liens = array();
foreach($alphabet as $lettre)
{
$liens[] = "<a href=\"index.php?lettre=". $lettre ."\" title=\"Rechercher les noms commençant par la lettre ". $lettre ."\">". $lettre ."</a>";
}
/* On insère un signe de séparation entre les lettres/liens */
$listeliens = implode(" | ", $liens);
/* On construit la chaine de liens */
$chaine = "<p>". $listeliens ."</p>\n";
/* On affiche la chaine de liens */
echo($chaine);
?>
Exécute ce code et affiche la source de la page générée.<?php
// on se connecte à la base de données
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('repertoire_tel', $base);
?>
<html>
<head>
<title>affichage du répertoire</title>
</head>
<body>
<?php
// structure de la mise en page
?>
<center><h3>Répertoire téléphonnique</h3></center>
<br>
<br>
<center>
<p><a href="ajout.php">Ajouter une entrée</a></p>
<table border cellspacing="0" width="800">
<tr>
<th width="100"><p>Nom</p></th>
<th width="100"><p>Prénom</p></th>
<th width="300"><p>Addresse</p></th>
<th width="200"><p>téléphone</p></th>
<th width="100">Supprimer</th>
</tr>
</center>
<?php
// lancement de la requête
/* On récupère la lettre choisie et envoyée en paramètre s'il y en a une */
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';
/* On inutialise le début de la requête SQL */
$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
/* Si il y a une lettre en paramètre, on ajoute une clause WHERE pour n'extraire
que les champs contenant cette lettre */
if($lettre != "")
{
$sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
$sql .= strtolower($lettre) . '){1}"';
}
/* On ajoute une clause ORDER BY por trier les résultat en ordre (ici alphabétique) */
$sql .= 'ORDER BY nom';
// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// Récupération du nombre d'enregistrement dans la base
$number = MYSQL_NUM_ROWS($req);
// Affichage du nombre d'enregistrement
if($number==1){
$num = "$number enregistrement dans le répertoire";
}
else{
$num = "$number enregistrements dans le répertoire";
}
//on récupère le résultat sous la forme d'un tableau en scanan tous les tuples
while ($data = mysql_fetch_array($req))
{
// on effectu l'affichage des résultats
?>
<tr>
<td><?php echo($data['nom']); ?></td>
<td><?php echo($data['prénom']); ?></td>
<td><?php echo($data['addresse']); ?></td>
<td><?php echo($data['telephone']); ?></td>
<td><p><a href="supprimer.php?id=<?php echo($data['id']); ?>">Supp</a> | <a href="modification.php?id=<?php echo($data['id']);
?>">Modif</a></p></td>
</tr>
<?php
}
?>
<?php
$alphabet = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
"Y", "Z");
/* Création des liens */
$liens = array();
foreach($alphabet as $lettre)
{
$liens[] = "<a href=\"index.php?lettre=". $lettre ."\" title=\"Rechercher les noms commençant par la lettre ". $lettre ."\">". $lettre
."</a>";
}
/* On insère un signe de séparation entre les lettres/liens */
$listeliens = implode(" - ", $liens);
/* On construit la chaine de liens */
$chaine = "<center><p><font face='Times New Roman'>". $listeliens ."</font></p><center>\n";
/* On affiche la chaine de liens */
echo($chaine);
?>
</table>
<center><p><?php echo($num); ?></p></center>
<?php
// on libère l'espace mémoire alloué pour cette intérrogation de base
mysql_free_result ($req);
mysql_close ();
?>
</body>
</html> <?php
// on se connecte à la base de données
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('repertoire_tel', $base);
?>
<html>
<head>
<title>affichage du répertoire</title>
</head>
<body>
<?php
// structure de la mise en page
?>
<center><h3>Répertoire téléphonnique</h3></center>
<br>
<br>
<center>
<p><a href="ajout.php">Ajouter une entrée</a></p>
<table border cellspacing="0" width="800">
<tr>
<th width="100"><p>Nom</p></th>
<th width="100"><p>Prénom</p></th>
<th width="300"><p>Addresse</p></th>
<th width="200"><p>téléphone</p></th>
<th width="100">Supprimer</th>
</tr>
</center>
<?php
// lancement de la requête
/* On récupère la lettre choisie et envoyée en paramètre s'il y en a une */
$lettre = isset($_GET['lettre']) ? $_GET['lettre'] : '';
/* On inutialise le début de la requête SQL */
$sql = 'SELECT id, nom, prénom, addresse, telephone FROM liste_proprietaire ';
/* Si il y a une lettre en paramètre, on ajoute une clause WHERE pour n'extraire
que les champs contenant cette lettre */
if($lettre != "")
{
$sql .= 'WHERE `nom` REGEXP "^(' . strtoupper($lettre) . '|';
$sql .= strtolower($lettre) . '){1}"';
}
/* On ajoute une clause ORDER BY por trier les résultat en ordre (ici alphabétique) */
$sql .= 'ORDER BY nom';
// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// Récupération du nombre d'enregistrement dans la base
$number = MYSQL_NUM_ROWS($req);
// Affichage du nombre d'enregistrement
if($number==1){
$num = "$number enregistrement dans le répertoire";
}
else{
$num = "$number enregistrements dans le répertoire";
}
//on récupère le résultat sous la forme d'un tableau en scanan tous les tuples
while ($data = mysql_fetch_array($req))
{
// on effectu l'affichage des résultats
?>
<tr>
<td><?php echo($data['nom']); ?></td>
<td><?php echo($data['prénom']); ?></td>
<td><?php echo($data['addresse']); ?></td>
<td><?php echo($data['telephone']); ?></td>
<td><p><a href="supprimer.php?id=<?php echo($data['id']); ?>">Supp</a> | <a href="modification.php?id=<?php echo($data['id']);
?>">Modif</a></p></td>
</tr>
<?php
}
?>
<hr>
<p>Affichage par filtre :</p>
<?php
$alphabet = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
"Y", "Z");
/* Création des liens */
$liens = array();
foreach($alphabet as $lettre)
{
$liens[] = "<a href=\"index.php?lettre=". $lettre ."\" title=\"Rechercher les noms commençant par la lettre ". $lettre ."\">". $lettre
."</a>";
}
/* On insère un signe de séparation entre les lettres/liens */
$listeliens = implode(" - ", $liens);
/* On construit la chaine de liens */
$chaine = "<p style=\"text-align: center; font-family: 'times new roman'\">". $listeliens ."</p>\n";
/* On affiche la chaine de liens */
echo($chaine);
?>
<p>Affichage sans filtre :</p>
<p style="text-align: center; font-family: 'times new roman"><a href = "index.php">[Sans triage]</a></p><hr><br>
<center><p><?php echo($num); ?></p><br></center>
</table>
<?php
// on libère l'espace mémoire alloué pour cette intérrogation de base
mysql_free_result ($req);
mysql_close ();
?>
</body>
</html>