【问题标题】:Form submit even it isn't filled表单未填写也提交
【发布时间】:2017-03-06 07:52:38
【问题描述】:

我有一个 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!";
        }
}

【问题讨论】:

  • 使用!empty 而不是isset
  • 您可以使用客户端和服务器端验证
  • 或者使用javascript来做到这一点,以防止表单被提交
  • 请不要用答案覆盖你的问题,如果你问一个包含工作代码的问题,新读者很难理解问题是什么。下面的答案绰绰有余。
  • @halfer 感谢您提供的信息,我会牢记这一点。

标签: php forms post submit


【解决方案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"]))

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

【讨论】:

    【解决方案2】:

    什么都不是你的意思是空白吗? 如果是这样,只需在 if 语句中检查。 (credit)

    if (trim($str) == '')
    {
        //string is only whitespace
    }
    

    【讨论】:

      【解决方案3】:

      解决方案:

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

      【讨论】:

        【解决方案4】:

        考虑下面的行。

        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 
          */
        }
        

        【讨论】:

        • 我现在有一个像 isset($_POST["Name"]) && (!empty($_POST["Name"])) 的解决方案
        猜你喜欢
        • 2012-10-01
        • 1970-01-01
        • 2014-08-09
        • 2011-05-16
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-18
        相关资源
        最近更新 更多