0

我正在尝试构建一个将用户插入用户表的 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,有人可以帮忙吗?谢谢

4

3 回答 3

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 ) ) )';
于 2013-01-30T12:26:35.307 回答
0

我从未使用过 mysqli .. 但是,错误是“参数计数不正确”.. 如果您查看代码:

(user_email, user_name, user_password)- 那是 3 列和 (?, ?, des_encrypt(substring (md5(rand(),1,8)))).. 3 列

与:

$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']);

于 2013-01-30T12:28:02.883 回答
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)))';    
于 2013-01-30T12:30:30.450 回答