0

私はデコードしているクエリ文字列から文字列を暗号化しました。デコード後、db文字列と一致させようとしていますが、これは機能していません.Hereが私のコードです

<?php
require_once("db.php");
$id="";
$emailrole="";
if($_GET){
    if(isset($_GET['id'])){
    $id = base64_decode($_GET['id']);
    $query = "select * from sfrole where email like('{$id}') LIMIT 1";
    $qryy = mysql_query($query);
    $cnt = mysql_num_rows($qryy);
    if($cnt > 0){
        $emailrole = mysql_fetch_array($qryy);
    }else{
        exit();
    }
    }else{
        exit();
    }
}else{
    exit();
}
?>

このように使えば

$query = "select * from sfrole where email like('malik.adeel@shakarganj.com.pk') LIMIT 1";

それは機能し、変数から使用すると何も返されません助けてください

アップデート

私はphpで使用しているこのようにC#で文字列を暗号化しています

Convert.ToBase64String(Encoding.Unicode.GetBytes(emailid))
4

3 に答える 3

1

クエリで実行する前に、文字列をエスケープする必要があります。

http://fr2.php.net/function.mysql-real-escape-string.php

<?php
require_once("db.php");
$id="";
$emailrole="";
if($_GET){
    if(isset($_GET['id'])){
    $id = base64_decode($_GET['id']);
    $query = "SELECT * FROM sfrole WHERE email LIKE '" . mysql_real_escape_string($id) . "' LIMIT 1";
    $qryy = mysql_query($query);
    $cnt = mysql_num_rows($qryy);
    if($cnt > 0){
        $emailrole = mysql_fetch_array($qryy);
    }else{
        exit();
    }
    }else{
        exit();
    }
}else{
    exit();
}
?>
于 2012-11-27T11:28:29.970 に答える
0

選択クエリが正しくありません。変更してください。また、クエリの前にエコーを使用してクエリを確認します。あなたはこれを使うべきです

$query="select * from sfrole where id='$id' and email LIKE 'example@gmail.com'  LIMIT 1"; 
于 2012-11-27T11:29:01.447 に答える
0

このクエリを試してください:

select * from sfrole where email = '$id' LIMIT 1

中括弧「{$id}」を使用する理由は何ですか? 暗号化が必要な場合は md5 を使用する方が良いと思いますが、メールを暗号化するのは良くありません。ユーザーに電子メールを送信する必要がありますが、送信する前にそれらを復号化する必要があると想像してください。これは使用できず、パフォーマンスが低下します。

アップデート:

申し訳ありませんが、DB の base64 で保存していないことがわかりました :-) 何が起こるかを理解するために、入力値と DB 値を比較してみてください。

于 2012-11-27T11:26:44.533 に答える