我从查询字符串中加密了字符串,我正在解码。解码后我尝试与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))
答案 0 :(得分: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();
}
?>
答案 1 :(得分:0)
尝试此查询:
select * from sfrole where email = '$id' LIMIT 1
你出于什么原因使用花括号“{$ id}”?我想如果你想要使用铭文,最好使用md5,但加密电子邮件并不好。想象一下,你应该向用户发送电子邮件,但在发送之前你应该解密它们,它不可用并且性能更差。
更新:
很抱歉,现在我知道你没有把它保存在DB的base64中:-)尝试比较输入值和DB值,以了解会发生什么。
答案 2 :(得分:0)
您的选择查询不正确。请更改它。您还可以在查询之前使用echo检查查询。 你应该用这个
$query="select * from sfrole where id='$id' and email LIKE 'example@gmail.com' LIMIT 1";