簡體   English   中英

PHP:如何獲取數組復選框值,然后將每個單獨的結果插入數據庫查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM