2016-05-02 7 views
0

Ich habe den Code für Login-und Anmeldeformular mit Sublime3 geschrieben. Ich muss eine Datenbank in XAMPP mit Mysql PDO erstellen und es mit dem Code verknüpfen, so dass die Validierung der Anmeldung über die Datenbank stattfindet. Unten ist der Code, den ich für die Datenbank geschrieben habe. Aber es erstellt nicht automatisch eine Tabelle, wenn ich mich mit einem neuen Benutzernamen anmelde. Die bei der Anmeldung eingegebenen Daten werden nicht in der Datenbank gespeichert. -Code in phpMyAdmin geschriebenErstellen einer Datenbank (MySQL PDO) in XAMPP und verbinden Sie es mit dem PHP-Code

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(255) NOT NULL, 
    `password` varchar(255) NOT NULL, 
    `first_name` varchar(255) NOT NULL, 
    `middle_name`varchar(255), 
    `last_name` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `username` (`username`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

-Code für die Datenbankverbindung

<?php 
    $dsn = 'mysql:host=localhost;dbname=ecs;'; 
    $user = 'root'; 
    $password = ''; 
    try 
    { 
     $dbh = new PDO($dsn, $user, $password); 
    } 
    catch (PDOException $e) 
    { 
     echo 'Connection failed: ' . $e->getMessage(); 
    } 
?> 

-Code für das Register

<?php 
    session_start(); 
    require_once("../includes/dbconfig.php"); 

    try{ 
     $uname = $_POST["username"]; 
     $pword = $_POST["password"]; 
     $first_name = $_POST["firstname"]; 
     $middle_name = $_POST["middlename"]; 
     $last_name = $_POST["lastname"]; 
     $user_type = $_POST["user_type"]; 

     $dbh = new PDO($dsn, $user, $password); 
     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $sql = "INSERT INTO users (username, password, first_name, middle_name, last_name, user_type) 
       VALUES (:username, :password, :first_name, :middle_name, :last_name, :user_type)"; 
     $stmt = $dbh->prepare($sql); 
     $stmt->bindValue(':username', $uname); 
     $stmt->bindValue(':password', $pword); 
     $stmt->bindValue(':first_name', $first_name); 
     $stmt->bindValue(':middle_name', $middle_name); 
     $stmt->bindValue(':last_name', $last_name); 
     $stmt->bindValue(':user_type', $user_type); 
     $stmt->execute(); 

    } 
    catch (PDOException $e) 
    { 
     echo 'PDO Exception Caught.'; 
     echo 'Error with the database: <br />'; 
     echo 'SQL Query: ', $sql; 
     echo 'Error: ' . $e->getMessage(); 
    } 
?> 

Können Sie mir sagen, was ich falsch mache? Ist es der Code oder einige Installationsänderungen in XAMPP?

+0

** Speichern Sie niemals Nur-Text-Passwörter! ** Bitte verwenden Sie PHP [integrierte Funktionen] (http://jayblanchard.net/proper_password_hashing_with_PHP.html), um die Passwortsicherheit zu behandeln. Wenn Sie eine PHP-Version kleiner als 5.5 verwenden, können Sie das 'password_hash()' [compatibility pack] (https://github.com/ircmaxell/password_compat) verwenden. Stellen Sie sicher, dass Sie [Passwörter nicht umgehen] (http://stackoverflow.com/q/36628418/1011527) oder verwenden Sie einen anderen Bereinigungsmechanismus vor dem Hashing. Wenn Sie dies tun, * ändert * das Passwort und verursacht unnötige zusätzliche Codierung. –

+0

Wenn Sie eine 'NOT NULL'-Spaltendefinition angeben, müssen Sie auch einen' DEFAULT'-Wert für die Spalte angeben. –

Antwort

0

Ich sehe nicht user_type Spalte in Ihrer Tabelle, so dass ich denke, das ist, was das Problem verursacht. Können Sie diese Spalte erstellen und es erneut versuchen oder aus Ihrem PHP-Code entfernen? Bitte verschlüsseln Sie auch Ihr Benutzerpasswort als @Jay Blanchard erwähnen Sie vorher.

Verwandte Themen