Recherche dans une base mysql

Soyez le premier à donner votre avis sur cette source.

Snippet vu 31 837 fois - Téléchargée 30 fois

Contenu du snippet

Ce script est assez simple.
Il permet de faire une recherche sur des bases mysql.
Mes deux champs sur lesquels je fais ma recherche: client, file
Ma table : doc_clients

CREATE TABLE doc_clients (
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
client VARCHAR (100) not null,
file VARCHAR (100) not null
);

$motclef[$nbre_mots]) > 2 => permet de limiter la recherche (+de 2 caractères).
Je vous le propose.
haryou@free.fr

Source / Exemple :


Fichier config.php
----------------------
<?
// Paramètres de connexion à la base de données
$host = "localhost";              // Host de la base de données
$user = "user";                    // Login
$pass = "pwd";                    // Mot de passe
$bdd = "bdd";                      // Nom de la base de données
$table = "doc_clients";        // Nom de la table principale
$url = "http://lifeforce.int.xxxx.fr/stc/stcdoc/doc_clients/specificit_clients/"; // Répertoire contenant les différentes fiches
?>
----------------------
Fichier recherche.php
---------------------------

<script language="JavaScript">
<!--
function rechercher() {
 document.form_recherche.submit();
}
-->
</script>

<form name="form_recherche" method="post" action="<? echo $URL; ?>">
<input type="text" name="recherche" size="40" maxlength="100">
<input name="Submit" type="button" value="Rechercher" onclick="rechercher()">
</form>
<?
require 'includes/config.php';

// Connexion à la base de données
@mysql_connect($host,$user,$pass)
   or die("Impossible de se connecter à la base de données");
@mysql_select_db("$bdd")
   or die("Impossible de se connecter à la base de données");

// Variables
$recherche = strtolower($recherche);
$motclef = explode(" ",$recherche);
$nbre_mots = 0;

// Requête pour la recherche
while ($nbre_mots < sizeof($motclef)) {
 if (strlen($motclef[$nbre_mots]) > 2) {
  $query_client = mysql_query ("SELECT client, file FROM $table WHERE client LIKE '%$motclef[$nbre_mots]%' ");
  $query_file = mysql_query ("SELECT client, file FROM $table WHERE file LIKE '%$motclef[$nbre_mots]%' ");
  while ($row_client = mysql_fetch_array($query_client)) {
  echo 'Trouvé dans le champ Client';
  echo '<br>';
  echo 'client:';
  echo '<br>'; 
  printf ("%s", $row_client[0]);
  echo '<br>';
  echo 'lien:';
  echo '<br>';
  printf ("%s", $row_client[1]);
  }
  while ($row_file = mysql_fetch_array($query_file)) {
  echo 'Trouvé dans le champ Lien';
  echo '<br>';
  echo 'client:';
  echo '<br>';
  printf ("%s", $row_file[0]);
  echo '<br>';
  echo 'lien:';
  echo '<br>';
  printf ("%s", $row_file[1]);
  }
 }
 $nbre_mots++;
}
?>

A voir également

Ajouter un commentaire

Commentaires

Downlo
Messages postés
6
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
24 novembre 2005

Bon, on va me dire que je suis de la vieille école, mais je ne trouve pas l'usage du javascript très pertinent dans ce cas. Pourquoi ne pas avoir tout simplement utilisé un ? Chez tous les clients où le JS est désactivé, le formulaire ne sera tout simplement pas envoyé.
Bon, ensuite, niveau sécurité, même si ce n'est pas le but de la source, c'est pas top. Le maxlength est laissé à la discrétion du navigateur, il ne faut jamais l'oublier, c'est-à-dire que n'importe qui peut injecter n'importe quoi par les en-têtes http. Et encore... L'absence de $_POST indique que les variables globales sont activées, ce qui est un risque énorme niveau sécurité :s il suffit d'appeler [url]?recherche=[...] à répétition pour saturer MySQL. (C'est d'ailleurs à cause de l'usage de ces variables globales que ce script ne marche pas chez Free, comme chez la plupart des hébergeurs sans doute.) Il aurait pourtant suffit de vérifier la longueur de la chaîne reçue pour éviter ce genre d'attaque.
Bon, quant aux mini-tags <? , je pense qu'il est inutile que je me prononce. C'est très mauvais pour la portabilité (Arf, je l'ai dit quand même -_-' ).
Ha, oui, aussi (promis, après j'arrête), les die servent également au debug, il serait donc intéressant de ne pas mettre deux fois le même message, ou d'y intégrer l'erreur renvoyée par MySQL...

Bon, je me rends bien compte que tout ce que je viens de dire ne faisait pas partie du but premier de ce script. Mais c'est aussi pour répondre à "ça marche paaaaaaas" ^^ et pour éviter que les débutants ne l'intègrent tel quel dans leurs projets.
Antoine59840
Messages postés
6
Date d'inscription
vendredi 21 juillet 2006
Statut
Membre
Dernière intervention
9 janvier 2008

Salut,
Ton script ne marche pas sur free
C'est domage :s
AsselusBorealiss
Messages postés
79
Date d'inscription
dimanche 15 octobre 2000
Statut
Membre
Dernière intervention
24 septembre 2007

Salut marc660
waooowww 2005 je me souviens plus pourquoi j'avais pose une question
sinon marc la page config.php c'est juste la page qui pointe avec les login passW
a+
marc660
Messages postés
171
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
18 juillet 2007

Bonjour,

Je ne comprend pas a quoi ça sert $url et require 'includes/config.php et puis cette source ne marche pas.


@+
younes371
Messages postés
505
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
20 mars 2012

S4RuM4N , peux tu mettre ici l'ameliration du code possible
Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.