Recherche en base de données via PDO [Résolu/Fermé]

Signaler
-
 iTonton -
Bonjour chers membres de la communauté CMM :)
Voici mon soucis : je cherche à créer un petit moteur de recherche dans une table SQL permettant de rechercher des pièces informatiques pour pouvoir les localiser sur une étagère mais je n'y parviens pas :( Pour rechercher une pièces j'ai mis deux <SELECT> un qui contient les différentes marques et un qui contient les pièces, si je veux un clavier Asus, je sélectionne Asus et clavier et je voudrais obtenir une liste de tout les claviers Asus que j'ai mais quand je fais ma recherche ça ne fonctionne pas :'( ça me retourne cette erreur:
Call to a member function setFetchMode() on a non-object
Suite à mes recherches sur Google j'ai trouvé qu c'était la requête qui n'avait pas abouti, je pense donc avoir mal construit cette dernière mais je n'arrive pas à fixer mon erreur :/
voici mon formulaire (qui fonctionne nickel) :
Recherche par marque et type de piece:<br>
		<form method="POST" action="">
			<select name='marque' class="styled-select">
					<option value='0' >choissisez la marque</option> 

					<?php
					require('connexion.php');
					$resultats=$connexion->query("SELECT * FROM marques ORDER BY marque ASC"); 
					$resultats->setFetchMode(PDO::FETCH_OBJ); 
					while( $ligne = $resultats->fetch() ) 
					{
							echo '<option value="'.$ligne->marque.'">'.$ligne->marque.'</option>'; // on affiche la liste des marques
					}
					$resultats->closeCursor(); // on ferme le curseur des résultats
					?>
				</select> 
		
			<select name='piece' class="styled-select">
						<option value='0'  selected>choissisez la piece</option> 

						<?php
						require('connexion.php');
						$resultats=$connexion->query("SELECT * FROM pieces ORDER BY piece ASC"); 
						$resultats->setFetchMode(PDO::FETCH_OBJ); 
						while( $ligne = $resultats->fetch() ) 
						{
								echo '<option value="'.$ligne->piece.'">'.$ligne->piece.'</option>'; // on affiche la liste des pieces
						}
						$resultats->closeCursor(); // on ferme le curseur des résultats
						?>
						</select> 
						
			
		
		
		
		
		
		
		
			<input type="submit" name="search" value="Valider" class="styled-btn">
		</form>








et voici mon PHP qui doit traiter ces info et renvoyer une liste de mes pieces :



<?php
if(isset($_POST['search']))
{
	require('connexion.php');
	
				require('connexion.php');
				$resultats=$connexion->query("SELECT * FROM piecedet WHERE piece=".$_POST['piece']."AND marque=".$_POST['marque']." ORDER BY id DESC"); 
				$resultats->setFetchMode(PDO::FETCH_OBJ); 
				while( $ligne = $resultats->fetch() ) 
				{
						echo 'Piece No'.$ligne->id.'<br>'.$ligne->piece.' de la marque '.$ligne->marque.' ajoute le '.$ligne->date.'<br>La piece se situe sur l\'etagere No'.$ligne->etagere.' sur la planche No'.$ligne->planche.' dans le bac No'.$ligne->bac.'.<br> Remarque: '.$ligne->note; // on affiche les infos sur le composant
				}
				$resultats->closeCursor(); // on ferme le curseur des résultats
				
}

?>







Si vous pouviez m'aider ce serait fantastique car je buche depuis plusieurs heures sur mon appli et cette erreur m'empêche de la finaliser =)
Si vous arrivez à m'aider je vous offre de l'amour :P

iTonton

1 réponse

Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
222
Salut,

- Documentes toi sur PDO et les requêtes préparés.
- Pourquoi inclure 4 fois un même fichier, une fois suffit !
- Il ne suffit pas de vérifier que $_POST['search'] existe, tu dois vérifier que $_POST['marque'] et piece existent aussi et ne sont pas vides.
- Si tes tables contiennent des ID, alors tes requêtes de recherches doivent se faire en fonction des ID et non pas des libelles(nom de marque, nom de pièce).

A essayer !
<?php
// Une seule inclusion suffit
require_once 'connexion.php';
?>

Recherche par marque et type de piece :<br>

<form method="POST" action="">
 <select name="marque" class="styled-select">
  <option value="0">Choissisez la marque</option> 
  <?php
   $resultats = $connexion->query("SELECT * FROM marques ORDER BY marque ASC");  
   while($ligne = $resultats->fetch(PDO::FETCH_OBJ))
   {
    echo '<option value="' . $ligne->marque . '">' . $ligne->marque . '</option>'; // on affiche la liste des marques
   }
   $resultats->closeCursor(); // on ferme le curseur des résultats
  ?>
 </select> 
  
 <select name="piece" class="styled-select">
  <option value="0">Choissisez la piece</option> 
  <?php
   $resultats = $connexion->query("SELECT * FROM pieces ORDER BY piece ASC");
   while($ligne = $resultats->fetch(PDO::FETCH_OBJ))
   {
    echo '<option value="' . $ligne->piece . '">' . $ligne->piece . '</option>'; // on affiche la liste des pieces
   }
   $resultats->closeCursor(); // on ferme le curseur des résultats
  ?>
 </select> 
      
 <input type="submit" name="search" value="Valider" class="styled-btn">
</form>


<?php
if(isset($_POST['search']))
{
 $resultats = $connexion->prepare("SELECT * FROM piecedet WHERE piece = :p AND marque = :m ORDER BY id DESC"); 
 $resultats->execute(array(':p'=>$_POST['piece'], ':m'=>$_POST['marque']));
 while($ligne = $resultats->fetch(PDO::FETCH_OBJ)) 
 {
  echo 'Piece No ' . $ligne->id . 
  '<br>' . $ligne->piece . 
  ' de la marque ' . $ligne->marque . 
  ' ajoute le ' . $ligne->date . 
  '<br>La piece se situe sur l\'etagere No ' . $ligne->etagere . 
  ' sur la planche No ' . $ligne->planche . 
  ' dans le bac No ' . $ligne->bac . 
  '.<br> Remarque: ' . $ligne->note; // on affiche les infos sur le composant
 }
 $resultats->closeCursor(); // on ferme le curseur des résultats   
}
?>

Mettez en résolu quand c'est résolu -.- ...
Merci tu m'as vraiment beaucoup aidé et appris des choses :)