2017-04-27 87 views
-1

我有2个表,用户日志是人们用他们的电子邮件和密码注册的地方,另一个表用户名是用户完成他们自己的配置文件的用户名。问题php和MySQL

如何使用SQL查询插入插入表单中的数据?

考虑到表用户与用户表记录与id引用...

我的意思是

User log 
Id 
Email 
Password 

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

这是代码至极我在

<?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>'; 
    } 
} 
做出的日志

我做了一个var_dump()来查看$ resultado中的数组是什么,它使我获得了表的数据,但是当我想用数据填充输入时,它失败了

+1

你为什么不尝试基本的谷歌搜索?你几乎可以在几秒钟内得到一个教程。或者提供一些代码 – Akintunde007

+2

**警告**:编写您自己的访问控制层并不容易,并且有很多机会使其严重错误。请不要在[Laravel](http://laravel.com/)等任何现代开发框架(http://codegeekz.com/best-php-frameworks-for-developers/)上编写自己的认证系统,内置了强大的[认证系统](https://laravel.com/docs/5.4/authentication)。绝对不要遵循[推荐的安全最佳实践](http://www.phptherightway.com/#security)和**从不将密码存储为纯文本**。 – tadman

+0

为什么有两张桌子?数据似乎总是一对一的关系。 – chris85

回答

1

如果你的数据将POST方法来了,请始终使用保护措施,避免SQL注入..

我会用一个非常基本的例子。您可以增强这一个供自己使用。

$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

实际上我使用PDO。 –

+0

$ statement = $ conexion-> prepare('INSERT INTO prueba(id,nombre,apaterno,amaterno,profesion,ciudad,perfilprofe,perfilperso,tel,cel)VALUES(null,:nombre,:apaterno,:amaterno,:profesion ,:ciudad,:perfilprofe,:perfilperso,:tel,:cel)'); –

0

您可以使用post方法传递您的数据。 试试这个代码。

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

晚安SQL注射.. – chris85