Moteur de recherche en php et concaténation requête SQL
Résolu/Fermé
informatique790
jordane45
- Messages postés
- 8
- Date d'inscription
- lundi 12 juin 2017
- Statut
- Membre
- Dernière intervention
- 8 juillet 2020
jordane45
- Messages postés
- 35712
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 juin 2022
A voir également:
- Moteur de recherche en php et concaténation requête SQL
- Moteur de recherche en php et concaténation requête SQL ✓ - Forum - PHP
- Petit moteur de recherche en php ? Help me ✓ - Forum - PHP
- Moteur de recherche interne php sans bdd ✓ - Forum - PHP
- Php afficher resultat requete sql ✓ - Forum - PHP
- Envoyer un mail en PHP avec une Requête SQL ✓ - Forum - PHP
3 réponses
jordane45
Modifié le 12 juin 2017 à 23:24
- Messages postés
- 35712
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 juin 2022
Modifié le 12 juin 2017 à 23:24
Bonjour,
Tu fais le QUERY ..; AVANT d'avoir construit ton WHERE...
Essaye ça :
edit: correction du $GET en $_GET
Cordialement,
Jordane
Tu fais le QUERY ..; AVANT d'avoir construit ton WHERE...
Essaye ça :
<?php //activation des erreurs php error_reporting(E_ALL); ini_set('display-errors','on'); //connexion à la bdd en activant les erreurs PDO try{ $bdd=new PDO('mysql:host=127.0.0.1;dbname=domaineexpertise','root',''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (Exception $e){ echo "Erreur : ".$e->getMessage(); } //récupération PROPRE des variables AVANT de les utiliser $q = !empty($_GET['q']) ? $_GET['q'] : NULL; if($q){ $s = explode(" ", $q); $sql = 'SELECT * FROM domaine '; $i = 0; foreach($s as $mot){ if(strlen($mot) > 3){ if($i==0){ $sql.=(' WHERE '); } else{ $sql.('" OR '); } $sql.=('keywords LIKE "%'.$mot.'%"'); $i++; } } //execution "propre" d'une requête try{ $result = $bdd->query($sql); }catch(Exception $e){ echo "Erreur dans la requête :" .$sql ." <br>".$e->getMessage(); } } ?> <form method="GET"> <input type="search" name="q" placeholder="Recherche..."/> <input type="submit" value="valider"/> </form> <ul> <?php while($a = $result->fetch()) { echo "<li>" .$a['nomDomaine'] ."</li>"; }?> </ul>
edit: correction du $GET en $_GET
Cordialement,
Jordane
jordane45
Modifié le 12 juin 2017 à 23:24
- Messages postés
- 35712
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 juin 2022
Modifié le 12 juin 2017 à 23:24
Ou une autre version utilisant un JOIN et un ARRAY temporaire
edit: correction du $GET en $_GET
Cordialement,
Jordane
<?php //activation des erreurs php error_reporting(E_ALL); ini_set('display-errors','on'); //connexion à la bdd en activant les erreurs PDO try{ $bdd=new PDO('mysql:host=127.0.0.1;dbname=domaineexpertise','root',''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (Exception $e){ echo "Erreur : ".$e->getMessage(); } //récupération PROPRE des variables AVANT de les utiliser $q = !empty($_GET['q']) ? $_GET['q'] : NULL; $strWhere =""; if($q){ $s = explode(" ", $q); if(count($s)>0){ $array_tmp = array(); foreach($s as $word){ $array_tmp[] = " keywords LIKE '%".$word."%'"; } $strWhere = " WHERE " . join(' OR ',$array_tmp) ; } $sql = 'SELECT * FROM domaine strWhere'; //execution "propre" d'une requête try{ $result = $bdd->query($sql); }catch(Exception $e){ echo "Erreur dans la requête :" .$sql ." <br>".$e->getMessage(); } } ?> <form method="GET"> <input type="search" name="q" placeholder="Recherche..."/> <input type="submit" value="valider"/> </form> <ul> <?php if(!empty($result)){ while($a = $result->fetch()) { echo "<li>" .$a['nomDomaine'] ."</li>"; } } ?> </ul>
edit: correction du $GET en $_GET
Cordialement,
Jordane
informatique790
12 juin 2017 à 23:18
- Messages postés
- 8
- Date d'inscription
- lundi 12 juin 2017
- Statut
- Membre
- Dernière intervention
- 8 juillet 2020
12 juin 2017 à 23:18
La recherche ne me donne aucun résultat, je crois que c'est explode qui ne marche pas car quand j'ai fais print_r($s); rien ne s'est affiché
jordane45
12 juin 2017 à 23:23
- Messages postés
- 35712
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 juin 2022
12 juin 2017 à 23:23
En fait ... pour récupérer une variable GET .. c'est $_GET qu'il faut utiliser ( et non $GET ) que j'avais mal écrit....
Mais bon..
On va passer en ton code en $_POST.
Ensuite, on va ajouter l'action dans le FORM.
Et on va ajouter un peu de débugage.
Essaye ça :
Mais bon..
On va passer en ton code en $_POST.
Ensuite, on va ajouter l'action dans le FORM.
Et on va ajouter un peu de débugage.
Essaye ça :
<?php //activation des erreurs php error_reporting(E_ALL); ini_set('display-errors','on'); //connexion à la bdd en activant les erreurs PDO try{ $bdd=new PDO('mysql:host=127.0.0.1;dbname=domaineexpertise','root',''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (Exception $e){ echo "Erreur : ".$e->getMessage(); } print_r($_POST);//le temps des tests //récupération PROPRE des variables AVANT de les utiliser $q = !empty($_POST['q']) ? $_POST['q'] : NULL; print_r($q);//le temps des tests if($q){ $s = explode(" ", $q); print_r($s); //le temps des tests $sql = ('SELECT * FROM domaine '); $i = 0; foreach($s as $mot){ if(strlen($mot) > 3){ if($i==0){ $sql.=(' WHERE '); } else{ $sql.('" OR '); } $sql.=('keywords LIKE "%'.$mot.'%"'); $i++; } } //execution "propre" d'une requête try{ echo $sql; //le temps des tests $result = $bdd->query($sql); }catch(Exception $e){ echo "Erreur dans la requête :" .$sql ." <br>".$e->getMessage(); } } ?> <form method="GET" action=""> <input type="search" name="q" placeholder="Recherche..."/> <input type="submit" value="valider"/> </form> <ul> <?php if(!empty($result)){ while($a = $result->fetch()) { echo "<li>" .$a['nomDomaine'] ."</li>"; } } ?> </ul>
informatique790
12 juin 2017 à 23:53
- Messages postés
- 8
- Date d'inscription
- lundi 12 juin 2017
- Statut
- Membre
- Dernière intervention
- 8 juillet 2020
12 juin 2017 à 23:53
C'est bon ça marche, merci infiniment pour ton aide ! :)
jordane45
13 juin 2017 à 00:27
- Messages postés
- 35712
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 juin 2022
- Messages postés
- 8
- Date d'inscription
- lundi 12 juin 2017
- Statut
- Membre
- Dernière intervention
- 8 juillet 2020
13 juin 2017 à 00:27
N'oublie pas de mettre le sujet en résolu (lien sous le titre de ta question)
12 juin 2017 à 22:52
j'ai essayé ce code mais maintenant j'ai l'erreur suivante :
Notice: Undefined variable: result in C:\Program Files (x86)\EasyPHP-12.1\www\ccm.php on line 56
Fatal error: Call to a member function fetch() on a non-object in C:\Program Files (x86)\EasyPHP-12.1\www\ccm.php on line 56
12 juin 2017 à 22:56
Pour remédier à ça essaye :
12 juin 2017 à 22:57