IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Besoin d'une précision concernant un code avec "header" [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant communication & réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut Besoin d'une précision concernant un code avec "header"
    Bonjour,

    Tout d'abord, sachez que je code parfois en php mais que je ne suis pas un expert. Je me documente par moi-même et j'avance tant bien que mal.

    Or j'ai rencontré ce jour un petit soucis, que j'ai apparemment résolu, mais j'ignore pourquoi ça fonctionne...

    Mon problème était simplement le fait que la redirection via la fonction 'header' ne se faisait pas. J'ai bien vérifié et je n'ai aucun code HTML ou de bête caractère invisible avant mon code php.

    Voici donc le code qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
    /* lib : changer_mois_actif.php
    -------------------------------
    Modification du mois en cours (et de l'année éventuellement)
    La valeur du mois et de l'année sont stockées dans $_SESSION['mois'] et $_SESSION['annee']
    
    un paramètre nommé "action" est nécessaire à ce script php :
    Si action = plus alors on augmente le mois de 1 
    Si action = moins alors on diminue le mois de 1
    
    Ensuite on redirige vers le controlleur principal en lui demandant la liste des données. (index.php?todo=liste)
    */
     
    if(!isset($_SESSION)) 
    	{
    	session_start();
    	}
     
    // Si $_GET existe, on vérifie qu'il contient bien une des deux valeurs souhaitées, sinon on redirige vers le CTRL principal :
    if ($_GET['action'] == 'plus')
    	{
    	$_SESSION['mois']++;
    	if ($_SESSION['mois'] == 13) 
    		{
    		$_SESSION['mois'] = 1; 
    		$_SESSION['annee']++;
                    header('location: /bsdrm/index.php?todo=liste'); 
                    exit;	
    		}
    	}
    if ($_GET['action'] == 'moins')
    	{
    	$_SESSION['mois']--;
    	if ($_SESSION['mois'] == 0) 
    		{
    		$_SESSION['mois'] = 12; 
    		$_SESSION['annee']--;
                    header('location: /bsdrm/index.php?todo=liste'); 
                    exit;	
    		}
    	}
    ?>
    Et ci-après le code qui fonctionne :

    La différence dans cette version du code est que j'ai juste déplacé les commandes 'header' et 'exit' tout à la fin, soit après les deux tests 'if' . Et là la fonction 'header' fonctionne parfaitement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    /* lib : changer_mois_actif.php
    -------------------------------
    Modification du mois en cours (et de l'année éventuellement)
    La valeur du mois et de l'année sont stockées dans $_SESSION['mois'] et $_SESSION['annee']
    
    un paramètre nommé "action" est nécessaire à ce script php :
    Si action = plus alors on augmente le mois de 1 
    Si action = moins alors on diminue le mois de 1
    
    Ensuite on redirige vers le controlleur principal en lui demandant la liste des données. (index.php?todo=liste)
    */
     
    if(!isset($_SESSION)) 
    	{
    	session_start();
    	}
     
    // Si $_GET existe, on vérifie qu'il contient bien une des deux valeurs souhaitées, sinon on redirige vers le CTRL principal :
    if ($_GET['action'] == 'plus')
    	{
    	$_SESSION['mois']++;
    	if ($_SESSION['mois'] == 13) 
    		{
    		$_SESSION['mois'] = 1; 
    		$_SESSION['annee']++;
    		}
    	}
    if ($_GET['action'] == 'moins')
    	{
    	$_SESSION['mois']--;
    	if ($_SESSION['mois'] == 0) 
    		{
    		$_SESSION['mois'] = 12; 
    		$_SESSION['annee']--;
    		}
    	}
    header('location: /bsdrm/index.php?todo=liste'); 
    exit;	
    ?>
    Quelqu'un pourrait-il me dire pourquoi dans un cas ça ne fonctionne pas, et dans l'autre bien... ?

    En vous remerciant d'avance, bonne journée,
    cipll.

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Par défaut
    tout simplement qu'avant tu ne faisais pas forcement de redirection, si tu ne passais pas dans tes if, alors tu restais sur ta page, maintenant tu as tout le temps une redirection ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2012
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 126
    Par défaut
    La solution est assez simple.
    On ne peut pas effectuer de function header dans une boucle if

  4. #4
    Membre chevronné
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Par défaut
    Citation Envoyé par aritas Voir le message
    On ne peut pas effectuer de function header dans une boucle if
    Ah bon et depuis quand?

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Hein ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    if(true){
    	header('location: http://www.developpez.com');
    }
    fonctionne pourtant correctement.

    PS : if est une structure de contrôle, pas une boucle.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant communication & réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut
    Bonjour,

    Merci de m'avoir répondu si vite.

    En effet j'ai fais une bête erreur dans l'analyse de mon code ( ), comme l'a bien signalé marcuscircus, dans l'exemple 1 je ne faisais mes redirections que lorsque les modifications apportées au numéro du mois impliquaient aussi un changement d'année (soit en plus, soit en moins) ...

    Donc finalement les deux exemples se comportent tout à fait logiquement, il s'agissait bien d'une erreur de ma part.

    Merci pour votre aide, bonne journée
    cipll.

  7. #7
    Membre très actif Avatar de Shuty
    Homme Profil pro
    Ingénieur en développement
    Inscrit en
    Octobre 2012
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur en développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 630
    Par défaut
    Active les erreurs et tu vas tout de suite voir ce quoi il s'agit comme erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error_reporting(E_ALL);
    ini_set('display_errors', '1');



    Citation Envoyé par marcuscircus Voir le message
    tout simplement qu'avant tu ne faisais pas forcement de redirection, si tu ne passais pas dans tes if, alors tu restais sur ta page, maintenant tu as tout le temps une redirection ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'une aide concernant paint()
    Par ____22 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 12/05/2008, 17h06
  2. besoin d'une précision sur le déploiement de fichiers
    Par NicoO_O dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/01/2007, 20h08
  3. Réponses: 5
    Dernier message: 10/01/2007, 09h38
  4. Besoin d'une précision pour try/catch, svp
    Par hallek60 dans le forum C++
    Réponses: 9
    Dernier message: 05/01/2006, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo