-1

我必须在我的网站上建立一个登录系统,但我的用户在他们的网站上没有相同的东西,所以我将$_GET我的用户的 customers_id(来自数据库)在他们登录时的 URL 中。

但我看不出怎么做。

我的登录代码是这样的。

    <?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");
    }
}
?>
4

1 回答 1

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 你可以使用这个属性来检查是否有任何行。

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
}  
于 2013-04-08T08:38:48.767 回答