Champ select multiple - problème insertion valeur dans BDD MySql

Répondre
billledouble
le 05/08/2009 à 15:56
billledouble
Bonjour,

J'ai consulté pendant plus de 4 heures différents forums mais n'ai pas trouvé de réponse à mon problème que je vous expose ci-après :

J'ai créé un formulaire me permettant d'insérer des éléments dans une base de données MYSQL.

J'ai un problème avec un des champs: un champ select multiple. Alors qu'en testant le formulaire je choisis avec CTRL deux valeurs et que j'envoie mon formulaire, aucune valeur n'est inscrite dans le champ correspondant 'aireint' de la base de données.

Merci d'avance de vos suggestions.

Bill

CODE DE MON FORMULAIRE REALISE AVEC DREAMWEAVER - VOIR CHAMP SELECT

<?php header('Content-Type: text/html; charset=utf-8'); ?>
<?php include_once("fckeditor/fckeditor.php") ; ?>
<?php require_once('Connections/gestion_if.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form_1")) {
$insertSQL = sprintf("INSERT INTO saisie_if (id_saisie, nomsousif, docs2, natsousif, pointeusif, pointnatsif, aireint) VALUES (%s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['id_saisie'], "int"),
GetSQLValueString($_POST['nomsousif'], "text"),
GetSQLValueString($_POST['docs2'], "text"),
GetSQLValueString($_POST['natsousif'], "text"),
GetSQLValueString($_POST['pointeusif'], "text"),
GetSQLValueString($_POST['pointnatsif'], "text"),
GetSQLValueString($_POST['aireint'], "text");

mysql_select_db($database_gestion_if, $gestion_if);
$Result1 = mysql_query($insertSQL, $gestion_if) or die(mysql_error());

$insertGoTo = "message_1.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($database_gestion_if, $gestion_if);
$query_lstaireint = "SELECT * FROM lstaireint";
$lstaireint = mysql_query($query_lstaireint, $gestion_if) or die(mysql_error());
$row_lstaireint = mysql_fetch_assoc($lstaireint);
$totalRows_lstaireint = mysql_num_rows($lstaireint);

?>
<!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>Saisie IF</title>
<style type="text/css">
<!--
.Style3 {font-family: Geneva, Arial, Helvetica, sans-serif; font-size: x-small; }
.Style4 {font-size: x-small}
.Style5 {font-family: Geneva, Arial, Helvetica, sans-serif}
-->
</style>
</head>

<body>
<label>
</label>
<form action="<?php echo $editFormAction; ?>" method="POST" name="form_1" target="_self" id="form_1">


<table width="100%" border="0">
<tr>
<th width="28%" align="left" valign="top" scope="row"><span class="Style5">Niveau 1</span></th>
<td width="4%">&nbsp;</td>
<td width="68%">&nbsp;</td>
</tr>
<tr>
<th width="28%" align="left" valign="top" scope="row">&nbsp;</th>
<td width="4%">&nbsp;</td>
<td width="68%">&nbsp;</td>
</tr>
<tr valign="baseline">
<th align="left" valign="top" class="Style3" scope="row">2.1 Nom du sous-programme</th>
<td align="left" valign="top" nowrap="nowrap"><img src="images/Info.png" alt="" width="25" height="25" /></td>
<td align="left" valign="top"><?php
$oFCKeditor = new FCKeditor('nomsousif') ;
$oFCKeditor->BasePath = './FCKeditor/';

//set the EnterMode to "br" (overwrites the default configuration from fckconfig.js)
$oFCKeditor->Config['EnterMode'] = 'br';

$oFCKeditor->Value = '' ;
$oFCKeditor->Create() ;
?></td>
</tr>
<tr valign="baseline">
<th align="left" valign="top" class="Style3" scope="row">2.2 Documents</th>
<td align="left" valign="top" nowrap="nowrap"><img src="images/Info.png" alt="" width="25" height="25" /></td>
<td align="left" valign="top"><?php
$oFCKeditor = new FCKeditor('docs2') ;
$oFCKeditor->BasePath = './FCKeditor/';

//set the EnterMode to "br" (overwrites the default configuration from fckconfig.js)
$oFCKeditor->Config['EnterMode'] = 'br';

$oFCKeditor->Value = '' ;
$oFCKeditor->Create() ;
?></td>
</tr>
<tr valign="baseline">
<th align="left" valign="top" class="Style3" scope="row">2.3 Nature du sous-programme</th>
<td align="left" valign="top" nowrap="nowrap"><img src="images/Info.png" alt="" width="25" height="25" /></td>
<td align="left" valign="top"><?php
$oFCKeditor = new FCKeditor('natsousif') ;
$oFCKeditor->BasePath = './FCKeditor/';

//set the EnterMode to "br" (overwrites the default configuration from fckconfig.js)
$oFCKeditor->Config['EnterMode'] = 'br';

$oFCKeditor->Value = '' ;
$oFCKeditor->Create() ;
?></td>
</tr>
<tr valign="baseline">
<th align="left" valign="top" class="Style3" scope="row">2.4 Point d’information européen</th>
<td align="left" valign="top" nowrap="nowrap"><img src="images/Info.png" alt="" width="25" height="25" /></td>
<td align="left" valign="top"><?php
$oFCKeditor = new FCKeditor('pointeusif') ;
$oFCKeditor->BasePath = './FCKeditor/';

//set the EnterMode to "br" (overwrites the default configuration from fckconfig.js)
$oFCKeditor->Config['EnterMode'] = 'br';

$oFCKeditor->Value = '' ;
$oFCKeditor->Create() ;
?></td>
</tr>
<tr valign="baseline">
<th align="left" valign="top" class="Style3" scope="row">2.5 Point d’information européen</th>
<td align="left" valign="top" nowrap="nowrap"><img src="images/Info.png" alt="" width="25" height="25" /></td>
<td align="left" valign="top"><?php
$oFCKeditor = new FCKeditor('pointnatsif') ;
$oFCKeditor->BasePath = './FCKeditor/';

//set the EnterMode to "br" (overwrites the default configuration from fckconfig.js)
$oFCKeditor->Config['EnterMode'] = 'br';

$oFCKeditor->Value = '' ;
$oFCKeditor->Create() ;
?></td>
</tr>
<tr valign="baseline">
<th align="left" valign="top" class="Style3" scope="row">2.6 Aire d’intervention</th>
<td align="left" valign="top" nowrap="nowrap"><img src="images/Info.png" alt="" width="25" height="25" /></td>
<td align="left" valign="top">

// CHAMP SELECTION EN QUESTION

<label>
<select name="aireint" size="4" id="aireint">
<?php
do {
?>
<option value="<?php echo $row_lstaireint['id_aireint']?>"><?php echo $row_lstaireint['aireint']?></option>
<?php
} while ($row_lstaireint = mysql_fetch_assoc($lstaireint));
$rows = mysql_num_rows($lstaireint);
if($rows > 0) {
mysql_data_seek($lstaireint, 0);
$row_lstaireint = mysql_fetch_assoc($lstaireint);
}
?>
</select>
</label></td>
</tr>
<tr valign="baseline">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<th align="left" valign="top" scope="row"></th>
<td>&nbsp;</td>
<td><input type="submit" name="Enregistrer" id="Enregistrer" value="Enregistrer" /></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form_1" />
</form>
</body>
</html>
<?php
mysql_free_result($lstaireint);

?>
bill
LA GLOBULE
le 05/08/2009 à 18:20
LA GLOBULE
Je n'ai pas lu ton code.

En effet, 500 lignes de code (ca serait cool d'essayer d'isoler le problème :p) sans utiliser le BB-Code, personnellement, je ne lis plus. A ce propos, merci de lire les conditions d'utilisation des forums.

Mais pour un select multiple, il faut que les options soient "activées" pour pouvoir les récupérer. Et le plus simple, c'est de donner un name du genre name="toto[]" à ton select.
Comme cela, tu récupéreras les values des options de ton select dans le tableau $_GET['toto'] ou $_POST['toto'].

PS : en utilisant la fonction "recherche" de mon navigateur, je n'ai pas trouvé de select multiple dans ton code
billledouble
le 06/08/2009 à 10:15
billledouble
C'est sympa à toi, désolé pour le BB-Code! Effectivement, j'ai oublié d'insérer multiple="multiple", ce qui est fait à présent (voir code ci-dessous), néanmoins je n'arrive toujours pas à récupérer mes valeurs en envoyant le formulaire, alors que j'arrive à récupérer toutes les autres valeurs provenant de champ de type texte. Merci d'avance si tu peux m'aiguiller et merci encore pour ton 1er feedback, ciao

<label>
<select name="aireint" size="4" id="aireint" multiple="multiple">
<?php
do {
?>
<option value="<?php echo $row_lstaireint['id_aireint']?>"><?php echo $row_lstaireint['aireint']?></option>
<?php
} while ($row_lstaireint = mysql_fetch_assoc($lstaireint));
$rows = mysql_num_rows($lstaireint);
if($rows > 0) {
mysql_data_seek($lstaireint, 0);
$row_lstaireint = mysql_fetch_assoc($lstaireint);
}
?>
</select>
</label>
bill
LA GLOBULE
le 06/08/2009 à 12:52
LA GLOBULE
Et le plus simple, c'est de donner un name du genre name="toto[]" à ton select.
Comme cela, tu récupéreras les values des options de ton select dans le tableau $_GET['toto'] ou $_POST['toto'].


smiley
billledouble
le 17/08/2009 à 08:58
billledouble
Bonjour,

J'ai reformulé mon sujet pour le rendre compréhensible. Comme indiqué précédemment, je rencontre des difficultés à mettre en oeuvre la fonction « Explode », je m'explique :

Mon premier fichier/code affiche 4 checkbox
<!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>Untitled Document</title>
</head>

<body>
<form action="checkbox-traitement.php" id="form1" name="form1" method="post">
<p>
<label>
<input type="checkbox" name="cb[]" value="1" id="cb_0" />Matin</label>
<br />
<label>
<input type="checkbox" name="cb[]" value="2" id="cb_1" />Midi</label>
<br />
<label>
<input type="checkbox" name="cbB[]" value="3" id="cb_2" />Soir</label>
<br />
<label>
<input type="checkbox" name="cb[]" value="4" id="cb_3" />Nuit</label>
<br />
</p>
<input type="submit" name="Enregistrer" id="Enregistrer" value="Enregistrer" />
<input type="hidden" name="MM_insert" value="form1" />
</form>
</body>
</html>


Mon second fichier/code enregistre les valeurs « cochées » dans le champ « cb » de ma base de données en utilisant la fonction « implode » :
<?php
//connexion à MySQL
mysql_connect("localhost", "xxxxx", "xxxxx");

//sélection de la base de données
mysql_select_db("basejoomla");
?>
<?php
//récupération des valeurs des champs

$cb = implode(";", $_POST['cb']);

//création & exécution de la requête SQL

$sql = "INSERT INTO checkbox (id_cb, cb) VALUES ('', '$cb')";

mysql_query($sql) or die(mysql_error());
?>


Je récupère bien les valeurs (cases cochées) séparées par un « ; » dans mon champ « cb », de ma base de données « checkbox ».

Mon troisième fichier/code devrait me permettre d’afficher pour l’ID correspondante les champs input cochés ou non, de les modifier et de les enregistrer à nouveau. J’ai expurgé tous mes essais précédents, car ils étaient non concluants. Merci d’avance à celle ou celui qui voudra bien me donner la solution, car je bloque littéralement.

<?php
//connexion à MySQL
mysql_connect("localhost", "xxxxx", "xxxxx");

//sélection de la base de données
mysql_select_db("basejoomla");
?>
<!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>Untitled Document</title>
</head>

<body>
<form action="x.php" id="form1" name="form1" method="post">
<p>
<input type="checkbox" name="cb[]" value="1">Matin
<br />
<input type="checkbox" name="cb[]" value="2">Midi
<br />
<input type="checkbox" name="cb[]" value="3">Soir
<br />
<input type="checkbox" name="cb[]" value="4">Nuit
<br />
</p>
<input type="submit" name="Modifier" id="Modifier" value="Modifier" />
<input type="hidden" name="MM_insert" value="form1" />
<input name="id_cb" type="hidden" id="id_cb" value="<?php echo $row_r_checkbox['id_cb']; ?>" />
</form>
</body>
</html>
bill
billledouble
le 18/08/2009 à 21:40
billledouble
Dans ma réponse précédente, j’ai mentionné : "J'ai expurgé tous mes essais précédents, car ils étaient non concluants".
Je galère depuis des jours sur ce sujet sans avancer, car désolé de le dire mais je reçois des bouts de code, que je ne peux interpréter, alors que j'ai bien mentionné que je suis un novice, en apprentissage.

Je te remercie pour tes commentaires, mais nous perdons notre temps, je vais payer un développeur pour me développer ce petit bout de code.

Ciao
bill
moogli
le 19/08/2009 à 16:42
moogli
salut,

Désolé de prendre de notre temps personnel pour essayer de t'aider à apprendre (le but du site) le tout gratuitement.

@+
Il en faut peu pour être heureux !!!!!
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours