Page 1 sur 1

espace enter sur recherche bd + ameliore performance

Posté : 03 févr. 2006, 11:41
par gussss
tout d'abord bonjour :)

voila je viens de creer un programme de recherche dans ma DB, mais j'ai un probleme a l'affichage :

je m'explique, j'ai une parti description qui peut comporter des enter, des espace et autre, j'ai utilise nl2br() pour les enter ca c'est ok, mais pour les espace ca va pas donc si j'ai dans ma bd ; je suis la ...
il n'affichera que je.

et aussi, je voudrai que ma recherche soit plus performante, si je rentre pas le nom exacte il trouve rien hors si j'ai un jean pierre et pierre jean et que je rentre pierre, je voudrai trouver les deux.

j'ai essaye avec un LIKE '%$ma_variable%' met alors j'ai une erreur sql ...

pouvez vous m'aider?

Posté : 03 févr. 2006, 12:15
par gusss
voici le code ca sera peut etre plus claire pour vous :

Code : Tout sélectionner

<?php //include("connect.php"); // Paramètres de connexion à la base de données $BD_serveur = "localhost"; $BD_utilisateur = "root"; $BD_motDePasse = ""; $BD_base = "dit"; ?> <?function recherche($name){ mysql_connect("localhost", "root", ""); mysql_select_db("dit"); if($name=='') {$requete="SELECT idclient, nom, reception, resolution FROM client ORDER BY idclient";} else{ if($name!='') { $reqlogin=" nom='$name' "; } else $reqlogin=''; $requete="SELECT idclient, nom, reception, resolution FROM client WHERE $reqlogin ORDER BY idclient"; } $sql = mysql_query($requete) or die('Erreur SQL'); echo "<table width=\"100%\">"; while(list($idclient,$name, $reception , $resolution) = mysql_fetch_array($sql)) { $resolution = nl2br ($resolution); echo "<td><input type=\"text\" disabled=\"disabled\"size=\"2\" value=\"$idclient\" name=\"id\" ></td>". "<td><input type=\"text\" disabled=\"disabled\"size=\"15\" value=\"$name\" name=\"login\"></td>". "<td><input type=\"text\" disabled=\"disabled\"size=\"15\" value=\"$reception \" name=\"reception\"></td>". "<td><input type=\"textarea\" disabled=\"disabled\" size=\"45\" value=$resolution name=\"mail\" ></td>"; } echo "</table>"; } ?> <html> <head><title>Recherche</title></head> <body> Ceci est une page de recherche. <table><form method="post" > <tr> <td> <b>Login</b>: </td> <td> <input type="text" name="name" maxlength="32"/> </td> </tr> <tr><td></td><td> <input type="submit" value="Rechercher"/> </td></tr> </form> </table> <? if (isset($_POST['name'])){ recherche($_POST['name']);} ?> </body> </html>

Posté : 03 févr. 2006, 12:46
par Truc
Salut,

un champs de texte "textarea" ne se remplis pas ainsi, il n'y a pas d'attribut value mais:
<textarea rows="3" cols="5">
  valeur de la avriable
</textarea>
et de quel requete parles tu ? montre nous l'essaie que tu as fait

Posté : 03 févr. 2006, 12:55
par gussss

Code : Tout sélectionner

$requete="SELECT idclient, nom, reception, resolution FROM client WHERE $reqlogin LIKE '%$reqlogin%' ORDER BY idclient";
pour le text area et les espace j'ai reussit en simplifiant le tout ... juste que pas moyen d'aller a la ligne entre les lignes mais je trouverai ca

Posté : 03 févr. 2006, 13:03
par Truc
le probleme vient du faite que tu appel au nom du champ dans le LIKE:
...WHERE $reqlogin LIKE '%$reqlogin%' ORDER BY idclient";
avec
$reqlogin=" nom='$name' ";
cette requete devrai ressembler a ceci:
...WHERE nom LIKE '%$name%' ORDER BY idclient";
et éventuellement regarder du coté de addslashes() pour $name. sans oublié d'initialiser $name=""; pour eviter une cas particulier :wink:

Posté : 03 févr. 2006, 13:12
par gussss
avec ta requete c'est parfait ca marche, mais je comprend pas ton initialisation $name="";
car la y me reprendra tout, c'est comme faire une recherche blanche non?

Posté : 03 févr. 2006, 14:30
par Truc
c'est juste pour eviter un message d'erreur dans le cas ou la variable n'existerai pas. Si tu t'assure de bien affecter une valeur à la variable $name, pas besoin d'initialisation.

Posté : 03 févr. 2006, 14:43
par gussss
merci beaucoup