mysqil_real_escape_string()错误我无法解决

时间:2012-02-22 17:15:57

标签: php

虽然项目已成功添加到数据库,但我不确定我是否正确执行了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>

4 个答案:

答案 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 可能会导致同样存在的$ check_res变量问题。 Instea d其中这样的函数显然必须返回一个布尔值并使用类似

if (!emailChecker($_POST["email"])) {