簡體   English   中英

MySQL和PHP多重核對表數據庫插入

[英]MySQL and PHP multiple checklist db insert

我試圖將此多重核對表的值插入到db列中。 這段代碼不起作用。 誰能發現問題?

我的數據庫由一個名為“colors”的表和一個名為“color”的列組成。

<?php
// connect to database
require "mysql_connect.php";
?>


<?php
// get value from the form
$color = $_POST['color'];

foreach($_POST['color'] as $colors){
$insert = mysql_query("INSERT INTO colors (color) VALUES ('$color')");
}
?>

<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform"     id="colorform">

<input type="checkbox" name="color[]" value="black" /> Black
<input type="checkbox" name="color[]" value="red" /> Red
<input type="checkbox" name="color[]" value="blue" /> Blue
<input type="checkbox" name="color[]" value="white" /> White

<input name="submit" type="submit" value="Add color" />

</form>

謝謝

我還建議您在插入數據庫之前清理輸入。 你沒有提到你的顏色列是什么類型,也可能是不匹配的。

當你說INSERT INTO $colors - 這就是你的意思嗎? 你的表名是可變的嗎? 您可能應該使用正確的表名來代替$colors

另外,你使用了我看不到定義的$ color,你可能想要使用$ colors,所以應該更像這樣:

INSERT INTO tblColors (color) VALUES ('$colors')

要檢查您的返回值,請查看您獲得的錯誤:

$query = "INSERT INTO tblColors (color) VALUES ('$colors')";
$insert = mysql_query($query) or die("A MySQL error has occurred.<br />Your Query: " . $query . "<br /> Error: (" . mysql_errno() . ") " . mysql_error());

這是添加顏色的好方法

<?php

        require "mysql_connect.php";
    // connect to database
    $colors=array();
    // get value from the form
     if (isset($_POST['color']))  $colors = $_POST['color'];

    foreach($colors as $color)
    {
        mysql_query ("INSERT INTO colors ('color') VALUES ('$color')");
    }
?>

<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform"     id="colorform">

<input type="checkbox" name="color[]" value="black" /> Black
<input type="checkbox" name="color[]" value="red" /> Red
<input type="checkbox" name="color[]" value="blue" /> Blue
<input type="checkbox" name="color[]" value="white" /> White

<td><input name="submit" type="submit" value="Add color" />
</form>

if(isset($ _ POST ['color']) )這個條件很重要,因為如果數組為空,它將防止索引錯誤

$顏色=陣列(); 另外,請在代碼中聲明變量以防止獲得未聲明的變量,如果用戶未指定任何顏色,則會發生這種情況

記住PHP是服務器端的,因此在PHP上獲得錯誤會產生攻擊漏洞。 試着閱讀PHP最佳實踐,它非常重要

希望它有所幫助:-)

$insert = mysql_query("INSERT INTO $colors (color) VALUES ($color)");

將其更改為:

$insert = mysql_query("INSERT INTO colors_table_name (color) VALUES ($color)");

另外,請檢查插入的返回值,也許您收到錯誤? 第一個明顯的問題是由於變量,表名被替換為顏色,這是否是理想的效果?

<?php
// connect to database
require "mysql_connect.php";
?>


<?php
// get value from the form
$colors = $_POST['color'];

foreach($colors as $color){
    $insert = mysql_query("INSERT INTO colors (color) VALUES ($color)");
}


<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform"     id="colorform">

<input type="checkbox" name="color[]" value="black" /> Black
<input type="checkbox" name="color[]" value="red" /> Red
<input type="checkbox" name="color[]" value="blue" /> Blue
<input type="checkbox" name="color[]" value="white" /> White

<td><input name="submit" type="submit" value="Add color" />

</form>

您的變量已經倒退,SQL語法錯誤,SQL注入漏洞以及完全缺乏錯誤處理

$color = $_POST['color'];   <---stuff the POST data array into $color

foreach($_POST['color'] as $colors){   <--- loop over the POST data directly

$insert = mysql_query("INSERT INTO colors (color) VALUES ($color)");
                                                          ^^^^^^---insert the array
                                                          ^^^^^^---no quotes

您使用$ colors(帶有S)來存儲各個顏色,但隨后插入$ color,這是一個數組。

永遠不要認為查詢已經成功。 如果你有最低限度or die(...)錯誤處理,你已經看到了為什么你的查詢失敗:

foreach($_POST['color'] as $color) {
    $safe_color = mysql_real_escape_string($color);
    $result = mysql_query("INSERT INTO colors (color) VALUES ('$safe_color');") or die(mysql_error());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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