Recherche par critere dans une BDD

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recherche par critere dans une BDD

Re: Recherche par critere dans une BDD

par redshark59 » 09 avr. 2014, 16:05

Par contre j'ai toujours un soucis, je n'arrive pas a afficher les informations de la recherche venant de la table

Re: Recherche par critere dans une BDD

par redshark59 » 09 avr. 2014, 14:16

J'ai trouvé un début de solution à ma recherche, il arrive a detecter si ma recherche est ou non dans ma base et a ma le dire, il ne me reste plus qu'à gerer l'affichage de tout ça sur ma page

<?php 
// database settings 
$Host = 'localhost'; 
$User = 'root'; 
$Pass = ''; 
$Base = 'annuaire'; 

// mysql table : 
$Table = 'u557'; 
// field used for search 
$champ = 'Nom'; 
// number of chars to display 
$NB_carac = 100; 
?> 
<form method="post" action="<?=$PHP_SELF?>"> 
<input type="text" name="Psearch"><br /> 
<input type="submit" value="Search"> 
</form> 
<br /> 

<?php 
if(isset($_POST['Psearch']) && !empty($_POST['Psearch'])) { 

    mysql_connect($Host, $User, $Pass); 
    mysql_select_db($Base); 

    $search = trim($_POST['Psearch']); 
    $T = explode(' ', $search); 
    $count = count($T); 

    // build sql request 
    if($count > 1) { 
      $s = " $champ LIKE '%$search%' "; 
      for($i=0; $i<$count; $i++) { 
          if(empty($T[$i])) continue; 
        $s .= " OR $champ LIKE '%$T[$i]%' "; 
        $Ns[] = $T[$i]; 
        } 
      } 
    else { 
      $s = " $champ LIKE '%$search%' "; 
      $Ns[] = $search; 
      } 
    $Requete = "SELECT $champ from $Table WHERE $s"; 
    $Env = mysql_query($Requete) or die (mysql_error()); 

    if(mysql_num_rows($Env) == 0) $Error = 'No results'; 
    else $Error = FALSE; 
    echo $Error; 

    echo '<table border="1">'; 
    $i = 1; 
    while ($O = mysql_fetch_object($Env)) { 
      echo '<tr><td>'; 
      echo "<u>Results $i</u> <br /><br />"; 

      $count = count($Ns); 
      if($count > 1) { 
        for($x=0; $x<$count; $x++) { 
          if(empty($Ns[$x])) continue; 
          if(strpos(strtolower($O->$champ),strtolower($Ns[$x]))==TRUE) { 
            $search1 = $T[$x]; 
            continue; 
            } 
          } 
        } 

        else $search1 = $Ns[0]; 
        $pos = strpos(strtolower($O->$champ) , strtolower($search1)); 
        $O->$champ = substr($O->$champ, $pos, $NB_carac); 
        $last_space = strrpos($O->$champ, ' '); 
        $O->$champ = substr($O->$champ, 0, $last_space).' ...'; 
        $O->$champ = htmlspecialchars($O->$champ); 
        $O->$champ = nl2br($O->$champ); 
        $txt = preg_replace('`('.join('|', $Ns).')`i', 
                            '<b>$1</b>', 
                            $O->$champ); 
        $i++; 
        echo $txt; 

        echo '</td></tr>'; 
        } 
    echo '</table><br />'; 
    } 
?> 

Re: Recherche par critere dans une BDD

par sirakawa » 09 avr. 2014, 13:59

Re: Recherche par critere dans une BDD

par redshark59 » 09 avr. 2014, 13:48

Merci Sirakawa, et la page tester.php elle correspond a quoi ?

Re: Recherche par critere dans une BDD

par redshark59 » 09 avr. 2014, 13:38

Je n'ai aucune erreur qui s'affiche à l'écran, or lorsque je fais une recherche il ne me ressort aucune ligne.

Re: Recherche par critere dans une BDD

par sirakawa » 09 avr. 2014, 12:52

Voici un formulaire qui dispense de beaucoup de tests:
<form action="tester.php" method="get">
 Expression &agrave; rechercher: <input type="text" name="recherche" required = 'required' value=" " /><br />
 Type de recherche: <input type="radio" name="type" required = 'required' value="1"/> Un des mots 
<input type="radio" name="type" required = 'required' checked = 'checked' value="2" /> Tous les mots (dans tous les ordres?)
<input type="radio" name="type"required = 'required'  value="3" /> Expression exacte<br />

 Mettre en gras les mots recherch&eacute;s: <input type="radio" required = 'required' name="surligner"checked = 'checked' value="1"  /><br />

Ne pas mettre en gras les mots recherch&eacute;s: <input type="radio" required ='required' name="surligner" value="0"  /><br />
 <input type="submit" value="Rechercher" />
 </form>

Re: Recherche par critere dans une BDD

par moogli » 09 avr. 2014, 11:58

Modération :
Afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] etc.(selon le langage utilisé)

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ


salut,

as tu affiché la requête pour :
- voir si elle syntaxiquement correct
- voir si elle correspond bien à ce que tu attends
- la tester avec un client sql en dehors du contexte de php ?

ces étapes sont importantes pour être certain de ce que tu as fait et qu'il n'y ai pas de chose parasite (comme un or ou un and a la fin sans condition derrière ;)

@+

Recherche par critere dans une BDD

par redshark59 » 09 avr. 2014, 11:07

Bonjour à tous, je suis entrain de créer un site web et j'aimerais insérer un annuaire de recherche, je vous explique :
-Un utilisateur devrait pouvoir saisir par exemple un nom et si ce nom est dans la table afficher par la suite les infos
J'ai un script mais il n'a pas l'air de fonctionner. Ma BDD est sous MySQL, ma base s'appelle annuaire et ma table de recherche u557.

voici mon bout de code :
<?php
mysql_connect('localhost','root','');
mysql_select_db('annuaire');
//On determine l'expression a rechercher
if(isset($_GET['recherche']))
{
$rec = htmlentities($_GET['recherche']);
}
else
{
$rec = 'php MYSQL';
}
//On determine le type de recherche
if(isset($_GET['type']))
{
if($_GET['type']=='un')//Un des mots
{
$type = 1;
}
elseif($_GET['type']=='tout')//Tout les mots
{
$type = 2;
}
else//L'expression exacte
{
$type = 3;
}
}
else
{
$type = 1;//type par defaut: L'expression exacte
}
//On determine si on doit surligner les mots dans les resultats
if(!isset($_GET['surligner']) or $_GET['surligner']!='true')
{
$surligner = false;
}
else
{
$surligner = true;
}
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT Nom, Prenom FROM u557 WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
$mots = explode(' ',$rec);//En separre lexpression en mots cles
foreach($mots as $mot)
{
$req .= ' infos LIKE "%'.$mot.'%" OR';
}
$req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
$mots = explode(' ',$rec);//En separre lexpression en mots cles
foreach($mots as $mot)
{
$req .= ' infos LIKE "%'.$mot.'%" AND';
}
$req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
$req .= 'infos LIKE "%'.$rec.'%"';
}
//Les utilisateur seront ranges par identifiant en ordre croissant
$req .= ' order by id asc';
$requete = mysql_query($req);
//Le formulaire de recherche
?>
<form action="" method="get">
Expression &agrave; rechercher: <input type="text" name="recherche" value="<?php echo $rec; ?>" /><br />
Type de recherche: <input type="radio" name="type" value="un"<?php if($type==1){echo 'checked="checked"';} ?> /> Un des mots <input type="radio" name="type" value="tout"<?php if($type==2){echo 'checked="checked"';} ?> /> Tout les mots <input type="radio" name="type" value="exacte"<?php if($type==3){echo 'checked="checked"';} ?> /> Expression exacte<br />
Mettre en gras les mots recherch&eacute;s: <input type="checkbox" name="surligner" value="true" <?php if($surligner){echo 'checked="checked"';} ?> /><br />
<input type="submit" value="Rechercher" />
</form>
<h2>R&eacute;sultats</h2>
<table>
<tr>
<th>Identifiant</th>
<th>Nom</th>
<th>Informations</th>
</tr>
<?php
//On affiche les resultats
while($dnn = mysql_fetch_array($requete))
{
?>
<tr>
<td><?php echo $dnn['Nom']; ?></td>
<td><?php echo $dnn['Prenom']; ?></td>
<td><?php
if($surligner)//Si il faut surligner les mots, on les surligne
{
if($type==3)
{
echo preg_replace('#('.preg_quote($rec).')#i', '<strong>$1</strong>', $dnn['infos']);//On surligne l'expression exacte
}
else
{
echo preg_replace('#('.str_replace(' ','|',preg_quote($rec)).')#i', '<strong>$1</strong>', $dnn['infos']);//On surligne les mots cles de la recherche
}
}
else
{
echo $dnn['infos'];//On ne surligne pas
}
?></td>
</tr>
<?php
}
?>
</table>