отправка нескольких записей в MySQL из нескольких окон выбора - PullRequest
2 голосов
/ 30 июня 2009

Я пытаюсь вставить несколько строк в таблицу MySQL в зависимости от количества опций, выбранных в окне множественного выбора. в настоящее время он вставляет одну строку (независимо от того, сколько опций выбрано), но столбец «имя стратегии» каждый раз пуст.

Есть идеи, как вставить несколько строк и почему значения опций не отправляются в таблицу?

Вот форма:

<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>

И вот что отправляет его в базу данных:

<?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";
?>

Ответы [ 3 ]

3 голосов
/ 30 июня 2009

Пара баллов:

  • ваш select должен иметь имя strategylist[], чтобы сообщить PHP, что он будет содержать массив, а не одно значение
  • Затем ваш код вставки должен выполнить итерацию по этому массиву, создавая новую вставку для каждого элемента, который он содержит, если (как кажется) вы не хотите, чтобы все эти параметры были объединены в поле одной строки.

На данный момент ваша форма возвращает только одну опцию (с точки зрения PHP), поэтому она будет вставлять только одну строку.

Чтобы перебрать массив, используйте что-то вроде этого:

foreach($_POST["strategylist[]"] as $s) {
    # do the insert here, but use $s instead of $_POST["strategylist[]"]
    $result=mysql_query("INSERT INTO sslink (study_id, strategyname) " .
       "VALUES ('$id','" . join(",",$s) . "')")
        or die("Insert Error: ".mysql_error());
}
2 голосов
/ 30 июня 2009

Две вещи:

  1. Если вы просматриваете источник страницы с множественным выбором в нем, вы можете увидеть там строки <option value="something">? Значения пустые? Мне кажется странным, что в верхней части вашего файла вы используете $row['strategyname'], а позже вы используете $row['name']. Я подозреваю, что это может быть причиной пустого столбца StrategyName.

  2. Чтобы обрабатывать множественные выборы, вы должны указать тег выбора как

    <select name="strategylist[]" multiple="multiple">
    

    Дополнительная [] говорит PHP сформировать массив со всеми выборками в нем. Затем вы можете зациклить массив, как:

    $strategylist = $_POST['strategylist'];
    for ($i = 0; $i < count($strategylist); $i++) {
        $strategyname = $strategylist[$i];
        // Insert a record...
    }
    
0 голосов
/ 28 мая 2012
// first you need to define your output as one variable if you don't like the loop 
   if($_POST){
   $sum = implode(", ", $_POST[select2]);
   echo $sum.".";
}
// the variable sum is the one you are seeking for you can insert it to the database
// if you want to enter every peiece of the array in a new field you should use
// different select names
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...