为什么不想注册我

时间:2014-01-07 00:20:01

标签: php insert mysqli

对于学校的分配我必须做一个投资组合。这必须包含一个有效的登录和注册系统。我得到了它将记录人员,但只有我手动输入数据库中的数据。但是现在当我试图让人们自己注册时,它只是不断给我一个用户名和电子邮件已经存在的错误,在大多数情况下并不是这样。我希望你们可以帮助我。这是代码:

<?php
include_once 'db_connect.php';
include_once 'psl-config.php';

$error_msg = "";

if (isset($_POST['username'], $_POST['email'], $_POST['p'])) {
    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
    $email = filter_var($email, FILTER_VALIDATE_EMAIL);
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $error_msg .= '<p class="error">The email address you entered is not valid!</p>';
    }
    $password = filter_input(INPUT_POST, 'p', FILTER_SANITIZE_STRING);
    if (strlen($password) != 128) {
        $error_msg .= '<p class="error">Invalid password configuration.</p>';
    }
    $query_username = "SELECT id
    FROM members
    Where username == '$username'
    LIMIT 1";
    $available_username = array();
    if ($resultUsername = mysqli_query($mysqli, $query_username)) {
        if (mysqli_num_rows($resultUsername) > 0) {
            $error_msg .= '<p class="error">A user with this username already exists!</p>';
        }
    }
    $query_email = "SELECT id
    FROM members
    Where email == '$email'
    LIMIT 1";
    $available_email = array();
    if ($resultEmail = mysqli_query($mysqli, $query_email)) {
        if (mysqli_num_rows($resultEmail) > 0) {
            $error_msg .= '<p class="error">A user with this username already exists!</p>';
        }
    }
    if (empty($error_msg)) {
        $ipadress = $_SERVER['REMOTE_ADDR'];
        $random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE));
        $password = hash('sha512', $password . $random_salt);
        if (!$tableRowEmail = 1) {
            $sqlinsert = "INSERT INTO members (username, email, ipadress, password, salt) VALUES ($username, $email, $ipadress, $password, $random_salt)";
            if (!mysqli_query($mysqli, $sqlinsert)) {
                header('Location: ../error.php?err=Registration failure: INSERT');
            }
        }
        header('Location: ./register_success.php');
    }
}
?>
谢谢大家,做出了改变。但现在它让一切都通过。并且它不会在我的localhost / phpmyadmin中注册任何内容。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您正在使用单个等号而不是该行的双倍:

$tableRowUsername == 1

此外,您应该计算SQL结果中的行数,而不是仅通过检查它是否等于1来检查是否返回了行。

答案 1 :(得分:0)

if ($tableRowUsername == 1) { //Correct it
        $error_msg .= '<p class="error">A user with this username already exists!</p>';
    }

以及其他所有if( = ) with if( == )

它正在分配价值。不比较它

答案 2 :(得分:0)

最好这样做:

if ($resultUsername = mysqli_query($mysqli, $query_username)) {
    while ($tableRowUsername = mysqli_fetch_assoc($resultUsername)) {
        $available_username[] = $tableRowUsername;
    }
    if ($tableRowUsername == 1) {
        $error_msg .= '<p class="error">A user with this username already exists!</p>';
    }
}

成:

if ($resultUsername = mysqli_query($mysqli, $query_username)) {
    if (mysqli_num_rows($resultUsername) > 0) {
        $error_msg .= '<p class="error">A user with this username already exists!</p>';
    }
}