插入语句只将一些数据插入数据库

时间:2018-03-20 16:46:48

标签: php html sql mysql-workbench

我希望我的标题有意义,因为我不知道如何短语。

我正在使用参数和散列进行登录和注册表单。我之前使用过参数但从未以注册形式使用过。

所以问题是,当我创建一个新用户时,它只会插入密码而不是用户名。我试图更改用户名,我检查了与数据库的连接是否正确,我只是迷失了现在要做的事情。

我的数据库可以在这里看到:

enter image description here     

$username = $password = $confirm_password = "";
$username_err = $password_err = $confirm_password_err = "";

// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){

// Validate username
if(empty(trim($_POST["username"]))){
    $username_err = "Please enter a username.";
} else{
    // Prepare a select statement
    $sql = "SELECT id FROM user WHERE username = ?";

    if($stmt = mysqli_prepare($conn, $sql)){
        // Bind variables to the prepared statement as parameters
        mysqli_stmt_bind_param($stmt, "s", $param_username);

        // Set parameters
        $param_username = trim($_POST["username"]);

        // Attempt to execute the prepared statement
        if(mysqli_stmt_execute($stmt)){
            /* store result */
            mysqli_stmt_store_result($stmt);

            if(mysqli_stmt_num_rows($stmt) == 1){
                $username_err = "This username is already taken.";
            } else{
                $username = trim($_POST["username"]);
            }
        } else{
            echo "Oops! Something went wrong. Please try again later.";
        }
    }

    // Close statement
    mysqli_stmt_close($stmt);
}

// Validate password
if(empty(trim($_POST['password']))){
    $password_err = "Please enter a password.";     
} elseif(strlen(trim($_POST['password'])) < 6){
    $password_err = "Password must have atleast 6 characters.";
} else{
    $password = trim($_POST['password']);
}

// Validate confirm password
if(empty(trim($_POST["confirm_password"]))){
    $confirm_password_err = 'Please confirm password.';     
} else{
    $confirm_password = trim($_POST['confirm_password']);
    if($password != $confirm_password){
        $confirm_password_err = 'Password did not match.';
    }
}

// Check input errors before inserting in database
if(empty($username_err) && empty($password_err) && 
empty($confirm_password_err)){

    // Prepare an insert statement
    $sql = "INSERT INTO user (name, password) VALUES (?, ?)";

    if($stmt = mysqli_prepare($conn, $sql)){
        // Bind variables to the prepared statement as parameters
        mysqli_stmt_bind_param($stmt, "ss", $param_username, 
$param_password);

        // Set parameters
        $param_username = $username;
        $param_password = password_hash($password, PASSWORD_DEFAULT); 
// Creates a password hash

        // Attempt to execute the prepared statement
        if(mysqli_stmt_execute($stmt)){
            // Redirect to login page
           // header("location: login.php");
            echo "You have been added";
        } else{
            echo "Something went wrong. Please try again later.";
        }
    }

    // Close statement
    mysqli_stmt_close($stmt);
}

// Close connection
mysqli_close($conn);
}
?>

<?php
include "header.php";
?>
<div class="wrapper">
    <h2>Sign Up</h2>
    <p>Please fill this form to create an account.</p>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ? 
>" method="post">

            <div class="form-group <?php echo (!empty($username_err)) ? 
'has-error' : ''; ?>">
            <label>Username</label>
            <input type="text" name="username"class="form-control" 
value="<?php echo $username; ?>">
            <span class="help-block"><?php echo $username_err; ?> 
</span>
        </div>    
        <div class="form-group <?php echo (!empty($password_err)) ? 
'has-error' : ''; ?>">
            <label>Password</label>
            <input type="password" name="password" class="form-control" 
value="<?php echo $password; ?>">
            <span class="help-block"><?php echo $password_err; ?> 
</span>
        </div>
        <div class="form-group <?php echo 
(!empty($confirm_password_err)) ? 'has-error' : ''; ?>">
            <label>Confirm Password</label>
            <input type="password" name="confirm_password" class="form- 
control" value="<?php echo $confirm_password; ?>">
            <span class="help-block"><?php echo $confirm_password_err; 
?></span>
        </div>
        <div class="form-group">
            <input type="submit" class="btn btn-primary" 
value="Submit">
            <input type="reset" class="btn btn-default" value="Reset">
        </div>
        <p>Already have an account? <a href="login.php">Login here</a>. 
</p>
    </form>
</div>  
<footer>
<?php
include "footer.php";
?>  </footer>

希望你能帮助我,如果我没有说清楚,请随时提问:)

2 个答案:

答案 0 :(得分:1)

删除以下行

$param_username = $username;

因为你覆盖已经使用trim设置的$ param_username($ _ POST [&#34; username&#34;])

度过愉快的一天。

答案 1 :(得分:0)

它消除了$ username = $ password = $ confirm_password =&#34;&#34 ;;正在清除我的文本框,所以我删除了它并添加了$ username = $ _POST [&#34;用户名&#34;];然后代码工作。