2016-11-29 2 views
0

Ich kodiere eine "Social Media Site" für ein Klassenprojekt, und ich habe Probleme in einem Abschnitt.MySQL PHP Matching User IDs bei der Erstellung eines "USER"

Bei der ersten Registrierung eines Kontos muss der Benutzer einen Benutzernamen und ein Kennwort eingeben und auf eine Schaltfläche zum Senden klicken. PHP-Code überprüft die Eingaben, um sicherzustellen, dass sie alle gültig sind und dass es keine Duplikate gibt. Wenn alles passiert, fügt sie den Benutzernamen und das Passwort in eine SQL-Tabelle mit dem Namen "Benutzer" ein. Benutzer hat 3 Spalten: Benutzername, Passwort und Benutzer-ID. Benutzer-ID ist der Primärschlüssel.

Sobald dieser Prozess abgeschlossen ist, leiten wir auf eine separate Seite um, wo der Benutzer mehr persönliche Informationen eingeben kann, wie Vor- und Nachname, Stadt, Land usw. Diese Tabelle, "userInfo" genannt, hat die Spalten: firstName, lastName, emailAddress, Adresse, Stadt, Land und userID. userID ist wiederum der Primärschlüssel.

Was ich herausfinden möchte ist, wie die beiden Benutzer-IDs in einer Insert-Anweisung übereinstimmen. Ich habe ein Formular, das alle erforderlichen Informationen sammelt, aber ich bin mir nicht sicher, wie Sie die SQL-Abfrage einrichten, um sicherzustellen, dass users.userID mit userInfo.userID übereinstimmt.

Hier ist meine PHP für Benutzer (Erstanmeldung)

<?php 
session_start(); 
require_once('dbConnect.php'); 
$error = "false"; 
$errorMessage = ""; 

if(isset($_POST['submit'])){ 
    // Get inputs 
    $username = $_POST['user']; 
    $password = $_POST['password']; 

    // Clean inputs and encrypt password 
    $username = mysqli_real_escape_string($conn, $username); 
    $password = mysqli_real_escape_string($conn, $password); 
    $password = md5($password); 

    // Check username not empty 
    if (empty($username)) { 
     $error = "true"; 
     $errorMessage = "Please enter a value for your username"; 
    } 

    // Check username does not already exist 
    $checkUserQuery = "SELECT username FROM users WHERE username = '$username'"; 
    $checkResult = $conn->query($checkUserQuery); 
    if($checkResult->num_rows > 0) { 
     $error = "true"; 
     $errorMessage = "This username already exists"; 
    } 

    // Username does not exist, add to database 
    else { 
     $insertUserQuery = "INSERT INTO users (username, password) VALUES('$username', '$password')"; 
     $insertResult = $conn->query($insertUserQuery); 
     $_SESSION['username'] = $username; 
     header("Location: userInfo.php"); 
    } 
    } 
?> 

Hier ist meine PHP-Code bisher für userinfo:

<?php 
session_start(); 
require_once('dbConnect.php'); 
$error = "false"; 
$errorMessage = ""; 

$username = $_SESSION['username']; 

if(isset($_POST['submit'])){ 
    // Get inputs 
    $firstName = $_POST['firstName']; 
    $lastName = $_POST['lastName']; 
    $emailAddress = "[email protected]"; 
    $address = $_POST['address']; 
    $city = $_POST['city']; 
    $country = $_POST['country']; 

    // Clean inputs 
    $firstName = mysqli_real_escape_string($conn, $firstName); 
    $lastName = mysqli_real_escape_string($conn, $lastName); 
    $address = mysqli_real_escape_string($conn, $address); 
    $city = mysqli_real_escape_string($conn, $city); 
    $country = mysqli_real_escape_string($conn, $country); 

    // Validate Inputs (Only validating first and last name, location entries are not required) 

    if(empty($firstName) || empty($lastName)) { 
     $error = "true"; 
     $errorMessage = "Please enter your first AND last name"; 
    } 

    else { 

    } 
    } 
?> 

Entschuldigt, wenn diese Super unordentlich ist. Datenbanken sind NICHT meine starke Klage lol.

Vielen Dank an alle, die Ihnen helfen können!

+1

Bitte verwenden Sie nicht [md5 to hash] (http://security.stackexchange.com/questions/19906/is-md5-considered-insecure) Ihre Passwörter. [Schauen Sie hier stattdessen.] (Http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords) –

+0

Nur eine Hash-Funktion ist nicht ausreichend und nur ein Salz fügt wenig hinzu verbessere die Sicherheit. Stattdessen iterieren Sie über einen HMAC mit einem zufälligen Salz für etwa 100ms und speichern Sie das Salz mit dem Hash. Verwenden Sie Funktionen wie 'PBKDF2',' password_hash', 'BCrypt' und ähnliche Funktionen. Es geht darum, den Angreifer dazu zu bringen, viel Zeit mit der Suche nach Passwörtern zu verbringen. Schützen Sie Ihre Benutzer ist wichtig, bitte verwenden Sie sichere Passwort-Methoden. Für PHP ist 'password_hash' und' password_verify' die beste Lösung. – zaph

+0

Verwenden Sie [vorbereitete Anweisungen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php), wenn Sie mit nicht vertrauenswürdigen Daten arbeiten. – Mikey

Antwort

2

Sie möchten die mysqli_insert_id für Ihre einfügen in die Tabelle Benutzer und übergeben Sie diese (möglicherweise über Ihre $ _SESSION) für die Erstellung in userInfo.

+0

Danke für die Antwort auf Kevin. Nur um zu verdeutlichen, würde mysqli ID die Benutzer-ID zurückgeben, die in der Tabelle "users" erstellt wurde? Oder wäre das eine separate Nummer? –

+0

Angenommen, Ihre Benutzertabelle ist so eingerichtet, dass sie ihr Benutzer-ID-Feld automatisch inkrementiert. Der Aufruf von mysqli_insert_id() 'gibt dieses Feld bei einer erfolgreichen Einfügung zurück. –

+0

Die Benutzertabelle wird automatisch inkrementiert! Super, werde ich versuchen, sobald ich zu Hause bin! Danke Kevin –