Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2011, 11h27   #1
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 11h55   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Aucun des deux, j'utilise du POST.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 12h00   #3
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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éé".
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 12h47   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Citation:
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 12h50   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
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.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h18   #6
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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 :
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 :
header('Location:'.htmlentities($_SERVER['PHP_SELF']).'?'.mysql_insert_id());
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 01h13   #7
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 648
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 648
Points : 527
Points : 527
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.
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 15h00   #8
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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 :
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 :
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
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 15h26   #9
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
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 :
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 15h47   #10
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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 :
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 :
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');
?>
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 16h22   #11
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
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.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 16h25   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
par contre empty vérifie aussi si la variable existe ou pas donc c'est en doublon avec isset
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 16h41   #13
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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.
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h31.


 
 
 
 
Partenaires

Hébergement Web