<< Retour au sommaire

 

La requête select

 

 

 

Le sommaire :

  1. Présentation.
  2. La syntaxe dans du PHP.
  3. Un exemple simple.
  4. Un deuxième exemple plus complexe.

 

 

Présentation

 

La requête select permet d’obtenir des enregistrements à l’intérieure d’une ou plusieurs tables.

Voici la syntaxe la plus simple :

 

select NomsDesChamps from NomDeLaTable where Condition ;

La description :

 

NomsDesChamps est la liste des champs à récupérer dans la table, ou dans les tables, passées en paramètre dans la close from.

Si vous désirez tous les champs, vous devez spécifier un astérisque » au lieu de spécifier des noms de champs…

Remarque : Si vous spécifiez plusieurs champs, veuillez les séparer par une virgule.

 

NomDeLaTable est le nom d’une, ou plusieurs tables, contenant les champs spécifiés dans la close select ou dans la close where.

Remarque : Si vous spécifiez plusieurs tables, veuillez les séparer par une virgule…

 

Condition  est une ou plusieurs expressions de comparaisons spécifiées dans la close where afin de limiter la sélection des enregistrements.

Remarque : La close where est facultative, vous devez la spécifier uniquement si vous ne désirez pas tous les enregistrements de la table.

 

Dans la close where, vous pouvez utiliser les opérateurs de comparaison,

= pour « égal »,

< pour « inférieur »,

<= pour « inférieur ou égal »,

> pour « supérieur »,

>= pour « supérieur ou égal »,

<> pour « différent », Etc.

 

Par exemple, pour sélectionner les enregistrements « Nom » et « Prenom » de la table « Auteurs » lorsque le nom est égal à « Verne » :

Select Nom,Prenom from Auteurs where Nom=’VERNE’;

 

Pour combiner plusieurs conditions, vous pouvez utiliser les opérateurs logiques and et or.

Par exemple, pour afficher les noms et les prénoms de la table Auteur lorsque le nom est égal à « VERNE » et le prénom égal à « Jules » :

Select Nom,Prenom from Auteurs where Nom=’VERNE’ and Prenom= ‘Jules ‘;

 

Vous pouvez utiliser aussi l’opérateur like au lieu de l’opérateur = « égal ».

Cet opérateur vous permet de réaliser une comparaison moins stricte…

Dans les 3 exemples qui suivent, nous allons utiliser la fonction addslashes pour gérer la saisie d’éventuels guillemets…

 

Si vous accepter l’égalité dans le cas ou le champ recherché débute par la valeur recherchée, il vous suffit de placer le signe pour cent « % » à droite de la valeur recherchée :

select * from contacts where Nom like '".addslashes($Nom)."%';

 

Si vous accepter l’égalité dans le cas ou le champ recherché finit par la valeur recherchée, il vous suffit de placer le signe pour cent « % » à gauche de la valeur recherchée :

select * from contacts where Nom like '%".addslashes($Nom)."';

 

Si vous accepter l’égalité dans le cas ou le champ recherché doit contenir la valeur recherchée, il vous suffit de placer le signe pour cent « % » à gauche et à droite de la valeur recherchée :

select * from contacts where Nom like '%".addslashes($Nom)."%';

 

Le filtre “order by” permet de spécifier le champ depuis lequel un tri croissant doit être réalisé. Par exemple :

select * from contacts where Nom like '%".addslashes($Nom)."%' order by Nom;

 

 


La syntaxe dans du PHP

 

Exécuter la requête select dans la fonction mysql_query :

 

$VariableResultat = mysql_query(« requête select ») ;

Maintenant, la variable $VariableResultat contient le résultat de la requête…

Si $VariableResultat reçoit la valeur 1, c’est que l’exécution de la requête c’est bien passée.

Si $VariableResultat reçoit la valeur 0, c’est que la requête c’est mal passée…

 

Mais vous pouvez utiliser la fonction mysql_num_rows qui retourne le nombre d’enrgistrements trouvés.

Le paramètre de cette fonction est la variable qui a reçu le résultat de l’exécution de la requête.

 

if (mysql_num_rows($VariableResultat)==0)

{ echo « Désolé, aucun résultat pour votre requête » ; } 

 

Quant à l’extraction du résultat depuis la variable, vous devez utiliser deux fonctions, mysql_fetch_array et extract. 

 

La fonction mysql_fetch_array extrait le premier enregistrement sélectionné par la requête, vous devez donc affecter le résultat de l’extraction dans une variable tableau, par exemple dans la variable $Enregistrement. 

Voici la syntaxe :

 $Enregistrement = mysql_fetch_array ($VariableResultat) ;

Voilà, maintenant vous devez transformer le tableau $Enregistrement en plusieurs variables, chaque champ sera transformé en une variable du même nom, mais avec un dollar…

Extract ($Enregistrement) ;

Voilà, si vous avez par exemple dans la table un champ intitulé Nom, vous aurez son contenu dans la variable $Nom.

La prochaine utilisation de la fonction mysql_fetch_array aura pour conséquence d’extraire le second enregistrement du résultat de la requête…

Ainsi, vous pouvez intégrer cette fonction dans la condition d’une boucle for…

Tant qu’il restera un enregistrement, la boucle sera active.

 

 


Un exemple

 

L’exemple qui suit utilise une base de données intitulée GestionContacts et nous allons interroger la table contacts, qui contient les champs suivants :

NumContacts, de type entier unique auto incrémentation.

Nom, de type texte avec saisie obligatoire.

Prenom, de type texte.

AdresseLigne1, de type texte.

AdresseLigne2, de type texte.

CodePostal, de type VarChar 5 caractères.

Ville, de type texte.

Telephonedomicile, de type varchar 14 caractères.

TelephonePortable, de type varchar 14 caractères.

TelephoneProfessionnel, de type varchar 14 caractères.

Fax, de type varchar 14 caractères.

EMail, de type texte.

 

Dans cet exemple, nous récupérons une valeur depuis un formulaire, puis nous lançons la recherche sur le champ nom de la table contacts.

Nous voulons une recherche approximative, c’est la raison pour laquelle nous allons utiliser l’opérateur like dans la condition de comparaison de la requête select.

Le nom est saisi par l’utilisateur dans le fichier index.php et le résultat est affiché dans le fichier ResultatRecherche.php.

Le fichier connexion.inc permettra la connexion à la base de données GestionContacts.

 

Le fichier connexion.inc :

 

<?php

$connect = mysql_connect("localhost","root","") or die("Impossible de se connecter au serveur");

$bdd = mysql_select_db("gestioncontacts",$connect) or die("Impossible de se connecter à gestioncontacts");

?>

 

Le fichier index ;php :

 

<html>

<head>

<title>Recherche</title>

</head>

<body>

<table border="1">

<th colspan="2"><h1>Saisissez un nom puis validez le bouton "Rechercher"</h1>

<p><i>Vous pouvez ne saisir que le début du nom à rechercher...</i></p></th>

<form action="ResultatRecherche.php" method="post">

<tr>

<td>Nom à rechercher : <input type="text" name="Nom"></td>

<td><input type="submit" value="Rechercher"></td></tr></form></table>

</body>

</html>

 

 

Le fichier ResultatRecherche.php :

 

<html>

<head>

<title>Résultat</title>

</head>

<body>

<table border="1">

<th colspan="2"><h1>Résultat de la recherche</h1></th>

<?php

include("connexion.inc");

extract($_POST,EXTR_OVERWRITE);

$TableContacts = mysql_query("select Nom,Prenom from contacts where Nom like '%".addslashes($Nom)."%' order by Nom");

if (mysql_num_rows($TableContacts))

{ $NombreEnregistrements = mysql_num_rows($TableContacts);

  echo "<tr><td>$NombreEnregistrements Noms</td><td>Prénoms</td></tr>";

  while ($Enregistrement = mysql_fetch_array($TableContacts))

  { extract ($Enregistrement);

  echo "<tr><td>$Nom</td><td>$Prenom</td></tr>"; }}

else

{ echo '<th colspan="2">Aucun résultat...</th>'; }

?>

<th colspan="2"><a href="index.php">Précédent</a></th>

</table>

</body>

</html>

 

 


Un deuxième exemple plus complexe

 

L’exemple qui suit utilise une base de données intitulée GestionContacts et nous allons interroger la table contacts, qui contient les champs suivants :

NumContacts, de type entier unique auto incrémentation.

Nom, de type texte avec saisie obligatoire.

Prenom, de type texte.

AdresseLigne1, de type texte.

AdresseLigne2, de type texte.

CodePostal, de type VarChar 5 caractères.

Ville, de type texte.

Telephonedomicile, de type varchar 14 caractères.

TelephonePortable, de type varchar 14 caractères.

TelephoneProfessionnel, de type varchar 14 caractères.

Fax, de type varchar 14 caractères.

EMail, de type texte.

 

Cet exemple reprend l’exercice précédent mais intègre, dans le fichier ResultatRecherche.php, un lien intitulé « Voir détails » pour chacun des enregistrements trouvés…

Ce lien exécute le fichier VoirDetail.php en passant en paramètre la clef NumContact.

 

Le fichier connexion.inc :

 

<?php

$connect = mysql_connect("localhost","root","") or die("Impossible de se connecter au serveur");

$bdd = mysql_select_db("gestioncontacts",$connect) or die("Impossible de se connecter à gestioncontacts");

?>

 

 

Le fichier index.php :

 

<html>

<head>

<title>Recherche</title>

</head>

<body>

<table border="1">

<th colspan="2"><h1>Saisissez un nom puis validez le bouton "Rechercher"</h1>

<p><i>Vous pouvez ne saisir que le début du nom à rechercher...</i></p></th>

<form action="ResultatRecherche.php" method="post">

<tr>

<td>Nom à rechercher : <input type="text" name="Nom"></td>

<td><input type="submit" value="Rechercher"></td></tr></form>

<th colspan="2"><a href="index.php">Retour à la page d'accueil</a></th></table>

</body>

</html>

 

 

Le fichier ResultatRecherche.php :

 

<html>

<head>

<title>Résultat</title>

</head>

<body>

<table border="1">

<th colspan="2"><h1>Résultat de la recherche</h1></th>

<?php

include("connexion.inc");

extract($_POST,EXTR_OVERWRITE);

$TableContacts = mysql_query("select NumContact,Nom,Prenom from contacts where Nom like '%".addslashes($Nom)."%' order by Nom");

if (mysql_num_rows($TableContacts))

{ $NombreEnregistrements = mysql_num_rows($TableContacts);

  echo "<tr><td>$NombreEnregistrements Nom(s)</td><td>Prénoms</td><td>Actions</td></tr>";

  while ($Enregistrement = mysql_fetch_array($TableContacts))

  { extract ($Enregistrement);

  echo "<tr><td>$Nom</td><td>$Prenom</td>"; ?>

  <td><a href="VoirDetail.php?NumContact= <? echo $NumContact; ?>">Voir détail</td></tr>

  <?php }}

else

{ echo '<th colspan="2">Aucun résultat...</th>'; }

?>

<th colspan="2"><a href="index.php">Précédent</a></th>

</table>

</body>

</html>

 

 

Le fichier VoirDetail.php :

 

<html>

<head>

<title> bonjour </title>

</head>

<body>

<table border="1">

<tr><h1>Dé-tail d'un enregistrement</h1></tr>

<tr>

<?php

extract($_GET,EXTR_OVERWRITE);

include ("connexion.inc");

$TableContacts = mysql_query("select * from contacts where NumContact = $NumContact");

$Enregistrement = mysql_fetch_array ($TableContacts);

extract ($Enregistrement);

echo "Contact $Prenom $Nom <br>";

echo "$AdresseLigne1 <br>";

echo "$AdresseLigne2 <br>";

echo "$CodePostal $Ville <br>"; ?>

<a href="mailto:<? echo $EMail ?>"><? echo $EMail ?></a><br>

<? echo "Téléphone domicile : $TelephoneDomicile <br>";

Echo "Téléphone portable : $TelephonePortable <br>";

echo "Telephone professionnel : $TelephoneProfessionnel <br>";

echo "Fax : $Fax "; ?>

</tr>

<tr><a href="index.php">Retour</a></tr>

</table>

</body>

</html>

 

Philippe BOULANGER