Problème avec le SELECT...

Eléphanteau du PHP | 43 Messages

03 déc. 2007, 17:00

Bonjour, j'un un petit problème, je suis en train de faire un moteur de recherche qui utilise la base de donnée, et je n'arrive pas a afficher une solution en fonction d'un champs remplie au prealable par l'utilisateur.

Le code ressemble à celui ci :

<?php
include("connexion.php");

$_POST['recherche'] = htmlspecialchars($_POST['recherche']);

$recherche = $_POST['recherche'];
$categorie = $_POST['categorie'];

if($recherche != "")
{

$result = mysql_query("SELECT * FROM `bdd` WHERE `titre` LIKE CONVERT( _utf8 '%$recherche%' USING latin1 )  ");

while ($row = mysql_fetch_array($result)) 
{
   echo $row["id"]  ;// par exemple
}
}
else
{
echo "";
}
?>
Et le soucis, c'est dès que je tape ne serais ce qu' une lettre compris dans un des champs de la base de donnée, et bien le code s'execute, chose que je ne veux pas.
L'objectif étant tout de meme, des que je tape un mot, si ce mot existe dans la table, et bien il m'affiche l'ID correspondant.(donc le "WHERE = $recherche" ne fonctionne pas lui aussi.)

Pareil si je tape

Code : Tout sélectionner

SELECT * FROM `bdd`WHERE `titre` REGEXP CONVERT( _utf8 '$recherche' USING latin1 )
Version du serveur: 5.0.45

Code : Tout sélectionner

CREATE TABLE `bdd` ( `id` int(11) NOT NULL auto_increment, `type` text NOT NULL, `titre` text NOT NULL, `descriptif` text NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=82 DEFAULT CHARSET=latin1 AUTO_INCREMENT=82 ;

Petit nouveau ! | 7 Messages

03 déc. 2007, 18:35

Bonjour :)

J'comprends mal le problème.
Tu voudrais que ton code ne s'exécute pas si tu n'as saisi qu'une seule lettre ?

~L~

Eléphanteau du PHP | 43 Messages

03 déc. 2007, 18:40

Bonjour, je voudrais pour faire simple creer un moteur de recherche, qui recherche dans une base de donnée, sauf que je ne sais pas quel commande en sql je dois utiliser pour y arriver.
Merci...

Petit nouveau ! | 7 Messages

03 déc. 2007, 18:43

LIKE c'est très bien déjà. C'pour ça que j'demande plus d'explication car je ne comprends pas bien le soucis :roll:

~L~

Eléphanteau du PHP | 43 Messages

03 déc. 2007, 18:52

LIKE ne fonctionne pas comme je le souhaite. Je vais donner un exemple, il y a dans le champs titre, la phrase : vive le php.
et je tape seulement la lettre v est il affichera la requette , alors qu'il y a seulement une lettre en commun...

ViPHP
AB
ViPHP | 5818 Messages

03 déc. 2007, 18:57

Un peu pareil, je me demande ce que tu souhaites et ce qui ne fonctionne pas dans ton code.

Si tu souhaites un minimum de lettre pour effectuer ta requête tu peux la conditionner à un strlen($recherche) par exemple.

EDIT j'ai posté avant de voir ton dernier message...

Eléphanteau du PHP | 43 Messages

04 déc. 2007, 00:53

Voila :

Code : Tout sélectionner

Version du serveur: 5.0.45 CREATE TABLE `electa` ( `id` int(11) NOT NULL auto_increment, `type` text NOT NULL, `titre` text NOT NULL, `descriptif` text NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=82 DEFAULT CHARSET=latin1 AUTO_INCREMENT=82 ; -- phpMyAdmin SQL Dump -- version 2.6.4-pl3 -- http://www.phpmyadmin.net -- -- Serveur: db1227.1and1.fr -- Généré le : Lundi 03 Décembre 2007 à 23:33 -- Version du serveur: 5.0.45 -- Version de PHP: 4.3.10-200.schlund.1 -- -- Base de données: `db226748350` -- -- -------------------------------------------------------- -- -- Structure de la table `electa` -- CREATE TABLE `electa` ( `id` int(11) NOT NULL auto_increment, `type` text NOT NULL, `titre` text NOT NULL, `descriptif` text NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=82 DEFAULT CHARSET=latin1 AUTO_INCREMENT=82 ; -- -- Contenu de la table `electa` -- INSERT INTO `electa` VALUES (1, '1', '1', '1'); INSERT INTO `electa` VALUES (2, '2', '2', '2'); INSERT INTO `electa` VALUES (3, '3', 'test de besoin', '3'); INSERT INTO `electa` VALUES (4, '4', '4', '4'); INSERT INTO `electa` VALUES (5, '5', '2', '5'); INSERT INTO `electa` VALUES (6, '6', '6', '6'); INSERT INTO `electa` VALUES (7, '7', '7', '7'); INSERT INTO `electa` VALUES (8, '8', '8', '8'); INSERT INTO `electa` VALUES (9, '9', '9', '9');
Ca c'est pour le code de la table.

Code : Tout sélectionner

Version du serveur: 5.0.45 CREATE TABLE `electa` ( `id` int(11) NOT NULL auto_increment, `type` text NOT NULL, `titre` text NOT NULL, `descriptif` text NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=82 DEFAULT CHARSET=latin1 AUTO_INCREMENT=82 ; <?php include("connexion.php"); $_POST['recherche'] = htmlspecialchars($_POST['recherche']);//protection contre injection sql. $recherche = $_POST['recherche']; $categorie = $_POST['categorie']; if($recherche != "") { $result = mysql_query("SELECT * FROM `electa` WHERE `titre` LIKE CONVERT( _utf8 '%$recherche%' USING latin1 ) "); while ($row = mysql_fetch_array($result)) { echo $row["id"] ; } } else { echo ""; } ?>
et dès que je tape "t" et bien il m'affiche l'id correspondant a "test de besoin", et c'est problematique...

ViPHP
AB
ViPHP | 5818 Messages

04 déc. 2007, 01:14

Comme je te le disais tout à l'heure si tu fais
if(strlen($recherche) > 3)
{

$result = mysql_query("SELECT * FROM `electa` WHERE `titre` LIKE CONVERT( _utf8 '%$recherche%' USING latin1 )  ");

while ($row = mysql_fetch_array($result))
{
   echo $row["id"]  ;
}
}
else
{
echo "";
} 
La recherche ne s'effectuera que sur des entrées de quatre lettres minimum. Et le résultat ne sera OK que si ces quatre lettres consécutives (minimum) sont bien dans ton titre. Cela ne te conviens pas?

Eléphanteau du PHP | 43 Messages

04 déc. 2007, 01:20

Oui!!c'est niquel, merci, en fait j'avais mal lu ton commentaire, merci beaucoup, je ne connaissais pas cette ligne de commande. Merci beaucoup...