0

我正在创建一个简单的联系表单,该表单正在使用 jQuery 进行客户端验证,并使用 PHP 进行服务器端验证,以防用户在其浏览器上禁用 Javascript。

尽管有许多源代码示例可以处理和显示在一个页面中,但我还没有看到很多将它们分为:form.phpvalidator.php,例如执行此类任务。

我有这个form.php文件,它主要用 html 编写,用于使用一些 php 代码标记表单,这些代码将接收/显示从validator.php检索到的错误或成功消息。现在,我遇到的问题是将这两者联系起来,这样他们就可以毫无怨言地互相交谈。

“form”属性具有分配给validator.php的动作 ,在validator.php中我有如下功能之一:

if (isset($error)) {
    $msg = "<p>Please enter valid information.</p>";
    require ("form.php"); 
}

而且,在form.php上,我声明require ("validator.php");并使用来自validator.php的$msg变量来显示消息,但浏览器抱怨 $msg 未定义,即使验证已运行并已定义字符串。

从表面上看,我认为这两个 php 文件没有正确链接。有人对解决方案有想法吗?

4

4 回答 4

1

require实际上就像您将“validator.php”复制到“form.php”文件中一样,所以这应该不是问题。变量在包含的文件中与其“父级”共享相同的范围。但是,在“form.php”中包含“validator.php”然后require("form.php") 从其代码中调用并不是一个好主意——这将是一个无限循环!

PS 而且,如果您使用的是require,则不能将其称为“不在同一页面上”。它是同一个页面,它是用户的同一个 URL。这是两个不同的文件,这是真的。

于 2013-07-01T05:42:33.613 回答
1

您不能使用 requirevalidator.php然后将您的页面定向到validator.php. 一旦您需要一个页面,该页面就会包含在当前页面中,并且可以用作页面的一部分。将其视为从validator.php您使用过的位置复制粘贴代码require('validator.php')。所以只需设置并相应action=""form.php验证它。

也更好用require_once('validator.php')

于 2013-07-01T05:47:23.310 回答
1

是的,两个文件之间的链接存在问题。

当您收到错误时,您会运行:-

if (isset($error)) {
    $msg = "<p>Please enter valid information.</p>";
    require ("form.php"); 
}

此代码驻留在validator.php 中,当您在其中加载form.php 时,它会再次在其中加载validator.php,这会再次重置$msg 变量,因为它没有发布任何内容。

一种解决方案可以是:-

使用 form.php 从用户那里获取输入。将输出发布到validator.php,这将验证输入并重定向到带有$msg 设置的页面form.php,该设置将由form.php 作为错误消息显示给用户。

于 2013-07-01T05:48:59.350 回答
0

使用视图(form.php)中的会话变量解决了问题,如

<?php if (isset($_SESSION['msg'])) echo $_SESSION['msg']; session_unset(); ?>

其中 msg 变量用于将在表单中打印的错误/成功,我必须session_start();在最顶部的视图(form.php)和控制器(validator.php)上声明。

在控制器(validator.php)中的一个验证功能上,我做了以下

$msg = "<p>Email Successfully Sent!</p>";
$_SESSION['msg'] = $msg;
header('Location: index.php');
exit;

出于我的目的,它不需要任何include, require,require_once来链接它们。

PS form.php 在我的实际文件结构中替换 index.php。

于 2013-07-03T23:59:03.957 回答