我正在使用标头功能根据特定条件定位到另一个页面。我正在监控邮箱,代码会根据发件人地址重定向到另一个页面。所有标题除了一个之外都有效。如果发件人不属于任何现有组,我想将其重定向到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";
}
?>
答案 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
中的条件可能是假的 - 因此您不会进入,因此不会发生重定向。