8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je fais un inventaire sur un parc informatique d'un établissement scolaire et je veux lier deux listboxs avec une base de données.

En utilisant ceci : or die(mysql_error()), j'ai un message d'erreur qui apparaît :
Unknown column 'B002' in 'where clause'

B002 étant la valeur d'une de mes tables SQL et représente un numéro de salle.

Voici ma page PHP
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin   = "root";
$mdp     = "";
$base    = "inventaire_parc_info";
/* On récupère si elle existe la valeur de la salle envoyée par le formulaire */
$idr = isset($_POST['liste_salle'])?$_POST['liste_salle']:null;
?>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>Version 100% PHP</h3>
<p>Vous constaterez qu'il y a un délai de latence entre la sélection et la mise à jour.</p>
<?php
if(isset($_POST['ok']) && isset($_POST['liste_materiel']) && $_POST['liste_materiel'] != "")
{
    $salle_selectionnee = $_POST['liste_salle'];
    $mat_selectionnee = $_POST['liste_materiel'];
?>
<p>Vous avez sélectionné le matériel <?php echo($mat_selectionnee); ?> dans la salle <?php echo($salle_selectionnee); ?></p>
<?php
}
?>
<h3>Trouver un matériel</h3>
<?php
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
*  car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_connect($serveur, $admin, $mdp);
if($connexion != false)
{
    $choixbase = mysql_select_db($base, $connexion);
    $sql1 = "SELECT `id_salle`, `nom_salle`".
    " FROM `salle`".
    " ORDER BY `id_salle`";
    $rech_salles = mysql_query($sql1);
    $code_salle = array();
    $salle = array();
    /* On active un compteur pour les salles */
    $nb_salles = 0;
    if($rech_salles != false)
    {
        while($ligne = mysql_fetch_assoc($rech_salles))
        {
            array_push($code_salle, $ligne['id_salle']);
            array_push($salle, $ligne['nom_salle']);
            /* On incrémente de compteur */
            $nb_salles++;
        }
    }
    ?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgmat">
<fieldset style="border: 3px double #333399">
<legend>Sélectionnez une salle</legend>
<select name="liste_salle" id="liste_salle" onchange="document.forms['chgmat'].submit();">
  <option value="-1">- - - Choisissez une salle - - -</option>
    <?php
    for($i = 0; $i < $nb_salles; $i++)
    {
?>
  <option value="<?php echo($code_salle[$i]); ?>"<?php echo((isset($idr) && $idr == $code_salle[$i])?" selected=\"selected\"":null); ?>><?php echo($salle[$i]); ?></option>
<?php
    }
    ?>
</select>
    <?php
    mysql_free_result($rech_salles);
    /* On commence par vérifier si on a envoyé un numéro de salle et le cas échéant s'il est différent de -1 */
    if(isset($idr) && $idr != -1)
    {
        /* Cération de la requête pour avoir les matériels de cette salle */
        $sql2 = "SELECT id_salle_contenir, id_mat_contenir
		FROM contenir  
		WHERE id_salle_contenir = ".$idr." ";
        if($connexion != false)
        {
            $rech_mat = mysql_query($sql2, $connexion) or die(mysql_error());
            /* Un petit compteur pour les matériels */
            $nd = 0;
            /* On crée deux tableaux pour les numéros et les noms des matériels */
            $code_mat = array();
            $nom_mat = array();
            /* On va mettre les numéros et noms des matériels dans les deux tableaux */
            [b]while($ligne_mat = mysql_fetch_assoc($rech_mat))[/b]
            {
                array_push($code_mat, $ligne_mat['id_salle_contenir']);
                array_push($nom_mat, $ligne_mat['id_mat_contenir']);
                $nd++;
            }
            /* Maintenant on peut construire la liste déroulante */
            ?>
<select name="liste_materiel" id="liste_materiel">
            <?php  
            for($d = 0; $d<$nd; $d++)
            {
                ?>
  <option value="<?php echo($code_mat[$d]); ?>"<?php echo((isset($mat_selectionnee) && $mat_selectionnee == $code_mat[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_mat[$d]." (". $code_mat[$d] .")"); ?></option>
                <?php
            }
?>
</select>
<?php
        }
        /* Un petit coup de balai */
        [b]mysql_free_result($rech_mat);[/b]
    }
?>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form>
<?php
    /* Terminé, on ferme la connexion */
    mysql_close($connexion);
}
else
{
    /* Si on arrive là, c'est pas bon signe, il faut vérifier les 
    * paramètres de connexion, mot de passe, serveur pas démarré etc... */
?>
<p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>
<?php
}
?>


A la base mes erreurs m'affichent :
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\tests\php_listes_liees.php on line 83

Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in C:\wamp\www\tests\php_listes_liees.php on line 104


Sauriez-vous trouver une solution ?
Cordialement,
lizeal
Modifié par lizeal (21 Jun 2013 - 10:52)
Salut,

Simple problème de syntaxe SQL. Dans la requête en question la valeur du nom de salle est une chaine de caractère et doit être délimiter par des guillemets, sinon cette valeur est considérée comme un nom de colonne :

$sql2 = "SELECT id_salle, nom_salle FROM salle WHERE id_salle = ".$idr." ";

doit être :
$sql2 = "SELECT id_salle, nom_salle FROM salle WHERE id_salle = '".$idr."' ";

ou
$sql2 = "SELECT id_salle, nom_salle FROM salle WHERE id_salle = '$idr' ";

ou
$sql2 = sprintf("SELECT id_salle, nom_salle FROM salle WHERE id_salle = '%s' ", $idr);


Voir mieux en utilisant PDO.
Modifié par moust (21 Jun 2013 - 10:57)