0

次の登録コードを取得しました。機能しているように見えますが、実際には入力された情報がテーブルに挿入されていません。エラーが表示されずにすべて実行され、「echo 'end';」が表示されます。表示しています。

編集、更新されたコード: このエラーが発生するようになりました

警告: mysqli_stmt::bind_param(): 型定義文字列の要素数が C:\xampp\htdocs\ppa\test.php の 19 行目のバインド変数の数と一致しません

この行はどれですか:

$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 />";
}
?>

これは私の db_connect.php ページです

<?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);
}
?>
4

3 に答える 3

1

これをチェックして

if ($insert_stmt = $mysqli->prepare("INSERT INTO users (email, password, salt, perms) VALUES (?, ?, ?, ?)"));
$insert_stmt->execute(array($_POST['email'], $password, $random_salt, $user));
于 2013-11-13T18:15:20.093 に答える
1

この質問を回答済みとして閉じるために、OP は次のコードを使用する必要があるという結論に達しました。

$insert_stmt->bind_param("ssss", $email, $password, $random_salt, $perms);
于 2013-11-13T18:41:39.217 に答える
1

以下を置き換えます。

//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('ssss', $_POST['email'], $password, $random_salt, $user);

//Execute the prepared query
$insert_stmt->execute();
echo "end";

と:

//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($_POST['email'], $password, $random_salt, $user);
    $insert_stmt->execute();
    echo "end";
}
于 2013-11-13T18:05:06.237 に答える