我正在尝试为我的用户创建一个PHP电子邮件激活系统,当我运行我的脚本时,它会返回一个空白页面而我的数据库没有更新。任何帮助表示赞赏。
这是我的代码:
<?php
session_start()
$host="localhost";
$username="root";
$password="power1";
$db_name="members";
$tbl_name="users";
$link = mysql_connect($host, $username, $password)or die("cannot connect. Please contact us");
mysql_select_db($db_name)or die("cannot select DB. Please contact us");
$queryString = $_SERVER['QUERY_STRING'];
if(isset($_SESSION[$queryString])) {
$query = "SELECT *
FROM users
WHERE email = '$_SESSION[$queryString]'";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)) {
if ($queryString == $row[activationkey]) {
echo "Congratulations! You have succesfully activated you account. You may now login.";
$sql = ("UPDATE users
SET activationkey = ''
AND status = 'activated'
WHERE username = ".$row['username']);
if (!mysql_query($sql)) {
die('Error: ' . mysql_error());
}
}
}
} ?>
答案 0 :(得分:3)
在您的代码中,activationkey
是未初始化的常量。你可能意味着它是一个字符串。
更改此行:
if ($queryString == $row[activationkey]){
到此:
if ($queryString == $row['activationkey']){
由于您通过字符串索引而不是数字索引访问$row
的元素,因此您还需要更改:
while($row = mysql_fetch_array($result)){
为:
while($row = mysql_fetch_assoc($result)){
此外,由于您正在访问某个会话,因此您可能希望在第一次引用$_SESSION
之前致电session_start()
。
最后,您的代码可能正在向数据库发送格式错误的查询。尝试更改此行:
$query = "SELECT * FROM users WHERE email='$_SESSION[$queryString]'";
到此:
$query = "SELECT * FROM users WHERE email='" . mysql_real_escape_string($_SESSION[$queryString]) . "'";
答案 1 :(得分:1)
你可能只是有一个错误...... PHP因爆炸而臭名昭着而不让你知道它。尝试将其添加到代码顶部并运行文件:
error_reporting(E_ALL);
ini_set('display_errors', '1');
当您将应用程序提供给其他用户时,请不要将其保留。
答案 2 :(得分:1)
您的查询可能没有返回任何值,尝试打印sql并查看查询有什么问题
答案 3 :(得分:1)
在使用会话时,您需要提供
<?php
session_start();
在脚本的开头。
答案 4 :(得分:0)
我认为使用$_SESSION[$queryString]
的行可能是您的问题,请尝试使用$_SESSION['QUERY_STRING']
或$queryString
替换所有实例
答案 5 :(得分:0)
如果您执行
,则仅打印消息if($ queryString == $ row [activationkey])
语句..
我认为$ queryString与所有数据库值都不匹配...
如果activatekey是table列,那么还有一件事就是必须用单引号或双引号覆盖,例如$ row ['activationkey']