在我的登录系统上获取id

时间:2013-04-08 08:29:38

标签: php mysql

我必须在我的网站上创建一个登录系统,但是我的用户在他们的网站上没有相同的东西,所以当他们被记录时,我将$_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");
    }
}
?>

1 个答案:

答案 0 :(得分:1)

你写的是非常糟糕和危险的代码。如果我抓住$ _POST ['email']并将其更改为' - ; DELETE your_data_base,该怎么办? ?

  1. 您不会检查您的数据,并且您的示例中可以进行SQL注入。

    if($login == 'Login' || isset($login))
    
  2. 这种情况没有意义,因为如果有$ login =='login'那么isset为TRUE所以第二个OR条件是不必要的

    在session_start();

  3. 你应该把它移到第一行。

  4. global是一种旧的PHP语法,可以避免它。

  5. $ user_custermers_id = $ _GET ['id'];这真的很糟糕。你应该转换为int或使用intval()
  6. 如果我是你,我会使用PDO连接。 PDO具有PDOStatement :: rowCount,您可以使用此属性来检查是否有任何行。
  7. 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
    }