用户通过OOP和Mysql注册

时间:2012-04-02 13:47:23

标签: php mysql oop

我正在构建一个注册页面,用于添加用户更新其详细信息并将其登录。我正在使用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 

有什么有用的想法?请 ?一世     

3 个答案:

答案 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)

你应该用吗?对于params,是bind_params期望的。

你不需要那个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);