我正在创建一个简单的联系表单,表单正在通过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文件没有正确链接。 任何人都有解决方案的想法吗?
答案 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;
出于我的目的,它不需要任何include
,require
,require_once
来链接它们。
P.S。 form.php替换了我实际文件结构中的index.php。