我在php中得到一个空白页面

时间:2011-07-06 04:59:55

标签: php mysql email

我正在尝试为我的用户创建一个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());
      }
    }
  }
} ?>

6 个答案:

答案 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']