(Résolu) select avec php mysql

Eléphanteau du PHP | 49 Messages

08 déc. 2011, 22:32

Bonjour,
Besoin d'un coup de main sur ce bout de code, j'ai un textarea alimenté par un select...
Voici le code du select:

<form name="table" method="post">
<?php
// déclaration de ma variable
 $table = isset($_POST['choix_table']);

echo <<<CODE_HTML
<p style="text-align:center;">
<select name="choix_table" onchange="submit(this.form)">
<option selected="selected" value=""
CODE_HTML;
 ?>
<?php if ($_POST['choix_table'] == ""){ echo "selected";} ?>
 <?php
echo <<<CODE_HTML
>Choix de la base de données</option>
<option value="table_client"
CODE_HTML;
 ?>
<?php if ($_POST['choix_table'] == "table_client"){ echo "selected";}?>
 <?php
echo <<<CODE_HTML
>table des clients enregistrés</option>
<option value="table_newsletter"
CODE_HTML;
 ?>
<?php if ($_POST['choix_table'] == "table_newsletter"){ echo "selected";}?>
 <?php
echo <<<CODE_HTML
>table des clients newsletters</option>
</select>
 </p>
CODE_HTML;
 ?> 
</form>

Et le code du textarea alimenter en fonction du nom de la table dans le select....


<?php
require_once('../commerce/connect.php'); 
$idConnect = mysql_connect($Mysql_host, $Mysql_nom, $Mysql_login)
             or die( "Connexion impossible.");
$db = mysql_select_db( $Nom_bdd, $idConnect)
             or die( "Accès base impossible.");

// Requête SQL table_client ou table_newsletter on modifie le FROM en fonction du select au dessus

$table = isset($_POST['choix_table']) ? mysql_real_escape_string($_POST['choix_table']):'';

$rqSql = "SELECT DISTINCT mail FROM $table";
// Exécution de la requête
$result = mysql_query( $rqSql, $idConnect)
             or die( "Il faut faire choix d'une base de données.");
mysql_close( $idConnect); 

$ld = "<select name='select_mail' multiple='multiple' style='height:220px'>";
//$ld .= "<option value=0></option>";
// On boucle sur la table
while ( $row = mysql_fetch_array( $result)) {
  
    $mail = $row["mail"];
    $ld .= "<option value='$mail'>$mail</option>";
}
$ld .= "</select>";
print $ld;
mysql_close( $idConnect);
?>

Ca fonctionne, mais pas très bien au niveau du select...
Au moment du chargement de la page j'ai dans le select, trois message du style : ( Notice: Undefined index : choix_table in....)

Si je remplace dans le select $_POST['choix_table'] par $table ça me pose un soucis également..
Comment éviter ces trois messages d’erreur dans le select, ce n’est très présentable..

Merci.
Modifié en dernier par brother le 09 déc. 2011, 21:36, modifié 1 fois.

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

08 déc. 2011, 22:41

Ces avertissements t'indiquent des variables auxquelles tu fait appel sans avoir vérifié au préalable si elle existaient bien :)

Pis y a aussi quelques petits soucis de compréhension je pense...

Dans ton premier code :
 $table = isset($_POST['choix_table']);
$table sera donc TRUE si choix_table a été envoyé en post, et FALSE sinon, mais pas un nom de table

De même dans ton second code :
$table = isset($_POST['choix_table']) ? mysql_real_escape_string($_POST['choix_table']):'';
$table contiendra le nom de la table si choix_table a été envoyé en post, et une chaine vide sinon. Et si jamais il contient une chaine vide, la requête sql qui suit ne contenant pas de nom de table, va engendrer d'autres erreurs...

Le mieux serait de prévoir un nom de table par défaut si aucune valeur n'a été spécifiée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...