le 24/03/2011 à 20:06
Rechercher chaîne de caractères dans une table sur plusieurs champs
Bonjour,
J'ai créé un annuaire en PHP.
L'utilisateur peut :
- Saisir un nom et tous les noms des contacts correspondant apparaissent.
- Saisir un prénom et toues les prénoms des contacts apparaissent.
En revanche, lorsque je saisis le nom et le prénom, je rencontre un problème.
Exemple : si je saisie paul martin, le site m'affiche tous les martin et tous les paul.
Je voudrai qu'il me recherche l'expression entière. Le souci est que je recherche dans deux champs : nom et prénom.
En fait l'utilisateur doit pouvoir rechercher soit :
- par le nom
- par le prénom
- par l'expression exacte (ex : paul martin) sauf qu'il me sorte tous les martins.
Voici mon code si vous avez une idée ou un tuyau.
Merci beaucoup.
<?php
include("../connexion.php");
$sql = "select * from tadherents";
if (isset($_REQUEST["filtre"]))
{
$v_contact=$_GET['filtre'];
$v_nb=str_word_count($v_contact);
if ($v_nb==1)
{
$sql .= " where nom like '%$v_contact%' or prenom like '%$v_contact%'";
}
else
{
$mots = explode( " ", $v_contact );
$sql = "SELECT * FROM tadherents WHERE ";
for( $i = 0; $i < count( $mots ); $i++ ) {
$sql .= "nom LIKE '%". $mots[$i] ."%' OR prenom LIKE '%". $mots[$i] ."%'";
if( $i < count( $mots ) - 1 )
$sql.= " OR ";
}
}
}
$vresultat=mysql_query($sql);
?>
<HTML>
<H1>Résultat</H1>
<Form>
<input type="text" name="filtre">
<input type="submit" value="rechercher">
</Form>
<TABLE border=2 align=center>
<TR align='center'>
<TD>Nom</TD>
<TD>Prénom</TD>
<TD>Photo</TD>
</TR>
<?php while(($vligne = mysql_fetch_assoc($vresultat ))!==false): ?>
<TR>
<TD><?php echo $vligne["nom"];?></TD>
<TD><?php echo $vligne["prenom"];?></TD>
<TD><IMG SRC="/images/<?php echo $vligne ['photo']; ?>"></TD>
</TR>
<?php endwhile; ?>
</Table>
</UL>
</BODY>
</HTML>
J'ai créé un annuaire en PHP.
L'utilisateur peut :
- Saisir un nom et tous les noms des contacts correspondant apparaissent.
- Saisir un prénom et toues les prénoms des contacts apparaissent.
En revanche, lorsque je saisis le nom et le prénom, je rencontre un problème.
Exemple : si je saisie paul martin, le site m'affiche tous les martin et tous les paul.
Je voudrai qu'il me recherche l'expression entière. Le souci est que je recherche dans deux champs : nom et prénom.
En fait l'utilisateur doit pouvoir rechercher soit :
- par le nom
- par le prénom
- par l'expression exacte (ex : paul martin) sauf qu'il me sorte tous les martins.
Voici mon code si vous avez une idée ou un tuyau.
Merci beaucoup.
<?php
include("../connexion.php");
$sql = "select * from tadherents";
if (isset($_REQUEST["filtre"]))
{
$v_contact=$_GET['filtre'];
$v_nb=str_word_count($v_contact);
if ($v_nb==1)
{
$sql .= " where nom like '%$v_contact%' or prenom like '%$v_contact%'";
}
else
{
$mots = explode( " ", $v_contact );
$sql = "SELECT * FROM tadherents WHERE ";
for( $i = 0; $i < count( $mots ); $i++ ) {
$sql .= "nom LIKE '%". $mots[$i] ."%' OR prenom LIKE '%". $mots[$i] ."%'";
if( $i < count( $mots ) - 1 )
$sql.= " OR ";
}
}
}
$vresultat=mysql_query($sql);
?>
<HTML>
<H1>Résultat</H1>
<Form>
<input type="text" name="filtre">
<input type="submit" value="rechercher">
</Form>
<TABLE border=2 align=center>
<TR align='center'>
<TD>Nom</TD>
<TD>Prénom</TD>
<TD>Photo</TD>
</TR>
<?php while(($vligne = mysql_fetch_assoc($vresultat ))!==false): ?>
<TR>
<TD><?php echo $vligne["nom"];?></TD>
<TD><?php echo $vligne["prenom"];?></TD>
<TD><IMG SRC="/images/<?php echo $vligne ['photo']; ?>"></TD>
</TR>
<?php endwhile; ?>
</Table>
</UL>
</BODY>
</HTML>