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 :

formulaire de modifcation du mot de passe [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut formulaire de modifcation du mot de passe
    salam ; j'ai une page tab.php qui contiens un menu pour appelé d'autres pages selon le besoin de l'utilisateur
    tab.php:
    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
     
    <?php
    session_start();
    // On définit le tableau contenant les pages autorisées
      // ----------------------------------------------------
      $navok = array('bord' => 'bord.inc.php',
                      'dec' => 'aff.inc.php',
    				  'anal' => 'anal.inc.php',
    				  'mp' => 'mp.inc.php',
    				   );
     
    ?>
     
    <!DOCTYPE html>
    <HTML>
    <head>
    	<!--Pour forcer le navigateur à afficher en mode IE9, sans quoi il peut passer en mode quirks.-->
    	<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
    	<meta charset="utf-8" />
    	<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <!-- application dynamique  -->
    	<link rel="shortcut icon" href="image/favs3g.ico" />
    	<link rel="stylesheet" media="screen" type="text/css" href="../css/tab.css">
     
    	<title>S 3 G</title>
    </head>
    <body class="body">
     
    			<nav class="nav">
    				<ul id="navig">
    					<li><a href="tab.php?page=bord" title="Tableau de bord">T-Bord</a></li>
    					<li><a href="tab.php?page=dec" title="declaration">Déclaration</a></li>
    					<li><a href="#">analyse</a></li>
    					<li><a href="#">Données</a></li>
    					<li><a href="tab.php?page=mp">Mot de passe</a></li>
    					<li><a href="../mod/decon.inc.php">Déconnexion</a></li>
    				</ul>
    			</nav>
     
    		<div class="contenu">
    				<!--  place pour inceré les pages selon le menu -->
    			<?php 
    					// On teste que le paramètre d'url existe et qu'il est bien autorisé
    					// -----------------------------------------------------------------
    				if ( (isset($_GET['page'])) && (isset($navok[$_GET['page']])) ) {
    				$page = htmlentities($_GET['page']);
    				include($navok[$page]);   // Nous appelons le contenu central de la page
    					} 
    				else {
    					// Page par défaut quant elle n'existe pas dans le tableau
    				include('bord.inc.php'); 
    				exit;
    				} 							
    			?>
    		</div>
     
     
    </body>
     
    </html>
    la page concerné par l'appel mp.inc.php:
    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
     
    <?php
    include('../mod/cnmp.inc.php');
    ?>
    <div class="cont_form">
    	<p id="titre"> Modification du mot de passe</p>
    	<p>
    			<?php
     
    			if (!empty($erreurs_msg['amp']))  // fonction pour afficher l'erreur  de validation
    			{
    			include('../foncreq/fonctions.inc.php');
    			validformmsg ("3", "red",$erreurs_msg['amp']);
     
    			} 
    			if (!empty($erreurs_msg['nmp']))  // fonction pour afficher l'erreur  de validation
    			{
    			include('../foncreq/fonctions.inc.php');
    			validformmsg ("3", "red",$erreurs_msg['nmp']);
    			} 
    			elseif (!empty($erreurs_msg['cnmp']))  // fonction pour afficher l'erreur  de validation
    			{
    			include('../foncreq/fonctions.inc.php');
    			validformmsg ("3", "red",$erreurs_msg['cnmp']);
    			} 			
    			//fin des messages de contrôles
     
    			?>
    		</p>
    <form class="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"  autocomplete='off'>
     
    			<p class="amp"><label for="amp"> Ancien mot de passe:</label> 
    					<input type="text" name="ident" value="<?php if (isset($_POST['amp']))echo stripslashes(htmlentities(trim($_POST['amp']))); ?>" size="28" maxlength="23" id="amp" autofocus/>
     
    			</p>
    			<p class="nmp"><label for="nmp">Nouveau mot de passe:</label> 
    					<input type="password"  name="pass" value="<?php if (isset($_POST['nmp']))echo stripslashes(htmlentities(trim($_POST['nmp']))); ?>" " size="28" maxlength="23" id="nmp"/>
     
    			</p>
    			<p class="cnmp"><label for="cnmp">Confirmer nouveau mot de passe:</label> 
    					<input type="password"  name="pass" value="<?php if (isset($_POST['cnmp']))echo stripslashes(htmlentities(trim($_POST['cnmp']))); ?>" " size="28" maxlength="23" id="cnmp"/>
     
    			</p>
     
    			</p>
     
    			<p class="buttons">
    				<button type="submit" name="cmpass" value="envoyer" >Envoyer</button>
    			</p>
     
     
    		</form>
     
    </div>
    quand je valide le formulaire a vide normalement je doit avoir le même formulaire avec message d'erreur et on pas de la page par défaut ?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    pas besoin d'inclure plusieurs fois fonctions.inc.php et que fais validformmsg ?
    indente ton code correctement

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    pas besoin d'inclure plusieurs fois fonctions.inc.php

    validformmsg ?
    c'est une fonction pour affichée le message en rouge ( normalement sa doit étre en css OK).
    je crois que le problème est là:
    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
     
    .......
    <?php 
    					// On teste que le paramètre d'url existe et qu'il est bien autorisé
    					// -----------------------------------------------------------------
    if ( (isset($_GET['page'])) && (isset($navok[$_GET['page']])) ) {
    	$page = htmlentities($_GET['page']);
    	include($navok[$page]);   // Nous appelons le contenu central de la page
    	} 
    else {
    					// Page par défaut quant elle n'existe pas dans le tableau
    include('bord.inc.php'); 
    exit;
    } 							
    ?>

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Un simple print_r($_GET) devrait suffire pour constater le problème, de voir qu'il est vide (aucun élément "page") alors que tu t'attends à ce qu'il y ait quelque chose.

    Tu as prévu d'utiliser $_SERVER['PHP_SELF'] pour que le nom de la page soit mise automatiquement au niveau du formulaire (attribut "action").
    Mais $_SERVER['PHP_SELF'] ne met pas les paramètres GET.
    Il te faut les rajouter, soit manuellement soit en reprenant ce qu'il y a dans $_GET['page'] si c'est le cas.

    Si lors de la validation du formulaire ça doit pointer vers tab.php et inclure mp.inc.php, autant le mettre "en dur", genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form class="form" action="tab.php?page=mp" method="post"  autocomplete="off">
    Puis au lieu d'utiliser un isset($navok), utilise in_array().
    Le tableau $navok existe normalement, la vérification est : si l'élément en GET se trouve dans le tableau.
    Aussi, il n'y a théoriquement pas lieu de faire un htmlentities, c'est une protection qui ne sert à rien à mon sens.
    Ce tableau de navigation est apparemment créé manuellement, donc les données sont sûr (sans risque).
    Si ce qu'on obtient en GET se trouve dans le tableau, c'est que la valeur est bonne (est égale).


    Tu devrais te pencher sur un système de template généralisé à l'ensemble du site/projet, genre tout faire pointer vers un unique fichier (le plus couramment utilisé c'est index.php) et bâtir entièrement la navigation autour.
    Ensuite, créer une seule structure (HTML) commune à l'ensemble du site et inclure les morceaux selon la page demandée.
    Mais surtout, faire en sorte de séparer totalement les traitements par rapport au contenu (le HTML).

    A mon sens il y a trop de traitement dans tes pages, et même des inclusion en plein milieux, et ça se peux qu'il ait encore des traitement dans ces fichiers là.


    C'est juste pour voir, est-ce que tu comprends ce code :
    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
    function capture($view_filename, array $view_data) {
        // Import the view variables to local namespace
        extract($view_data, EXTR_SKIP);
     
        // Capture the view output
        ob_start();
     
        try {
            // Load the view within the current scope
            include $view_filename;
        }
        catch (Exception $e) {
            // Delete the output buffer
            ob_end_clean();
     
            // Re-throw the exception
            echo 'ERREUR : '.$e->getMessage();
        }
     
        // Get the captured output and close the buffer
        return ob_get_clean();
    }
    Surtout le couple ob_start() ob_get_clean()
    Le extract() se faisant sur $view_data

    Il serait à mon sens intéressant que tu comprennes ce que ça fait, car ça change énormément la manière de faire les choses.
    Donc il y a pas mal de choses à y gagner (théoriquement bien sûr).

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam(salut); merci RunCodePhp d'avoir consacré tout ce temps a mon post , sincèrement j'ai jamais travaillé avec les templates.
    faire en sorte de séparer totalement les traitements par rapport au contenu (le HTML).
    sa sous entend de faire par exemple les requêtes dans un seul fichiers , traitement php dans un autre......!!!
    compréhension ton code
    c'est par rapport au tampon mais j'arrive pas a faire le lien.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par redoran Voir le message
    sa sous entend de faire par exemple les requêtes dans un seul fichiers , traitement php dans un autre......!!!
    Exactement
    Je t'invite a faire tout l'article :

    http://symfony.com/doc/current/book/..._symfony2.html

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    sa sous entend de faire par exemple les requêtes dans un seul fichiers , traitement php dans un autre......!!!
    compréhension ton code
    Bien oui, et c'est ça qui fait toute la différence en un site bien conçu et un autre sans réelle conception.

    Tous les gros projets adoptent en général ce principe (2 couches), voir 3, le MVC : Modèle Vue Contrôleur.
    Ce sont des concepts qui ont fait leu preuves, c'est pas moi qui l'invente (j'suis à des lustres de pouvoir le faire).

    Je ne vois pas trop de quoi tu parles concernant les requêtes : de HTTP je suppose ?
    S'il s'agit des requêtes HTTP, et bien quelque soit la technique utilisée, c'est de toute manière le serveur Web qui reçoit les requêtes HTTP.
    Après, ça, le fichier index.php certes est unique, mais il n'y a absolument pas d'écriture dans ce fichier, donc la lecture ne causera pas de problème, même s'il y a des milliers d'accès au même moment.


    c'est par rapport au tampon mais j'arrive pas a faire le lien.
    Oui, ça agit sur le tampon, mais je ne vois pas trop ce que tu veux dire.

    C'était une question comme ça pour voir si tu comprends le grand intérêt de ce code, qui soit dit en passant est très largement utilisé par des FrameWork.
    Ca permet de charger du contenu (une page Php contenant du HTML brut) sans pour autant que le HTML soit renvoyé vers la sortie.
    Comme tu le sait, si on fait ça avant un header ça renvoie une erreur.

    Mais le but n'est pas d'éviter cette erreur, mais lorsqu'on sépare les traitements et le code HTML, on a de toute manière besoin de récupérer ce qu'on appel des vues (juste le code HTML, sans renvoie) pour à la fin recoller les morceaux dans l'ordre.

    Exemple, on aurait un template (structure HTML) comme ceci :
    template.php
    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
    <?php
    // PARTIE TRAITEMENT
    $head_titre = capture('view/headTitre.php', array('titre' => 'Titre de la page'));
     
    $entete = capture('view/entete.php', array('titre' => 'Titre balise H1'));
     
    $corps = capture('view/corps.php', array('var1' => 'donnee1', 'var2' => 'donnee2'));
     
    $pied = capture('view/pied.php', array('copyright' => 'Redoran'));
     
     
     
    // PARTIE INTERFACE / Template
    ?>
    <html>
    <head>
    <title><?php $head_titre; ?></title>
    </head>
     
    <body>
     
    <div>
    <?php echo $entete; ?>
    </div>
     
    <div>
    <?php echo $corps; ?>
    </div>
     
    <div>
    <?php echo $pied; ?>
    </div>
     
    </body>
    </html>
    Ensuite, il suffit de créer les fichiers des différentes vues des exemples ci-dessus : headTitre.php, entete.php, corps.php, pied.php
    -> Le fichier headTitre va contenir ici un simple : echo $titre.
    ->entete.php va contenir du HTML brut, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h1><?php echo $titre; ?></h1>
    ... et ainsi de suite pour le reste.
    Ces pages que sont les vues peuvent contenir tout ce qu'on veut, mais ce sera du HTML brut (ce qui revient à faire un echo).
    Donc on met un code qui théoriquement renvoie du HTML en sortie, mais le couple ob_start() ob_end_clean() empêche de le faire, ça retourne juste le contenu.


    Le 1er gros avantage, c'est que toute la logique du programme se déroule dans la partie traitement, on se souci très peu de de qui se passe dans la partie HTML (le template).
    Il faut juste que les données que l'on passe en paramètre ($view_data) soient en phase avec les variables qu'on exploitera dans ces fichiers de vues.

    Mais l'autre gros avantage, c'est la comparaison entre des include que je dirait classique par rapport à cette technique que je te montre.
    Les include classiques ont le gros inconvénient que les variables qui s'y trouvent sont quelques part globales.
    Ca sous entend que, si avant de faire un include on initialise une variable $toto avec une valeur, et qu'après ça on fait un include qui lui même initialise une variable du même nom $toto, la 1ère sera écrasée.
    D'un coté c'est peut être ce que l'on recherche, mais de l'autre, ça demande d'être très rigoureux sur la manière de nommer les variables pour éviter des erreurs.
    Le facteur "temps" ne joue pas du tout en faveur avec ce comportement.

    Une autre solution pour éviter ce comportement qui peut être désastreux, c'est de créer des fonctions.
    Mais à la longue on se retrouve avec une flopée de fonctions en tout genre.


    C'est là que cette simple fonction, si on visualise bien ce quelle fait, et bien ça change totalement la manière de faire les choses, juste avec 1 fonction seulement sans avoir tous les inconvénients cités plus haut.


    Maintenant, c'est à toi de voir, mais ton projet à l'air de se complexifié petit à petit, et à un certain stade ça demande beaucoup de structure, et surtout, du code trop procédural trouve ces limite.
    Même si cette fonction c'est toujours du procédural, c'est un principe emprunté des FW ou normalement c'est un Objet View, mais là j'ai juste mis l'essentiel qui peu se faire avec une fonction.

    Ceci dit, tout cela est juste une suggestion, c'est à toi de voir bien évidemment, j'essaie juste de mettre un peu d'eau au moulin.

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

Discussions similaires

  1. Formulaire de login avec mot de passe
    Par benjamin002 dans le forum IHM
    Réponses: 15
    Dernier message: 19/11/2009, 11h51
  2. Formulaire de changement de mot de passe
    Par missmilie dans le forum Langage
    Réponses: 4
    Dernier message: 01/07/2008, 14h28
  3. Formulaire de changement de mot de passe
    Par aityahia dans le forum Sécurité
    Réponses: 1
    Dernier message: 18/06/2008, 11h40
  4. Formulaire pour recuperer son mot de passe
    Par Jean73 dans le forum Langage
    Réponses: 4
    Dernier message: 28/03/2006, 13h30
  5. Formulaire protégé par un mot de passe
    Par SpyesX dans le forum Access
    Réponses: 10
    Dernier message: 13/03/2006, 19h02

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