Rercherche Db
stampia02
Messages postés
95
Date d'inscription
Statut
Membre
Dernière intervention
-
stampia02 Messages postés 95 Date d'inscription Statut Membre Dernière intervention -
stampia02 Messages postés 95 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai ajouter une function qui me permettrai de faire une recherche dans ma Db et d'afficher les livres concerné grâce à un mot clé. Sauf que rien ne fonctionne, je n'ai pas d'erreur particulière mais le site ne réagit pas..
Quelqu'un à une idée?
Voici tout mon code, je débute en php.
Merci
J'ai ajouter une function qui me permettrai de faire une recherche dans ma Db et d'afficher les livres concerné grâce à un mot clé. Sauf que rien ne fonctionne, je n'ai pas d'erreur particulière mais le site ne réagit pas..
Quelqu'un à une idée?
Voici tout mon code, je débute en php.
Merci
public function select($mot = ''){ require_once(MODEL . 'Livre.php'); if($mot != ''){ $query = "SELECT * FROM livres WHERE titre LIKE %'".$mot."'%"; }else{ $query = 'SELECT * FROM livres ORDER BY no DESC'; //select dans la table des livres $result = $this->_db->query($query); $tableau = array(); if ($result->rowcount() != 0 ){ while($row = $result->fetch()){ $tableau[] = new Livre($row->no,$row->titre,$row->auteur); //attribue a chaque colonnes les attribut de la classe Livre } } return $tableau; } }
public function run(){ require_once(MODEL . 'Db.php'); $mot = ''; $tabLivres=''; $tabLivres=Db::getInstance()->select($mot); #Ajouter d'un livre dans la DB if(!empty($_POST['submit_ajouter'])){ //IMPORTANT !! if(!empty($_POST['titre'] && !empty($_POST['auteur']))){ $titre = $_POST['titre']; $auteur = $_POST['auteur']; Db::getInstance()->insert(htmlspecialchars($titre),htmlspecialchars($auteur)); } } $tabLivres=Db::getInstance()->select($mot); #Effectuer une recherche dans la DB if(!empty($_POST['submit_recherche'])){ if(!empty($_POST['keyword'])){ $mot = $_POST['keyword']; Db::getInstance()->select($mot); }else{ $tabLivres=Db::getInstance()->select($mot); } }
<label>Rechercher:</label> <form action="index.php?action=livres" method="POST"> <input type="text" name="keyword"> <input type="submit" name="submit_recherche" value="Rechercher"> </form><br><br>
A voir également:
- Rercherche Db
- Comment ouvrir un fichier db ? ✓ - Forum Windows
- Db designer - Télécharger - Bases de données
- Bp bc db ✓ - Forum Excel
- Comment ouvrir un fichier db? ✓ - Forum Bases de données
- Db editor - Télécharger - Utilitaires
3 réponses
Bonjour,
Dans cette requête :
la requête SQL une fois les variables remplacées devient :
Or la bonne syntaxe est avec les % à l'intérieur de la chaîne de caractères :
Xavier
Dans cette requête :
$query = "SELECT * FROM livres WHERE titre LIKE %'".$mot."'%";
la requête SQL une fois les variables remplacées devient :
SELECT * FROM livres WHERE titre LIKE %'mot'%
Or la bonne syntaxe est avec les % à l'intérieur de la chaîne de caractères :
SELECT * FROM livres WHERE titre LIKE '%mot%'
Xavier
Salut,
Si ce n'est pas déjà fait, commence par activer l'affichage des erreurs PHP : http://www.infowebmaster.fr/tutoriel/afficher-erreur-php
Si tu utilises PDO, active l'affichage des erreurs sql : https://www.php.net/manual/fr/pdo.error-handling.php
As tu des erreurs après avoir activé leurs affichages ?
La méthode "rowcount" retourne le nombre de ligne affectée par une requête DELETE, UPDATE ou INSERT mais ne garantie pas de retourner le nombre de ligne d'une requête SELECT.
Voir https://www.php.net/manual/fr/pdostatement.rowcount.php#example-1076
Enfin, nous n'avons pas le code où tu affiches les résultats de ta recherche.
Bonne journée,
Si ce n'est pas déjà fait, commence par activer l'affichage des erreurs PHP : http://www.infowebmaster.fr/tutoriel/afficher-erreur-php
Si tu utilises PDO, active l'affichage des erreurs sql : https://www.php.net/manual/fr/pdo.error-handling.php
As tu des erreurs après avoir activé leurs affichages ?
La méthode "rowcount" retourne le nombre de ligne affectée par une requête DELETE, UPDATE ou INSERT mais ne garantie pas de retourner le nombre de ligne d'une requête SELECT.
Voir https://www.php.net/manual/fr/pdostatement.rowcount.php#example-1076
Enfin, nous n'avons pas le code où tu affiches les résultats de ta recherche.
Bonne journée,
'lut,
au passage, tu n'utilises pas les requêtes préparées, et ton code montre clairement une vulnérabilité d'injection SQL:
Explications plus approfondies ici.
Doc PHP sur les requêtes préparées là.
au passage, tu n'utilises pas les requêtes préparées, et ton code montre clairement une vulnérabilité d'injection SQL:
$_POST['keyword']finit inséré directement dans ta requête SQL.
Explications plus approfondies ici.
Doc PHP sur les requêtes préparées là.
Ta ligne doit ressembler à ça :
Xavier
(PS : quitte à utiliser les guillemets doubles, autant inclure les variables simples directement dans le texte comme je l'ai fait, ça facilite la lecture et évite la multiplication des . et des ")
Tu as une erreur de syntaxe dans ton bloc d'insertion, du coup le script s'arrêtait là.
Le parenthésage est foireux. Il faut mettre :
Xavier