首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >激活帐户PHP

问激活帐户PHP
EN

Stack Overflow用户
提问于 2010-06-09 23:51:09
回答 3查看 1.7K关注 0票数 0

我自己创建了这个帐户注册激活脚本,我一遍又一遍地检查它以找出错误,我没有看到一个特定的错误.

域名应该是这样的:

http://domain.com/include/register.php?key=true&p=AfRWDCOWF0BO6KSb6UmNMf7d333gaBOB

它来自一封电子邮件,当用户单击它时,他们会被重定向到以下脚本:

代码语言:javascript
复制
if($_GET['key'] == true)
{
    $key = $_GET['p'];

    $sql = "SELECT * FROM users
            WHERE user_key = '" . $key . "'";

    $result = mysql_query($sql) or die(mysql_error());

    if(mysql_affected_rows($result) > 0)
    {
        $sql = "UPDATE users
                SET user_key = '', user_active = '1'
                WHERE user_key = '" . $key . "'";

        $result = mysql_query(sql) or die(mysql_error());

        if($result)
        {
            $_SESSION['PROCESS'] = $lang['Account_activated'];
            header("Location: ../index.php");
        }
        else
        {
            $_SESSION['ERROR'] = $lang['Key_error'];
            header("Location: ../index.php");
        }
    }
    else
    {
        $_SESSION['ERROR'] = $lang['Invalid_key'];
        header("Location: ../index.php");
    }
}

它甚至根本不起作用,我用那个键查看了数据库,它匹配,但是它总是以一个错误出现,这让我非常恼人。数据库是对的,表和列是对的,数据库没有什么问题,是脚本不起作用。

帮帮我,伙计们。

谢谢:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-09 23:54:59

在此$_GET['key'] == "true"

  • You之前,
  1. 将$_GET['key'] == true更改为if,成功的mysql_connect(...)或mysql_pconnect(...)?
  2. 将mysql_affected_rows($result);更改为mysql_num_rows($result);。受影响,您可以使用第二个statements.
  3. Before或UPDATE SQL mysql_result(...),如果打开,则在第二个mysql_result(...)之前添加,mysql_free_result($result);以释放分配给以前的mysql_result(...)更改为if(mysql_affected_rows($result));的内存。您可以在这里这样做。在$key = mysql_real_escape_string($_GET['p']);
  4. I函数调用add a return 0;或exit(0);之后,header(...);
  5. 取决于您完整的代码逻辑。在SQL语句中使用$key变量的
  6. 使您的代码在SQL注入攻击(< code >E 232 get change >D33)中更加安全,从而使
  7. 认为您在header()函数中的位置失败。在http://www.example.com/somewhere/index.php
  8. And url地址应该是满的,比如:http://www.example.com/somewhere/index.php
  9. And检查您的$_GET['p']变量是否存在!!如果不存在这种情况,如果存在$_GET['key'],则会发现所有激活的用户。那么,如果您有user_key标记,那么我认为将user_activated设置为'‘是非常必要的。
票数 3
EN

Stack Overflow用户

发布于 2010-06-09 23:59:48

你不应该使用:

代码语言:javascript
复制
if(mysql_affected_rows($result) > 0)

您应该使用mysql_num_rows()

票数 0
EN

Stack Overflow用户

发布于 2010-06-10 00:02:53

你的问题是:

代码语言:javascript
复制
$result = mysql_query($sql) or die(mysql_error());

"or“使您的语句为boolean,以便$result获得一个True而不是mysql_query()返回的值。

代码语言:javascript
复制
echo 'Hello' or die('bye'); // outputs nothing, because result is True not 'Hello'

3 or die() == True; // true
3 or die() != 3; // true

或是与收/复相同的,它是逻辑语句的运算符。

这将起作用:

代码语言:javascript
复制
$result = mysql_query($sql);
if(!$result) die(mysql_error());    

几个小时前也犯了同样的错误:link

可以使用OR的情况:

代码语言:javascript
复制
defined('FOO') or
    define('FOO', 'BAR');

mysql_connect(...) or die(...);

mysql_select_db( .... ) or die(...);

mysql_query('UPDATE ...') or die(...);

if(FOO or BAR) { ... }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3010788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档