2016-03-07 60 views
1

我正在尋找一些幫助,我試圖將數組中的值分別插入到MySQL表中。所以,不是整行數組,而是單獨的條目。將數組分隔成數據塊

的形式是這樣的:

<form <form class="reg" name="main_form" action="form.php" method="post">> 
<ul> 
    <li> 
    <label for="text1"> 
    <input type="checkbox" name="task[]" value="text1" />text1 
    </label> 
    </li> 
    <li> 
    <label for="text2"> 
    <input type="checkbox" name="task[]" value="text2" />text2 
    </label> 
    </li> 
    <li> 
    <label for="text3"> 
    <input type="checkbox" name="task[]" value="text3" />text3 
    </label> 
    </li> 
</ul> 
<input type="submit" value="submit" /> 
</form> 

在form.php的我有這樣的事情現在whic工程,把所有的箱子選擇到一個行的表內:

<?php 
require 'db/config.php'; 

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 

if (!$link){ 
    die('Could not connect due to: ' . mysql_error()); 
} 

$db_selected = mysql_select_db(DB_NAME, $link); 

if (!$db_selected){ 
    die('Can\'t use: ' . DB_NAME . ': ' . mysql_error()); 
} 

$task = implode (PHP_EOL, $_POST['task']); 

$sql = "INSERT INTO completed (task) VALUES ('$task')"; 

if (!mysql_query($sql)){ 
    die('Error: ' . mysql_error()); 
} 

mysql_close(); 
?> 

如果有人前來選擇所有三個(text1,2 & 3)上的複選框,我需要將它作爲三個單獨的條目輸入到數據庫中,而不是將它們組合爲一個。

我想我需要使用類似explode()之前的形式實際將它們饋送到數據庫中,但我不是100%確定。任何幫助,將不勝感激。

+0

只是想作爲一個側面說明說,作爲韓國海洋研究院表示,MySQL擴展已被棄用,但不僅如此,它是從最近的PHP版本中刪除,所以你應該避免使用它。 – vove

+0

@vove注意到它完全從最新的php版本中刪除。添加到我的文章。 – Kordi

回答

1

您的版本固定

您的固定版本,但您的API是棄用,你的方法是沒有sql注入保存不要使用這種方法使用更好的方法,我在後面提到我的答案。

替換此

$task = implode (PHP_EOL, $_POST['task']); 
$sql = "INSERT INTO completed (task) VALUES ('$task')"; 

if (!mysql_query($sql)){ 
    die('Error: ' . mysql_error()); 
} 

與此

<?php 
foreach ($_POST['task'] as $task) { 
    $sql = "INSERT INTO completed (task) VALUES ('$task')"; 
    if (!mysql_query($sql)){ 
     die('Error: ' . mysql_error()); 
    } 
} 
更好

方法

保存版本與新阿比事業的mysql_connect已被棄用,SQL注入保存。所以使用新的mysqli api。爲了防止SQL注入,你應該真的準備好語句,將在一分鐘內更新我的答案。 請勿使用其他方法。導致mysql_connect不僅被棄用,而且在最近的php版本中從api中被刪除。謝謝@vove的通知。

<?php 
require 'db/config.php'; 

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

if ($mysqli->connect_error) { 
    die('Connect Error (' . $mysqli->connect_errno . ') ' 
      . $mysqli->connect_error); 
} 

$stmt = $mysqli->prepare("INSERT INTO completed (task) VALUES (?)"); 
if (!$stmt) { 
    echo $mysqli->error; 
    exit(); 
} 

foreach ($_POST['task'] as $task) { 
    $stmt->bind_param("s", $task); 
    $stmt->execute(); 
} 

$stmt->close(); 
$mysqli->close(); 

兩個版本

的輸出本來文本1和文本選擇。

mysql> select * from completed; 
+-------+ 
| task | 
+-------+ 
| text1 | 
| text2 | 
+-------+ 
+0

感謝您的快速回復。 是的,我會改變api,但在我開始改變太多之前,我只是試着替換原來給我的東西,而且它只有在最後一個選中的框中才會進入SQL。 IE瀏覽器。如果我選中複選框1,2和4,則只有4會顯示在數據庫中。不知道爲什麼...從我可以告訴的代碼看起來不錯: – Xyz

+0

@Rod也許只是var_dump出來的sql看看你發送到服務器的SQL查詢。你的桌子的結構是怎樣的? – Kordi