我有一个表格,它允许用户输入的类和活动分为多个字段,这些字段被声明如下:通过POST在PHP将数组传递给被插入的MySQL
label for ="classact">Classes and Activities</label>
<input type = "text" name = "classact[0]" value ="" id ="classact[0]">
<input type = "text" name = "classact[1]" value ="" id ="classact[1]">
<input type = "text" name = "classact[2]" value ="" id ="classact[2]">
当窗体被传递这是在插入处理代码:
$maininsert = "INSERT INTO `camptest`
(`name`, `city`, `phone`, `photo`)
VALUES
('$_POST[name]', '$_POST[city]', '$_POST[phone]', '$photoinfo')
SET @lid = LAST_INSERT_ID()
";
$classactinsert = "INSERT INTO `class_act`
(`cid`";
for($i = 0; $i < 3; $i++)
{
if(isset($_POST['classact'][$i]))
{
$temp = $i+1;
$classactinsert = $classactinsert . ",`act$temp`";
}
}
$classactinsert = $classactinsert . ")
VALUES
('@lid'";
for($i = 0; $i < 3; $i++)
{
if(isset($_POST['classact'][$i]))
{
$classactinsert = $classactinsert . ",'$_POST[classact][$i]";
}
}
$classactinsert = $classactinsert . ")";
$indata = $maininsert . $classactinsert;
$result = mysql_query($indata);
我意识到这就是很多的代码,但在填写表格并提交,这是获取生成查询:
INSERT INTO `camptest` (`name`, `city`, `phone`, `photo`) VALUES ('Multiple Activities', 'Nowhere', '555-555-1111', 'images/51127f6b06d1e.jpg') SET @lid = LAST_INSERT_ID() INSERT INTO `class_act` (`cid`,`act1`,`act2`,`act3`) VALUES ('@lid','Array[0],'Array[1],'Array[2])
查询没有插入,但它也没有丢回任何错误,即使我打开了它们。
我的主要问题是,我在做什么错误导致值act1,act2和act3显示为Array [0],Array [1]和Array [2]?
我二次的问题是,我是不是甚至要对这个正确的方式?我对PHP有点新鲜感,恐怕我可能会这么做很难吗?
任何帮助,将不胜感激,让我知道如果你需要任何额外的信息。
您的代码可能容易受到SQL注入。尝试使用[mysqli](http://www.php.net/manual/en/book.mysqli.php)api。 – Alepac
简单地切换到mysqli不会阻止SQL注入;事实上,它可能会使这个漏洞变得更糟,因为'mysql_query'将不允许在一个SQL查询中使用多个语句(而mysqli可以)。无论如何,你会想要切换,因为旧的mysql的东西已被弃用......但出于安全考虑,你还需要学习使用准备好的语句,这些语句会在正确使用时阻止SQL注入。 – cHao