Formulaire avec 2 variables post dans la requête SQL

Gilles1973
Invité n'ayant pas de compte PHPfrance

13 févr. 2015, 09:36

Bonjour,

J'essaye mais je n'arrive pas à m'en sortir. Je fais un formulaire de recherche avec une liste de choix qui va chercher les nom de colonne dans la base sql et ensuite j'ai un champ de recherche ou l'on inscrit la valeur que l'on recherche. Malheureusement aucun résultat ne s'affiche et je ne comprends pas pourquoi. J'ai mis ci-dessous mon code quelqu'un aurait il la solution ? Merci d'avance



<?php
///---- Connection à la basse
$base = mysql_connect ('localhost', 'root', 'password');
mysql_select_db ('controle_facturation', $base) ;



///---- Requète pour les colonnes des champs de la table
$colonnes = mysql_query("SHOW COLUMNS FROM factures");


?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
</head>

<body>

<?php
//-----Liste déroulante de recherche 	
?>
<form id="form1" name="form1" method="POST">
<label>Sélectionnez une famille :
<select name="famille" id="famille">
<?php while($colonnes_array = mysql_fetch_assoc($colonnes))  { ?>
<option  ><?php echo $colonnes_array['Field']; ?></option>
<?php } ?>
</select>
</label>
  
<?php//----Valeur recherchée
?>
  <p>
    <label>Valeur recherchée:
      <input type="text" name="recherche" style=width:80px align:right/>
    </label>
  </p>
    
  <label>
  <input type="submit" name="bouton" id="bouton" value="Envoyer" />
  </label>
</form>
	
	
		
<?php
///----- Requête de recherche suivant une colonne à définir selon un menu déroulant et une valeur à saisir 
if (isset($_POST['famille'],$_POST['recherche'])) {
$requete_recherche="SELECT * FROM factures WHERE ".$_POST['famille']."=".$_POST['recherche'] ;	

$resultat=mysql_query($requete_recherche);
	while ($factures=mysql_fetch_array($resultat)) { ?>

<table width="600" border="1" cellspacing="0" cellpadding="5">
	
	<tr>
	<?php while ($colonnes_array = mysql_fetch_assoc($colonnes)) {?>
	<td><?php echo $colonnes_array['Field']; ?></td>
	<?php } ?>
	<td> <?php echo $factures; ?> </td>
	</tr>
	
<?php } } ?>	

</table>
<p><a href="menu_dossier.php">Retour au menu dossier</a></p>
<p><a href="menu_principal.php">Retour au menu principal</a></p>
</body>
</html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 févr. 2015, 14:43

A mon avis tu dois avoir des erreurs dans ta requête SQL :
$requete_recherche="SELECT * FROM factures WHERE ".$_POST['famille']."=".$_POST['recherche'] ; 
En effet, si $_POST['recherche'] contient autre chose qu'un nombre (c'est à dire que l'utilisateur passe une chaine de caractères en paramètres) alors celle-ci devrait être placée entre apostrophes dans ta requête SQL. Pas d'apostrophe en revanche pour $_POST['famille'] qui correspond au nom d'une table et non une valeur.

En cas d'erreur SQL, affiche la requête générée, cela aide en général à voir d'où vient le problème :)


Attention par ailleurs à toujours contrôler les variables que tu reçois de l'utilisateur et à ne pas lui permettre d'injecter n'importe quoi dans tes requêtes (cf. les problèmes de sécurité liés aux injections SQL).
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

gilles1973
Invité n'ayant pas de compte PHPfrance

13 févr. 2015, 22:44

Merci pour ta réponse, j'ai corrigé le tir mais maintenant la requête lorsque que j'entrée un numéro de facture cela m'affiche un trait noir en dessous mais pas de tête de colonne ni de donnée. :(
As tu un idée?