重定向后,如何显示来自原始文件的错误消息


After redirect, how to display error messages coming from original file?

以下是我试图实现的目标:如果发现我检查的任何错误,我希望将用户重定向到带有自定义错误消息的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.
}

任何帮助我们都将不胜感激。谢谢

另外值得注意的是,我是php的新手。我也想在php中得到一个答案(如果可能的话)。

有多种方法可以做到这一点。我个人会使用AJAX。在"表单提交"中,运行一个javascript函数,调用对.php文件的AJAX请求来检查表单信息,所有这些都使用post方法。计算针对您定义的错误的所有$_POST['variables']检查。您将有一个html元素通过AJAX请求打印错误。

如果有0个错误,那么在请求返回中返回一个字符串,这样您的javascript函数就可以查找它是否准备就绪。如果准备就绪,请将用户重定向到您希望的位置。

AJAX并不难,我只是建议你在标签中加入javascript。

另一种方法:将所有代码放在一个.php文件中。当您将表单提交到同一个.php文件时,请检查错误(在文件顶部)。如果$_POST['variables']存在(它们在您提交表单后会这样做),则会在所需的位置回显您的错误。如果没有错误,则重定向页面。