我想在php中创建一个帐户激活页面。我试过这些代码,但每次显示
您的验证链接无效或已过期
每当电子邮件ID和密钥在我的sql数据库中时,我的代码出了什么问题?请帮忙
<?php
$hash = $_GET['hash'];
$e = base64_decode($_GET['e']);
?>
<?php require_once("Connections.php");?>
<?php
mysql_select_db($database, $connection);
$sql=mysql_query("SELECT FROM temp WHERE email='$e' AND hashkey='$hash'");
if(mysql_num_rows($sql)!=1) {
echo "Your verification link is invalid or expired";
}
else {
if ($sql=mysql_query("DELETE FROM temp WHERE email='".$e."' AND hashkey='".$hash."'")) {
echo '<script type="text/javascript">
register_2($e);
function register_2(){
alert("Hi your email"+m);
}
</script>
';
}
}
?>
答案 0 :(得分:0)
<?php
$hash = $_GET['hash'];
$e = base64_decode($_GET['e']);
?>
<?php require_once("Connections.php");?>
<?php
mysql_select_db($database, $connection);
$sql=mysql_query("SELECT FROM temp WHERE email='$e' AND hashkey='$hash'");
if(mysql_num_rows($sql)<= 0)
{
echo "Your verification link is invalid or expired";
}
else{
if ($sql=mysql_query("DELETE FROM temp WHERE email='".$e."' AND hashkey='".$hash."'")){
echo '<script type="text/javascript">
register_2($e);
function register_2(){
alert("Hi your email"+m);
}
</script>
';
}
}
?>
只需将!= 1更改为&lt; = 0
我做到了
答案 1 :(得分:0)
首先不要使用mysql_ *函数将它们删除并在php 7中删除,使用mysqli_ *或pdo代替
所以改变
if(mysql_num_rows($sql)!=1)
到
$rowsCount = mysql_num_rows($sql);
if ($rowsCount === 0 || $rowsCount === false) {
die "Your verification link is invalid or expired";
}
你的代码也容易受到 SQL INJECTION 的攻击,你应该转义哈希以及 XSS register_2($e);
这里我可以通过URL传递base64中编码的任何东西。
$hash = mysql_real_escape_string($_GET['hash']);
也是这段代码
mysql_query("DELETE FROM temp WHERE email='".$e."' AND hashkey='".$hash."'")
可以更改为
mysql_query("DELETE FROM temp WHERE email='$e' AND hashkey='$hash'")
它是一样的,但在最好的情况下,你应该使用准备好的陈述。
其他建议:
mysql_affected_rows()
检查行是否已删除,或者删除此条件。答案 2 :(得分:-1)
你应该使用这样的条件。
if(mysql_num_rows($sql) != NULL)
{
echo "Your verification link is invalid or expired";
}