Page 1 sur 1

Problème avec le SELECT...

Posté : 03 déc. 2007, 17:00
par zippox
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 ;

Posté : 03 déc. 2007, 18:35
par LexLxUs
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~

RE

Posté : 03 déc. 2007, 18:40
par zippox
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...

Posté : 03 déc. 2007, 18:43
par LexLxUs
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~

Posté : 03 déc. 2007, 18:52
par zippox
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...

Posté : 03 déc. 2007, 18:57
par AB
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...

Posté : 04 déc. 2007, 00:53
par zippox
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...

Posté : 04 déc. 2007, 01:14
par AB
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?

Posté : 04 déc. 2007, 01:20
par zippox
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...