繁体   English   中英

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

[英]PHP Form validation. Not on the same page

我正在创建一个简单的联系表单,如果用户在浏览器中禁用了Javascript,该表单将通过jQuery进行客户端验证以及PHP进行服务器端验证。

尽管有很多可以在单个页面上处理和显示的源代码示例,但我还没有看到将它们分成以下形式的很多示例:例如form.phpvalidateator.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;

就我的目的而言,它不需要includerequirerequire_once来链接它们。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM