【问题标题】:why doesn't it want to check and then insert为什么它不想检查然后插入
【发布时间】:2014-01-07 06:44:04
【问题描述】:

对于学校,我必须使用有效的登录和注册系统制作作品集,登录部分有点工作,但在注册部分我有点卡住了。那么为什么在检查用户名和电子邮件的数据库已经存在之后不想插入用户数据呢? (希望你不介意,但我还是一个最近开始接触编码的学生)

<?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 email adress 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');
    }
}
?>

【问题讨论】:

标签: php mysqli sql-insert


【解决方案1】:

只是一个疯狂的猜测:您在 sql 语句中使用了==。我很确定你应该只使用=

【讨论】:

  • @Fred-ii- 谢谢大家,但它仍然不想将数据插入数据库
  • 您需要结合使用两个答案来(可能)解决此问题。如果这仍然不起作用,请检查您的列名和类型。 @贾斯汀维尼斯
  • 问题可能出在您的 if 语句 if (!$tableRowEmail = 1) - 变量未在任何地方设置 - 您应该使用 == 将变量与值进行比较
  • 另外,这个变量没有做任何事情$available_username@JustinVeenis
【解决方案2】:

字段值缺少单引号 ' 所有字段都是 varchar 数据类型。字符串值应使用单引号。

$sqlinsert = "INSERT INTO members (username, email, ipadress, password, salt) VALUES ('$username', '$email', '$ipadress', '$password', '$random_salt')";

【讨论】:

  • 它仍然不想将数据插入数据库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多