- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将此代码用作电子邮件确认脚本的一部分。它工作得很好,除了我想不出一种方法来区分某人何时提供了无效的电子邮件地址与何时他们只是刷新了页面(即已经确认了他们的帐户)。我唯一能想到的就是在始终更新的 users
表中放置一个时间戳字段,但我希望有更好的方法。我认为 REPLACE
可以解决问题,但是,虽然 email
是唯一的,但它不是主键。
if (isset ($email, $token, $correctToken)){
$success = FALSE; //Set the $success variable so that we don't get an error when testing for it later
if ($token == $correctToken) {
$confirm = mysql_query("UPDATE users
SET conf = 'TRUE'
WHERE email = '$email'");
if (mysql_affected_rows() == 1) {
echo "Thank you! Your email address is confirmed and your account is actived.";
$success = TRUE;
}
}
if (!$success) {
echo "There was a problem with the confirmation. Try the link in your email again or contact us at Support@WiseRenters.com";
// Send email to admin to notify of error
exit;
}
}
提前感谢您的建议!比利
编辑:$email
和 $token
变量是通过 $_GET 或 $_POST 提供的,以防不明显。
最佳答案
重定向会阻止他们刷新 - 但如果他们再次单击电子邮件中的链接怎么办?
您应该检查当前用户是否已激活。
$sql = "SELECT id, conf FROM users WHERE email = '{$email}'";
$exec = mysql_query($sql) or die(mysql_error());
list( $id, $conf ) = mysql_fetch_row($exec);
if( $conf ) {
// Redirect them to their profile with a message saying "your account has already been activated"
header("Location: /profile?already_activated");
exit;
}
// your code
$confirm = mysql_query("UPDATE users
SET conf = 'TRUE'
WHERE id = '{$id}'");
回应您的评论:
请记住,这只会为尚未激活的用户添加一个额外的查询。如果它们已激活,则会发生重定向,并且该页面仍仅运行 1 个查询。
要稍微优化一下,您可以根据电子邮件地址选择用户 ID 和确认状态。然后,如果确实需要激活它们,您可以根据用户 ID 而不是电子邮件来激活它们。由于整数键要快得多,因此 2 个查询的组合时间将与您基于字符串列更新的 1 个查询大致相同。我更新了代码以反射(reflect)这一点。
此外,此页面可能不会被频繁访问。此处的任何优化实际上都是微观的,并没有那么大的帮助。
顺便说一下,我希望您在电子邮件中使用 mysql_real_escape_string
,并且 conf
是 bool 值 true/false 而不是字符串“true”/“false”。
关于php - mysql_affected_rows() 解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837887/
我的 php 代码中有一个实用程序类,它为一些 mysql 函数提供包装器。其中一个名为 query() 的函数接受查询字符串作为参数,然后执行该查询。在此查询函数中,我想查明给定查询是数据状态更改查
我正在尝试显示受影响的行,但由于某种原因它不起作用。当我运行下面的代码时,PHP 的 mysql_affected_rows() 不显示任何内容。有什么建议 这就是我所拥有的: prepare('DE
我在查询中使用了 mysql_affected_rows,但它似乎返回 false,即使查询确实执行了,所以我有点困惑.... 这是我的: $check = mysql_query("DELETE F
我将此代码用作电子邮件确认脚本的一部分。它工作得很好,除了我想不出一种方法来区分某人何时提供了无效的电子邮件地址与何时他们只是刷新了页面(即已经确认了他们的帐户)。我唯一能想到的就是在始终更新的 us
我们如何使用 mysql_affected_rows() 在存储过程中.. 最佳答案 使用 ROW_COUNT()信息功能。 ROW_COUNT() returns the number of row
我很难解决这个 PHP/MySQL 问题。让我向您展示我的数据库,并说明我的情况: 创建表: CREATE TABLE IF NOT EXISTS `users` ( `id` int(50) N
在我的 PHP INSERT/UPDATE 代码中,我一直为一个相当基本的概念而苦恼。我是否应该始终在每次插入/更新后检查受影响的行数,因为在绝大多数情况下我只执行一次插入/更新并且它似乎导致的问题多
我的代码遇到了一个非常有趣的问题。基本上,当我第一次运行代码时,我从 mysqli_effected_rows() 函数中得到了正确的结果。但是当我第二次运行相同的脚本时,它总是给我“-100” 如果
是否可以使用 mysql_affected_rows 来获取用户进行更新时受影响的行数?如果有多个用户更新密码并且我需要知道每个用户更新是否成功,该怎么办?因此,如果 3 个用户同时进行更新,即使其中
我对 PHP 中的 mysql_affected_rows() 函数有疑问。我使用 MySQL 更新,在 phpMyAdmin 中我可以看到,'confirmed' 从 0 变为 1,但是 mysql
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Warning: mysql_fetch_array(): supplied argument is not
使用以下代码来防止竞争条件是否安全? (key和status字段和mysql_affected_rows用来实现加锁) $mres = mysql_query("SELECT `values`, `k
这个问题在这里已经有了答案: Can I mix MySQL APIs in PHP? (4 个答案) 关闭 7 年前。 我需要更新 mysql 表,并使用 php 获取更新的表数,代码如下所示,
我想做的是:(以编程方式) 更新id为某物的状态,如果没有更新的行,给出错误:我们找不到id为某物的记录,否则给出消息成功。 在这里,我使用 mysql_affected_rows() 来了解某行是否
执行SQL语句时,如 INSERT INTO table ... 在 DUPLICATE KEY UPDATE ...我依靠 mysql_affected_rows() 来确定是否执行了插入或更新。作
mysql_query("update users set balance=balance+'$pwbalance'-'$totalprice' where memberid='$memberid'
我最近在这里问了这个问题:Why doesn't this query produce a mysql_error() result? 建议的解决方案是使用 mysql_affected_rows()
foreach($chk as $key=>$invoiceno) { $QryUp = mysql_query("update `tbl1` set `paid` = 'y' where `in
我遇到了函数 mysql_affected_rows 的奇怪行为,即使数据库中的寄存器发生更改,它也会返回 0。 我已将问题简化为尽可能简单的事情,因此您可以轻松地重现它。 一方面,我有一个文件(pa
我正在从表单上传 csv。我正在尝试使用 mysql_affected_rows 来确定它是否成功。数据正在上传到表中,但 mysql_affected_rows 未评估为真。请帮助: 1) { e
我是一名优秀的程序员,十分优秀!