【问题标题】:Form interaction through PHP通过PHP进行表单交互
【发布时间】:2014-06-04 17:08:40
【问题描述】:

我是 PHP 新手。我有一个这样的表格:

<form action="mailtest.php" method="post" name="mail_form" id="mail_form" >
    ...
 </form>

mailtest.php 有如下代码:

<?php
$name=$_POST['form_name'];
if ((!isset($name)) || ($name==''))
{
     echo 'Fill in the name';        
}

else
{
     $name='From '.$_POST['form_name'];
     echo $name;
}
?> 

现在,我想在 mailtest.php 中放入 javascript 代码,它会在 form_name 为 null 的情况下影响表单。例如,显示一个隐藏的 div 以指示填写此字段的义务或更改边框颜色等。换句话说,验证人员必须处理通过 onsubmit 事件调用的 js 文件。 我如何在我的 PHP 文件中实现这一点? 谢谢

【问题讨论】:

  • 在提交之前尝试在 JS 上进行验证。如果您仍然收到错误数据,请执行 302 重定向到原始 php 或其他内容。
  • 您可能想查看此页面stackoverflow.com/questions/5004233/…

标签: javascript php jquery html


【解决方案1】:

简而言之 - 你不能。

PHP 是服务器端语言,JS 是客户端语言。

您的 JS 代码必须先发送给用户,然后才能进行处理。

这就是验证有时分为服务器/客户端部分的原因。

【讨论】:

  • 我的问题是我想执行服务器端验证,因为客户端验证不够可靠。我可以通过哪种方式做到这一点并同时维护我在客户端验证中需要的图形(给用户的消息和对表单布局的一些 css 更改)?
  • 使用 AJAX 调用来验证服务器端的数据并保持与用户页面交互的能力。我不会更新我的答案,因为它太宽泛了,但你可以查看this link
【解决方案2】:

你可以在源文件中创建一个java脚本函数,而不是在表单提交之后,

<form action="mailtest.php" method="post" name="mail_form" id="mail_form" onSubmit="return validate()">
    ...
 </form>

您必须为您的名称文本文件提供一个 id,然后签入 java 脚本。

<script type="text/javascript">
function validate()
{
if(document.getElementById("form_name").value == "")
{
alert("Enter name");
return false;
}
}

【讨论】:

  • 我的问题是我想执行服务器端验证,因为客户端验证不够可靠。我可以通过哪种方式做到这一点并同时维护图形(给用户的消息和对表单布局的一些 css 更改)我会在客户端验证时获得?
  • 您已经进行了服务器端验证,您现在可以将页面重定向到带有 get 变量的表单页面并检查 get 变量是否存在然后显示错误消息。
【解决方案3】:

PHP 是一种服务器端脚本语言,它在服务器上执行代码,并且通常可以在任何服务器端工作。当您打印或回显任何语句以使其在服务器上呈现时,无论您打印什么,您都会在浏览器中的 html/other 中获得响应。在您的情况下,尝试打印 javascript 代码,如:

if ((!isset($name)) || ($name==''))
{
  // echo 'Fill in the name';
  echo '<script type="text/javascript">alert("Fill in the name");</script>';        
}

我不推荐这个代码只是为了给你一点帮助来了解它是如何工作的。如何利用逻辑取决于您。

【讨论】:

  • 我的问题是我想执行服务器端验证,因为客户端验证不够可靠。我可以通过哪种方式做到这一点并同时维护图形(给用户的消息和对表单布局的一些 css 更改)我将在客户端验证时拥有?
【解决方案4】:

最简单的方法是给你的对象(form_name)一个id(比如form_name),一个定义错误的类(比如highlight)并确保你已经加载了jquery,然后添加这个:

.highlight {
    border: 1px dotted #cc0000 !important;
}

这应该在你的 CSS 中......

<script type="text/javascript">
$(document).ready(function() {
   $('#mail_form').submit((function)() { 
       var field = $('#form_name'); 
       var form_name = $(field).val(); 
       if (form_name == '') { //or whatever else you want to do to validate
           $(field).addClass('highlight'); // would add a class called highlight to the field
           // or toggleClass('hidden') on some field 
           // or any other action you want to check. 
           return false; // stop the form from submitting
       }
   });
});
</script>

... 这将进入您的 HTML 文件...

【讨论】:

  • 这是客户端验证。是否可以使用客户端的图形效果执行服务器端验证?
  • 绝对是这样,但它会花费服务器端周期并使用户体验更差......您始终可以将表单作为 AJAX 并在后台发布并以这种方式从服务器返回结果...就我个人而言,我认为客户端和服务器端验证效果最好,这就是我的结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
相关资源
最近更新 更多