【问题标题】:PHP form client side validation [duplicate]PHP表单客户端验证[重复]
【发布时间】:2012-12-13 15:10:12
【问题描述】:

可能重复:
How to determine if user selected a file for file upload?

我想要一个简单的 PHP 表单验证。我的表单有两个输入:一个链接和一个要上传的文件。仅当填写了链接字段并且用户选择了要上传的文件时,才应提交表单。如果其中一个为假或两者都为假,则应显示一个警告框(如here,当您单击上传而不选择文件时)。

这是我的表格:

<form action="upload_file.php" enctype="multipart/form-data" method="post">

<p>Link:<br>
<input type="text" name="link" size="50">
</p>
<p>Image:<br>
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<input type="file" name="file" id="file" size="40">
</p>
<div>
<input type="submit" name="upload" value="Upload"> 
</div>

</form>

我是 PHP 新手,我已经浏览了几个小时的教程,其中许多没有帮助或显示服务器端验证。

我知道我应该从这个开始:

<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

在提交表单之前验证字段。我有一些 PHP 的基本知识,但我不知道如何做这个简单或不那么简单的任务。

【问题讨论】:

  • PHP,作为服务器端验证,不能在提交给服务器处理表单字段之前验证。
  • 这与 PHP 关系不大,但与 Javascript 关系更大——至少对于客户端验证而言。请查阅您选择的 Javascript 参考并检查相关 HTML 元素提供的属性和方法。
  • 对不起,你说得对。我设法用 JavaScript 做到了,我只是有些担心,因为我在许多页面上读到,如果用户在浏览器中禁用 JavaScript,它就不起作用。
  • @erdomester:你说“我明白我应该从这个开始:”不,你没有……你必须学习更多……
  • 警告词:如果您的所有验证都在 javascript 中,那么您没有验证。我可以在浏览器中关闭 javascript,或者使用 CURL 制作 HTTP POST 请求并完全绕过任何 javascript 验证。

标签: php javascript


【解决方案1】:

php 是服务器端。您需要的是客户端检查器(js、jq ..)

您可以只使用 php 执行检查,但在您的服务器上,然后将错误消息或任务完成消息返回给客户端。如果您希望在客户端完成检查,则需要一种客户端语言来处理它。

【讨论】:

    【解决方案2】:

    PHP 确实是一个服务器端 应用程序,因此无法执行客户端 验证。

    如果您真的想进行客户端验证,您可能必须使用 javascript。看看jQuery validation plugin。这是一个大型演示页面,向您展示了一些可能性:http://jquery.bassistance.de/validate/demo/

    如需更多帮助和信息,请查看jQuery.com/plugins/validation 页面。
    (注意本文末尾的WARNING)

    示例:
    (javascript)

    <script>
      $(document).ready(function(){
        $("#commentForm").validate();
      });
    </script>
    

    (形式)

    <form class="cmxform" id="commentForm" method="get" action="">
     <fieldset>
       <legend>A simple comment form with submit validation and default messages</legend>
       <p>
         <label for="cname">Name</label>
         <em>*</em><input id="cname" name="name" size="25" class="required" minlength="2" />
       </p>
       <p>
         <label for="cemail">E-Mail</label>
         <em>*</em><input id="cemail" name="email" size="25"  class="required email" />
       </p>
       <p>
         <label for="curl">URL</label>
         <em>  </em><input id="curl" name="url" size="25"  class="url" value="" />
       </p>
       <p>
         <label for="ccomment">Your comment</label>
         <em>*</em><textarea id="ccomment" name="comment" cols="22"  class="required"></textarea>
       </p>
       <p>
         <input class="submit" type="submit" value="Submit"/>
       </p>
     </fieldset>
     </form>
    

    警告
    请记住,作为 客户端 的 javascript 在客户端计算机上运行。不要仅依赖 javascript 验证。任何人都可以禁用 javascript 并在您的表单中插入“错误”值。

    【讨论】:

      【解决方案3】:

      如果是表单,最好使用一些 JavaScript 库(如 jQuery)进行客户端验证。查看此jQuery tool 进行表单验证。

      有关服务器端验证,请查看this link。它可能会帮助你。

      【讨论】:

        【解决方案4】:

        应始终在服务器端进行验证。您还可以添加客户端次要验证,作为使用 javascript 的用户的舒适度。

        这里有一些基本代码,如果字段为空,则使用次要验证显示消息:

        <input type="submit" name="upload" value="Upload" onclick="var ref = document.getElementById('file'); if ( ref.length == 0 ){ alert( 'select file' ); return false; } ref = document.getElementById( 'textfieldid' ); if ( ref.value.length == 0 ){ alert( 'fill link, better use a regexp to match a url but this another store' ); return false; }">
        

        【讨论】:

        • 听说过 JavaScript 中的函数吗?现在谁写这样的代码?
        • 当然,这只是一个非常简单的示例,其方式可以在没有太多javascript背景的情况下阅读。而且它不假设使用像 jQuery 这样的东西。这是旧的方式,但仍然应该工作。无论如何,为什么要创建一个函数,因为它永远不会调用它两次?
        【解决方案5】:

        对于“文件上传”字段的客户端验证,请参考以下插件: http://adamsanderson.github.com/jQuery-File-Validator/

        很有用。我试过了。

        【讨论】:

        • 您可以将其配置为根据文件类型和大小进行验证。
        猜你喜欢
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        • 2012-10-05
        • 1970-01-01
        相关资源
        最近更新 更多