douchushao7799 2013-11-13 18:00
浏览 35
已采纳

PHP注册脚本使用预准备语句

I have got the following registration code, it SEEMS to be working but it isn't actually inserting the entered information into my table. It all runs with no errors showing up, and the "echo 'end';" is displaying.

Edit, updated code: Now get this error

Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in C:\xampp\htdocs\ppa\test.php on line 19

Which is this line:

$insert_stmt->bind_param($email, $password, $random_salt, $user);

PHP:

   <?php
include "includes/db_connect.php";

if (isset($_POST['email'], $_POST['p'])) {
    $email = $_POST['email'];
    //Default user perms
    $perms = "user";

    $password = hash('sha512', $_POST['p']); //Need to add JavaScript to hash password before it gets here
    //Create random salt
    $random_salt = hash('sha512', uniqid(mt_rand(1, getrandmax()), true));

    //Create salted password
    $password = hash('sha512', $password.$random_salt);

    //Add insert to database script
    //Use prepared statements!
    if ($insert_stmt = $mysqli->prepare("INSERT INTO users (email, password, salt, perms) VALUES (?, ?, ?, ?)")) {
        $insert_stmt->bind_param($email, $password, $random_salt, $perms);
        $insert_stmt->execute();
    }
    echo "Email: ".$email."<br />";
    echo "Password: ".$password."<br />";
    echo "Random Salt: ".$random_salt."<br />";
    echo "Permissions: ".$perms."<br />";
}
?>

This is my db_connect.php page

<?php
define("HOST", 'localhost');
define("USER", 'ppa_user');
define("PASSWORD", 'password');
define("DATABASE", 'ppa');

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);

if ($mysqli->connect_errno) {
    //No database found, redirect to setup
    $url = "http://".$_SERVER['HTTP_HOST'].'/ppa/setup.php';
    header('Location: '.$url);
}
?>
  • 写回答

3条回答 默认 最新

  • dongyanju1094 2013-11-13 18:41
    关注

    In order to close this question as being answered, have come to the conclusion the OP needed to use the following code:

    $insert_stmt->bind_param("ssss", $email, $password, $random_salt, $perms);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?