我正在构建一个注册页面,用于添加用户更新其详细信息并将其登录。我正在使用OOP样式来执行此操作。我正在关注一个屏幕演员,但决定一路走下去。 我遇到的问题是我无法注册任何用户,我不确定为什么不将它们添加到数据库中。这是我的代码:
database.php中
<?php
equire 'includes/config.php';
class Database {
private $conn;
function __construct() {
$this->conn = new mysqli(DB_SERVER,DB_USER,DB_PASSWORD,DB_NAME) or die(mysqli_error()) ;
}
function addUser() {
$query =
"INSERT INTO users VALUES(?,?,?,?,?,?,?)";
if ($stmt = $this->conn->prepare($query)) {
$stmt->bind_param('sssssss');
$stmt->execute();
}
}
在我的Ste用户类中,我有以下内容:
SITE_USERS.PHP
require 'Database.php';
class siteRegisters {
function register_users($data) {
$mysql = new Database();
$ensure_registration = $mysql->addUser($data);
if ($ensure_registration) {
$_SESSION['status'] = 'authorised';
header("location: admin.php");
}else return "You could not be registered!";
}
每当我尝试向新用户发帖时,我总会收到“您无法注册”的错误。 我的表格如下:
session_start();
require_once 'classes/siteUsers.php';
$registeres = new siteRegisters();
if ($_POST &&
!empty($_POST['name']) && !empty($_POST['lastname']) &&
!empty($_POST['username']) && !empty($_POST['password']) &&
!empty($_POST['company']) && !empty($_POST['email']) &&
!empty($_POST['phone'])
){
$response = $registeres->register_users($data);
}
?>
<form action="" method="post" />
<fieldset>
<?php
if (isset($response)) echo "<h4 class'alert'>". $response ."</h4>";
?>
<dl>
<dt><label for="name">Name:</label></dt>
<dd><input type="text" name="name" size="32" title="Please fill in your Name" /></dd>
//And so on
有什么有用的想法?请 ?一世
答案 0 :(得分:1)
$query = sprintf(
"INSERT INTO users VALUES('',%s,%s,%s,%s,%s,%s,%s)",
$data['name'], $data['lastname'],
$data['username'], $data['password'],
$data['company'], $data['email'],
$data['phone']
);
为什么你以后有绑定参数(正确的方式)时,你有sprintf
?拿出来。
$query = "INSERT INTO users VALUES('', ?, ?, ?, ?, ?, ?, ?)";
接下来,您将未定义的变量$data
传递给$registeres->register_users()
。尝试类似:
if(!empty($_POST['name']) && !empty($_POST['lastname']) &&
!empty($_POST['username']) && !empty($_POST['password']) &&
!empty($_POST['company']) && !empty($_POST['email']) &&
!empty($_POST['phone'])
) {
$response = $registeres->register_users($_POST);
}
答案 1 :(得分:0)
你不需要那个fprintf,...你正在做的是将用户数据的字符串与SQL连接起来。所以wen bind_param被执行了,像电子邮件这样的东西已经在SQL上了。
答案 2 :(得分:0)
您使用register_users()
致电$data
,但此时$data
不存在:
$registeres = new siteRegisters();
if ($_POST &&
!empty($_POST['name']) && !empty($_POST['lastname']) &&
!empty($_POST['username']) && !empty($_POST['password']) &&
!empty($_POST['company']) && !empty($_POST['email']) &&
!empty($_POST['phone'])
){
$response = $registeres->register_users($data);
}
看起来您希望传递$_POST
数组,而不是
$response = $registeres->register_users($_POST);