我必须在我的网站上创建一个登录系统,但是我的用户在他们的网站上没有相同的东西,所以当他们被记录时,我将$_GET
我的用户的customers_id(来自数据库) in。
但我看不出怎么样。
我的登录代码是这样的。
<?php
$email = $_POST['user'];
$password= $_POST['pass'];
$login = $_POST['login'];
$user_custermers_id = $_GET['id'];
if($login == 'Login' || isset($login))
{
global $wpdb;
$get = mysql_query("SELECT * FROM das_custermer_users WHERE email = '$email' AND password ='" . md5($password)."'") or die(mysql_error());
$result = mysql_num_rows($get);
if($result == 0)
{
$msg = "Wrong E-mail or Password";
}
else
{
session_start();
$_SESSION['email'] = $email;
header("location: http://dashboard.tg.com");
}
}
?>
答案 0 :(得分:1)
你写的是非常糟糕和危险的代码。如果我抓住$ _POST ['email']并将其更改为' - ; DELETE your_data_base,该怎么办? ?
您不会检查您的数据,并且您的示例中可以进行SQL注入。
if($login == 'Login' || isset($login))
这种情况没有意义,因为如果有$ login =='login'那么isset为TRUE所以第二个OR条件是不必要的
在session_start();
你应该把它移到第一行。
global是一种旧的PHP语法,可以避免它。
PDO抛出异常,因此不需要mysql_errror()。 mysql_num_rows()从PHP 5.5.0开始不推荐使用,将来会被删除,所以请避免使用它。
我在互联网上找到了这个样本。此代码也应该在try catch块中处理异常
$login = mysql_escape_string(trim($_POST['login']));
$pass = mysql_escape_string(trim($_POST['pass']));
$dbh = new PDO('mysql:host=localhost;dbname=mydatabase', 'user', 'pass');
$sth = $dbh->prepare("SELECT * FROM table WHERE login = ? AND pass = ?");
$sth->bindParam(1, $login);
$sth->bindParam(2, md5($pass));
$sth->execute();
if ($sth->rowCount() > 0)
{
// session stuff,
// refresh page
}