2013-02-25 2 views
0

INSERT несколько записей в MySQL с одной формой PHP.INSERT несколько записей в MySQL с одной формой PHP

Простая форма

<form action="process.php" method="post"> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[][bline_id]" /> 
<label>Flow</label> 
<input type="text" name="flow[][flow]" /> 
</p> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[][bline_id]" /> 
<label>Flow</label> 
<input type="text" name="flow[][flow]" /> 
</p> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[][bline_id]" /> 
<label>Flow</label> 
<input type="text" name="flow[][flow]" /> 
</p> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[][bline_id]" /> 
<label>Flow</label> 
<input type="text" name="flow[][flow]" /> 
</p> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[][bline_id]" /> 
<label>Flow</label> 
<input type="text" name="flow[][flow]" /> 
</p> 
<input name="Submit" type="submit" /> 
</form> 

//process.php

<?php 
// connect to the database 
include('connect-db.php'); 


$cnt = count($_POST['bline_id']); 
$cnt2 = count($_POST['flow']); 

if ($cnt > 0 && $cnt == $cnt2) { 
    $insertArr = array(); 
    for ($i=0; $i<$cnt; $i++) { 
     $insertArr[] = "('" . mysql_real_escape_string($_POST['bline_id'][$i]) . "', '" . mysql_real_escape_string($_POST['flow'][$i]) . "')"; 
} 

$query = "INSERT INTO bltest (bline_id, flow) VALUES " . implode(", ", $insertArr); 
mysql_query($query) or trigger_error("Insert failed: " . mysql_error()); 
} 

echo("<pre>\n"); 
print_r($_POST); 
echo("</pre>\n"); 




mysql_close($connection); 
?> 

массив результатов

Array 
(
[bline_id] => Array 
    (
     [0] => Array 
      (
       [bline_id] => 1 
      ) 

     [1] => Array 
      (
       [bline_id] => 2 
      ) 

     [2] => Array 
      (
       [bline_id] => 3 
      ) 

     [3] => Array 
      (
       [bline_id] => 4 
      ) 

     [4] => Array 
      (
       [bline_id] => 5 
      ) 

    ) 

[flow] => Array 
    (
     [0] => Array 
      (
       [flow] => 11 
      ) 

     [1] => Array 
      (
       [flow] => 22 
      ) 

     [2] => Array 
      (
       [flow] => 33 
      ) 

     [3] => Array 
      (
       [flow] => 44 
      ) 

     [4] => Array 
      (
       [flow] => 55 
      ) 

    ) 

[Submit] => Submit Query 
) 

результат INSERT, конечно, 5 строк, но не вставлено никаких данных за $ bline_id или $ потока. Но, глядя на массив, это правильные данные.

+0

Так вы хотите сохранить те же данные, в 30 раз в вашей базе данных? – christopher

+0

Тот же тип данных. т.е. одинаковые поля, разные значения. – bech64

+0

Справа. Таким образом, пользователь загружает несколько значений в массив с каждым нажатием кнопки, затем нажимает одну кнопку, и ваш код отправит их все в базу данных? – christopher

ответ

0

OMG !!!! Я, наконец, понял! Это была моя глупая форма!

исправлен ниже -------

<form action="process.php" method="post"> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[]" value="<?php echo $bline_id; ?>" /> 
<label>Flow</label> 
<input type="text" name="flow[]" value="<?php echo $flow; ?>" /> 
</p> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[]" value="<?php echo $bline_id; ?>" /> 
<label>Flow</label> 
<input type="text" name="flow[]" value="<?php echo $flow; ?>" /> 
</p> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[]" value="<?php echo $bline_id; ?>"/> 
<label>Flow</label> 
<input type="text" name="flow[]" value="<?php echo $flow; ?>" /> 
</p> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[]" value="<?php echo $bline_id; ?>" /> 
<label>Flow</label> 
<input type="text" name="flow[]" value="<?php echo $flow; ?>" /> 
</p> 
<p><label>Beamline ID</label> 
<input type="text" name="bline_id[]" value="<?php echo $bline_id; ?>" /> 
<label>Flow</label> 
<input type="text" name="flow[]" value="<?php echo $flow; ?>" /> 
</p> 
<input name="Submit" type="submit" /> 
</form> 
3

ИСПОЛЬЗУЙТЕ PDO или Mysqli, вместо этого у этих расширений есть опция подготовки, поэтому вам нужно только один раз передать запрос и использовать цикл while для изменения данных!

<?php 

// pdo example 

$sql = 'INSERT INTO `table` (field1, field2, field3) VALUES (:value1, :value2, :value3)'; 

// $dbh is pdo connection 
$insertTable = $dbh->prepare($sql); 

$countArray = count($array); 
$i = 0; 

while ($i < $countArray) { 
    $insertTable->bindParam(':value1', $array[1][$i], PDO::PARAM_INT); // if value is int 
    $insertTable->bindParam(':value2', $array[2][$i], PDO::PARAM_STR); // if value is str 
    $insertTable->bindParam(':value3', $array[3][$i], PDO::PARAM_STR); 
    $insertTable->execute(); 

    $i++; 
} 

?> 
+0

@ perry, что было бы здорово, я не смог найти пример, который мог бы или учебник, чтобы я мог сделать головы или хвосты ... – bech64

+0

@ user2039676 проверить обновление в своих ответах – Perry

+0

вы забыли двоеточия в этом 'VALUES (: value1, value2, value3)', и мне пришлось это исправить. –

0

Хорошо. Учитывая то, что вы сказали мне, вот решение, которое я придумал. Я не собираюсь давать вам код; это побеждает то, что вы его пишете.

У меня был бы тип пользователя в некоторых значениях в двух входных текстовых полях «bline_id» и «flow».

Когда они нажимают кнопку отправки, эти значения добавляются к array в код PHP.

Массив затем serialized в строку и сохраняется как session cookie.

По мере ввода каждого значения вы получаетеcookie, поэтому он преобразуется в массив, добавляет новое значение в массив и повторяется.

Когда пользователь нажал другую кнопку «Сохранить в базе данных». Этот параметр будет неэтериализовать файл cookie, loop через каждый элемент массива, и store каждое значение в базе данных.

Также не забывайте, что у вас есть два значения: bline_id и поток. Они могут храниться в двух массивах и сохраняться в виде двух файлов cookie. Все это означает, что вы делаете этот процесс для двух разных массивов вместо одного.

И, наконец, вы должны использовать объект PDO. Я связал вас с ссылкой «магазин». Это рекомендуемый метод.

+0

Хорошо Спасибо! Еще одна проблема ... Интернет-соединение не всегда доступно во время ввода этих данных, будет ли оно работать? – bech64

+0

Он будет сохранен в сеансе cookie. Когда браузер закрыт, данные теряются. Другим вариантом является сохранение данных в постоянном файле cookie. Этот файл cookie будет длиться до тех пор, пока вы этого хотите. Взгляните на метод setcookie(), который я связал с вами. Он рассказывает вам, как их создавать. Если это ответит на ваш вопрос, обязательно отметьте его как правильный ответ :) – christopher

+0

Пройдет некоторое время, прежде чем я узнаю, отвечает ли это на мой вопрос, потому что я должен быть в состоянии собрать все это вместе! Большое вам спасибо за ваше время :) – bech64

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