PHP / SQL防止更新

时间:2014-02-05 12:51:56

标签: php sql

我目前正在使用下面的代码片段,它目前使用activatin代码更新数据库,但我希望它只检查是否已使用了activatino代码,如果是这样,则显示错误消息如果未使用错误消息直接用户到下一个表单。

$sql = "SELECT `Check_Activation` 
        FROM `members` WHERE (`Check_Activation` = $activation_code )
        AND (`Activation` = )";

if ($sql->affected_rows > 0)
{
    $username = substr($username, 0, 1);
    if($username == 1) { 
        header( 'Location: form-one.php?membernumber='
                .$usernameurl.'&activation_code='
                .$activation_codeurl.'' ) ;
    } elseif($username == 2) { 
        header( 'Location: form-two.php?membernumber='
                .$usernameurl.'&activation_code='
                .$activation_codeurl.'' ) ;                 
    } elseif($username == 3) { 
        header( 'Location: form-three.php?membernumber='
                .$usernameurl.'&activation_code='
                .$activation_codeurl.'' ) ;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以通过将逻辑应用于MySQL数据库表结构来实现此目的。

例如;

CREATE TABLE used_codes (uid SMALLINT(5) NOT NULL, code VARCHAR(20) NOT NULL);
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| uid   | smallint(5) | NO   |     | NULL    |       |
| code  | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set

现在,当使用代码时,将其插入此表中;

INSERT INTO used_codes (uid, code) VALUES (?,?)

当有人尝试使用代码时,只需查询此MySQL数据库表WHERE code = ?,如果返回一行,则代码已被使用。

或者,您可以在Members中使用一个标记,该标记将名为code_used的列的值设置为1(默认值为0 - 未使用)

或使用您已有的

并查询我们已存储的内容

SELECT `column` FROM `Members` WHERE (`User_Activated` = 1) AND (`Activation` = ?)

我认为您User_Activated的版本是Check_Activation,但我不确定。 如果该查询返回一行,我们知道此激活码已被使用。

希望有所帮助。

答案 1 :(得分:0)

您是使用随机激活码还是让用户创建激活码?

您最好使用AJAX检查之前是否使用过用户名并让用户知道,以便他们可以更改用户名。

相关问题