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 :

redirection (header) ne marche pas en ligne


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 53
    Points : 27
    Points
    27
    Par défaut redirection (header) ne marche pas en ligne
    Bonjours ;
    Voilà j'ai un problème de redirection vers la page d'index sur mon site dans le cas d'une inscription je rempli le formulaire et je valide ensuite je fait une redirection vers la page connexion.php afin que l'utilisateur puisse se connecter alors je faire une redirection header('Location: connexion.php); malheureusement j'ai un message genre :
    Impossible de modifier les informations d'en-tête - les en-têtes ont déjà été envoyés par (la sortie a commencé à /home/aftskmbx/public_html/_db/connexionDB.php:1) dans /home/aftskmbx/public_html/_class/inscription.php à la ligne 33
    j'ai tout essayer sans résultat
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?php	
    	class Inscription {
    	    private $valid;
    	    private $er_pseudo;
    	    private $er_mail;
    	    private $er_password;
     
    	    public function verification_inscription($pseudo, $mail, $confmail, $password, $confpassword) {
    	    	global $DB;
    	    	$pseudo = (string) ucfirst(trim($pseudo));
    	        $mail = (string) trim($mail);
    	        $confmail = (string) trim($confmail);
    	        $password = (string) trim($password);
    	        $confpassword = (string) trim($confpassword);   
     
    			$this->er_pseudo = (string) '';
    			$this->er_mail = (string) '';
    			$this->er_password = (string) '';
    			$this->valid = (boolean) true;			
     
     		    $this->verification_pseudo($pseudo); 	    
     		    $this->verification_mail($mail, $confmail);
     		    $this->verification_password($password, $confpassword);
     
    		    if($this->valid){
    		        $crypt_password=password_hash($password, PASSWORD_ARGON2ID);          	
    		        $date_creation=date('Y-m-d H:i:s');
    		        $role = 0;
     
    		        $req= $DB->prepare("INSERT INTO utilisateur(pseudo, mail, mdp, date_creation, date_connexion, role) VALUES (?, ?, ?, ?, ?, ?)");
    		        $req->execute(array($pseudo, $mail, $crypt_password, $date_creation, $date_creation, $role));
    		        //header('Location: /connexion.php');
    		        header('Location: https://yacinesoft.com/connexion.php');
    		        exit;		       
    		    }		    
    		  	return [$this->er_pseudo, $this->er_mail, $this->er_password];		    
    		}
     
    		private function verification_pseudo($pseudo){
    			global $DB;			
    			if(empty($pseudo)){
    					$this->valid = false;
    	          		$this->er_pseudo ="Ce champ ne peut pas être vide";		          		
    	        }elseif(strlen($pseudo) < 4){
    	          		$this->valid= false;
    	          		$this->er_pseudo="Le Pseudo doit faire plus de 3 caractères";
    	        }elseif(strlen($pseudo) > 25){
    	          		$this->valid= false;
    	          		$this->er_pseudo="Le Pseudo doit faire moins de 26 caractères (" . strlen($pseudo) . "/25)";
    	        }else{  
    	              	$req = $DB->prepare("SELECT id FROM utilisateur WHERE pseudo = ?");
    	              	$req->execute(array($pseudo));
    	              	$req = $req->fetch(); 
    	              	if(isset($req['id'])){ 
    	                	$this->valid = false;
    	                	$this->er_pseudo = "Ce pseudo est déjà pris";	
    	              	}        
          		}              		
    		}
     
    		private function verification_mail($mail, $confmail){
    			global $DB;
    			if(empty($mail)){
    		         $this->valid = false;
    		         $this->er_mail="Ce champ ne peut pas être vide";
    			}elseif(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)){
    		          $this->valid = false;
    		          $this->er_mail="Format invalide pour ce Mail"; 
    		    }elseif($mail <> $confmail){
    		          $this->valid = false;
    		          $this->er_mail="Le mail est différent de la confirmation"; 				          
    		    }else{
    		      	 $req=$DB->prepare("SELECT id FROM utilisateur WHERE mail = ?");
    			     $req->execute(array($mail));
    			     $req = $req->fetch(); 
    			     if(isset($req['id'])){
    			          $this->valid = false;
    			          $this->er_mail = "Ce Mail est déjà pris";
    			     }	        
    		    }		
    		}
     
    		private function verification_password($password, $confpassword){
    			global $DB;
    			if(empty($password)){
    		         $this->valid= false;
    		         $this->er_password="Ce Champ ne peut pas être vide";         
    		    }elseif($password <> $confpassword){
    		         $this->valid = false;
    		         $this->er_password="Le mot de passe est différent de la confirmation"; 
    		    }
    		}
    	}	
    ?>
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
      if(isset($_SESSSION['id'])){
         header('Location: https://yacinesoft.com/index.php');
         exit;    
      }
      require_once('include.php');
     
      if(!empty($_POST)){
          extract($_POST);             
          if(isset($_POST['inscription'])){        
            [$er_pseudo, $er_mail, $er_password] = $_Inscription->verification_inscription($pseudo, $mail, $confmail, $password, $confpassword);            
          }
      } 
    ?>
    <!doctype html>
    <html lang="fr">
      <head>
        <?php
         require_once('_head/meta.php');
         require_once('_head/link.php');
         require_once('_head/script.php');
        ?>
        <title>Inscription</title>  
      </head>
      <body>
        <?php
         require_once('_menu/menu.php');
        ?>
        <div class="container">
            <div class="row">
              <div class="col-3"></div>      
                <div class="col-6">      
                  <h1>Inscription</h1>
                  <form method="post">
                        <div class="mb-3">
                          <?php if(isset($er_pseudo)){ echo '<div>' . $er_pseudo . '</div>';}?>
                          <label class="form-label">Pseudo</label>
                          <input class="form-control" type="text" name="pseudo" value="<?php if(isset($pseudo)){ echo $pseudo;}?>" placeholder="Pseudo">
                        </div>  
                        <div class="mb-3">
                          <?php if(isset($er_mail)){ echo '<div>' . $er_mail . '</div>';}?>
                          <label class="form-label">Mail</label>
                          <input class="form-control" type="email" name="mail" value="<?php if(isset($mail)){ echo $mail;}?>" placeholder="Mail">
                        </div>
                        <div class="mb-3">  
                          <label class="form-label">Confirmer le Mail</label>
                          <input class="form-control" type="email" name="confmail" value="<?php if(isset($confmail)){ echo $confmail;}?>" placeholder="Confirmation Mail">
                        </div>
                        <div class="mb-3">    
                          <?php if(isset($er_password)){ echo '<div>' . $er_password . '</div>';}?>
                          <label class="form-label">Mot de Passe</label>
                          <input class="form-control" type="password" name="password" value="<?php if(isset($password)){ echo $password;}?>" placeholder="Mot de Passe">
                        </div>
                        <div class="mb-3">  
                          <label class="form-label">Confirmer Mot de Passe</label>
                          <input class="form-control" type="password" name="confpassword" value="" placeholder="Confirmer Mot Passe">
                        </div> 
                        <div class="mb-3">
                            <button type="submit" name="inscription" class="btn btn-primary">Inscription</button>
                        </div> 
                  </form>
                </div>  
            </div>
        </div>    
        <?php
         require_once('_footer/footer.php');
        ?>    
        <div class="bg-image" style="background-image: url('img/im_fond.jpg');height: 100vh"></div>
      </body>
    </html>
    je vous propose mon code afin que quelqu'un puisse trouver la faille ou l'erreur que je ne vois pas le premier fichier inscription.php c'est le lancer de l'action il dans la racine il appel a un autre fichier inscription.php qui se trouve dans le répertoire /_class contenant les classes inscription / vérification / validation
    merci d'avance
    @+

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    regardez au début du fichier connexionDB.php.
    si vous ne voyez rien, ça peut être l'entête UTF-8 qui n'est pas visible dans la plupart des éditeurs texte.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ligne 2, il y a 3 S d'affilée: if(isset($_SESSSION['id'])).

    Dans la méthode Inscription::verification_inscription, il est inutile de faire tous ces casts:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $pseudo = (string) ucfirst(trim($pseudo));
    $mail = (string) trim($mail);
    $confmail = (string) trim($confmail);
    $password = (string) trim($password);
    $confpassword = (string) trim($confpassword);   
     
    $this->er_pseudo = (string) '';
    $this->er_mail = (string) '';
    $this->er_password = (string) '';
    $this->valid = (boolean) true;
    '' est déjà une chaîne, trim renvoie toujours une chaîne (ou provoque une erreur lorsque tu lui passes un objet), true est bien un booléen. Donc tu peux tous les enlever.
    Suivant la version du PHP que tu utilises, tu peux soit forcer les types dans la signature de ta méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function verification_inscription(string $pseudo, string $mail, string $confmail, string $password, string $confpassword) {
    Ou alors tu procèdes à une vérification des types en début de méthode ou avant d'appeler ta méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ! is_string($pseudo) ) // problème, faire quelque chose
    .

    L'utilisation de extract() est à bannir, d'autant plus sur $_GET ou $_POST où c'est carrément un trou de sécurité: un utilisateur peut remplacer n'importe quelle variable de ton script.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 53
    Points : 27
    Points
    27
    Par défaut redirection (header) ne marche pas en ligne
    Bonjours ;
    Tous d'abord je tiens à vous remercie pour vos réponses rapides concernant la remarque de mathieu j'ai consulter le fichier connexionDB.php et j'ai trouver un commentaire après le <?php
    je l'ai supprimer et j'ai tester sans résultat pas de redirection j'ai eu l'idée de poster tous les fichiers concernés afin que la vision soit plus claire
    le fichier include contient la connexion à la BDD et la classe inscription ainsi que la classe connexion
    les 02 fichiers inscription l'un fait l'appel à la classe inscription se trouvant dans un sous-répertoire /class
    j’espère que je n'ai pas oublier quelque chose et j'espère qu'il y aura une solution a ce problème parce que vraiment je commence a douter sur mes capacités
    @+
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    si vous avez oublié le fichier connexionDB.php
    le message d'erreur dit que c'est dans ce fichier à la ligne 1 qu'il y a un envoi de caractères donc c'est à cet endroit qu'il faut chercher le souci.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 53
    Points : 27
    Points
    27
    Par défaut redirection (header) ne marche pas en ligne
    Bonjours;
    Excuser moi je ne l'ai pas remarqué voila le fichier connexionDB.PHP pour les paramètres de connexion existantes a leurs place il y a les paramètres de connexion du serveur
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    je ne vois pas de caractères cachés dans ce fichier connexionDB.php donc le souci se complique.

    enlevez les caractères ?> à la fin des fichiers utilisés pour tester si le message d'erreur change.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 53
    Points : 27
    Points
    27
    Par défaut redirection (header) ne marche pas en ligne
    Bonjours;
    excuser moi de ce retard j'ai enlever la balise de fin de php ?> de tous les fichiers envoyés mais j'ai le même résultat

Discussions similaires

  1. [Système] redirection qui ne marche pas
    Par alpking dans le forum Langage
    Réponses: 2
    Dernier message: 05/11/2006, 23h17
  2. Redirection qui ne marche pas.
    Par Snivel dans le forum Struts 1
    Réponses: 5
    Dernier message: 05/10/2006, 18h24
  3. redirection qui ne marche pas...
    Par sam01 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/04/2006, 10h16
  4. Redirection, ca ne marche pas depuis une page 404 ?
    Par TicTacToe dans le forum Langage
    Réponses: 16
    Dernier message: 02/03/2006, 10h54
  5. redirection header ne marche pas!!!
    Par duga dans le forum Langage
    Réponses: 4
    Dernier message: 01/10/2005, 11h58

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