php - 如何在重定向时显示错误消息?

标签 php redirect

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

这就是我想要实现的目标:如果我检查的任何错误被发现为 html/php 表单(用户首先看到的是之前创建输入的位置),我想将用户重定向,并带有自定义错误消息来自与 html/php 表单分开的文件。

详细信息:用户首先看到 HTML/PHP 表单,他们在其中输入 csv 格式的名称。单击“创建”后,名称将在另一个 php 文件中进行处理,在其中检查名称是否有错误和其他此类内容。如果发现错误,我希望用户被重定向到 HTML/PHP 表单,在那里他们可以修复错误并显示任何相应的错误消息。一旦他们修复了名称,用户就可以单击“创建用户”按钮并再次处理(希望没有错误),完成后将用户重定向到显示名称和此类内容的页面。发送 header 后会发生重定向。据我所知,这不是最好的事情,但就目前而言,它对我有用。

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.
}

我所做的所有研究并没有让我走得太远。我知道发送 header 不是一个好的做法。我查看了 ob_open (php 函数 - 我认为它被调用)并且不知道如何正确使用它。我在这里找不到满足我想要满足的条件的问题。

非常感谢任何帮助。谢谢

编辑:这不是“在 PHP 中传递错误消息”的重复。
--------虽然想法相似,但它们是在发送 header 之前“在 PHP 中传递错误消息”。因此它不一样。

最佳答案

将错误存储在 session 中并在目标页面上回显它。

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 可确保错误重复出现。

关于php - 如何在重定向时显示错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745584/

相关文章:

php - barryvdh/laravel-debugbar 没有出现在 laravel 中

php - 使用 PHP 将数组值分配给变量并插入到 mysql

php - 无法将图像上传到应用程序 Codeigniter 外部的文件夹

apache - Htaccess 规则将域重定向到 index.html

java - jsp无法使用响应重定向页面

php - 更改为响应式站点

html - 添加 URL 重定向到按钮组按钮

http - 302 和 307 重定向有什么区别?

ASP.NET - 重定向 301

php - 将 IOS 表情符号转换为网页或安卓表情符号代码