[英]PHP Form validation. Not on the same page
我正在创建一个简单的联系表单,如果用户在浏览器中禁用了Javascript,该表单将通过jQuery进行客户端验证以及PHP进行服务器端验证。
尽管有很多可以在单个页面上处理和显示的源代码示例,但我还没有看到将它们分成以下形式的很多示例:例如form.php和validateator.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");
并使用来自validateator.php的 $ msg变量显示消息,但浏览器抱怨$ msg是未定义的,即使验证已运行且已定义了字符串。
从外观上看,我认为这两个PHP文件未正确链接。 有人对解决方案有想法吗?
require
实际上与将“ validator.php”复制到“ form.php”文件中相同,因此这应该不是问题。 变量在包含的文件中与其“父对象”共享相同的作用域。 但是,在“ form.php”中包含“ validator.php”,然后从其代码中调用require("form.php")
并不是一个好主意-这将是一个infine循环!
PS而且,如果使用的是require
,则不能将其称为“不在同一页面上”。 这是同一页面,它是用户的相同URL。 这是两个不同的文件,这是正确的。
您不能使用require validator.php
,然后将页面定向到validator.php
。 一旦需要页面,该页面将包含在当前页面中,并且可以用作该页面的一部分。 可以将其视为粘贴代码,将代码从validator.php
粘贴到使用了require('validator.php')
。 因此,只需在form.php
设置action=""
并相应地对其进行验证。
同样,最好使用require_once('validator.php')
。
是的,两个文件之间的链接存在问题。
收到错误时,您将运行:-
if (isset($error)) {
$msg = "<p>Please enter valid information.</p>";
require ("form.php");
}
该代码驻留在validator.php中,当您在其中加载form.php时,它将再次在其中加载validator.php,这将再次重置$ msg变量,因为它没有任何内容。
一种解决方案可以是:
使用form.php获取用户输入。 将输出发布到validateator.php,它将验证输入并重定向到具有$ msg集的form.php页面,该表单将由form.php显示为对用户的错误msg。
使用视图中的会话变量(form.php)解决了问题,如下所示
<?php if (isset($_SESSION['msg'])) echo $_SESSION['msg']; session_unset(); ?>
其中msg变量用于错误/成功,该错误/成功将在表单内打印,我必须声明session_start();
在最顶部的view(form.php)和controller(validator.php)上。
在controller(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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.