2012-10-10 5 views
0

J'utilise la fonction d'en-tête pour localiser une autre page en fonction de certaines conditions. Je surveille une boîte aux lettres et le code redirige vers une autre page basée sur l'adresse de l'expéditeur. Tous les en-têtes fonctionnent sauf un. Si l'expéditeur n'appartient à aucun groupe existant, je voulais le rediriger vers new.php. Mais il ne redirige pas. Je suis incapable de comprendre pourquoi. Aidez-moi, s'il vous plaît.php rediriger vers une autre page

<?php 
session_start(); 

$server = '{server}INBOX'; 
$username = '[email protected]'; 
$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"; 
} 


?> 
+1

Veuillez modifier et corriger votre indentation. C'est trop gênant de comprendre votre '{}' imbrication. –

Répondre

3

Il semble que vous imbriquiez cette redirection dans la boucle while. Comme il n'y a pas de lignes, la condition while mysql_fetch_array() renvoie immédiatement FALSE et ignore le bloc entier, y compris la redirection que vous avez l'intention de suivre.

Déplacez le test pour mysql_num_rows() en dehors de la boucle 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"); 
    } 
} 

Vous pouvez réellement pas besoin d'une boucle while du tout, selon le nombre de lignes que vous attendez pour aller chercher. Si vous attendez seulement un groupe par email, renoncez à la boucle et appelez simplement $line = mysql_fetch_array() une fois. Cependant, si vous attendez plusieurs lignes mais que vous voulez rediriger sur le premier rencontré $group == 1, alors votre logique fonctionne. Dans ce cas cependant, puisque vous ne faites que la redirection et aucune autre action, vous pouvez également mettre cette condition dans votre requête:

// 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

facile un:

changement:

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

à:

else { 

La condition dans le else if est probablement faux - si vous ne recevez pas là-bas et ainsi la redirection ne se produit pas.

+0

Nop. Ça ne marche pas. – faz

Questions connexes