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