[英]PHP: How to grab an array checkbox value and then insert each individual result into a database query?
我有一個動態生成復選框列表的表單: name="cursoID[]"
每個值對應於cursoID( $curso['cursoID']
),這是一個取自mySQL SELECT
查詢的值,顯示了一個列表物品ID。
用戶可以選擇N個項目,我需要采用其中的每個項目(即$cursoID = $_POST['cursoID'];
)以便將它們保存到INSERT
查詢中。
在表單中,我使用while循環生成每個項目:
<?php
$conectar = mysqli_connect(HOST, USER, PASS, DATABASE);
$query = " SELECT cursoID, nombreCurso, cursoFechaInicio, modalidadCurso, estadoCurso
FROM cursos
WHERE estadoCurso='abierto'";
$buscarCurso = mysqli_query($conectar,$query);
echo '<div class="checkbox">';
while ($curso=mysqli_fetch_assoc($buscarCurso)) {
echo '<input type="checkbox" name="cursoID[]" value="'.$curso['cursoID'].'">'.$curso['nombreCurso'];
}
echo '</div>';
?>
我的數據庫咨詢,以插入該字段是一個簡單的選擇:
INSERT INTO cursosUsuarios
(userID, cursoID)
VALUES
('$userID', '$cursoID')
$ userID沒有問題,單個值也是如此。
我如何使用$cursoID = $_POST['cursoID']
將其添加到數據庫中? 我一直在閱讀一些其他問題(如這一個 ,或這另外一個 ),但無法管理將它應用到我的情況,因為我不知道我將如何將它插入到數據庫中。
我dk如何使用mysqli_ *所以我會寫在PDO中。 如果我能正確理解這就是你需要的東西。
ps:安全性被忽略了。
$cursors = $_POST['cursorID'];
$user = $_POST['user'];
foreach ($cursors as $cursor) {
$query = $DB->prepare('INSERT INTO table (user, cursor) VALUES (:user, :cursor)');
$query->bindValue(':user', $user, PDO::PARAM_INT);
$query->bindValue(':cursor', $cursor, PDO::PARAM_INT);
$query->execute();
}
您可以通過兩種主要方式將可變數量的數據插入數據庫:
像這樣:
$fields = array();
$values = array();
$fields[] = 'field1';
$fields[] = 'field2';
...
$values[] = 1;
$values[] = 2;
...
$query = 'INSERT INTO table (' . implode(', ', $fields) . ') VALUES (' . implode(',', $values) . ')';
// Execute $query
要么:
像這樣(如果您的復選框名為“cursoID []”,相應的POST變量將是一個數組,您可以使用任何可用於數組的東西):
$userID_int = (int)$userID;
foreach ($_POST['cursoID'] as $singleID) {
$singleID_int = (int)$singleID;
// Execute: INSERT INTO cursosUsuarios (userID, cursoID) VALUES ('$userID_int', '$singleID_int')
}
但是,要非常小心 - 目前,您的代碼很容易受到SQL注入的攻擊(例如,如果將$ _POST ['cursoID']設置為類似
'; DROP DATABASE X
您可能 - 根據您的配置 - 允許某人做很多令人討厭的事情,從繞過您的登錄到刪除您的數據庫。 因此,我建議退一步,研究如何參數化您的查詢,這樣您就不必擔心惡意訪問者在SQL查詢中注入數據。 例如,請參閱此答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.