-1

Web サイトにログイン システムを作成する必要がありますが、ユーザーがサイトに同じものを持っていないため、ログイン時に$_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 であるため、2 番目の OR 条件は不要であるため、この条件は意味がありません。

    session_start();

  3. 1 行目に移動する必要があります。

  4. global は古い PHP 構文なので避けてください。

  5. $user_custermers_id = $_GET['id']; これは本当に悪いです。int にキャストするか、 intval() を使用する必要があります
  6. 私があなたなら、PDO 接続を使用します。PDO には PDOStatement::rowCount があり、このプロパティを使用して行があるかどうかを確認できます。

PDO は例外をスローするため、mysql_error() は必要ありません。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 に答える