2012-04-02 10 views
0

Ich baue eine Registrierungsseite für das Hinzufügen von Benutzern, die ihre Details aktualisieren und sie auch anmeldet. Ich verwende OOP-Stil, um dies zu tun. Ich folgte einem Screen-Cast, entschied mich aber den ganzen Weg zu gehen. Das Problem, das ich habe, ist, dass ich keinen Benutzer registrieren kann und ich bin mir nicht sicher, warum es sie nicht zur Datenbank hinzufügt. Hier ist mein Code:Benutzerregistrierung über OOP und 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(); 
     } 

    } 

Auf meiner Ste Benutzer Klasse habe ich die folgenden:

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!"; 
    } 

jedes Mal wenn ich versuche um einen neuen Nutzer anzuwerben bekomme ich immer den Fehler "Sie konnten nicht registriert werden!" Meine Form sieht wie folgt aus:

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 

jede hilfreiche Ideen? Bitte ? Ich

Antwort

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

Warum haben Sie die sprintf hier, wenn Sie bereits Parameter gebunden haben (die Recht Weg, es zu tun) später? Hol es raus.

$query = "INSERT INTO users VALUES('', ?, ?, ?, ?, ?, ?, ?)"; 

Als nächstes sind vorbei Sie die undefinierte Variable $data zu $registeres->register_users(). Versuchen Sie etwas wie:

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

ich Ihr gerade versucht, übergeben wollen tun Vorschlag jetzt und ich kann noch niemanden registrieren. soll ich nicht die Funktion addUser ($ name, $ lastneme ...) als Zeichen verwenden um akzeptiert zu werden? Ich habe meine Datenbank entsprechend angepasst, siehe Frage – Anele

+0

@Anele: Jetzt hat 'addUser' keinen' $ data' Parameter. Fügen Sie das hinzu. – Ryan

0

Sie sollten verwenden? Für params ist bind_params zu erwarten.

Sie brauchen dieses fprintf nicht, ... was Sie tun, ist die Verkettung der Strings der Daten vom Benutzer mit dem SQL. Wenn also bind_param ausgeführt wird, ist die E-Mail bereits in SQL.

0

Du nennst register_users() mit $data aber an diesem Punkt $data existiert nicht:

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

Es sieht aus wie Sie die $_POST Array statt wie

$response = $registeres->register_users($_POST);