我正在尝试构建一个将用户插入用户表的php表单。 用户名和用户电子邮件将通过HTML表单手动输入,用户密码将同时随机生成。 这是我的代码:
<?php
if (isset($_POST['insert'])) {
require_once 'dblogin.php';
$OK = false;
$conn = new mysqli ($host, $user, $password, $database) or die("Connection Failed");
$stmt = $conn->stmt_init();
$sql = 'INSERT INTO users (user_email, user_name, user_password)
VALUES(?, ?, des_encrypt(substring (md5(rand(),1,8))))';
if ($stmt->prepare($sql)) {
// bind parameters and execute statement
$stmt->bind_param('sss', $_POST['user_email'], $_POST['user_name'], $_POST['user_password']);
// execute and get number of affected rows
$stmt->execute();
if ($stmt->affected_rows > 0) {
$OK = true;
}
}
if ($OK) {
header('Location: confirm.php');
exit;
} else {
$error = $stmt->error;
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Add User</title>
</head>
<body>
<h1>Add User</h1>
<?php if (isset($error)) {
echo "<p>Error: $error</p>";
} ?>
<form id="form1" method="post" action="">
<p>
<label for="user_email">User email:</label>
<input name="user_email" type="text" class="widebox" id="user_email">
</p>
<p>
<label for="user_name">User name:</label>
<input name="user_name" type="text" class="widebox" id="user_name">
</p>
<p>
<input type="submit" name="insert" value="Register New User" id="insert">
</p>
</form>
</body>
</html>
我得到的错误是:错误:调用本机函数'md5'时参数计数不正确。我是初学者,我从未使用过md5,有人可以帮忙吗? 感谢
答案 0 :(得分:2)
我想你正试图这样做......
SUBSTRING( MD5( RAND( ) ) , 1, 8 )
而不是
substring (md5(rand(),1,8))
您的查询应该是这样的......
$sql = 'INSERT INTO users (user_email, user_name, user_password)
VALUES (?, ?, DES_ENCRYPT( SUBSTRING( MD5( RAND( ) ) , 1, 8 ) ) )';
答案 1 :(得分:0)
我从未使用过mysqli ..但是,错误是'不正确的参数计数'..如果你查看你的代码:
(user_email, user_name, user_password)
- 那就是3列
和
(?, ?, des_encrypt(substring (md5(rand(),1,8))))
.. 3列
vs:
$stmt->bind_param('sss', $_POST['user_email'], $_POST['user_role'], $_POST['user_password']);
。 。 4个参数..
删除'sss'
?
另外,一旦你删除了'sss'
您仍然要发布的内容,请查看匹配内容:
user_email = $ _POST ['user_email']
user_password = $ POST ['user_role']。 。
所以你需要做到这一点
`$stmt->bind_param($_POST['user_email'], $_POST['user_name']);
答案 2 :(得分:0)
问题出在这里:
$sql = 'INSERT INTO users (user_email, user_name, user_password)
VALUES(?, ?, des_encrypt(substring (md5(rand(),1,8))))';
MD5只接受一个参数 - 要散列的字符串。
试试这个:
$sql = 'INSERT INTO users (user_email, user_name, user_password)
VALUES(?, ?, des_encrypt(substring(md5(rand()),1,8)))';