2009-06-30 7 views
2

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

Пара пунктов:

  • ваши 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()); 
} 
+0

Спасибо! Я сделал то, что вы сказали, и теперь информация передается в базу данных. Он вставляет оба выбранных варианта, но в одну строку, разделенную комой. В идеале я бы хотел, чтобы каждый из них проходил в собственной строке. Где мне нужно вставить код для итерации по массиву? Спасибо за вашу помощь! – user96828

+0

В данный момент вы используете $ _POST ["strategylist []"] в своей вставке, но это массив. Я отредактировал сообщение, чтобы показать, как это сделать. –

2

две вещи:

  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

Хорошей идеей является также проверка и исключение всего, что вы вставляете в свою базу данных, даже если это предполагаемый источник - это ваш собственный вывод. –

+0

Спасибо! Я сделал то, что вы сказали, и теперь информация передается в базу данных. Он вставляет оба выбранных варианта, но в одну строку, разделенную комой.В идеале я бы хотел, чтобы каждый из них проходил в собственной строке. Где мне нужно вставить код для итерации по массиву? Спасибо за вашу помощь! – user96828

0
// 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 
+0

Не могли бы вы объяснить, что делает этот код? – cereallarceny

Смежные вопросы