php重定向到另一个页面

时间:2012-10-10 18:34:14

标签: php mysql

我正在使用标头功能根据特定条件定位到另一个页面。我正在监控邮箱,代码会根据发件人地址重定向到另一个页面。所有标题除了一个之外都有效。如果发件人不属于任何现有组,我想将其重定向到new.php。但它不是重定向。我无法弄清楚原因。请帮帮我。

<?php 
session_start();

$server = '{server}INBOX';
$username = 'aaa@bbb.com';
$password = 'password';
require_once '../swift/lib/swift_required.php';
include('connection.php');


$connection  = imap_open($server,$username,$password) or die('Cannot connect to Gmail: ' .    imap_last_error());

$_SESSION['connection']=$connection;

$result = imap_search($connection,'UNSEEN');
if($result) {

    rsort($result);

    foreach($result as $email_number) 
    {         

        $header = imap_headerinfo($connection, $email_number);

        $fromaddr = $header->from[0]->mailbox . "@" . $header->from[0]->host;

        $query = "select * from usergroup where email='$fromaddr'";
        $_SESSION['fromaddr']=$fromaddr;

        $result1 = mysql_query($query) or die($query."<br/><br/>".mysql_error());


        while($line=mysql_fetch_array($result1,MYSQL_ASSOC))
        {
            $email=$line['email'];
            $group=$line['group'];

            if(mysql_num_rows($result1) == 1){

                if($group == 1){
                    header("Location: facilitator.php");
                }
                elseif($group == 2){
                    header("Location: learner.php");
                }

            }
            elseif (mysql_num_rows($result1) == 0) {
                header("Location: new.php");
            }

        }
    }

}
elseif (!$result)
{
     echo "No unread messages found";
}


?>

2 个答案:

答案 0 :(得分:3)

看起来好像是在while循环中嵌套重定向。由于没有行,while条件mysql_fetch_array()将立即返回FALSE并跳过整个块,包括您希望它遵循的重定向。

mysql_num_rows()循环外的while移动测试。

// Test for rows and redirect BEFORE entering the while loop.
if (mysql_num_rows($result1) === 0) {
  header("Location: new.php");
  // Always explicitly call exit() after a redirection header!
  exit();
}
// Otherwise, there are rows so loop them.
while($line=mysql_fetch_array($result1,MYSQL_ASSOC))
{
   $email=$line['email'];
   $group=$line['group'];

   if($group == 1){
     header("Location: facilitator.php");
   }
}

根本不需要while循环,具体取决于您希望获取的行数。如果您只希望每封电子邮件中有一个群组,则放弃循环,只需拨打$line = mysql_fetch_array()一次即可。但是,如果您期望多行但希望重定向遇到$group == 1的第一行,那么您的逻辑就可以正常工作。但是,在这种情况下,由于您只进行重定向而没有其他操作,因此您可以将该条件放在查询中:

// Test the group in your query in the first place.
$query = "select * from usergroup where email='$fromaddr' AND group = 1";
$result1 = mysql_query($query) or die($query."<br/><br/>".mysql_error());

if (mysql_num_rows($result1) === 0) {
  // you didn't match a row, redirect to new.php
} 
else {
  // you had a match, redirect to facilitator.php
}

答案 1 :(得分:1)

简单的一个:

变化:

elseif (mysql_num_rows($result1) == 0){

为:

else {

else if中的条件可能是假的 - 因此您不会进入,因此不会发生重定向。