gpt4 book ai didi

php - 尝试将用户设置表单字段添加到数据库但遇到问题

转载 作者:行者123 更新时间:2023-11-29 06:34:22 24 4
gpt4 key购买 nike

我有一个表单,用户可以在其中为我正在构建的自定义应用程序定义他们的用户设置。这个项目向我介绍了 stmt,我不得不重新熟悉 mysqli。

目前我正在提交一个只定义了几个“选项”的表单。我的代码中出现的随机 echo 被打印到屏幕上(用于测试),但是当我检查数据库时,只有一个选项被插入(GmailID)选项。

屏幕上的错误信息如下:

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /home/website/public_html/portal/includes/process-user-settings.php on line 56

但是,查看我的代码,我似乎拥有正确数量的变量和参数。就像我说的,它适用于 GmailID 但不适用于 GmailPW 并且不确定此错误是否与某处有关?为了以防万一,我包含了我的代码文件。

error_reporting(-1);
ini_set('display_errors', 'On');

echo 'Houston we are a go<br />';
if (isset($_GET['GmailID'], $_GET['GmailPW'], $_GET['userID'])) {

include_once 'db_connect.php';
include_once 'psl-config.php';

$error_msg = "";

echo 'Info Set<br />';

$GmailID = filter_input(INPUT_POST, 'GmailID', FILTER_SANITIZE_EMAIL);
$GmailID = filter_var($GmailID, FILTER_VALIDATE_EMAIL);

$GmailPW = filter_input(INPUT_POST, 'GmailPW', FILTER_SANITIZE_STRING);

if (empty($error_msg)) {
echo 'No Errors<br />';
// Create a random salt
$random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE));
echo $random_salt . '<br />';

// Create salted password
$GmailPW = hash('sha512', $GmailPW . $random_salt);
echo $GmailPW . '<br />';

$user_id = $_GET['userID'];

/* OPTIONS */
$options = array(
'GmailID' => $GmailID,
'GmailPW' => $GmailPW
);

foreach($options as $key => $value) {
echo 'Made it to the Foreach <br />';
// Insert the options into the database
if ($insert_stmt = $mysqli->prepare("INSERT INTO user_settings (user_id, meta_key, meta_value, salt) VALUES ('$user_id', '$key', '$value', ?)")) {
$insert_stmt->bind_param('ssss', $user_id, $key, $value, $random_salt);
// Execute the prepared query.
if (! $insert_stmt->execute()) {
header('Location: ../index.php?err=insert');
exit();
}
}
echo ' We are done';
header('Location: ../index.php?user=success');
exit();
}
}
}

最佳答案

您的查询使用占位符是完全错误的:

INSERT [...snip...] ('$user_id', '$key', '$value', ?)")) {
^---one single placeholder

您的查询中恰好有 ONE 占位符,以及 3 个直接插入的变量,这意味着您很容易受到 SQL 注入(inject)攻击。

应该是

INSERT [...snip...] (?, ?, ?, ?)

关于php - 尝试将用户设置表单字段添加到数据库但遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25873222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com