Compter trier données recherche interne mysql
cdurlephp
-
cdurlephp -
cdurlephp -
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 :
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.
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.
A voir également:
- Compter trier données recherche interne mysql
- Fuite données maif - Guide
- Trier des données excel - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Supprimer les données de navigation - Guide
- Logiciel pour trier les photos automatiquement - Guide
40 réponses
ajoute un
echo( $valeur );avant d'exécuter la requête et teste avec des caractères accentuées qu'on voit ce qu'il y a dedans !
Salut, je fais le point :
- Il y a des entités html dans ma bdd et même des liens. Ex :
- La recherche trouve des résultats mais pas pour amélie par exemple.
- Avec htmlentities normalement ce qui est transmis par POST a ses accents qui se tranforment en entités html non?
Avec ce code :
La recherche ne trouve rien.
Dans MySQL :
L'interclassement exact de ma table est utf8_unicode_ci et le type MyISAM c'est important ?
Le type de chaque champ est text et l'index est en fulltext pour permettre une recherche plein texte.
Merci de ta patiente.
- Il y a des entités html dans ma bdd et même des liens. Ex :
<a href="truc.html">amélie</a>
- La recherche trouve des résultats mais pas pour amélie par exemple.
- Avec htmlentities normalement ce qui est transmis par POST a ses accents qui se tranforment en entités html non?
Avec ce code :
?PHP
$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')";
$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 ('<span class="search">');
printf ($cont['Rue']);
printf ('<br />');
printf ($cont['Telephone']);
printf ('<br />');
printf ($cont['Fax']);
printf ('</span>');
printf ('<br />');
}
?>
La recherche ne trouve rien.
Dans MySQL :
L'interclassement exact de ma table est utf8_unicode_ci et le type MyISAM c'est important ?
Le type de chaque champ est text et l'index est en fulltext pour permettre une recherche plein texte.
Merci de ta patiente.
bis repetita placent !
mais tu as regardé ce qu'il y a dans la variable ???
faut savoir si ta requête est mal construite ou si c'est la logique qui foire.
mais tu as regardé ce qu'il y a dans la variable ???
faut savoir si ta requête est mal construite ou si c'est la logique qui foire.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ok je viens de m'apercevoir qu'il y a deux pages sur le POST ;.)
Un echo ($valeur);
me renvoit amélie et pas
Je pense donc que j'ai fait une faute, le texte n'est pas converti ?
Un echo ($valeur);
me renvoit amélie et pas
amélie.
Je pense donc que j'ai fait une faute, le texte n'est pas converti ?
Mais maintenant que j'ai rajouté les 3 dernières lignes de code que tu m'as donnée :
Il trouve société, amélien, château mais pas amélie... Strange isn't it ?
Aurais-tu un conseil ?
$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')";
Il trouve société, amélien, château mais pas amélie... Strange isn't it ?
Aurais-tu un conseil ?
Bien vu, c'est intéressant!!
My SQL ne retourne aucun enregistrement pour amélie.
Pourtant c'est la ville concernée par ce site et ce mot y figure dans chaque enregistrement.
Ce n'est pas trop grave car normalement ce n'est pas un critère de recherche que les gens vont utiliser.
Toutefois, service ne marche pas ni méli mélo etc... Des mots oui d'autres non.
Mystère et boule de gomme...
My SQL ne retourne aucun enregistrement pour amélie.
Pourtant c'est la ville concernée par ce site et ce mot y figure dans chaque enregistrement.
Ce n'est pas trop grave car normalement ce n'est pas un critère de recherche que les gens vont utiliser.
Toutefois, service ne marche pas ni méli mélo etc... Des mots oui d'autres non.
Mystère et boule de gomme...
je te conseille d'utiliser cette technique dès que tu as un soucis avec MySQL, ça peut éviter des heures de prise de tête.
mais il vaut mieux trouver le pourquoi, sinon cela veut tout simplement dire que ta recherche n'est pas fiable et dans ce cas mieux ne pas en avoir du tout.
l'interclassement est en 'ci' (insensible à la casse) ?
dans ta BDD tu as bien 'amélie' et pas 'am&ecute;lie' ou 'amé,lie' ?
mais il vaut mieux trouver le pourquoi, sinon cela veut tout simplement dire que ta recherche n'est pas fiable et dans ce cas mieux ne pas en avoir du tout.
l'interclassement est en 'ci' (insensible à la casse) ?
dans ta BDD tu as bien 'amélie' et pas 'am&ecute;lie' ou 'amé,lie' ?
tu dois avoir 'am´lie'
(comme CCM interprète il faut remplacer le & de l'entité par sa propre entité &)
donc, il suffit de corriger ta BDD.
(comme CCM interprète il faut remplacer le & de l'entité par sa propre entité &)
donc, il suffit de corriger ta BDD.
En fait, pour être clair :
il faut que je remplace
par
Parce-que sur la bdd j'ai déjà
Sinon je comprend plus...
il faut que je remplace
amélie
par
'amélie'
Parce-que sur la bdd j'ai déjà
amélie
Sinon je comprend plus...
ah ben non alors !!!
ne tiens pas compte des apostrophes c'est juste pour délimiter.
j'avais compris que tu avais 'am´lie' donc avec un accent aigu mais sans le 'e' c'est à dire 'am´lie' donc je te disais de le corriger par le 'é' c'est à dire 'é'.
mais si la valeur est bonne, pas de soucis de ce côté là.
ne tiens pas compte des apostrophes c'est juste pour délimiter.
j'avais compris que tu avais 'am´lie' donc avec un accent aigu mais sans le 'e' c'est à dire 'am´lie' donc je te disais de le corriger par le 'é' c'est à dire 'é'.
mais si la valeur est bonne, pas de soucis de ce côté là.
Ok, donc je reviens au départ ça reconnait certains caractères mais pas les autres c'est du pur délire.
As-tu un ultime conseil ?
As-tu un ultime conseil ?
la casse, l'interclassement est-il en 'ci' ?
y a-t-il quelque chose de particulier pour 'amélie' (début de chaine, mot seul…) ?
as-tu essayé avec 'LIKE' et les '%' ?
as-tu bien respecté les conditions d'utilisation de la recherche en 'fulltext' ?
as-tu essayé 'AGAINST ('$valeur' WITH QUERY EXPANSION)' ?
ou si tu as une idée de ce que je pourrais faire à manger ce soir !
-:oD
y a-t-il quelque chose de particulier pour 'amélie' (début de chaine, mot seul…) ?
as-tu essayé avec 'LIKE' et les '%' ?
as-tu bien respecté les conditions d'utilisation de la recherche en 'fulltext' ?
as-tu essayé 'AGAINST ('$valeur' WITH QUERY EXPANSION)' ?
ou si tu as une idée de ce que je pourrais faire à manger ce soir !
-:oD
Spaghettis bolo ?
Simple, mais bon ?
Je consulte ton lien.
Oui avec LIKE et % j'ai essayé mais ça indique toujours Query failed.
Avec Query expansion ça m'affiche tout le contenu de la table.
Ou des légumes ? C'est bon pour la santé ;-))
Merci à toi je suis paumé mais je me soigne.
Simple, mais bon ?
Je consulte ton lien.
Oui avec LIKE et % j'ai essayé mais ça indique toujours Query failed.
Avec Query expansion ça m'affiche tout le contenu de la table.
Ou des légumes ? C'est bon pour la santé ;-))
Merci à toi je suis paumé mais je me soigne.
faut réussir à faire tourner le 'LIKE'.
tu as fait 'echo()' plus test PHPMyAdmin ?
peux tu nous coller le message d'erreur ?
(pour l'instant ce sera pâté maison/vin rouge…)
tu as fait 'echo()' plus test PHPMyAdmin ?
peux tu nous coller le message d'erreur ?
(pour l'instant ce sera pâté maison/vin rouge…)
désolé de te faire partager ma vie mais je vais chercher ma copine à la gare!
Et là je ne suis plus sur le même ordinateur.
J'enverrai le code demain ou.. la solution peut-être si un miracle se produit (j'espère!!!).
Html et css je connaissais mais php je n'avais jamais voulu m'y mettre.
En plus en couplant avec MySQL = mélange détonant.
Tiens alors : http://blogueuz.com/billet_pates-au-vin-rouge_cuisinegirls.html
Bon c'est un blog de filles mais t'avais pas qu'à choisir ce pseudo.
Et là je ne suis plus sur le même ordinateur.
J'enverrai le code demain ou.. la solution peut-être si un miracle se produit (j'espère!!!).
Html et css je connaissais mais php je n'avais jamais voulu m'y mettre.
En plus en couplant avec MySQL = mélange détonant.
Tiens alors : http://blogueuz.com/billet_pates-au-vin-rouge_cuisinegirls.html
Bon c'est un blog de filles mais t'avais pas qu'à choisir ce pseudo.
salut,
alors maintenant j'ai fait quelques modifs :
- je n'ai plus d'entités html dans ma bdd car j'ai lu dans la doc SQL que c'était déconseillé pour la recherche;
- Tous les mots sont trouvés sauf amélie, mais les mots commençant par am... sont dans la liste des stopwords dans la doc MySQL.
- L'affichage du coup fait des points d'interrogation à la place des lettres mais je suis déjà content que tout marche.
Je vous tiens au jus !!!
alors maintenant j'ai fait quelques modifs :
- je n'ai plus d'entités html dans ma bdd car j'ai lu dans la doc SQL que c'était déconseillé pour la recherche;
- Tous les mots sont trouvés sauf amélie, mais les mots commençant par am... sont dans la liste des stopwords dans la doc MySQL.
- L'affichage du coup fait des points d'interrogation à la place des lettres mais je suis déjà content que tout marche.
Je vous tiens au jus !!!
hello tous voilà mon code finalement, avec le formulaire sur la même page, (presque terminé, manque si la recherche comporte plus d'un mot) si ça peut aider quelqu'un :
<div id="category">
<form action="#formulaire" method="post">
<p>Recherche</p>
<div class="input1"><input name="valeur" type="text" />
</div><div class="input2"><input type="submit" name="submit" value="Envoyer"/></div>
</form>
</div>
<div style="position:absolute; left: 242px; top: 669px; "><a href="contact.html">
<img src="img/spacer.gif" width="80px" height="19px" border="0"/></a></div>
<div style="position:absolute; left: 330px; top: 669px;"><a href="mention.html"><img src="img/spacer.gif" width="161px" height="20px" border="0"/></a></div>
<br /><br /><br /><br />
<div name="formulaire" style="position:absolute; left:220px; width:600px; line-height:20px;">
<?PHP
$valeur = ( $_POST['valeur'] );
$replace = mysql_escape_string ( $valeur );
if ($valeur=="edf" || $valeur=="edf/gdf" || $valeur=="gdf"|| $valeur=="edf gdf" || $valeur=="edf-gdf"){
$valeur="edfedf";
}
$sql = "SELECT * FROM commerces WHERE MATCH (Nom,Rue,Telephone,Activites) AGAINST ('\%$valeur%' IN BOOLEAN MODE) ORDER BY Nom" ;
$page_text_query = mysql_query($sql) or die('Query failed');
$cpt = mysql_num_rows($page_text_query);
$rpp = 3;
$nbpages = ceil($cpt / $rpp);
$cpt2 = 0;
$cpt3 = 0;
$cpt4 = 1;
printf ('<br />');
if (strlen($valeur)==0 && $cpt == 0 ) {
print ("Veuillez entrer un terme de recherche");
}
else if(strlen($valeur)<=3 && $cpt == 0 ) {
print ("<p>Il y a $cpt résultat à votre demande</p>");
printf ('<div style="position:absolute; left="500px">');
printf ('Vos termes de recherche doivent contenir:');
printf ('<br />');
printf ('- Au moins 4 lettres ');
printf ('</div>');
}
else {
print ("<p>Il y a $cpt résultat(s)</p>" );
if ($nbpages > 1) {
echo "<p>Page :";
$stylelien1=" style=\"font-weight: bold;\"";
for ($i=1; $i<=$nbpages; $i++) {
echo " <a href=\"#\" id=\"lienpage".$i."\" ".$stylelien1."onClick=\"Javascript:affichePage(".$i.")\">".$i."</a>";
$stylelien1="";
}
echo "</p>";
}
while ($cont = mysql_fetch_array($page_text_query)) {
if ($cpt2 == 0) {
if ($cpt4 == 1) {
echo "<div id=\"page1\" style=\"display: inline;\">";
}
else {
echo "<div id=\"page".$cpt4."\" style=\"display: none;\">";
}
echo "<table border=\"0\"><tr><td><b>Nom</b></td><td><b>Adresse</b></td><td><b>Téléphone</b></td><td><b>Fax</b></td></tr>";
$cpt4++;
}
$cpt2++;
$cpt3++;
echo "<tr><td>".$cont['Lien']."</td><td>".htmlentities($cont['Rue'])."</td><td>".$cont['Telephone']."</td><td>".$cont['Id']."</td></tr>";
if ($cpt2 == $rpp || $cpt3 == $cpt) {
echo "</table></div>";
$cpt2 = 0;
}
}
}
printf ('<br />');printf ('<br />');?>