值得注意的是我是php的新手。我想在php中得到一个答案(如果可能的话)。
这就是我想要实现的目标:我想重定向用户,如果我检查的任何错误被发现为html / php表单(用户看到的第一个输入先前在哪里创建),并带有自定义错误消息从单独的文件到html / php表单。
详细信息:用户首先看到HTML / PHP表单,他们以csv格式输入名称。在他们单击create之后,名称将在另一个php文件中处理,其中检查名称是否有错误和其他类似的事情。如果发现错误,我希望将用户重定向到HTML / PHP表单,在那里他们可以修复错误以及显示相应的错误消息。一旦他们修改了名称,用户就可以点击“创建用户”按钮并再次处理(希望没有错误),完成后,将用户重定向到显示名称和类似内容的页面。发送标头后会发生重定向。从我所看到的,这不是最好的事情,但是,现在,它对我有用。
HTML / PHP表单代码:
<!DOCTYPE HTML>
<HTML>
<head>
<title>PHP FORM</title>
</head>
<body>
<form method="post" action="processForm.php">
Name: <input type="text" name="names" required = "required"><br>
<input type="submit" value="Create Users" onclick="formInputNames"><br>
Activate: <input type="checkbox" name="activate">
</form>
<?php
// include 'processForm.php';
// errorCheck($fullname,$nameSplit,$formInputNames);
?>
</body>
</html>
我试着搞乱'include',但它似乎没有做任何事情,但是,我把它留在这里以帮助说明我想要实现的目标。
流程代码:
$formInputNames = $_POST['names'];
$active = (isset($_POST['activate'])) ? $_POST['activate'] : false;
//checks if activate checkbox is being used
$email = '@grabby.com';
echo "<br>";
echo "<br>";
$fullnames = explode(", ", $_POST['names']);
if ($active == true) {
$active = '1';
//sets activate checkbox to '1' if it has been selected
}
/*----------------------Function to Insert User---------------------------*/
A Function is here to place names and other fields in database.
/*-------------------------End Function to Insert User--------------------*/
/*-----------------------Function for Errors---------------------*/
function errorCheck($fullname,$nameSplit,$formInputNames){
if ($formInputNames == empty($fullname)){
echo 'Error: Name Missing Here: '.$fullname.'<br><br>';
redirect('form.php');
}
elseif ($formInputNames == empty($nameSplit[0])) {
echo 'Error: First Name Missing in: '.$fullname.'<br><br>';
redirect('form.php');
}
elseif ($formInputNames == empty($nameSplit[1])) {
echo 'Error: Last Name Missing in: '.$fullname.'<br><br>';
redirect('form.php');
}
elseif (preg_match('/[^A-Za-z, ]/', $fullname)) {
echo 'Error: Found Illegal Character in: '.$fullname.'<br><br>';
redirect('form.php');
}
}
/*-----------------------------End Function for Errors------------------------*/
/*--------------------------Function for Redirect-------------------------*/
function redirect($url){
$string = '<script type="text/javascript">';
$string .= 'window.location = "' .$url. '"';
$string .= '</script>';
echo $string;
}
/*-------------------------End Function for Redirect-----------------------*/
// Connect to database
I connect to the database here
foreach ($fullnames as $fullname) {
$nameSplit = explode(" ", $fullname);
//opens the database
I Open the database here
errorCheck($fullname,$nameSplit,$formInputNames);
$firstName = $nameSplit[0];//sets first part of name to first name
$lastName = $nameSplit[1];//sets second part of name to last name
$emailUser = $nameSplit[0].$email;//sets first part and adds email extension
newUser($firstName,$lastName,$emailUser,$active,$conn);
redirect('viewAll.php');
//echo '<META HTTP-EQUIV="Refresh" Content="0; URL=viewAll.php">';
//if you try this code out, you can see my redirect to viewAll doesn't work when errors are found...I would appreciate help fixing this as well. My immediate fix is using the line under it but I don't like it.
}
我所做的所有研究都没有让我走得太远。我知道发送标题不是好习惯。我看了ob_open(php函数 - 我认为它被调用)并且无法弄清楚如何正确使用它。我在这里找不到满足我试图满足的条件的问题。
当然感谢任何帮助。谢谢你
编辑:这不是'在PHP中传递错误消息'的副本 -------虽然这个想法很相似,但它们是在发送标题之前“在PHP中传递错误消息”。因此它不一样。
答案 0 :(得分:1)
将错误存储在会话中并在目标页面上回显它。
将session_start()
放在form.php页面代码的顶部。像这样:
<?php session_start(); ?>
<!DOCTYPE HTML>
<HTML>
<head>
然后用:
替换echo错误$_SESSION['error'] = 'Error: Name Missing Here: '.$fullname.'<br><br>';
redirect('form.php');
在你的条件而不是回声中使用它。然后在form.php页面中:
if (isset($_SESSION['error'])) {
echo $_SESSION['error'];
unset($_SESSION['error']);
}
unset
确保错误重复。
答案 1 :(得分:1)
HTTP重定向会导致新的HTTP请求。由于php是无状态的,因此它本身不支持记住在另一个请求中显示给特定用户的消息。为了解决此限制,您需要使用有状态存储机制(会话或cookie),或通过查询字符串参数将错误消息传递给下一个请求。处理此问题的常用方法是使用会话存储来保存 flash 消息。
的库答案 2 :(得分:0)
设置错误会话并显示在您要重定向的页面上