rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Compter trier données recherche interne mysql

Posté par cdurlephp, le jeudi 13 mars 2008 à 13:12:15
Bonjour à tous,

débutant en php, j'ai besoin d'une aide.
J'essaie de faire un moteur de recherche en php intégré à mon site avec une base MySQL.
La base est créée et j'ai commencé la page de traitement des données.

Voici mon code :

<!-- php codepart 1 here -->
<?php require("libs/dbconnect.php");
 ?>
<!-- php codepart 1 end -->

<?PHP
echo $value;
$sql ='SELECT * FROM `commerces`'; 
$page_text_query = mysql_query($sql) or die("Query failed");
$cont = mysql_fetch_array($page_text_query);
echo $cont['Nom'];
echo '<br />';
echo $cont['Rue'];
echo '<br />';
echo $cont['Telephone'];
echo '<br />';
echo $cont['Fax'];
?>


Ce code fonctionne mais n'affiche qu'un résultat de recherche, le premier.
J'aurais souhaité savoir comment récupérer tous les résultats et les trier.
Je suppose qu'il faut faire une boucle avec if et else mais je ne connais pas la syntaxe de ce type de code.
J'ai regardé quelques tutos mais c'est un peu confus pour moi.

Pourriez-vous m'indiquer la marche à suivre ?
Avez-vous à disposition un exemple ?

Merci.
Configuration: Windows XP
Firefox 2.0.0.12
Répondre à cdurlephp  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Alain_42, le jeudi 13 mars 2008 à 13:28:57
il faut faire un eboucle while qui parcours tout les résultats extraits

<?php
echo $value;
$sql ='SELECT * FROM `commerces`'; 
$page_text_query = mysql_query($sql) or die("Query failed");
while($cont = mysql_fetch_array($page_text_query))
{
	echo $cont['Nom'];
	echo '<br />';
	echo $cont['Rue'];
	echo '<br />';
	echo $cont['Telephone'];
	echo '<br />';
	echo $cont['Fax'];
}
Répondre à Alain_42

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le jeudi 13 mars 2008 à 13:29:55
salut,

avec une boucle 'while()' :
while( $cont = mysql_fetch_array($page_text_query) )
{
      echo $cont['Nom'];
      echo '<br />';
      echo $cont['Rue'];
      echo '<br />';
      echo $cont['Telephone'];
      echo '<br />';
      echo $cont['Fax'];
}

pour trier/compter il faut le faire dans ta requête SQL.

un cours de PHP/MySQL.

<edit>
Tir croisé !!!
</edit> [ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le jeudi 13 mars 2008 à 14:01:51
Yeah, c'est clair tir croisé !
Merci beaucoup, maintenant tous les champs de ma base s'afffichent.
Je pense qu'il faut trier avec WHERE et LIKE étant donné que les mots-clefs sont enregistrés dans un seul champ 'Activites'.
Je vais essayer et quand je bloque je regarde sur ton lien Dalida.

Mille fois merci à tous les deux.
Répondre à cdurlephp

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le jeudi 13 mars 2008 à 14:13:15
Scuzi,

pour faire référence à mon champ de formulaire, savez-vous coment faire ?

D'après de que j'ai compris c'est :

SELECT * FROM 'commerces' WHERE 'recherche%' LIKE Activites


Quand je fais ça le navigateur répond : query failed. Donc il ne trouve rien.
Dans cet exemple 'commerces' = table, 'recherche%' = attribut name de mon champ texte et Activites = champ à analyser.

J'ai essayé : '%recherche%' et 'recherche'.
J'ai utilisé la méthode POST.

Il mem manque quelque chose.
Répondre à cdurlephp

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le jeudi 13 mars 2008 à 15:32:14
SELECT * FROM 'commerces' WHERE 'recherche' LIKE '%Activites%'

ce qui pourrait vouloir dire :
sélectionne tous les champs des lignes de la table 'commerces' dont le champ 'recherche' contient 'Activites' même si il y a des caractères avant ou après.
[ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le jeudi 13 mars 2008 à 15:52:57
Ok, ça j'ai compris avec le lien que tu m'as donné. C'était bien expliqué.

Seulement je ne peux pas utiliser une expression figée comme activites non ?

Le processus est-il celui-là :

- donner un nom au champ texte de mon formlaire rechercher
<input name=""blabla"/>
.
- Déclarer ce nom comme variable.
var blabla = ?????

- Comparer cette variable au champ de la table désiré, en l'occurence le champ activites.???
- Afficher les résultats???

Si c'est le cas c'est du php non ??
Existe t-il un exemple dont on peut s'inspirer, je ne veux pas d'un truc tout fait, je veux le faire tout seul mais une base (pas un cours de php parce-que l'info n'y figure pas forcément) de code existe pour ce genre de requêtes???

Merci pour tout.
Répondre à cdurlephp

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le jeudi 13 mars 2008 à 16:25:14
à vrai dire c'est ce que je croyais comprendre…

en gros,
ton formulaire :
	<form method="post" action="ton_script.php">
		<p><input type="text" name="valeur_a_chercher" /></p>
		<p><input type="submit" value="Rechercher" /></p>
	</form>

ton script PHP :
<?php
	$valeur_a_chercher = mysql_real_escape_string( $_POST['valeur_a_chercher'] );
	$sql = "SELECT `champ1` , `champ2` , `champ3` FROM `table` WHERE `champ_ou_tu_veux_chercher` LIKE '%$valeur_a_chercher%'";
	/* la suite tu connais... */
?>

comme tu utilises une variable provenant de l'utilisateur, il faut la protéger avec 'mysql_real_escape_string()' mais il faut que tu te sois connecté à ta BDD avant.
[ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le jeudi 13 mars 2008 à 17:00:05
Merci dalida.

Cependant, cela m'affiche :

echo $cont['Rue'];
	echo '';
	echo $cont['Telephone'];
	echo '<>';
	echo $cont['Fax']; ) ?>


On dirait qu'il prend ça comme du texte.
Pourtant je n'ai rien changé dans ce code depuis tout à l'heure.
J'ai juste rajouté les accolades.
Répondre à cdurlephp

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le jeudi 13 mars 2008 à 17:03:28
montre nous ta boucle, il y a une apostrophe en trop quelque part.
[ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le jeudi 13 mars 2008 à 17:45:24
J'ai trouvé j'avais mis des apostrophes à ma table dans ma requête SQL.

Maintenant le problème est que j'ai toujours 0 résultat héhé...
Répondre à cdurlephp

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le jeudi 13 mars 2008 à 17:50:28
en dessous de :
$sql = "SELECT `champ1` , `champ2` , `champ3` FROM `table` WHERE `champ_ou_tu_veux_chercher` LIKE '%$valeur_a_chercher%'";

ajoute
echo( $sql );
il va afficher la requête construite dans ton navigateur.
tu la copie/colle dans l'onglet "SQL" de PHPMyAdmin pour savoir si l'erreur vient de la requête ou du code.

si la requête est mauvaise, colle-là (la version servie) ici qu'on y jette un œil !
[ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le jeudi 13 mars 2008 à 21:02:19
Re,

après maintes recherches le moteur fonctionne, j'ai remplacé WHERE...LIKE par WHERE MATCH ... AGAINST et mes champs sont en FULLTEXT.

Dernier problème et pas des moindres, les résultats avec accentuation ne s'affichent pas.
Le pb est que j'ai codé les accents en html du type é
Il ne reconnait pas ces caractères.
Si je mets une lettre accentuée à la place, le navigateur m'affiche des points d'interrogation (logique) mais il m'affiche le bon résultat.
Je suis en utf-8 unicode.

Il n'y a pas qqch pour ignorer les caractères spéciaux html ?
Comme ça il devrait trouver les lettres autour comme si les caractères n'existaient pas.

Il me semblequ'ldoit retrouver des expressions régulièes qqch comme ça.
Je l'ai lu quelque part.

Si t'as encore une idée n'hésite pas.
Merci encore.
Répondre à cdurlephp

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le vendredi 14 mars 2008 à 10:35:29
Salut,

voici mon code :

<!-- php codepart 1 here -->
<?php require("libs/dbconnect.php");
 ?>
<!-- php codepart 1 end -->

<?PHP
$valeur = mysql_escape_string ( $_POST['valeur']);
$sql = "SELECT * FROM commerces WHERE MATCH (Nom,Rue,Telephone,Activites) AGAINST ('$valeur')"; 
$page_text_query = mysql_query($sql) or die('Query failed');
while ($cont = mysql_fetch_array($page_text_query, MYSQL_BOTH)) {
printf ('<br />');
printf ($cont['Nom']);
printf ('<br />');
printf ($cont['Rue']);
printf ('<br />');
printf ($cont['Telephone']);
printf ('<br />');
printf ($cont['Fax']);
printf ('<br />');
}
?>


Donc ça trouve la plupart du temps ce que l'on cherche mais pas les mots contenant des caractères spéciaux comme

&eacute;


ma question était, peut-on ignorer ces caractères avec une commande php?
Merci.
Répondre à cdurlephp

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le vendredi 14 mars 2008 à 10:40:37
Re,

j'ai trouvé ça sur php.net pour transformer les caractères:

string html_entity_decode  ( string $string  [, int $quote_style  [, string $charset  ]] )


Ma question est :

que représentent string et quote_style ?

gracias
Répondre à cdurlephp

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le vendredi 14 mars 2008 à 11:54:01
salut,

dans le manuel :
html_entity_decode() est la fonction contraire de htmlentities() : elle convertit les entités HTML de la chaîne string en caractères normaux. 

Le paramètre optionnel quote_style vous permet de définir ce qu'il adviendra des guillemets simples et doubles. Ce paramètre prend l'une des valeurs suivantes (et la valeur par défaut est ENT_COMPAT) : 

Tableau 310.  Constantes disponibles pour quote_style 

Constante Description 
ENT_COMPAT Convertit les guillemets doubles et ignore les guillemets simples.  
ENT_QUOTES Convertit les guillemets doubles et les guillemets simples.  
ENT_NOQUOTES Ne convertit aucun guillemet. 

la chaîne string est la chaîne à traiter.
[ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le vendredi 14 mars 2008 à 12:26:38
Salut,

oui j'ai lu ça, en fait je cherche une fonction mysql capable d'ignorer les caractères html insérés dans ma bdd.
Il s'agit de :

&eacute;
&agrave;
&icirc;


Comme ça ma fonction recherche ingnorera les accents et cherchera par exemple pat à la place de épaté.

Est-ce que je dois utiliser une regex ?
Répondre à cdurlephp

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le vendredi 14 mars 2008 à 12:34:33
ah d'accord !

non, il suffit d'encoder la variable contenant le texte à chercher.
$text_a_chercher = html_entities( $text_a_chercher )
[ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le vendredi 14 mars 2008 à 12:41:00
Hola,

après être allé sur :

http://fr.php.net/htmlentities

string htmlentities  ( string $string  [, int $quote_style  [, string $charset  [, bool $double_encode  ]]] )


j'ai essayé :

$valeur = htmlentities( $valeur );


Pour amélie j'obtiens
Amélie
.

Mon charset est UTF-8, donc ce devrait être :

$valeur = htmlentities( $valeur [, $UTF-8] );


C'est ce que je comprend d'après l'exemple mais ça ne marche pas....
Une idée ??

Merci.
Répondre à cdurlephp

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le vendredi 14 mars 2008 à 13:25:59
ah oui, utf !

$valeur = htmlentities( $valeur , 'UTF-8' );

les crochets signifient que le paramètre est optionnel, 'string' c'est le type, '$charset' c'est juste le nom donné à la variable pour cette définition.

donc dans ce cas il faut remplacer '[, string $charset ]' par
, 'UTF-8'
ou par
, $var
$var = 'UTF-8';
.
là, ça devrait le faire.
-;o)
[ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cdurlephp, le vendredi 14 mars 2008 à 13:42:36
Non ce n'est pas ç snif
<?PHP
$valeur = mysql_escape_string ( $_POST['valeur']);
$var = 'UTF-8';
$replace = html_entity_decode( $valeur , $var );
$sql = "SELECT * FROM commerces WHERE MATCH (Nom,Rue,Telephone,Activites) AGAINST ('$valeur')"; 
echo ($sql);
$page_text_query = mysql_query($sql) or die('Query failed');
echo ($cont[0]);
while ($cont = mysql_fetch_array($page_text_query, MYSQL_BOTH)) {
printf ('<br />');
printf ($cont['Nom']);
printf ('<br />');
printf ($cont['Rue']);
printf ('<br />');
printf ($cont['Telephone']);
printf ('<br />');
printf ($cont['Fax']);
printf ('<br />');
}
?>


est égale à :

Warning: html_entity_decode() expects parameter 2 to be long, string given in C:\xampp\htdocs\portail\recherche.php on line 33
SELECT * FROM commerces WHERE MATCH (Nom,Rue,Telephone,Activites) AGAINST ('')


Erreur mince !!!
Tu sais pourquoi ??
Merci à toi!
J'ai écris html_entity_decode car j'ai changé les caractères html de la base en caractères ANSI.
Répondre à cdurlephp

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dalida, le vendredi 14 mars 2008 à 14:58:53
j'y comprends plus rien !!!

si il y a des entités HTML dans la BDD, tu restes en UTF-8 et tu encodes la valeur à rechercher :
$valeur = htmlentities( $_POST['valeur'] , ENT_NOQUOTES , 'UTF-8' );
$valeur = mysql_escape_string ( $valeur );
$sql = "SELECT * FROM commerces WHERE MATCH (Nom,Rue,Telephone,Activites) AGAINST ('$valeur')"; 

[ Mathieu ]
Pensez à utiliser le bouton "Conserver la mise en forme du texte sélectionné" pour mettre en forme les codes sources et à cocher l'option "Résolu" quand c'est le cas, merci !
Répondre à Dalida
Logiciels pertinents trouvés dans les téléchargements
Télécharger Google Toolbar pour Internet Explorer 4Google Toolbar pour Internet Explorer - La barre d'outils Google permet : d'afficher le pagerank des pages visitées d'ajouter à vos favoris les pages que vous...Catégorie: Référencement
Licence: Freeware/gratuit
Télécharger DB Designer 4.0.5.6DB Designer - DB designer 4 est un logiciel permettant de concevoir visuellement des bases de données. Il possède également des fonctions...Catégorie: Bases de données
Licence: Open Source
Télécharger Open Workbench 1.1.6Open Workbench - Open Workbench est une application libre de gestion et de planification de projet. Il s'agit d'un équivalent libre de...Catégorie: Gestion de projet
Licence: Open Source
Télécharger WordPress 2.6WordPress - WordPress permet de faire de la publication personnelle. Il s’utilise comme éditeur de blogs ou gestionnaires des contenus...Catégorie: Blogs/CMS
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « compter trier données recherche interne mysql »