l'envoi de plusieurs enregistrements à MySQL à partir de plusieurs boîte de sélection
J'essaie d'insérer plusieurs lignes dans une table MySQL en fonction du nombre d'options sélectionnées à partir d'un multiple de sélectionner la zone. actuellement, il est l'insertion d'une ligne (indépendamment de la façon dont de nombreuses options sont sélectionnées), mais le " strategyname colonne est vide à chaque fois.
Aucune idée sur la façon d'insérer plusieurs lignes et pourquoi les valeurs de ces options ne sont pas envoyés à la table?
Ici est de la forme:
<form method="POST" action="update4.php">
<input type="hidden" name="id" value="1">
<p class="subheadsmall">Strategies</p>
<p class="sidebargrey">
<?php
$result = mysql_query("SELECT strategyname FROM sslink WHERE study_id = '{$_GET['id']}'");
if (!$result) {
die("Database query failed: " . mysql_error());
}
while($row = mysql_fetch_array($result)) {
$strategyname = $row['strategyname'];
echo $strategyname.'<br />';
}
?>
<p class="subheadsmall">Add a strategy... (hold down command key to select more than one)</p>
<select name="strategylist" multiple="multiple">
<?php
$result = mysql_query("SELECT * FROM strategies");
if (!$result) {
die("Database query failed: " . mysql_error());
}
while($row = mysql_fetch_array($result)) {
$strategylist = $row['name'];
$strategyname = htmlspecialchars($row['name']);
echo '<option value="' . $strategylist . '" >' . $strategyname . '</option>' . '\n';
}
?>
</select>
</p>
<input type="submit" class="box" id="editbutton" value="Update Article">
</form>
Et c'est ce qui l'envoie à la base de données:
<?php
$id=$_POST['id'];
$test=$_POST['strategylist'];
$db="database";
$link = mysql_connect("localhost", "root", "root");
//$link = mysql_connect("localhost",$_POST['username'],$_POST['password']);
if (! $link)
die("Couldn't connect to MySQL");
mysql_select_db($db , $link) or die("Select Error: ".mysql_error());
//for($i=0;$i<sizeof($_POST["test"]);$i++)
//{
//$sql = "insert into tbl_name values ($_POST["test"][$i])"; }
//sql = "INSERT INTO table_name VALUES ('" . join(",",$_POST["test"]) . "')";
$result=mysql_query("INSERT INTO sslink (study_id, strategyname) VALUES ('$id','" . join(",",$_POST["strategylist"]) . "')")or die("Insert Error: ".mysql_error());
mysql_close($link);
print "Record added\n";
?>
Vous devez vous connecter pour publier un commentaire.
Couple de points:
select
doit être nomméstrategylist[]
pour dire à PHP qu'il contiendra un tableau plutôt qu'une valeur uniqueÀ l'heure actuelle, votre formulaire ne renvoie une seule option (à partir de PHP du point de vue), donc il ne va insérer une seule ligne.
Pour parcourir le tableau, utiliser quelque chose comme ceci:
Deux choses:
Si vous affichez le code source de la page avec la sélection multiple dans, pouvez-vous voir la
<option value="something">
lignes? Ce sont les valeurs de vide? Il me semble étrange que dans le haut de votre fichier que vous utilisez$row['strategyname']
et, plus tard, vous êtes à l'aide de$row['name']
. Je soupçonne que cela pourrait être la cause du videStrategyName
colonne.Pour gérer des sélections multiples, vous devez spécifier la balise select comme
L'extra
[]
dit à PHP pour former un tableau avec toutes les sélections en elle. Vous pouvez ensuite en boucle sur le tableau, par exemple: