如果我尝试保护它们,我的$ _POST变量是空的

时间:2017-07-30 13:25:06

标签: php html post

嗨,我真的在编程生涯的开始。 我必须为我的学校项目编写一个小网站。 我确实在我的网站上实现了某种留言簿,并尝试保护从某些sql注入等发布到数据库中的变量。

主页上的输入表单guestbook.php:

< form action="post.php" method="post">
< strong>Name:< /strong><br/> < input type="text" name="name" /><br/>
< strong>Message:< /strong><br/> < textarea name="message" rows="5" 
  cols="25">< /textarea><br/>
< input type="submit" value="send">
</form>

我的帖子方法php:

< ?php
require_once 'config.php'; (db connect)
$fields = array("name", "message");

$isOkay = TRUE;


foreach ($fields as $field) {
    if (empty($_POST[$field])) {
        $isOkay = FALSE;
    }
}


if ($isOkay) {
    extract($_POST);

    $now = time();
    if (mysqli_query($db_link,"insert into comments (`name`,message,`timestamp` ) values ('{$name}','$message','{$now}')")) {
        header("Location: guestbook.php");
    } else {
        echo "Can't connect to database.";
    }
} else {
    echo "One or more fields are empty.";
}
?>

一切正常,并发布到我的数据库,但如果我现在添加这样的东西到我的代码:

$safename = $_POST["name"]; 
$name = mysql_real_escape_string($safename) 
$safemessage = $_POST["message"]; 
$message = mysql_real_escape_string($safemessage)

我尝试进入我的数据库的变量现在是空的... 可能是我某处的一个愚蠢的错误,但有人愿意在这里帮助我吗?

提前感谢:)

2 个答案:

答案 0 :(得分:1)

我不知道是否还有其他错误,但mysql_real_escape_string应为mysqli_real_escape_string

所以你的最后一个代码应该是这样的:

$safename = $_POST["name"]; 
$name = mysqli_real_escape_string($db_link, $safename) 
$safemessage = $_POST["message"]; 
$message = mysqli_real_escape_string($db_link, $safemessage)

其他附注: &lt;&lt;&lt; < form可以写成<form,就像<br>一样。

答案 1 :(得分:-1)

您可以尝试使用$ _REQUEST全局变量。仅当数据被“发布”时才填充$ _POST变量,并且仅在发送HTTP查询字符串时填充$ _GET。 $ _REQUEST由两种方法填充。