2017-03-20 1 views
0

Ich versuche, eine "Registrierung" -Form mit PHP und MySQL zu erstellen. Das Registrierungsformular fragt nach Benutzername und Passwort. Wenn ein Feld leer ist, wird der Benutzer wissen, welche. Wenn der Benutzername verwendet wird, wird der Benutzer darüber informiert.Einfügen von Daten in die Datenbank mit PHP PDO

Ich weiß, die Verbindung zur Datenbank ist in Ordnung, weil ich einen Benutzer erstellt habe, die ich manuell in die Datenbank hinzugefügt wurde.

Das Merkwürdige ist, dass mein Code in Cloud9 funktioniert. Aber es funktioniert nicht auf einer VM-Instanz, die in Google Cloud installiert ist.

In cloud9 wird der Benutzer in die DB eingefügt. In der Google-Instanz wird es nicht.

Kann jemand das überprüfen und mir sagen, was ich falsch mache?

Danke.

<?php 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     $display = $_POST['display']; 



     $dbh = new PDO("mysql:host=localhost;dbname=mydb","root",NULL); 
     $stmt = $dbh->prepare("SELECT username FROM users WHERE username = :username"); 
     $stmt->bindParam(':username', $username); 
     $stmt->execute(); 

     if($stmt->rowCount() == 0 and $username != null and $password != null){ 
      $insert = $dbh->prepare("INSERT INTO users(username,password) VALUES(:username, :password)"); 
      $insert->bindParam(':username', $username); 
      $insert->bindParam(':password', $password); 
      $insert->execute(); 
      echo ("The user ".$username. " has been created."); 
+0

Alle Fehler im Protokoll? –

+2

** WARNUNG **: Es ist nicht einfach, eine eigene Zugriffskontrollschicht zu schreiben, und es gibt viele Möglichkeiten, dies schwerwiegend zu tun. Bitte schreiben Sie nicht Ihr eigenes Authentifizierungssystem, wenn Sie ein modernes [Entwicklungsframework] (http://codegeekz.com/best-php-frameworks-for-developers/) wie [Laravel] (http://laravel.com/) verfügt über ein integriertes [Authentifizierungssystem] (https://laravel.com/docs/5.4/authentication). Am absolutesten folgen Sie [empfohlene Best Practices für die Sicherheit] (http://www.phptherightway.com/#security) und ** speichern Sie Passwörter niemals als Nur-Text **. – tadman

+0

Gibt es die Nachricht, dass der Benutzer erstellt wurde? – Barmar

Antwort

-1

Versuchen Sie dieses, bevor alle u

  • überprüfen müssen, ob Benutzername und Passwort nicht leer ist, weil, wenn Benutzername leer ist i Abfrage gültig machen kippe Benutzernamen wählen
  • überprüfen, ob Benutzername in Gebrauch ist

  • wenn Benutzername nicht in Gebrauch ist, Daten in die Datenbank einfügen

Skript

<?php 

// error_reporting on 
error_reporting(1); 
ini_set('error_reporting', E_ALL); 

$username = $_POST['username']; 
$password = $_POST['password']; 
// i commented $display variable because i don't see that u using it anywhere 
//$display = $_POST['display']; 

// database connection 
$dbh = new PDO("mysql:host=localhost;dbname=mydb","root",""); 

// query 
$stmt = $dbh->prepare("SELECT username FROM users WHERE username = :username"); 
$stmt->bindParam(':username', $username); 
$stmt->execute(); 

// check if username and password is not empty 
if ($username != '' && $password != '') 
{ 
    // check if username is in use 
    if($stmt->rowCount() > 1) 
    { 
     echo "Username in use, please choose another one."; 
    } 
    else 
    { 
     $insert = $dbh->prepare("INSERT INTO users(username,password) VALUES(:username, :password)"); 
     $insert->bindParam(':username', $username); 
     $insert->bindParam(':password', $password); 
     $insert->execute(); 

     // if last inserted id is true 
     if ($dbh->lastInsertId()) 
     { 
      echo "The user ".$username. " has been created."; 
     } 
     else 
     { 
      echo "User not registered, please try again."; 
     } 
    } 
} 
else 
{ 
    echo "Please enter username and password."; 
} 
?> 
+0

warum negative vote? Code funktioniert nicht oder scheitert? Ja wirklich – Mario

Verwandte Themen