2010-07-07 8 views
2

Le code ci-dessous est censé rediriger l'utilisateur vers le fichier d'index si l'utilisateur ($ uid) a soumis une entrée dans la dernière heure. Ça ne fonctionne pas.La requête re-directe ne fonctionne pas

Une idée pourquoi pas?

Merci à l'avance,

John

$queryuidcount = "select loginid from submission where datesubmitted > (NOW() - INTERVAL 1 hours) AND loginid = '$uid'"; 
$uidresult = mysql_query($queryuidcount); 

if (mysql_num_rows($uidresult) >= 1) 
{ 

    session_write_close(); 
    header("Location:http://www.domain.com/sample/index.php"); 
    exit; 

} 
+0

la redirection semble correcte. quel est le résultat de $ uidresult? – fabrik

+0

Vous avez essayé de définir 'error_reporting (E_ALL);' et de vérifier les espaces avant d'appeler 'header()'? Vérifier 'headers_sent()' peut aussi aider. – Pete

Répondre

0

Est-ce que le code même à atteindre le code de la instruction if? essayer un var_dump("foo"); là, parce que je pense que l'en-tête a l'air bien. Il pourrait être que la sortie; interfère avec la redirection si. Bonne chance!

4

Tout d'abord, il devrait y avoir un espace entre Location: et http://someurl, sinon ce n'est pas un en-tête HTTP formé correctement (certains navigateurs peuvent faire face, certains se étouffer):

Location: http://someurl 

Deuxièmement, obtenez-vous un "en-tête déjà envoyé" avertissement? Cela signifie que vous avez déjà démarré la sortie avant cette ligne (par exemple, espace au début du fichier, marques de nomenclature UTF, etc.)

2

Apparemment, vous avez oublié d'ajouter session_start() à votre script, car vous utilisez une fonction associée à sessio ci-dessous . De plus, pas besoin de spécifier le chemin de domaine entier, seul le nom du fichier doit être bien:

header("Location: index.php"); 

En cas d'erreur, vous pouvez savoir à ce sujet en mettant ces lignes sur le dessus de votre script:

ini_set('display_errors', true); 
error_reporting(E_ALL); 

assurez-vous également que certains enregistrements sont renvoyés:

if (mysql_num_rows($uidresult) >= 1) 
{ 
    exit('found rows !!'); 
} 
+0

'Aussi, pas besoin de spécifier le chemin du domaine entier, juste le nom du fichier devrait être bien:' C'est faux. Bien que la plupart des navigateurs l'acceptent et agissent comme prévu, c'est contre les spécifications - RFC2616. – Pete

0

Le code SQL ne semble pas correct. Changez les heures en heures à la place.

(NOW() - INTERVAL 1 hour) 

Peut-être pourriez-vous utiliser TIMEDIFF à la place?

mysql> select TIMEDIFF('2010-07-07 09:38:28',NOW()); 
+---------------------------------------+ 
| TIMEDIFF('2010-07-07 09:38:28',NOW()) | 
+---------------------------------------+ 
| -01:03:38        | 
+---------------------------------------+ 
1 row in set (0.00 sec) 
Questions connexes