Website.
这感觉像是一个常见问题,但谷歌却很难!
如代码中的注释中所述,插入值以前不是问题,但是当我在其下方添加其他INSERT
查询时,该值停止工作。
$user = $_POST['name'];
$night = $_POST['club'];
$query = mysql_query("SELECT day FROM nights WHERE name = '$night'");
$email = $_POST['email'];
while ($row = mysql_fetch_assoc($query)) {
$date = getFullDateString($row['day']);
$date2 = getDateString($row['day']);
}
// this one previously worked but now enters into the database with $user as "Array"
mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$user', '$night', '$date') ") or die(mysql_error());
$guest1 = $_POST['name1'];
$guest2 = $_POST['name2'];
// these were added later and work fine but seem to have had an effect on the query above
mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$guest1', '$night', '$date') ") or die(mysql_error());
mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$guest2', '$night', '$date') ") or die(mysql_error());
foreach ($_POST as $key){
if (is_array($key)){
foreach ($key as $key2 => $value){
mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$value', '$night', '$date') ") or die(mysql_error());
}
}
}
您应该将客户机 HTML 输入重命名为 guests[]
,而不是再次使用 name
。您有命名冲突。
你需要在你的javascript代码中修复这个问题:
var name = $("<p><input class='input' type='text' name='guests[]' value='' /></p>");
在您的 HTML 代码中:
<input class="input" type="text" name="guests[]" />
之后,您的 PHP 代码应将来宾变量处理为数组:
$guests = $_POST['guests'];
foreach ($guests as $guest)
{
mysql_query("INSERT INTO guestlists (guest, night, date) VALUES('$guest', '$night', '$date') ")
or die(mysql_error());
}
请注意,您不需要去guests[1]
、guests[2]
、guests[3]
等。
您的网站
中,您有:
<input class='input' type='text' name='name["+currentArrayNum+"]' value='' />
以生成表单。name[...]
参数在 php 中最终显示为$_POST['name']
这将是一个数组。如果强制将其为字符串,则该字符串将Array
。因此,请拿起您的$user
并使用foreach
对其进行迭代,以处理每个名称。
另外,请阅读sql注入!
你的页面上有一些Javascript插入了如下所示的表单字段:
<input class="input" type="text" name="name[5]" value="">
name="name[5]"
部分是导致您在这里出现问题的原因 - 它在提交时$_POST['name']
变成一个数组。您需要重构该代码。