表格提交即使没有填写

时间:2017-03-06 07:52:39

标签: php forms post submit

我有一本PHP留言簿。所以我可以不在表单中写任何内容并提交,然后发布。我可以避免这个吗?

这是我的PHP代码:

if (isset($_POST["Name"]) &&
    isset($_POST["Email"]) &&
    isset($_POST["Überschrift"]) &&
    isset($_POST["Kommentar"])) {
        $daten = array("überschrift" => $_POST["Überschrift"],
                       "eintrag" => $_POST["Kommentar"],
                       "autor" => $_POST["Name"],
                       "email" => $_POST["Email"],
                       "datum" => date("d.m.Y"));
        $daten = base64_encode(serialize($daten));
        if(!file_exists("gaestebuch.txt")) {
            $datei = fopen("gaestebuch.txt", "xb");
            fclose($datei); 
        }
        $altdaten = file_get_contents("gaestebuch.txt");
        if (file_put_contents("gaestebuch.txt", "$daten\r\n$altdaten") ) {
            echo "Eintrag hinzugefügt!";
        } else {
            echo "Fehler!";
        }
}

4 个答案:

答案 0 :(得分:1)

检查第一个值ISSET,以便知道它是一个POST请求,然后检查其余是否为空

if (isset($_POST["Name"]) &&
    !empty($_POST["Email"]) &&
    !empty($_POST["Überschrift"]) &&
    !empty($_POST["Kommentar"])) {
        $daten = array("überschrift" => $_POST["Überschrift"],
                       "eintrag" => $_POST["Kommentar"],
                       "autor" => $_POST["Name"],
                       "email" => $_POST["Email"],
                       "datum" => date("d.m.Y"));
        $daten = base64_encode(serialize($daten));
        if(!file_exists("gaestebuch.txt")) {
            $datei = fopen("gaestebuch.txt", "xb");
            fclose($datei); 
        }
        $altdaten = file_get_contents("gaestebuch.txt");
        if (file_put_contents("gaestebuch.txt", "$daten\r\n$altdaten") ) {
            echo "Eintrag hinzugefügt!";
        } else {
            echo "Fehler!";
        }
}

还考虑使用OR代替&&

!empty($_POST["Email"]) OR
!empty($_POST["Überschrift"]) OR
!empty($_POST["Kommentar"]))

这意味着如果只有一个字段为空,它将失败,而不是仅当所有字段都为空时

答案 1 :(得分:0)

什么都不是白色空间? 如果是这样,请在if语句中进行检查。 (credit

<header> </header>

答案 2 :(得分:0)

考虑以下几行。

php > $a = '';
php > echo isset($a) ? 'a is set' : 'a is not set';
a is set
php > echo empty($a) ? 'a is empty' : 'a is not empty';
a is empty

设置某些东西并不意味着它不是空的。所以,使用isset($foo) && !empty($foo)

更好地创建一个函数,

function present($x) {
  return (isset($x) && !empty($x));
}

并使用它。

if (present($_POST['foo'])) {
 /* do something */ 
}

或对整个$_POST数组执行此操作,

function present($somevar) {
  return (isset($somevar) && !empty($somevar));
}

function all_vars_are_ok($arr) {
  $x = array_map("present", $arr);
  return (array_filter($x) == $x);
}

然后,

if(all_vars_are_ok($_POST)) {
  /*
  *  do something 
  */
}

答案 3 :(得分:0)

解决方案:

  1. 您可以将属性required放入输入标记。
  2. 您可以添加 JavaScript 验证。
  3. 在PHP中,您可以这样检查:!empty($variable)