存储注册时输入的数据

Storing data entered when signing up

我需要创建一个注册页面来存储用户名电子邮件密码并将它们放入数据库中,以便用户可以登录并访问个人资料等。

我已经创建了一个数据库database,但是没有任何内容可以进入其中。我手动输入了一个,但我尝试从网页上执行的任何操作都不会转到数据库。

网页代码:Signup是我要显示的页面,adduser是添加数据到数据库的代码。

注册:

    <?php include '../view/header.php';
 ?>
<br>
<br>
<h1 class="light white-text text-lighten-3">Sign up!</h1>
<br>
<br>
<form class="form" id="signup" action="addUser.php" method="post">  


     <div class="form-group ">
        <label for="email">Email</label>
        <input type="email" class="form-control" id="email" name="email" placeholder="Enter Your Email">
    </div>
    <br>
      <div class="form-group ">
            <input id="user_name" type="text" class="validate" name="user_name"required="required">
          <label for="user_name">User Name</label>
        </div>
    <br>
      <div class="form-group col s6">
        <label for="password">Password</label>
        <input type="password" class="form-control" id="password" name="password" placeholder="Enter a Password">
    </div>
    <br>

    <br>
     <button type="submit" class="orange btn btn-primary">Submit</button>  
</form>  


<?php

include '../view/footer.php';

添加用户:

<script src="../js/materialize.js" type="text/javascript"></script>
<script src="../js/materialize.min.js" type="text/javascript"></script>
<script src="../js/init.js" type="text/javascript"></script>
<?php

$server = "localhost";
$username = 'root';
$Password ="";
$database = 'commish';

$con = mysqli_connect($server, $username, $Password, $database);


$email    = filter_input(INPUT_POST, 'email');

$user_name    = filter_input(INPUT_POST, 'user_name');

$password    = filter_input(INPUT_POST, 'password'); 

new_user( $user_name, $password,$email, $con);
function new_user($user_name, $password, $email,$con) 
{
    global $con;
    $query = "INSERT into users (user_name, password, email) VALUES (:user_name, :password, :email)";
    $statement = $con->prepare($query);
    $statement->bindValue(":user_name", $user_name);
    $statement->bindValue(":password", $password);
    $statement->bindValue(":email", $email);
    $statement->execute();
    echo 'Successfully created new user';
}

mysqli中没有bindValue()方法,你应该使用bind_param()

new_user 函数:

   function new_user ($user_name, $password, $email) 
    {
        global $con;
        $stmt = $con->prepare("INSERT into users (user_name, password, email) VALUES (?,?,?)";
        $stmt->bind_param("sss", $user_name, $password, $email);
        $stmt->execute();
        $stmt_error = $stmt->error;
        $stmt->close(); 

        if ($stmt_error)
            echo 'Error on create new user: '.$stmt_error;
        else 
            echo 'Successfully created a new user';
    }

mysqli中没有bindValue()方法,PDO有。因此,这里有两种方法可以解决您的问题:

1)mysqli方法:

使用bind_param() 方法将变量绑定到准备好的语句。所以你的 new_user() 函数应该是这样的:

function new_user($user_name, $password, $email,$con){
    $query = "INSERT into users (user_name, password, email) VALUES (?, ?, ?)";
    $statement = $con->prepare($query);
    $statement->bind_param("sss", $user_name, $password, $email);
    if($statement->execute()){
        echo 'Successfully created new user';
    }else{
        // query failed
    }
}

注意:由于您将连接处理程序 $con 传递给此函数,因此无需使用 global $con;。加上 Globals are evil.


2)PDO方法:

保持你的 new_user() 功能不变并更改此行

$con = mysqli_connect($server, $username, $Password, $database);

$con = new PDO("mysql:host=$server;dbname=$database",$username,$Password);

旁注: 切勿将密码存储为纯可读文本,在将原始密码插入 table.[=27 之前始终对原始密码执行 salted password hashing =]