【问题标题】:PHP Keeps Inserting on RefreshPHP在刷新时不断插入
【发布时间】:2018-01-08 19:50:27
【问题描述】:

我目前正在为我的应用程序注册,直到我遇到这个问题,每当我进入我的页面时,它都会在我的users 表中创建一个新行。似乎当我重新加载页面时,表单会自动提交。我曾提到this问题:

使用标题(“位置:”);插入完成后,会显示一个新的表单,刷新不会导致再次提交。

但是,当我这样做时发生的所有事情都是一个很大的重定向循环,使我无法一起访问该页面。

这是我的注册代码:

<?php 

    global $conn;
    global $register;
    global $error;

    $username = $_POST['username'];
    $firstName = $_POST['firstName'];
    $lastName = $_POST['lastName'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $password = $_POST['password'];
    $confirmPassword = $_POST['confirmPassword'];

    define(HEADER_TITLE, "Register");
    include_once 'template/header.php';

    if (isset($_POST['register'])) {
        $register->register($username, $firstName, $lastName, $email, $phone, $password, $confirmPassword);
    }

?>
<div class="container">
    <div id="hoogley_login">
        <h2>Register</h2><hr>
            <div class="alert alert-danger" role="alert">
            <?php
            if ($error->display() != null ) {
                #echo '<div class="alert alert-danger" role="alert">';
                $error->display();
            } else {
                #echo '<div>';
            }
        ?>
        </div>
        <form action="register" method="post">
            <input type="text" class="form-control" name="firstName" placeholder="First Name" value="<?php echo $_GET['firstName']; ?>">
            <br>
            <input type="text" class="form-control" name="lastName" placeholder="Last Name" value="<?php echo $_GET['lastName']; ?>">
            <br>
            <input type="text" class="form-control" name="username" placeholder="Username" value="<?php echo $_GET['username']; ?>">
            <br>
            <input type="email" class="form-control" name="email" placeholder="E-Mail Address" value="<?php echo $_GET['email']; ?>">
            <br>
            <input type="tel" class="form-control" name="phone" placeholder="Phone Number" value="<?php echo $_GET['phone']; ?>">
            <br>
            <input type="password" class="form-control" name="password" placeholder="Password">
            <br>
            <input type="password" class="form-control" name="confirmPassword" placeholder="Confirm Password">
            <br>
            <input type="submit" class="btn btn-info btn-lg" name="register" value="Register!">
            <br><br>
            <a href="/login">Have an account? Login!</a>
        </form>
    </div>
</div>



<?php include_once 'template/footer.php'; ?>

我的 register.class.php:

<?php


/**
* User Registration
*/
class register {

public function register($reg_username = '', $reg_firstName = '', $reg_lastName = '', $reg_email = '', $reg_phone = '', $reg_password = '', $reg_confirmPassword = '') {

    global $conn;
    global $error;

    // TO PREVENT AN UNDEFINED INDEX
    // First Name
    if(isset($reg_firstName)) {
        $reg_firstName = stripslashes(htmlspecialchars($conn->real_escape_string($reg_firstName)));
    } else {
        $error->set('312');
    }

    // Last Name
    if(isset($reg_lastName)) {
        $reg_lastName = stripslashes(htmlspecialchars($conn->real_escape_string($reg_lastName)));
    } else {
        $error->set('313');
    }

    // Username
    if(isset($reg_username)) {
        $reg_username = stripslashes(preg_replace('/\s+/', '', htmlspecialchars($conn->real_escape_string($reg_username))));
    } else {
        $error->set('311');
    }

    // Email
    if(isset($reg_email)) {
        $reg_email = stripslashes(preg_replace('/\s+/', '', htmlspecialchars($conn->real_escape_string($reg_email))));
    } else {
        $error->set('314');
    }

    // Phone
    if(isset($reg_phone)) {
        $reg_phone = stripslashes(preg_replace("/[^0-9]/", "", htmlspecialchars($conn->real_escape_string($reg_phone))));
    } else {
        $error->set('315');
    }

    // Password
    if(isset($reg_password)) {
        $reg_password = stripslashes(htmlspecialchars($conn->real_escape_string($reg_password)));
    } else {
        $error->set('316');
    }

    // Password
    if(isset($reg_confirmPassword)) {
        $reg_password = stripslashes(htmlspecialchars($conn->real_escape_string($reg_confirmPassword)));
    } else {
        $error->set('317');
    }

    // Check if username exists in the database
    $stmt = $conn->prepare("SELECT * FROM users WHERE username=?");
    $stmt->bind_param('s', $reg_username);
    $stmt->execute();
    $stmt->store_result();

    if ($stmt->num_rows == 0) {

        $stmt = $conn->prepare("SELECT * FROM users WHERE email=?");
        $stmt->bind_param('s', $reg_email);
        $stmt->execute();
        $stmt->store_result();

        if ($stmt->num_rows == 0) {

            $stmt = $conn->prepare("SELECT * FROM users WHERE phone=?");
            $stmt->bind_param('s', $reg_phone);
            $stmt->execute();
            $stmt->store_result();

            if ($stmt->num_rows == 0) {

                // Do passwords match?
                if ($reg_password == $reg_confirmPassword) {

                    $reg_passwordEncrypt = hash("sha256", $reg_password);

                    // Insert data
                    $stmt = $conn->prepare("INSERT INTO users (username, firstName, lastName, email, phone, password, company, website, bio) VALUES (?, ?, ?, ?, ?, ?, '', '', '')");
                    $stmt->bind_param("ssssss", $reg_username, $reg_firstName, $reg_lastName, $reg_email, $reg_phone, $reg_passwordEncrypt);
                    $stmt->execute();
                    header("Location: /login");

                } else {
                    // Set Error
                    $error->set('308');
                }

            } else {
                // Set Error
                $error->set('306');
            }

        } else {
            // Set Error
            $error->set('304');
        }
    } else {
        // Set Error
        $error->set('301');

    }


}

}

$register = new register;

谢谢!

【问题讨论】:

  • 我记得我曾经在与 HTML 表单相同的文件中处理我的 PHP 代码时……我一直遇到这些问题。为什么不将信息发布到专门用于处理此问题的文件中?像process.php 文件?
  • @GrumpyCrouton 当我这样做时,我遇到了一些奇怪的错误,所以我认为将 PHP 保留在 HTML 上会更容易,因为我只有一个 PHP 函数和一些变量为我做所有事情。跨度>
  • IMO 使用另一个文件更干净、更容易,以防止出现您现在遇到的问题:P
  • @GrumpyCrouton 我试过了,我得到了一个奇怪的错误,我可以尝试在文档中多找一些。
  • 你知道具体是什么错误吗?如果有错误有修复!

标签: php mysql sql forms mysqli


【解决方案1】:

这是因为您的方法名称与类名称相同。它作为 PHP 4 构造函数工作,并在初始化对象时调用该方法。

https://wiki.php.net/rfc/remove_php4_constructors

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2013-11-06
    • 2011-11-30
    • 2020-06-27
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多