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   -
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

	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:

3 réponses

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
1
stampia02 Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci, par contre quand je clique sur rechercher j'ai un Warning : Division by Zero à la ligne du select.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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 ")
0
stampia02 Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   1
 
J'ai plus d'erreur, par contre le site ne reagit toujours pas quand je clique sur le bouton rechercher...
0
stampia02 Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   1
 
Ca fonctionne ! par contre je ne comprend pas trop pourquoi, dans la function run() j'ai d'abord mis le code de la recherche puis le code de l'ajout d'un livre et la a fonctionne... Mais je ne comprend pas trop ce que cela change
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Ah j'ai vu pourquoi.
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
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
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,
1
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'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à.
1