【问题标题】:php function to display which field is not filled inphp函数显示哪个字段没有填写
【发布时间】:2014-09-22 05:53:56
【问题描述】:

我有一个简单的 JavaScript 函数,如果未填写所有字段,则不允许提交表单。最重要的是,我希望 PHP 在空字段旁边写出一条错误消息。问题是函数在 $_POST 上激活,但只要其中一个字段为空,我的 JavaScript 函数就不允许出现 $_POST

如果我将操作保留在$_POST 条件之外,则页面将加载并显示已显示的错误消息。我对 PHP 和 JavaScript 还很陌生,并且希望对可能另一个可用条件有任何见解,我可以用它来触发我的错误消息出现在我的表单中。我也愿意接受任何其他关于错误处理的建议。我确实更喜欢保留我的 JavaScript,因为如果没有正确填写它,它能够阻止提交表单。除非有其他方法可以采取该行动,否则我必须保留 JavaScript。

PHP:

function cleanCrew ($id, $pswrd) {
    $id = stripslashes($id);
    $pswrd = stripslashes($pswrd);
    $id = strip_tags($id);
    $pswrd = strip_tags($pswrd);

    return array($id, $pswrd);  
}

require_once 'dbServ.php';

$db_server = mysqli_connect($db_host,$db_user,$db_pass,$db_base);

if ($db_server) {
    $error_1 = "";
} else{
    $error_1 = "connection to database unsuccessful";
}

$error_2 = "";
$error_3 = "";

if ($_POST) {
    $user_id = mysqli_real_escape_string($db_server, $_POST['userId']);
    $user_pass = mysqli_real_escape_string($db_server, $_POST['pass']);
    $id_and_pass = cleanCrew($user_id, $user_pass);

    if ($user_id == "" || $user_id == null) {
        $error_2 = "please fill in proper User Id";
    } else{
        $error_2 = " ";
    }

    if($user_pass == "" || $user_pass == null){
        $error_3 = "please fill out password";
    } else{
        $error_3 = " ";
    }           

    echo $id_and_pass[0];
    echo $id_and_pass[1];
}

HTML:

<div id="intro">
    <h1 id="the_blog" align="center">The <span id="blog_animate" style="position:relative;">Blog</span></h1>
    <div id="log-in"><p id="log">Log In</p><br> <?php echo $error_1;  ?>
        <form action="blog.php" method="post" onsubmit="return checkForm(this)" name="form1">
            <p id="log">User ID :</p> <input type="text" placeholder="johnnyApple175" name="userId"></input><?php echo $error_2 ?><br>
            <p id="log">Password:</p> <input type="password" name="pass"></input><?php echo $error_3; ?><br>
            <input type="submit" value="submit" class="button" ></input>
        </form> 

【问题讨论】:

  • 你为什么不用javascript写那些错误信息(在空的表单字段旁边)?
  • 要么让 php 处理空白字段,然后在表单发布后返回错误,说字段不能为空。以 if(isset($_POST['pass'])) 为例
  • any insight on perhaps another available condition that i could use to trigger my error messages to appear in my form 客户端&远离Javascript,你可以使用HTML5 required & pattern
  • 我还没有研究过 HTML5 的验证。我得看一下,我想我会尝试使用 JavaScript 更改错误字段的值

标签: javascript php forms validation post


【解决方案1】:

首先: 验证数据服务器端总是一个好主意,就像你正在做的那样。 原因很简单:Javascript 是客户端,可以很容易地修改为例如绕过这些检查。此外,您最好在数据库查询中使用发送的数据之前对其进行转义。

您的问题是,您正在检查 $_POST 是否存在 - 它始终存在,它是一个超级全局变量。您实际上想检查是否为空

if (!empty($_POST))...

如果您真的想提供详细信息,您可能需要考虑一下究竟出了什么问题。提供更多信息对用户更友好,但它使攻击更容易,特别是如果您在 X 次重试后不阻止用户。

【讨论】:

  • 感谢您的信息。如果我用 !empty($_POST) 条件替换我所拥有的,它会完全危及功能吗?我还没有研究如何阻止用户,但我还有很多工作要做。
  • 如果你按照建议用 !empty($_POST) 替换它,它只会在数据通过 POST 提交(或者你将数据复制到 $_POST)时执行。所以它不应该对剩余的代码产生影响。作为替代方案,您可以在表单中添加一个隐藏的输入字段并进行检查,而不是检查 !empty($_POST): &lt;input type="hidden" name="submited" value="1" /&gt; then: if (isset($_POST['submitted'])) 这比仅检查空 POST 更严格,但效果是一样的。避免检查提交按钮的值,某些浏览器在某些情况下不会发送。
猜你喜欢
  • 2019-01-04
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 2021-08-22
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
相关资源
最近更新 更多