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>
A voir également:
- Rercherche Db
- Fichier .db ✓ - Forum Windows
- Db designer - Télécharger - Bases de données
- Bp bc db ✓ - Forum Excel
- Signification db classement foot - Forum Mobile
- 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à.
if(!empty($_POST['titre'] && !empty($_POST['auteur']))){Le parenthésage est foireux. Il faut mettre :
if (!empty($_POST['titre']) && !empty($_POST['auteur'])) {Xavier