2017-04-27 4 views
-1

Ich habe 2 Tabellen, Benutzerprotokoll, wo die Leute ein Register mit ihrer E-Mail-Adresse und Passwort, und eine andere Tabelle mit dem Namen Benutzer, wo die Leute ihr eigenes Profil vervollständigen.Probleme PHP und MySQL

Wie kann ich mit einer SQL-Abfrage die Daten einfügen, die in das Formular einfügen?

zu berücksichtigen, dass Tabelle Benutzer Referenz mit Tabelle Benutzeranmeldung mit der id ...

bedeuten machen ich

User log 
Id 
Email 
Password 

User 
Id 
User_id fk id reference userlog(id) 
Name 
Surname 

Dies ist der Code weicht i in

das Protokoll gemacht
<?php 
session_start(); 

if (isset($_SESSION['usuario'])) { 
    header('Location: index.php'); 
} 

$errores = ''; 

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $email = filter_var(strtolower($_POST['email']), FILTER_SANITIZE_STRING); 
    $password = $_POST['password']; 
    $password = hash('sha512', $password); 

    try { 
     $conexion = new PDO('mysql:host=localhost;dbname=DATABASE, 'USER', 'PASS'); 
    } catch (PDOException $e) { 
     echo "Error:" . $e->getMessage();; 
    } 

    $statement = $conexion->prepare(' 
     SELECT * FROM userlog WHERE email = :email AND password = :password' 
    ); 
    $statement->execute(array(
     ':email' => $email, 
     ':password' => $password 
    )); 

    $resultado = $statement->fetch(); 
    if ($resultado !== false) { 
     $_SESSION['usuario'] = $resultado; 
     header('Location: index.php'); 
    } else { 
     $errores .= '<li>Datos Incorrectos</li>'; 
    } 
} 

Ich mache eine var_dump(), um zu sehen, was das Array in $ resultado bringt, und es brign mir die Daten der Tabelle, aber wenn ich die Daten verwenden, um eine Eingabe zu füllen, schlägt es fehl

+1

Warum versuchen Sie nicht eine grundlegende Google-Suche? Sie erhalten innerhalb von Sekunden ein Tutorial. Oder geben Sie einen Code an – Akintunde007

+2

** WARNUNG **: Das Schreiben Ihrer eigenen Zugriffssteuerungsschicht ist nicht einfach und es gibt viele Möglichkeiten, es schwer falsch zu machen. 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

Warum haben zwei Tabellen? Die Daten scheinen immer 1: 1 zu sein. – chris85

Antwort

1

Wenn Ihre Daten von POST-Methode kommen werden, bitte immer Vorsichtsmaßnahmen verwenden SQL-Injection zu vermeiden ..

Ich werde ein sehr einfaches Beispiel verwenden. Sie können dieses für Ihren eigenen Gebrauch verbessern.

$servername = "localhost"; 
$username = "yourUser"; 
$password = "yourPass"; 
$dbname = "youtDB"; 

try { 
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$sql = "INSERT INTO Userlog (email, password) 
VALUES ('[email protected]', 'some_safe_password')"; 

$conn->exec($sql); 
$last_id = $conn->lastInsertId(); 
$userSql = "INSERT INTO Userlog (userId, name, lastName) VALUES ($last_id, 'some_name', 'some_lastName')"; 
$conn->exec($userSql); 


} 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 
+0

tatsächlich benutze ich PDO. –

+0

$ statement = $ conexion-> prepare ('n', nobre, apaterno, amaterno, profesion, ciudad, perfilprofe, perfilperso, tel, cel) WERTE (null,: nombre,: apaterno,: amaterno,: profesion ,: ciudad,: perfilprofe,: perfilperso,: tel,: cel) '); –

0

Sie können Ihre Daten mit der post-Methode übergeben. versuchen Sie diesen Code.

$sql = "INSERT INTO users (Userlog, Id, Email, Password) 
     VALUES ('".$_POST["Userlog"]."','".$_POST["Id"]."','".$_POST["Email"].",'".$_POST["Password"]."')"; 
+3

Guten Abend SQL injection .. – chris85