2012-04-02 41 views
0

我正在构建一个注册页面,用于添加用户更新其详细信息以及将其记录到日志中。我正在使用OOP样式来执行此操作。我一直在进行屏幕播放,但决定一路走下去。 我遇到的问题是我无法注册任何用户,我不确定为什么不将它们添加到数据库中。这里是我的代码:通过OOP和Mysql进行用户注册

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(); 
     } 

    } 

在我的科技教育类的用户我有以下几点:

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 

任何有帮助的意见?请 ?我

回答

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); 
} 
+0

我只是试图做你的建议现在,我仍然无法注册任何人。我不应该使用函数addUser($ name,$ lastneme ...)作为接受的值吗?我根据问题 – Anele 2012-04-02 14:59:47

+0

@Anele调整了我的数据库:现在'addUser'没有'$ data'参数。补充一点。 – Ryan 2012-04-02 18:30:14

0

你可以使用?对于params来说,bind_params期望的是什么。

你不需要那个fprintf,......你正在做的是将来自用户的数据串与SQL连接起来。因此bind_param被执行,像电子邮件这样的东西已经在SQL上了。

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);