虽然项目已成功添加到数据库,但我不确定我是否正确执行了mysql_real_escape_string()函数,从而得到了错误。任何帮助表示赞赏。
成功!
警告:array_map()[function.array-map]:参数#2应该是第32行/home/site4/public_html/lab/mailing_list_dev_1-0/mailing_list_add.php中的数组
感谢您注册!
这是有问题的代码......
<?php
// connects the database access information this file
include("mailing_list_include.php");
// the following code relates to mailing list signups only
if (($_POST) && ($_POST["action"] == "sub")) {
if ($_POST["email"] == "") {
header("Location: mailing_list_add.php");
exit;
} else {
// connect to database
doDB();
// filtering out anything that isn't an email address
if ( filter_var(($_POST["email"]), FILTER_VALIDATE_EMAIL) == TRUE) {
echo 'Success!';
} else {
echo 'Invalid Email Address';
exit;
}
// check that the email is in the database
emailChecker($_POST["email"]);
// get number of results and do action
if (mysqli_num_rows($check_res) < 1) {
// free result
mysqli_free_result($check_res);
// cleans all input variables at once
$email = array_map("mysqli_real_escape_string", ($_POST["email"]));
// add record
$add_sql = "INSERT INTO subscribers (email)
VALUES('".$_POST["email"]."')";
$add_res = mysqli_query($mysqli, $add_sql)
or die(mysqli_error($mysqli));
$display_block = "<p>Thanks for signing up!</p>";
// close connection to mysql
mysqli_close($mysqli);
} else {
// print failure message
$display_block = "You're email address, ".$_POST["email"].", is already subscribed.";
}
}
}
?>
<html>
<?php echo "$display_block";?>
</html>
答案 0 :(得分:3)
你将$_POST['email']
视为一个数组,它可能不是。
如果您只打算逃离email
,请执行
$email = mysqli_real_escape_string($dbConn, $_POST['email']);
然后在INSERT
语句中,使用转义的$email
代替$_POST['email']
$add_sql = "INSERT INTO subscribers (email) VALUES('$email')";
答案 1 :(得分:2)
array_map()
适用于数组。如果您拥有的只是一个值,那么只需直接调用该函数。
答案 2 :(得分:1)
至少有一个错误,在这里:
// Does not work because $_POST["email"] is a string, not an array
$email = array_map("mysqli_real_escape_string", ($_POST["email"]));
这看起来就像你改编自正在运行的代码的东西,但是现在它已经坏了。你可能想要这样的东西:
$post = array_map("mysqli_real_escape_string", $_POST["email"]);
之后,您可以安全地使用$post["email"]
,因为它已被转义。
当然,逃避$_POST
内的所有内容可能不是解决此问题的最佳方法。现在还有一些平凡而又可以随时考虑的方法:
$email = mysqli_real_escape_string($_POST['email']);
答案 3 :(得分:1)
这显然不是mysqli_real_escape_string问题而是array_map()问题。或者更确切地说是滥用后者。
但是,一旦解决了这个问题,就会遇到mysqli_real_escape_string()问题。
要解决这个问题,你的doDB()
函数必须返回连接ID,你必须使用每个mysqli_ *函数。
$conn = doDB();
$email = mysqli_real_escape_string($conn,$_POST["email"]);
因此,您将解决所有[列出的]问题,但我相信emailChecker if (!emailChecker($_POST["email"])) {