Rercherche Db
stampia02
Messages postés
105
Statut
Membre
-
stampia02 Messages postés 105 Statut Membre -
stampia02 Messages postés 105 Statut Membre -
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>
3 réponses
-
Bonjour,
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-
-
Alors tu n'as pas dû mettre le % comme il faut.
Ta ligne doit ressembler à ça :$query = "SELECT * FROM livres WHERE titre LIKE '%$mot%'";
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 ") -
-
-
-
-
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, -
'lut,
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à.