redirection header..prb

Eléphanteau du PHP | 27 Messages

22 sept. 2007, 15:18

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:
Grâce à l’ordinateur, on peut faire plus rapidement des choses qu’on n’aurait pas eu besoin de faire sans ordinateur.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 sept. 2007, 17:01

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2291 Messages

22 sept. 2007, 17:15

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 sept. 2007, 22:04

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.

;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 27 Messages

22 sept. 2007, 23:20

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++
Grâce à l’ordinateur, on peut faire plus rapidement des choses qu’on n’aurait pas eu besoin de faire sans ordinateur.

ViPHP
AB
ViPHP | 5818 Messages

23 sept. 2007, 04:20

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.

ViPHP
ViPHP | 2291 Messages

23 sept. 2007, 07:55

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 2291 Messages

23 sept. 2007, 21:15

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
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 sept. 2007, 10:12

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... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

24 sept. 2007, 16:52

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:

ViPHP
ViPHP | 2291 Messages

24 sept. 2007, 16:53

L'invité c'est moi j'ai encore oublier de me connecter :oops:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.