Partage
  • Partager sur Facebook
  • Partager sur Twitter

Header ('location: ') ne fonctionne pas

Pas de redirection

Sujet résolu
    24 janvier 2017 à 14:28:31

    Salut.

    J'ai un souci avec la fonction header. J'ai bien parcouru sa documentation, lu les sujets sur le forum, Pas de solution.

    Quand j'exécute ma page, dans tous les cas, j'ai une page blanche avec aucune redirection car l'adresse reste la même.

    Voici mon code:

    <?php
    session_start();
    
     // Le mot de passe n'a pas été envoyé
    	if (!isset($_POST['pseudo']) AND !isset ($_POST['pwd']) )
    	{ 
    		//Afficher le formulaire de saisie du mot de passe
    		header('Location: connexion.php');
    		die();
    	}
    
    //Le mot de passe et l'identifiant ont été saisis
    	else
    	{
    	 include("connexion_bdd.php");
    								
    		//hachage du Mdp
    		$mdp_hash= sha1($_POST['pwd']);
    		//vérif des identifiants et mdp
    		$req= $bdd->prepare('SELECT id, statut FROM user WHERE pseudo = :pseudo AND mdp = :mdp AND validite = 1');
    		$req->execute(array(
    		'pseudo' => $_POST['pseudo'],
    		'mdp' => $mdp_hash));
    								
    		$connexion_ok = $req->fetch();
    
    		if ($connexion_ok) // Si tout est correct
    		{
    									
    									
    			$_SESSION['id'] = $connexion_ok['id'];
    			$_SESSION['pseudo'] = $_POST['pseudo'];
    
    			$statut=$connexion_ok['statut'];
    			if ($statut=='1')
    			{
    				header('Location: admin.php');
    				die();
    			}
    
    			elseif ($statut=='2')
    			{
    				header('Location: accueil_cdf.php');
    				die();
    			}
    
    			elseif ($statut=='3')
    			{
    				header('Location: index.php');
    				die();
    			}
    									
    
    		}
    ?>
    <!DOCTYPE html>
    <html>
    	
    	<head>
    		<?php
    			include("head.php");
    		?>
    	</head>
    	<body>
    		<div id="bloc_page">
    			<?php
    			include("header.php");
    			?>
    	
    			<section>
    							
    				<article>
    				<?php
    					
    					else if (!$connexion_ok) // Sinon, on affiche un message d'erreur
    					{
    				?>
    					<form action="espace_dispatch.php" method="post">
    					<fieldset>
    					<legend>Connexion</legend>
    					<label>Nom d'utilisateur :</label>
    					<input type="text" name="pseudo" size="30"/> <br/><br/>
    					<label>Mot de passe :</label> 
    					<input type="password" name="pwd" size="30"/><br/><br/>
    					<input type="submit" value="Envoyer"/></p>
    					</fieldset>
    							
    					</form>
    			<?php
    					echo '<script> alert("Mot de passe et/ou identifiant incorrect");</script>';
    										
    										
    			}
    			?>
    								
    				</article>				
    														
    							
    			</section>
    				
    		<?php
    		}
    					
    		?>
    			
    		</div>
    	</body>
    	
    </html>



    • Partager sur Facebook
    • Partager sur Twitter
      24 janvier 2017 à 14:42:29

      C'est qu'il y a une sortie avant. Ce qui devrait apparaître par la bien connue warning: headers already sent indiquant où celle-ci a lieu si toutes les erreurs étaient affichées/activées.

      • Partager sur Facebook
      • Partager sur Twitter
        24 janvier 2017 à 14:57:38

        Merci Julp pour ta réponse. 

        Je ne vois aucune sortie dans mon code avant le header. Juste une session_start();   

        Et en effet, j'ai une page vide, incompréhensible.

        • Partager sur Facebook
        • Partager sur Twitter
          24 janvier 2017 à 15:04:31

          Salut,

          Une page blanche peut également provenir une erreur de syntaxe php : il semble effectivement y avoir un problème d'accolade au niveau du else if ligne 75.

          L'affichage des messages d'erreurs, la consultation du journal d'erreur ou l'utilisation d'un IDE devrait te permettre d'éviter et de corriger facilement les erreurs de syntaxe.

          Bonne journée,

          • Partager sur Facebook
          • Partager sur Twitter
            24 janvier 2017 à 15:08:24

            Bonjour,

            Ligne 75 tu as un else if qui ne correspond à rien.

            enlève le else.

            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2017 à 15:32:02

              Merci Psyckyo.

              Ce else if est la suite du if  en ligne 27. J'aurais pu mettre un else tout court.

              Cependant ça ne résout toujours pas le souci de redirection. J'ai toujours une page vide.

              • Partager sur Facebook
              • Partager sur Twitter
                24 janvier 2017 à 15:35:37

                Beam1916

                Non tu ne peux pas mettre un else tout court entre le dernier else if ligne 47 et celui de la ligne 75, car  tu fais des include entre les conditions, ce qui tu produit une erreur dans la logique des if/else.

                Enlève simplement le else ligne 75, ça marche chez moi.

                Edit il ne doit pas y avoir de code entre un if{} et un else{}

                -
                Edité par psyckyo 24 janvier 2017 à 15:50:45

                • Partager sur Facebook
                • Partager sur Twitter
                  24 janvier 2017 à 15:46:05

                  Encore merci Psyckyo, j'en apprend plus. 

                  J'ai modifié les conditions, enfin, le elseif en if.

                  J'ai toujours mon souci de redirection sinon .

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 janvier 2017 à 15:46:10

                    salut @beam1916,

                    Avant de t'indiquer où est le problème (devancé par @Psyckyo):
                    1 - quel est l'encodage de ton code ? ==> si possible, UTF-8 sans BOM (ce coquin d'espace qui aime s'ajouter devant le <?php d'ouverture) ;
                    2 - si tu as vraiment parcouru le forum, tu n'as pas trouvé la réponse ?
                    ==> bon en même temps, quand on cherche sur Google on tombe ici : https://openclassrooms.com/forum/sujet/probleme-header-location-xx-php-45439 vraiment difficile. 

                    Concernant l'erreur que tu décris, comme le dis @julp, tu as un problème. et ce n'est pas vraiment une histoire de sortie, mais de cohérence dans ton code. tu mets grosso modo si la connexion est ok tu me fais ça : 

                    if ($connexion_ok){ 
                    	// Si tout est correct
                    	$_SESSION['id'] = $connexion_ok['id'];
                    	$_SESSION['pseudo'] = $_POST['pseudo'];
                    	$statut=$connexion_ok['statut'];
                    	if ($statut=='1'){
                    	header('Location: admin.php');
                    	die();
                    	}elseif ($statut=='2'){
                    	header('Location: accueil_cdf.php');
                    	die();
                    	}elseif ($statut=='3'){
                    	header('Location: index.php');
                    	die();
                    	}
                    }

                    jusque-là, rien à dire... sauf que vu qu'ensuite tu commences à saisir du HTML, la cohérence des if{}else{} se perd. Résultat, quand tu veux dire que si la connexion n'est pas là il faut afficher le formulaire :

                     <article>
                    <?php
                            else if (!$connexion_ok) // Sinon, on affiche un message d'erreur
                            {
                    ?>

                    ton code plante, car il ne sait pas à quelle condition il est rattaché. sauves déjà ton code existant sur un autre fichier et déplaces ce "else if" après la }} vu avant et où ça semblait aller bien.

                    -
                    Edité par rga 24 janvier 2017 à 15:57:48

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
                      24 janvier 2017 à 15:52:27

                      Chez moi, ça marche simplement avec la suppression du mot "else" ligne 75.

                      Tu peux renvoyer ton nouveau code, stp.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 janvier 2017 à 16:05:40

                        Salut Rga;

                        Merci pour la réponse.

                        1. J'avais ceci comme encodage:

                        <meta charset="utf-8 " />

                        J'ai modifié comme ceci:

                        <meta charset="utf-8 sans BOM" />

                        Toujours rien.

                        J'ai parcouru les 10 pages de sujets que le forum affiche sur des soucis similaires....

                        Mon code, je crois qu'il ne plante plus quand je met un if comme l'a dit julp dans la mésure où lorsque je rentre de faux identifiants, il m'affiche le formulaire avec le message d'erreur.

                        Psyckyo 

                        voilà:

                        <?php
                        session_start();
                        
                        	// Le mot de passe n'a pas été envoyé
                        					if (!isset($_POST['pseudo']) AND !isset ($_POST['pwd']) )
                        					{ 
                        						//Afficher le formulaire de saisie du mot de passe
                        						header('Location: connexion.php');
                        						die();
                        					}
                        
                        	//Le mot de passe et l'identifiant ont été saisis
                        					else
                        					{
                        						include("connexion_bdd.php");
                        								
                        								//hachage du Mdp
                        								$mdp_hash= sha1($_POST['pwd']);
                        								//vérif des identifiants et mdp
                        								$req= $bdd->prepare('SELECT id, statut FROM user WHERE pseudo = :pseudo AND mdp = :mdp AND validite = 1');
                        								$req->execute(array(
                        									'pseudo' => $_POST['pseudo'],
                        									'mdp' => $mdp_hash));
                        								
                        								$connexion_ok = $req->fetch();
                        
                        								if ($connexion_ok) // Si tout est correct
                        								{
                        									
                        									
                        									$_SESSION['id'] = $connexion_ok['id'];
                        									$_SESSION['pseudo'] = $_POST['pseudo'];
                        
                        									$statut=$connexion_ok['statut'];
                        									if ($statut=='1')
                        									{
                        										header('Location: admin.php');
                        										die();
                        									}
                        
                        									elseif ($statut=='2')
                        									{
                        										header('Location: accueil_cdf.php');
                        										die();
                        									}
                        
                        									elseif ($statut=='3')
                        									{
                        										header('Location: index.php');
                        										die();
                        									}
                        									
                        
                        								}
                        	?>
                        	<!DOCTYPE html>
                        <html>
                        	
                        		<head>
                        			<?php
                        					include("head.php");
                        			?>
                        		</head>
                        		<body>
                        			<div id="bloc_page">
                        				<?php
                        					include("header.php");
                        					?>
                        	
                        						<section>
                        							
                        							<article>
                        								<?php
                        					
                        								if (!$connexion_ok)  // Sinon, on affiche un message d'erreur
                        								{
                        									?>
                        										<form action="espace_dispatch.php" method="post">
                        											<fieldset>
                        												<legend>Connexion</legend>
                        												<label>Nom d'utilisateur :</label>
                        												<input type="text" name="pseudo" size="30"/> <br/><br/>
                        												<label>Mot de passe :</label> 
                        												<input type="password" name="pwd" size="30"/><br/><br/>
                        												<input type="submit" value="Envoyer"/></p>
                        											</fieldset>
                        							
                        										</form>
                        										<?php
                        										echo '<script> alert("Mot de passe et/ou identifiant incorrect");</script>';
                        										
                        										
                        								}
                        										?>
                        								
                        							</article>				
                        														
                        							
                        						</section>
                        				
                        				<?php
                        			}
                        					
                        				?>
                        			
                        			</div>
                        		</body>
                        	
                        </html>

                        -
                        Edité par beam1916 24 janvier 2017 à 16:09:23

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 janvier 2017 à 16:10:01

                          concernant l'encodage, ce n'était pas à lui que je faisais référence :lol:.

                          En utilisant un logiciel comme Notepad++ pour ne pas le citer (trop tard, je sais), quand tu vas dans le menu "Encodage", il t'affiche "Encoder en " puis "ANSI, UTF-8, UTF-8 sans BOM, UTF-16BE ou UTF-16LE", puis plus bas "Convertir en " et la même liste.

                          ça devrait être mieux ensuite.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
                            24 janvier 2017 à 16:11:16

                            @rga

                            :lol: Je vais voir ça.

                            J'utilise Sublime text

                            Et ça marche :lol:

                            Merci RGA :D

                            -
                            Edité par beam1916 24 janvier 2017 à 16:17:16

                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 janvier 2017 à 16:52:38

                              @beam1916 de rien ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs

                              Header ('location: ') ne fonctionne pas

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown