PHP表单验证。不在同一页面上

时间:2013-07-01 05:37:57

标签: php validation

我正在创建一个简单的联系表单,表单正在通过jQuery加上服务器端验证与客户端验证,以防用户在其浏览器上禁用Javascript。

虽然有许多源代码示例可以处理和显示单个页面,但我没有看到很多将它们分成: form.php validator.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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您无法使用require validator.php,然后将您的网页定向到validator.php。 一旦您需要一个页面,该页面包含在当前页面中,并且可以用作页面的一部分。可以将其视为粘贴validator.php中使用require('validator.php')的代码的副本。因此,只需在action=""中设置form.php并相应地进行验证。

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

答案 2 :(得分: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,这将验证输入并重定向到页面form.php,其中$ msg设置将由form.php显示为用户的错误消息。

答案 3 :(得分:0)

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

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

其中msg变量用于将在表单内打印的错误/成功 我必须在最顶层的view(form.php)和controller(validator.php)上声明session_start();

在控制器内部的验证函数之一(validator.php)中,我做了以下

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

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

P.S。 form.php替换了我实际文件结构中的index.php。