Page 1 sur 1

redirection header..prb

Posté : 22 sept. 2007, 15:18
par epock
bonjour a tous...

bon j'ai cherché sur le forum et je ne comprend rien sur la maniere d'obliger le serveur a faire une redirection ,j'ai tout essayé....voici mon code...
<?php
$heure=date("H:i");
echo $heure;
if ($heure>13 or $heure<6)
	{
		header("Status: 301 Moved Permanently", false, 301);
		header('location:\redir\affich.php',301);
		exit;
	}
?>
il affiche bien l'heure mais c'est tout....j'ai modifié le "output_buffering = 1024" en local et ca fonctionne....mais sur le net ..que dal..help me please.. :roll:

Posté : 22 sept. 2007, 17:01
par Ryle
Bon, déjà pour qu'un header fonctionne, il ne faut rien afficher avant (et bidouiller le php.ini pour pouvoir ne pas respecter cette règle n'a aucun intérêt puisque l'affichage ne sera pas visible si le header fonctionne) :)

Deuxième chose, la redirection doit se faire vers une adresse correcte et des antislash n'ont rien à faire dans une url...

Enfin, il faut lire la doc et respecter les paramètres : "301" n'est certainement pas un boolean attendu comme deuxième argument du header. A noter également que dans le cas d'une redirection le serveur enverra lui même le statut REDIRECT (302) et que mettre un 'L' majuscule a "Location" coutera pas plus cher, et facilitera l'exécution de la commande sur des système sensibles à la casse ;)

Re: redirection header..prb

Posté : 22 sept. 2007, 17:15
par dunbar
Comme ceci :?:
<?php
$heure=date("H:i");

     if($heure < '13:00' and '06:00')
     {
         echo 'Pas l\'heure de la redirection ';
     }
     else
     {
     	header ('Location: redir/affich.php');
        exit();
     }
     echo $heure ;
?>
:wink:

Posté : 22 sept. 2007, 22:04
par Ryle
Par exemple, mais tant qu'à lui donner un code tout fait, évite de laisser (voire d'y ajouter) des erreurs :
$heure < '13:00'
L'opérateur "<" est un opérateur mathématique... il sert à comparer des nombres alors que $heure et '13:00' sont des chaines, ce qui peut parfois fonctionner mais n'a aucun sens.
if ( ... and '06:00')
Pour éviter les risques d'erreur, je recommande en php d'utiliser les && et de ne garder le AND que pour le sql. Quant à l'expression à tester '06:00', celle-ci sera toujours considérée comme vraie par php puisqu'il s'agit d'une chaine non vide.

;)

je te tient enfin "header"

Posté : 22 sept. 2007, 23:20
par epock
il me prend la tete dreamweaver car je n'arrive pas a le configurer pour qu'il m'affiche les erreurs de syntaxe...je perd du temps et parfois je recommence tout alors que mon algo est juste dans la logique.....argnnn..... :x

merci ryle pour tes conseils,a toi aussi dunbar,qui tente rien n'a rien..a++

Re: je te tient enfin "header"

Posté : 23 sept. 2007, 04:20
par AB
il me prend la tete dreamweaver car je n'arrive pas a le configurer pour qu'il m'affiche les erreurs de syntaxe...je perd du temps et parfois je recommence tout alors que mon algo est juste dans la logique.....argnnn..... :x
Faut utiliser dreamweaver pour ce qu'il sait faire mais pas lui demander l'impossible.

Pas la peine d'essayer de configurer dreamweaver pour qu'il t'affiche tes erreurs de syntaxes php ni même html et pas plus javascript. Ou si tu y arrives donnes moi la soluce ça me rendrait bien service moi aussi :wink:

La coloration syntaxique te permet juste de savoir si le nom des fonctions (pour la plupart d'entres elles) sont écrites correctement. Pour le reste, ce n'est plus du domaine de Dreamweaver.

Posté : 23 sept. 2007, 07:55
par dunbar
Par exemple, mais tant qu'à lui donner un code tout fait, évite de laisser (voire d'y ajouter) des erreurs :
$heure < '13:00'
L'opérateur "<" est un opérateur mathématique... il sert à comparer des nombres alors que $heure et '13:00' sont des chaines, ce qui peut parfois fonctionner mais n'a aucun sens.
if ( ... and '06:00')
Pour éviter les risques d'erreur, je recommande en php d'utiliser les && et de ne garder le AND que pour le sql. Quant à l'expression à tester '06:00', celle-ci sera toujours considérée comme vraie par php puisqu'il s'agit d'une chaine non vide.

;)
:oops: J'avais oublier le "<" et recopiant sont code, pour le reste je retourne à mes cahiers :wink:

Posté : 23 sept. 2007, 21:15
par dunbar
Quant à l'expression à tester '06:00', celle-ci sera toujours considérée comme vraie par php puisqu'il s'agit d'une chaine non vide.

;)
Pourrais tu détailler stp je suis pas certain de comprendre :wink:

Merci

Posté : 24 sept. 2007, 10:12
par Ryle
Bah il te manque la condition :)

Lorsque tu utilises une structure conditionnelle, php va évaluer l'expression qu'elle contient pour savoir si celle-ci est vraie ou fausse (et donc exécuter le if ou pas).

Si tu écris :
if ($heure < 13 && '06:00')
php va vérifier que les deux "sous-expressions" de part et d'autre de l'opérateur logique ET sont vraies. Litterallement il vérifies donc que " La valeur de $heure est strictement inférieure à 13 ET que '06:00' " (je sais, la phrase n'a pas l'air terminée, mais pourtant elle l'est, et comme ça tu vois bien ce qui ne va pas ;))

Sachant que pour php seules les valeurs FALSE, 0 et "" (chaine vide) sont considérées comme fausse, tout le reste est considéré comme vrai. Ainsi la chaine '06:00' n'étant pas vide, php considerera toujours que l'expression est vraie.
C'est comme si tu avais écrit :
if ($heure < 13 && TRUE)
vala vala... :)

Posté : 24 sept. 2007, 16:52
par Invité
Bah il te manque la condition :)

Lorsque tu utilises une structure conditionnelle, php va évaluer l'expression qu'elle contient pour savoir si celle-ci est vraie ou fausse (et donc exécuter le if ou pas).

Si tu écris :
if ($heure < 13 && '06:00')
php va vérifier que les deux "sous-expressions" de part et d'autre de l'opérateur logique ET sont vraies. Litterallement il vérifies donc que " La valeur de $heure est strictement inférieure à 13 ET que '06:00' " (je sais, la phrase n'a pas l'air terminée, mais pourtant elle l'est, et comme ça tu vois bien ce qui ne va pas ;))

Sachant que pour php seules les valeurs FALSE, 0 et "" (chaine vide) sont considérées comme fausse, tout le reste est considéré comme vrai. Ainsi la chaine '06:00' n'étant pas vide, php considerera toujours que l'expression est vraie.
C'est comme si tu avais écrit :
if ($heure < 13 && TRUE)
vala vala... :)
Et bien un grand merci d'avoir prie la peine de m'expliquer, et en plus j'ai comprid :wink:

Posté : 24 sept. 2007, 16:53
par dunbar
L'invité c'est moi j'ai encore oublier de me connecter :oops: