Rercherche Db

Fermé
stampia02 Messages postés 95 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 - 28 mars 2017 à 14:46
stampia02 Messages postés 95 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 - 2 avril 2017 à 12:11
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 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 28 mars 2017 à 15:09
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 samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 1
28 mars 2017 à 15:28
Merci, par contre quand je clique sur rechercher j'ai un Warning : Division by Zero à la ligne du select.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 28 mars 2017 à 15:37
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 samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 1
28 mars 2017 à 17:49
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 samedi 30 juillet 2011 Statut Membre Dernière intervention 13 mai 2017 1
29 mars 2017 à 00:08
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 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
29 mars 2017 à 09:57
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
28 mars 2017 à 15:21
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
29 mars 2017 à 00:37
'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