php - PHP成功将if语句传递到新文件

标签 php html session login error-handling

我在使用PHP和SQL的注册表中遇到麻烦。

实际的数据库工作正常。错误报告也是如此。问题在于成功完成表格。

如果您在此处输入错误数据/没有数据到表格中,您将看到错误报告恢复正常:
http://marmiteontoast.co.uk/fyp/login-register/register-form.php

但是,如果您输入所有字段(长用户名,长密码并在方框中打勾),然后单击“注册我的帐户”,则需要它重新路由到register-success.php
无论我将成功声明更改为什么,它都行不通。它总是将您重新路由回register-form.php,但没有错误消息。

这是具有所有验证的寄存器功能:

    <?php
    session_start();
    require 'functions.php';

    if(isset($_POST['sign-up'])){
    // username
        if (isset($_POST['username'])){
        $username = mysql_real_escape_string(trim($_POST['username']));
        $_SESSION['status']['register']['username'] = $username;

        if(strlen($username) > 3){
            if(strlen($username) < 31){
                if(user_exists($username) === true){
                $_SESSION['status']['register']['error'][] = 'That username is already taken. Sorry, please try again with a different username.';
                } else{
                // passed
                // continue
                }
                } else {
                $_SESSION['status']['register']['error'][] = 'The username is greater than 30 characters.';
                }
                    } else {
                $_SESSION['status']['register']['error'][] = 'The username is less than 3 characters.';
                }
                    } else {
                $_SESSION['status']['register']['error'][] = 'The username is not entered.';}

        if (isset($_POST['password'])){
                $password = mysql_real_escape_string(trim($_POST['password']));
                    if(strlen($password) >= 8){
            $password = hash_function($password);
            } else {
            $_SESSION['status']['register']['error'][] = "Your secret password is too short. You should make a password with at least 8 letters.";
            }} 
else {
            $_SESSION['status']['register']['error'][] = "You haven't put in a password.";}

            // Email address
            if (!empty($_POST['email_address'])){
                $email_address = mysql_real_escape_string(trim($_POST['email_address']));
                $_SESSION['status']['register']['email_address'] = $email_address;
                if(strlen($email_address) > 10){ // email address less than 10
                    if(strlen($email_address) < 161){ // if longer than 160
                                    if(email_valid($email_address) == false){ // email address invalid format
                    $_SESSION['status']['register']['error'][] = "The email address has been put in wrong. Please check and try again.";
                    }
                    else{
                    // passed min length, passed max length, passed validation
                    // Continue
                    }
                    }
                    else 
                    {
                    $_SESSION['status']['register']['error'][] = 'The email address is too long.';}
                    } 
                    else
                    {
                    $_SESSION['status']['register']['error'][] = "The email address is too short. It can't be shorter than 10 letters.";
                    }
            }
            else{// passed (no email input)
            }

            if (isset($_POST['tos'])){
                $_SESSION['status']['register']['tos'] = $_POST['tos'];
                if(empty($_SESSION['status']['register']['error'])){
                    if(register($email_address, $username, $password) === true){

                    // Sends an email
                    send_email($email_address);

                    // Reroutes to success page
                    header('Location: register-success.php');

                    } else {
                    echo mysql_error();
                    die();
                    $_SESSION['status']['register']['error'][] = "Something went wrong. We're sorry. Please try again.";
                    }
                } else 
{
}
            } else {
            $_SESSION['status']['register']['error'][] = "You have to agree to the House Rules to be able to sign up.";
            }

            header('Location: register-form.php');
        } else {
        }

    ?>

编辑:由于正确答案没有提供代码,因此这里供以后引用。问题是重定向冲突。因此,现在有一个包装if语句,因此它们不会冲突。

在成功部分,我添加了一个变量检查​​:
if(register($email_address, $username, $password) === true){

                    // Sends an email
                    send_email($email_address);
                    // Reroute to success page
                    $succeeded = true;
                    header('Location: register-success.php');

                }

然后,只有成功变量为false时,我才执行最终重定向。
// If postback needed
        if($succeeded != true){
        header('Location: register-form.php');
        }

最佳答案

好,所以问题是这样的:
if(register(...))块运行良好,但是没有成功阻止header('Location: register-form.php');写入的操作。您实际上是在重写第二个重定向(成功返回)(返回register-form.php)

一种可能的解决方案是添加一个成功标志,并将最终重定向包装在if(!$succeeded)或其他内容中。但是所有这些if块放在一起,都容易发生这种类型的错误。我强烈建议您使用其他系统。如果我正在编写此页面,则可能会将每个错误收集在一个单独的if块中,如果没有错误,则将它们清除-然后根据是否有任何错误消息,在最后控制重定向。条件层次结构越扁平,调试起来就越容易。

关于php - PHP成功将if语句传递到新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585551/

相关文章:

php - 如何在TCPDF中使用PHP脚本?

javascript - 将动态 HTML 表值发布到 jQuery AJAX

PHP 不允许加载本地资源

php - MySQL中使用Limit而不使用Order By结果是否一致

html - 居中显示 :table div

java - session 过期时如何在数据库中插入值

php - 简单的 html DOM 如何在特定的 div 中获取 <source> 中的 src?

javascript - 基于鼠标点击位置的鼠标悬停弹窗

php - Laravel 中的 session 过期时间

php - 使用 Javascript 读取 session 值