0

我已经从我正在解码的查询字符串中加密了字符串。解码后我试图与 db 字符串匹配,但这不起作用。这是我的代码

<?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";

然后它可以工作,如果从变量中使用它不会返回任何东西请帮助

更新

我正在加密 C# 中的字符串,就像我在 php 中使用的那样

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

试试这个查询:

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

您使用花括号“{$id}”的原因是什么?我认为如果您想要加密,最好使用 md5,但加密电子邮件并不好。想象一下,您应该向用户发送电子邮件,但在发送之前您应该解密它们,它不可用并且性能更差。

更新:

抱歉,现在我知道您没有将其保存在 DB 中的 base64 中 :-) 尝试比较输入值和 DB 值以了解会发生什么。

于 2012-11-27T11:26:44.533 回答
0

您的选择查询不正确。请更改它。您还可以通过在查询前使用 echo 来检查您的查询。你应该用这个

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