(php/mysql) session administrateur [Résolu/Fermé]

Signaler
Messages postés
147
Date d'inscription
lundi 29 septembre 2008
Statut
Membre
Dernière intervention
28 juin 2013
-
Messages postés
1
Date d'inscription
dimanche 7 mai 2017
Statut
Membre
Dernière intervention
7 mai 2017
-
Bonjour,


Je démarre tout juste en php. J'ai commencé à faire un site avec une base de données.

En fait, je voudrais pouvoir faire un formulaire (ça je sais faire) pour permettre à un administrateur d'ouvrir sa propre session avec son pseudo et mot de passe (je ne sais pas faire) afin qu'il puisse mettre à jour les données via une page du site lui-même (genre zones de texte qu'on remplit avant de cliquer sur un bouton "mettre à jour"). Il faut que l'administrateur puisse donc accéder à des pages en plus que les visiteurs classiques. Si ça peut aider, j'ai déjà fait une table 'utilisateur' avec pour champs: id_utilisateur, pseudo, mot-passe, email.

J'ai cherché de la documentation là-dessus, mais je n'ai rien trouvé qui puisse m'aider à faire ça. l'important est de pouvoir mettre à jour les données juste en passant par le site.
Est-ce que j'ai vraiment besoin de me préoccuper des sessions pour faire ça?
Comment savoir si c'est le bon utilisateur?
Je dois inscrire ses données dans la table? Elle était pour autre chose, mais si ça marche pourquoi pas.
Si vous n'avez pas la réponse tant pis, mais j'aimerais au moins savoir où chercher la doc qu'il me faut et qu'elles sont les erreurs fréquentes à éviter.


J'espère que ce que j'écris est assez clair (pas sûr).
Merci d'avance, Gwendo.

Outils utilisés: wamp serveur 2 (pour la base de données) et notepad++ (pour écrire le code en html, php, css).

6 réponses

Messages postés
2064
Date d'inscription
vendredi 29 juin 2007
Statut
Contributeur
Dernière intervention
7 décembre 2017
705
salut!
voici un exemple simple:
<?php
session_start(); // début de session

// Paramètres de connexion
$hostname= "localhost"; // nom ou ip de votre serveur
$database = ""; // nom de votre base de données
$username= "root"; // nom d'utilisateur (root par défaut) 
$password= ""; // mot de passe
$db = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); 


if (isset($_POST['login'])){ // execution uniquement apres envoi du formulaire (test si la variable POST existe)
	$login = addslashes($_POST['login']); // mise en variable du nom d'utilisateur
	$pass = addslashes(($_POST['pass'])); // mise en variable du mot de passe
	
// requete sur la table administrateurs (on récupère les infos de la personne)
mysql_select_db($database, $db);
$verif_query=sprintf("SELECT * FROM ta_table WHERE login='$login' AND password='$pass'"); 
$verif = mysql_query($verif_query, $db) or die(mysql_error());
$row_verif = mysql_fetch_assoc($verif);
$admin = mysql_num_rows($verif);

	if ($admin) {	// On test s'il y a un utilisateur correspondant
		    session_register("authentification"); // enregistrement de la session
		
		// déclaration des variables de session
		
		$_SESSION['nom'] = $row_verif['nom']; // Son nom
		$_SESSION['login'] = $row_verif['login']; // Son Login
		
		
		header("Location:espaceadmin.php"); // redirection si OK
		
		
	}
	else {
		header("Location:connectadmin.php?erreur=login"); // redirection si utilisateur non reconnu
		
		
	}
}


// Gestion de la  déconnexion
if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){ // Test sur les paramètres d'URL qui permettront d'identifier un contexte de déconnexion
	$nom = $_SESSION['nom']; // On garde le prénom en variable pour dire au revoir 
	session_unset("authentification");
	header("Location:connectadmin.php?erreur=delog&nom=$nom");
	
	
}
?>



<html>
<!-- DW6 -->
<head>
<!-- Copyright 2005 Macromedia, Inc. All rights reserved. -->
<title>::Espace Administrateur::</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>
<body bgcolor="#64748B">
<form action="" method="post" name="connect">
  <p align="center" class="titre"><strong>- : : : CONNEXION CLIENT : : : -</strong></p>
  <p align="center" class="title">
    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "login")) { // Affiche l'erreur  ?>
    <strong class="erreur"><font color="#FF0000">Echec d'authentification !!! > login ou mot de passe incorrect</font></strong>
    <?php } ?>
    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "delog")) { // Affiche l'erreur ?>
    <strong class="reussite"><font color="#00FF00">D&eacute;connexion r&eacute;ussie... A bient&ocirc;t </font><?php echo $_GET['nom'];?> !</strong>
    <?php } ?>
    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) { // Affiche l'erreur ?>
    <strong class="erreur"><font color="#FF0000">Echec d'authentification !!! > Aucune session n'est ouverte ou vous n'avez pas les droits pour afficher cette page</font></strong>
    <?php } ?>
  </p>
  
  <table width="300"  border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
    <tr>
      <td width="50%""><div align="right">login</div></td>
      <td width="50%"><input name="login" type="text" id="login"></td>
    </tr>
    <tr>
      <td width="50%""><div align="right">mot de passe</div></td>
      <td width="50%"><input name="pass" type="password" id="pass"></td>
    </tr>
    <tr>
      <td height="34" colspan="2"><div align="center">
          <input type="submit" name="Submit" value="Se connecter">
      </div></td>
    </tr>
  </table>
  
</form>



</body>
</html>


Bon voila,tu adaptes et ça devrai marché!
12
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
1
Date d'inscription
dimanche 7 mai 2017
Statut
Membre
Dernière intervention
7 mai 2017

merci
Messages postés
2064
Date d'inscription
vendredi 29 juin 2007
Statut
Contributeur
Dernière intervention
7 décembre 2017
705
Salut!
Voici un tuto pour faire la connexion avec login et mot de passe.
N'hésite pas si tu rencontres des difficultés!
Messages postés
147
Date d'inscription
lundi 29 septembre 2008
Statut
Membre
Dernière intervention
28 juin 2013
12
Merci beaucoup!

Ça marche impec! En plus au passage j'ai appris des choses en essayant de comprendre le code, vive les mémento!
J'ai encore un peu de mal à comprendre certains trucs avec les requêtes sur la table pour récupérer les infos de l'utilisateur et la gestion des erreurs au niveau du code php (pas dans le formulaire, ça j'ai compris) mais je vais essayer de trouver.

Merci encore, Gwendo.
Messages postés
147
Date d'inscription
lundi 29 septembre 2008
Statut
Membre
Dernière intervention
28 juin 2013
12
Bonjour,


D'abord merci pour la réponse. Mais je suis désolée, j'ai du faire une erreur quelque part. J'ai adapté le code pour mon site et parce que le nom de ma table et de mes champs sont différents, mais ça pose encore problème.

J'ai fait une première page connexion.php. Voici le code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Creer un compte</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<p>
<a href="compte.php">Creer le nouveau compte utilisateur</a>
</p>
</body>
</html>


Ensuite, j'ai créé la page compte.php:

<?php
// Redirige l'utilisateur s'il est déjà identifié
if(isset($_COOKIE["ID_UTILISATEUR"]))
{
header("Location: index.php");
//index.php est la page d'accueil du site
}
else
{
// Formulaire visible par défaut
$masquer_formulaire = false;
// Une fois le formulaire envoyé
if(isset($_POST["BT_Envoyer"]))
{
// Vérification de la validité des champs
if(!ereg("^[A-Za-z0-9_]{4,20}$", $_POST["TB_Nom_Utilisateur"]))
{
$message = "Votre nom d'utilisateur doit comporter entre 4 et 20 caractères<br />\n";
$message .= "L'utilisation de l'underscore est autorisée";
}
elseif(!ereg("^[A-Za-z0-9]{4,}$", $_POST["TB_Mot_de_Passe"]))
{
$message = "Votre mot de passe doit comporter au moins 4 caractères";
}
elseif($_POST["TB_Mot_de_Passe"] != $_POST["TB_Confirmation_Mot_de_Passe"])
{
$message = "Votre mot de passe n'a pas été correctement confirmé";
}
elseif(!ereg("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$",
$_POST["TB_Adresse_Email"]))
{
$message = "Votre adresse e-mail n'est pas valide";
}
else
{
// Connexion à la base de données
// Valeurs à modifier selon vos paramètres configuration
mysql_connect("localhost", "root", "");
mysql_select_db("musique");
// Vérification de l'unicité du nom d'utilisateur et de l'adresse e-mail
$result = mysql_query("
SELECT nom_tilisateur, adresse_email
FROM utilisateur
WHERE nom_utilisateur = '" . $_POST["TB_Nom_Utilisateur"] . "'
OR adresse_email = '" . $_POST["TB_Adresse_Email"] . "'
");
// Si une erreur survient
if(!$result)
{
$message = "Une erreur est survenue lors de la création de votre compte utilisateur";
}
else
{
// Si un enregistrement est trouvé
if(mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_array($result))
{
if($_POST["TB_Nom_Utilisateur"] == $row["nom_utilisateur"])
{
$message = "Le nom d'utilisateur " . $_POST["TB_Nom_Utilisateur"];
$message .= "est déjà utilisé";
}
elseif($_POST["TB_Adresse_Email"] == $row["adresse_email"])
{
$message = "L'adresse e-mail " . $_POST["TB_Adresse_Email"];
$message .= "est déjà utilisée";
}
}
}
else
{
// Génération de la clef d'activation
$caracteres = array("a", "b", "c", "d", "e", "f", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$caracteres_aleatoires = array_rand($caracteres, 8);
$clef_activation = "";
foreach($caracteres_aleatoires as $i)
{
$clef_activation .= $caracteres[$i];
}
// Création du compte utilisateur
$result = mysql_query("
INSERT INTO utilisateur
(nom_utilisateur, mot_de_passe, adresse_email, date_inscription, clef_activation)
VALUES(
'" . $_POST["TB_Nom_Utilisateur"] . "'
, '" . md5($_POST["TB_Mot_de_Passe"]) . "'
, '" . $_POST["TB_Adresse_Email"] . "'
, '" . time() . "'
, '" . $clef_activation . "'
)
");
// Si une erreur survient
if(!$result)
{
$message = "Une erreur est survenue lors de la création de votre compte utilisateur";
}
else
{
// Envoi du mail d'activation
$sujet = "Activation de votre compte utilisateur";
$message = "Pour valider votre inscription, merci de cliquer sur le lien suivant :\n";
$message .= "[http://]" . $_SERVER["SERVER_NAME"];
$message .= "/activer-compte-utilisateur.php?id=" . mysql_insert_id();
$message .= "&clef=" . $clef_activation;
// Si une erreur survient
if(!@mail($_POST["TB_Adresse_Email"], $sujet, $message))
{
$message = "Une erreur est survenue lors de l'envoi du mail d'activation<br />\n";
$message .= "Veuillez contacter l'administrateur afin d'activer votre compte";
}
else
{
// Message de confirmation
$message = "Votre compte utilisateur a correctement été créer<br />\n";
$message .= "Un email vient de vous être envoyer afin de l'activer";
// On masque le formulaire
$masquer_formulaire = true;
}
}
}
}
}
// Fermeture de la connexion à la base de données
mysql_close();
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Creer un espace membre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php if(isset($message)) { ?>
<p><?php= $message; ?></p>
<?php } if($masquer_formulaire != true) { ?>
<form action="http://<?php= $_SERVER["SERVER_NAME"] . $_SERVER["SCRIPT_NAME"]; ?>" method="post">
<p>
Nom d'utilisateur : <input type="text" name="TB_Nom_Utilisateur" />
</p>
<p>
Mot de passe : <input type="password" name="TB_Mot_de_Passe" />
</p>
<p>
Confirmation du mot de passe : <input type="password" name="TB_Confirmation_Mot_de_Passe" />
</p>
<p>
Adresse e-mail : <input type="text" name="TB_Adresse_Email" />
</p>
<p>
<input type="submit" name="BT_Envoyer" value="Envoyer" />
</p>
</form>
<?php } ?>
</body>
</html>

Au final, sur la page du formulaire il y a bien le formulaire mais aussi marqué " method="post"> au dessus. Les données ne s'enregistrent pas non plus dans la table, puisqu'il n'y a pas d'envoi de message.
Je continue à chercher, mais si quelqu'un a une autre idée. Merci.

Gwendo.
ca marche pas avec le mysql
il affiche erreur utiliser mysqli ou pdp
Messages postés
29782
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2020
2 862 > salma
Bonjour
Et oui.... c'est obsolète....
Va faire un tour ici : https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Puis converti le code en Mysqli ou PDO .
Messages postés
2064
Date d'inscription
vendredi 29 juin 2007
Statut
Contributeur
Dernière intervention
7 décembre 2017
705
Salut Gwendo(même prénom que ma sœur ainée)
Dis tu utilises l'envoi de mail sur ton projet?je vois que c'est assez complexe pour toi.je te monte rapidement un script pour te connecter ok?
Messages postés
147
Date d'inscription
lundi 29 septembre 2008
Statut
Membre
Dernière intervention
28 juin 2013
12
Salut,

En fait j'ai essayé d'adapter ce qui est marqué dans le tuto, mais plus c'est simple mieux c'est (pour l'instant ça a pas l'air d'être le cas, j'essaie de trouver le problème mais bon c'est pas encore ça).
L'envoie de mail n'est pas obligatoire si il y a une autre solution.
Le principal est que l'administrateur puisse accéder à des pages (pour les mises à jours) en plus, contrairement aux autres utilisateurs.
Enfin, si tu peux et que tu as le temps pour m'aider, c'est impec.

A+.