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 :

Console d'administration SESSION ou GET ?


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Pierrot2Mars
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 108
    Points
    108
    Par défaut Console d'administration SESSION ou GET ?
    Bonjour à tous et à toutes,

    Me voilà devant vous pour une remise en question de ma façon de programmer.
    Je développe des sites, intranets, logiciels en PHP5 / MySQL.

    Dans les consoles d'administration sont gérés un tas de paramètres tels que, par exemple, les utilisateurs.
    Une page permet de lister les utilisateurs, et une deuxième page permet de modifier un utilisateur ou d'en créer un.

    Utilisez-vous un système de SESSION ou GET pour conserver l'id_utilisateur lors de la modification/création ?

    Je vois des avantages et des inconvénients dans les 2.

    Merci

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Aucun des deux, j'utilise du POST.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  3. #3
    Membre régulier Avatar de Pierrot2Mars
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 108
    Points
    108
    Par défaut
    Et des champs hidden pour rester sur le même id ?

    Ca oblige à faire une redirection lors de la création d'un nouvel utilisateur, pour passer en mode modification.
    Le problème, c'est pour afficher un message "Utilisateur créé".

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    Utilisez-vous un système de SESSION ou GET pour conserver l'id_utilisateur lors de la modification/création ?
    Tu parles bien de l'id de l'utilisateur à modifier et pas l'id de l'utilisateur qui modifie ?
    Si oui alors je passe par GET, ensuite au script traitant la demande de s'assurer de sa validité/pertinence.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par Pierrot2Mars Voir le message
    Le problème, c'est pour afficher un message "Utilisateur créé".
    Je fais passer mes messages par $_SESSION donc aucun souci.
    Construction d'un tableau de message qui contient tous les messages qui n'ont pas encore étés affichés et suppression du message lorsqu'on l'affiche.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #6
    Membre régulier Avatar de Pierrot2Mars
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Tu parles bien de l'id de l'utilisateur à modifier et pas l'id de l'utilisateur qui modifie ?
    Si oui alors je passe par GET, ensuite au script traitant la demande de s'assurer de sa validité/pertinence.
    Oui je parle de l'id de l'utilisateur à modifier.
    Et tu utilises un PHP_SELF + QUERY_STRING dans la déclaration de ton formulaire ? Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<form name="form" method="post" action="'.htmlentities($_SERVER['PHP_SELF'].(!empty($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : '')).'" enctype="multipart/form-data">';
    Et comment fais-tu lorsque le formulaire est validé pour la création d'un nouvel utilisateur ? Il faut rechercher la page avec l'id qui vient d'être créé ? Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location:'.htmlentities($_SERVER['PHP_SELF']).'?'.mysql_insert_id());

  7. #7
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Dans ce cas précis, POST ne m’apparaît avoir aucun avantage sur GET.
    Ils sont tous les deux possible à modifier, et on ne cherche généralement pas à avoir du SEO dans une page d'administration. ( Enfin, j'espère pour toi que les engins de recherche ne se rendent pas là )

    GET à l'avantage de pouvoir être modifier.
    On peut envoyer une URL à un client par courriel (ou l'inverse) par exemple. En cas de débogage à distance, c'est facile de déterminer quel est l'ID.

    Pour session je ne vois pas vraiment d'avantage, sauf si ton formulaire de modification possède plusieurs pages, dans ce cas, il est plus facile de passer l'id d'une page à l'autre.

  8. #8
    Membre régulier Avatar de Pierrot2Mars
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par FMaz Voir le message
    Dans ce cas précis, POST ne m’apparaît avoir aucun avantage sur GET.
    Ils sont tous les deux possible à modifier, et on ne cherche généralement pas à avoir du SEO dans une page d'administration. ( Enfin, j'espère pour toi que les engins de recherche ne se rendent pas là )

    GET à l'avantage de pouvoir être modifier.
    On peut envoyer une URL à un client par courriel (ou l'inverse) par exemple. En cas de débogage à distance, c'est facile de déterminer quel est l'ID.

    Pour session je ne vois pas vraiment d'avantage, sauf si ton formulaire de modification possède plusieurs pages, dans ce cas, il est plus facile de passer l'id d'une page à l'autre.
    L'utilisation de GET est incontestablement la plus adaptée, mais le problème se pose lors de la création d'un nouvel élément.
    ===> Il est nécessaire de recharger la page après validation pour que le nouvel id apparaisse dans l'Url et donc passer en mode modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location:'.$_SERVER['PHP_SELF'].'?id='.mysql_insert_id());
    Les messages de validation/erreur sont donc perdus.
    Il faut donc envoyer une indication de message dans l'Url, par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [...]
    if($insert) $message = 'Nouvel enregistrement créé';
    else $message = mysql_error();
    header('Location:'.$_SERVER['PHP_SELF'].'?id='.mysql_insert_id().'&message='.$message);
    Puis afficher le message lors du rechargement de la page par le header();

    Je trouve ça assez lourd. C'est la raison pour laquelle j'utilise les SESSIONs

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Pierrot2Mars Voir le message
    Et comment fais-tu lorsque le formulaire est validé pour la création d'un nouvel utilisateur ? Il faut rechercher la page avec l'id qui vient d'être créé ? Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location:'.htmlentities($_SERVER['PHP_SELF']).'?'.mysql_insert_id());
    Je ne comprends pas ta question. L'id n'est généré qu'à l'insertion du nouvel utilisateur dans la BdD.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  10. #10
    Membre régulier Avatar de Pierrot2Mars
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Je ne comprends pas ta question. L'id n'est généré qu'à l'insertion du nouvel utilisateur dans la BdD.
    Justement...

    Ci-dessous un exemple de fichier vite codé, pour illustrer :
    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
    <?php
    session_start();
     
    if(isset($_POST['valider']) and !empty($_POST['valider'])) {
     
    	if(isset($_GET['id_utilisateur']) and !empty($_GET['id_utilisateur'])) {
     
    		$update = mysql_query("UPDATE utilisateurs SET
    												nom='".secure_SQL($_POST['nom'])."'
    								WHERE id_utilisateur='".intval($_GET['id_utilisateur'])."'
    								");
    		if($update) $message[].='Utilisateur modifié'; else $message[].=mysql_error();
     
    	}
     
    	else {
     
    		$insert = mysql_query("INSERT INTO utilisateurs (`nom`) VALUES (
    														'".secure_SQL($_POST['nom'])."'
    														)
    								");
    		if($insert) $message[].='Utilisateur créé'; else $message[].=mysql_error();
     
    		header('location:'.$_SERVER['PHP_SELF'].'?id_utilisateur='.mysql_insert_id());
     
    	}
     
    }
     
    // ---> DOCTYPE + HTML + HEAD + BODY + DIVS
    include('../Commun/includes/html_debut.php');
    // <---
     
    echo (count($message)>0 ? '<p class="message">'.implode('<br />',$message).'</p>' : '');
     
    echo '<form name="form" method="post" action="'.htmlentities($_SERVER['PHP_SELF'].(!empty($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : '')).'" enctype="multipart/form-data">';
     
    echo '<table>
    		<tr>
    			<th>Nom : </th>
    			<td><input type="text" name="nom" value="'.(isset($_POST['nom']) ? secure_affichage($_POST['nom']) : '').'" maxlength="100" style="width:300px;" /></td>
    		</tr>
    </table>';
     
    echo '<p><input type="submit" name="valider" value="Enregistrer" class="bouton" /></p>';
     
    echo '</form>';
     
    include('../Commun/includes/html_fin.php');
    ?>
    Lors d'une création, la variable $message est perdue.
    Tel est le problème de la méthode GET.

    Alors qu'en SESSION, pas de problème :
    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
    <?php
    session_start();
     
    if(isset($_POST['valider']) and !empty($_POST['valider'])) {
     
    	if(isset($_SESSION['id_utilisateur']) and !empty($_SESSION['id_utilisateur'])) {
     
    		$update = mysql_query("UPDATE utilisateurs SET
    												nom='".secure_SQL($_POST['nom'])."'
    								WHERE id_utilisateur='".intval($_SESSION['id_utilisateur'])."'
    								");
    		if($update) $message[].='Utilisateur modifié'; else $message[].=mysql_error();
     
    	}
     
    	else {
     
    		$insert = mysql_query("INSERT INTO utilisateurs (`nom`) VALUES (
    														'".secure_SQL($_POST['nom'])."'
    														)
    								");
    		if($insert) $message[].='Utilisateur créé'; else $message[].=mysql_error();
     
    		$_SESSION['id_utilisateur'] = mysql_insert_id();
     
    	}
     
    }
     
    // ---> DOCTYPE + HTML + HEAD + BODY + DIVS
    include('../Commun/includes/html_debut.php');
    // <---
     
    echo '<form name="form" method="post" action="'.htmlentities($_SERVER['PHP_SELF']).'" enctype="multipart/form-data">';
     
    echo '<table>
    		<tr>
    			<th>Nom : </th>
    			<td><input type="text" name="nom" value="'.(isset($_POST['nom']) ? secure_affichage($_POST['nom']) : '').'" maxlength="100" style="width:300px;" /></td>
    		</tr>
    </table>';
     
    echo '<p><input type="submit" name="valider" value="Enregistrer" class="bouton" /></p>';
     
    echo '</form>';
     
    include('../Commun/includes/html_fin.php');
    ?>

  11. #11
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Et pourquoi $message ne serait pas une variable de session ? Cela ne te poserai plus de problème quelque soit la configuration que tu veux derrière.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  12. #12
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    par contre empty vérifie aussi si la variable existe ou pas donc c'est en doublon avec isset

  13. #13
    Membre régulier Avatar de Pierrot2Mars
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    par contre empty vérifie aussi si la variable existe ou pas donc c'est en doublon avec isset
    Merci pour l'info

    Citation Envoyé par transgohan Voir le message
    Et pourquoi $message ne serait pas une variable de session ? Cela ne te poserai plus de problème quelque soit la configuration que tu veux derrière.
    Tout à fait d'accord.
    Mais dans ce cas, je préfère passer par le système de SESSION pour conserver l'id. Ça évite l'utilisation de GET.

Discussions similaires

  1. console d'administration antennes
    Par vallgui dans le forum WinDev
    Réponses: 3
    Dernier message: 23/11/2007, 11h49
  2. Créer une console d'administration C++
    Par ChriGoLioNaDor dans le forum C++
    Réponses: 1
    Dernier message: 07/11/2007, 16h57
  3. Console d'administration
    Par vovor dans le forum Administration système
    Réponses: 2
    Dernier message: 09/12/2006, 15h48
  4. [EasyPHP] Console d'administration
    Par 17mounir dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 12/08/2006, 19h52
  5. Réponses: 1
    Dernier message: 21/03/2006, 01h02

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