Erreur :1054Unknown column in 'where clause'

Résolu/Fermé
tintin88 - 5 sept. 2008 à 09:27
 tintin88 - 5 sept. 2008 à 10:23
Bonjour,

Débutant en php/mysql, je souhaite effectuer des tris successifs sur des plantes (Famille puis Genre) à partir d'une table Mysql de la façon suivante :
1°) Sélection de la Famille dans une liste déroulante (présente dans adet1.php) et envoi vers adet2.php
2°) Récupérération dans adet2.php et affichage d'une autre liste déroulante ne montrant que les plantes de cette famille, et en permettant cette fois-ci, la sélection du Genre. Même si je n'ai pas finalisé la fin de ce second fichier, je me heurte lors des tests au problème suivant:

Même si la sélection dans adet1.php semble transmettre la bonne famille sélectionnée, le message d'erreur suivant apparaît dans adet2.php Erreur :1054Unknown column 'ARACÉES' in 'where clause', et ce, alors que j'ai sélectionné ARACÉES dans adet1.php

******La table bota_foret comporte les champs suivants:******

id
NomCommun
NomLatin
Famille
Adresse

******adet1.php est ci-dessous********
<?php
// Inclusion du fichier de connexion à la base de données
include "mysql_conf.inc.php";

// Connexion à MySql
$link=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );

// Sélection de la base
$base = mysql_select_db($base);

if (!$base)
{echo 'impossible d\'ouvrir la base.';
}
else
{echo '';
}
?>

<HTML>
<HEAD>
<TITLE>Botanique forestière : liste de plantes comprises dans la table bota_foret</TITLE>
</HEAD>
<body>
<?php

// Affichage des enregistrements

echo ("<form action='adet2.php' method='post'>");
echo ("<select name = 'ChoixF'>");
$SQL = "SELECT DISTINCT Famille FROM bota_foret ORDER by Famille ASC";
$res = mysql_query($SQL);
while($val=mysql_fetch_array($res)) {
echo "<option>".$val["Famille"]."</option>\n";
}

echo ("</select>");
echo "<input type = 'submit' value = 'Envoyer'>";
echo ("</form>");
mysql_close();
?>
</body>
</html>

*********** adet2.php est ci-après **********
<?php
// Inclusion du fichier de connexion à la base de données
include "mysql_conf.inc.php";

// Connexion à MySql
$link=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );

// Sélection de la base
$base = mysql_select_db($base);

if (!$base)
{echo 'impossible d\'ouvrir la base.';
}
else
{echo '';
}


if (isset($_POST['Famille'])) {
// On aurait utilisé $_GET['Famille'] si on avait utilisé method="GET"
// on affiche nos résultats
echo 'La famille choisie est '.$_POST['Famille'];
}

else
{echo 'La famille choisie est '.$_POST['Famille'];
}


// Affichage des enregistrements
$select = "SELECT * FROM bota_foret WHERE Famille=".$_POST['ChoixF'];

$result =mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
$rows = mysql_num_rows($result);

if ($rows) {
echo '<table>'."\n";
echo '<tr>';
// echo '<td><p align="center">Id : </td>';
echo '<td><p align="center">Nom commun : </td>';
echo '<td><p align="center">Nom latin : </td>';
echo '<td><p align="center">Genre : </td>';
echo '</tr>'."\n";

// Résultats
while ($rows=mysql_fetch_array($result)) {
echo '<tr>';
// echo '<td><p align="center">'.$rows['id'].'</td>';
echo '<td><p align="center">'.$rows['NomCommun'].'</td>';
echo '<td><p align="center">'.$rows['NomLatin'].'</td>';
echo '<td><p align="center">'.$rows['Genre'].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";
}

mysql_close();
?>
***********************************

Quelqu'un pourrait-il me venir en aide ?
Merci d'avance à toutes les bonnes volontés.

3 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 sept. 2008 à 09:45
Salut,

dans une liste déroulante il faut toujours une value dans <option sinon sur certains navigateurs ça ne marche pas
ex dans adet1.php:
echo "<option>".$val["Famille"]."</option>\n";
}


il faut:
echo "<option value=\"".$val["Famille"]."\">".$val["Famille"]."</option>\n";
} 


rectifies partout

ensuite dans adet2.php:

// Affichage des enregistrements
$select = "SELECT * FROM bota_foret WHERE Famille='".$_POST['ChoixF']."'";

$result =mysql_query($select,$link) or die ('Erreur :'.mysql_errno().mysql_error());
$rows = mysql_num_rows($result);

if ($rows > 0) {
echo '<table>'."\n";
echo '<tr>';
........


mysql_num_rows() te retourne le nombre d'enr trouvés donc sera tjs vrai il faut tester si >0
1
Bonjour
$select = "SELECT * FROM bota_foret WHERE Famille=".$_POST['ChoixF']; 

si tu ne mets pas $_POST['choixF'] entre guillemets , ça n'est pas une valeur mais le nom d'une colonne. Et bien sûr MySQL ne la connait pas
$select = "SELECT * FROM bota_foret WHERE Famille='".$_POST['ChoixF']."'"; 
0
Bonjour à tous et un grand merci à Alain_42 et toto pour la rapidité et la véracité de leurs réponses qui correspondent parfaitement à ce que je cherchais à savoir.
Encore merci.
tintin88
0