Sessions, encore elle...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sessions, encore elle...

par lecobra_20 » 31 janv. 2006, 15:09

Oui il a raison, cela sera mieux pour toi de debbeguer si besoin. Car la @ empêche le renvois d'erreur surtout pour les requêtes. C'est important pour voir ou se situ dasn un premier temps l'erreur.

par iclo » 31 janv. 2006, 14:18

Il vaudrait mieux virer les @, surtout devant les appel à la base de donée, sinon quand il y aura un problême, le débuggage sera pas triste.

par lecobra_20 » 31 janv. 2006, 14:14

De rien, c'était avec plaisir. Tu verras le code est assez simple à comprendre, de plus j'ai tout commenté.
Sinon n'hésite pas si tu as encore un problème...

par newbee » 31 janv. 2006, 13:21

Monsieur lecobra_20, je vous remercie de tout mon coeur, de toute mon âme, de tout ce que je peux :pouce:

Ca marche nickel, plus qu'a comprendre ton code et l'inserer dans mes pages.

Thanks!
:agenouille:

par lecobra_20 » 31 janv. 2006, 12:07

Bon voici tout ce qui te faut :

Page index.php (va te permettre de te loguer...)
<?php
/* Traitement du formaulaire pour l'accès à l'espace membre */
											
// on teste si le visiteur a soumis le formulaire de connexion

if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    if ((isset($_POST['membre_login']) && !empty($_POST['membre_login'])) && (isset($_POST['membre_pass']) && !empty($_POST['membre_pass']))) {

				// On se connecte à la base de données
				
        $base = mysql_connect ('localhost', 'root', ''); 
        mysql_select_db ('gestion', $base);

        // requête pour la déclaration de la session id
        
        $query='SELECT * FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'" AND membre_pass_md5="'.md5(addslashes($_POST['membre_pass'])).'"';
	  		$result=@mysql_query($query);
	  		$row=@mysql_fetch_array($result);

        // on teste si une entrée de la base contient ce couple login / pass
        
        $sql = 'SELECT count(*) FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'" AND membre_pass_md5="'.md5(addslashes($_POST['membre_pass'])).'"';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        $data = mysql_fetch_array($req);
        
        // On libère l'espace mémoire et on ferme la base de données
        
        mysql_free_result($req);
        mysql_close();
        
        // si on obtient une réponse, alors l'utilisateur est un membre
        
        if ($data[0] == 1){
        		
        		// On déclare des lors les variables de sessions pour la suite du programme
        		
        		session_start(); 																		// variable de session
            $_SESSION['membre_login'] = $_POST['membre_login']; // Variable de session contenant le pseudo du membre
						$_SESSION['membre_id'] = $row[0];										// Variable de session contenant l'id du membre        
            header('Location: membre.php');											// On redirige le membre sur la page membre
            exit();																							// On sort
        }
        
        // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
        
        elseif ($data[0] == 0) {
        	
         //$erreur = 'Compte non reconnu.';
					
					// On affiche une boîte de dialogue informant la personne que les coordonnées saisies dans le formulaire sont incorrecte
					
					echo '<SCRIPT language="JavaScript" type="text/javascript">	
								window.alert("Compte non reconnu dans la base de données");
								</script>';
        }
        
        // sinon, alors la, il y a un gros problème
        
        else {
        	
        		// Déclaration du message d'erreur 
        		
            $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
        }
    }
    else {
    	
    		// Declaration du message d'erreur
    		
        $erreur = 'Au moins un des champs est vide.';
    }
}

	                    /* Fin traitement du formaulaire pour l'accees a l'espace membre */						
?>

<!--------------------Gestion de la page avec l'affiche des différents éléments--------------------->
<html>
<head>
<title></title>

</head>

<!-----------------------Début du traitement de l'affichage de la page-------------------------------->
<body>
<br>
<table width="250" border ="0" align="center">
<tr>
<td>
<form action="index.php" method="post" name="FormMemo">
Nom : 
</td>
<td>
<input type="text" name="membre_login" value="<?php if (isset($_POST['membre_login'])) echo stripslashes(htmlentities(trim($_POST['membre_login']))); ?>">
</td>
</tr>
<tr>
<td>
Passe : 
</td>
<td>
<input type="password" name="membre_pass" value="<?php if (isset($_POST['membre_pass'])) echo stripslashes(htmlentities(trim($_POST['membre_pass']))); ?>">
</td>
</tr>
<tr>
<td colspan="2">
<center><br>
<input type="submit" name="connexion" value="Connexion" onClick="javascript: return saisieOK(document.FormMemo);"></center>
</form>
</td>
</tr>
<tr>
<td>
<a href="inscription.php">Vous inscrire</a>
</td>
</tr>
</table>
</div>
</center>
</td>
</tr>
<tr>
<td>
<br>
</td>
</tr>
<tr>
<td bgcolor="#A3C1FF" colspan="3" height="1" class="tdSpacer"><img src="fichier_images/spacer.gif" width="1" height="1" border=0 /></td>
</tr>
</table>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>
Page membre.php (la page du membre une fois loggué) :
<?php
session_start();
if (!isset($_SESSION['membre_login'])) {
    header ('Location: index.php');
    exit();
}
?>
<htlm>
<title>membre</title>
<head>
</head>
<body>
<center>
	<div class="blocTxt">
		<center>Bienvenue <b><?php echo($_SESSION['membre_login']); ?></b> dans votre espace de gestion</center>
	</div>
</center>
<br>
<div class="listeFilms">
	<table width="500" cellspacing="0" align="center">
		<thead>
			<tr>
				<td align="center">
					<img src="fichier_images/icon/icon_copy.gif"> Outils OfficeGestion
				</td>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td bgcolor="#A3C1FF" colspan="3" height="1" class="tdSpacer"><img src="fichier_images/spacer.gif" width="1" height="1" border=0 /></td>
			</tr>
		</tbody>
	</table>
</div>
<br>
<br>
<center>
	<div class="blocTxt">
		<p>Gestion multimédia</p><hr>
		<img src="fichier_images/dvdtech.gif">
	</div>
</center>
<center><table border="0" width="50%">
	<tr>
		<td>
			essai
			<hr width="100%">
		</td>
	</tr>
</table></center>
<p>Accéder aux outils : </p>
</BODY>
</html>
La page pour l'inscription :
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
    // on teste l'existence de nos variables. On teste également si elles ne sont pas vides
    if ((isset($_POST['membre_login']) && !empty($_POST['membre_login'])) && (isset($_POST['membre_pass']) && !empty($_POST['membre_pass'])) && (isset($_POST['membre_pass_confirm']) && !empty($_POST['membre_pass_confirm']))) {
        // on teste les deux mots de passe
        if ($_POST['membre_pass'] != $_POST['membre_pass_confirm']) {
            $erreur = 'Les 2 mots de passe sont différents.';
        }
        else {
            $base = mysql_connect ('localhost', 'root', ''); 
            mysql_select_db ('gestion', $base);
            
            // on recherche si ce login est déjà utilisé par un autre membre
            $sql = 'SELECT count(*) FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'"';
            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
            $data = mysql_fetch_array($req);

            if ($data[0] == 0) {
                $sql = 'INSERT INTO gestion_membre VALUES("", "'.addslashes($_POST['membre_login']).'", "'.md5(addslashes($_POST['membre_pass'])).'")';
                mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

                session_start();
                $_SESSION['membre_login'] = $_POST['membre_login'];
		    
		    echo "<br><br><center><font color='#990000'>Inscription réussie<br> Vous pouvez désormais vous connecter <a href=\"index.php\">ici</a></font></center><br>";
                //header('Location: membre.php');
                exit();
            }
            else {
                $erreur = 'Un membre possède déjà ce login.';
            }
        }
    }
    else {
        $erreur = 'Au moins un des champs est vide.';
    }
}
?>
<html>
<head>
<title>Inscription</title>
<LINK REL=stylesheet TYPE="text/css" HREF="css.css">
</head>

<body bgcolor="#f4f4f4">
<h3><p style="text-align: center; font-family: 'times new roman">Création d'un compte à l'application de gestion</p></h3><br />
<hr width="50%"><br>
<center>
<table>
	<tr>
		<td>
			<form action="inscription.php" method="post">
			Login : 
		</td>
		<td>
			<input type="text" name="membre_login" value="<?php if (isset($_POST['membre_login'])) echo stripslashes(htmlentities(trim($_POST['membre_login']))); ?>">
		</td>
	</tr>
	<tr>
		<td>
			Mot de passe : 
		</td>
		<td>
			<input type="password" name="membre_pass" value="<?php if (isset($_POST['membre_pass'])) echo stripslashes(htmlentities(trim($_POST['membre_pass']))); ?>">
		</td>
	</tr>
	<tr>
		<td>
			Confirmation du mot de passe : 
		</td>
		<td>
			<input type="password" name="membre_pass_confirm" value="<?php if (isset($_POST['membre_pass_confirm'])) echo stripslashes(htmlentities(trim($_POST['membre_pass_confirm']))); ?>">
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<br><center><input type="submit" name="inscription" value="Inscription"></center></form>
		</td>
	</tr>
</table>
</center>
<hr width="50%">
<p style="text-align: center; font-family: 'times new roman"><a href="index.php">Retour</a></p>			
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>

La page pour la déconnexion.php :

<?php
session_start();
session_unset();
session_destroy();
header('Location: index.php');
exit();
?>
Et pour finir la base de données :

Code : Tout sélectionner

CREATE TABLE `gestion_membre` ( `membre_id` int(11) NOT NULL auto_increment, `membre_login` text NOT NULL, `membre_pass_md5` text NOT NULL, PRIMARY KEY (`membre_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

par newbee » 31 janv. 2006, 11:01

ok, bonne info.
...mais ça ne résoud pas mon problème :(

Quelqu'un pour m'aider?
la session marche bien si je ne mets pas de variable, mais pas si je veux en recuperer une à partir de mon formulaire

par didgar » 31 janv. 2006, 10:51

Bonjour,

Ca ne me parait pas trop logique les deux requêtes ci-dessous ! La seconde sert à vérifier le nbre de user qui ont le même couple login/mot de passe ?
        // requête pour la déclaration de la session id
        
        $query='SELECT * FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'" AND membre_pass_md5="'.md5(addslashes($_POST['membre_pass'])).'"';
	  		$result=@mysql_query($query);
	  		$row=@mysql_fetch_array($result);

        // on teste si une entrée de la base contient ce couple login / pass
        
        $sql = 'SELECT count(*) FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'" AND membre_pass_md5="'.md5(addslashes($_POST['membre_pass'])).'"';
Autant interdire dans phpmyadmin la possibilité d'avoir x enregistements qui ont le même couple login/mot_de_passe en mettant une clé unique sur le couple login/mot_de_passe justement !!!

Ca évite bien des problèmes ...

A+

Didier

par newbee » 31 janv. 2006, 10:05

Re-bonjour tout les gens
lecobra_20 stp peut tu me dire quelle est la table & les champs associés à ton exemple?
La page de traitement du formulaire s'appelle t-elle index.php, ou est-ce une autre page à mettre en include?

(Comme vous le voyez, je suis vraiment un Newbee...)

par newbee » 30 janv. 2006, 17:22

Désolé, je ne vois pas comment affiché des trucs dans cette page.
Elle est appelé par la validation de mon formulaire de log. Je fait un echo dans cette page est rien du tout...

En même temps j'essaie la réponse de lecobra20, je vous tient au courant ;)

par lecobra_20 » 30 janv. 2006, 17:18

J'ai oublié voici le formulaire
<form action="index.php" method="post" name="FormMemo">
											Nom : 
										</td>
										<td>
											<input type="text" name="membre_login" value="<?php if (isset($_POST['membre_login'])) echo stripslashes(htmlentities(trim($_POST['membre_login']))); ?>">
										</td>
									</tr>
									<tr>
										<td>
											Passe : 
										</td>
										<td>
											<input type="password" name="membre_pass" value="<?php if (isset($_POST['membre_pass'])) echo stripslashes(htmlentities(trim($_POST['membre_pass']))); ?>">
										</td>
									</tr>
									<tr>
										<td colspan="2">
											<center><br>
											<input type="submit" name="connexion" value="Connexion" onClick="javascript: return saisieOK(document.FormMemo);"></center>
											</form>
Et si tu veux ensuite accéder aux varialbes de sessions il suffit de taper :

exemple
echo" le speudo et $_SESSION['membre_login'])

par lecobra_20 » 30 janv. 2006, 17:15

SAlut tiens moi je te conseil cette methode et cette syntaxe
<?php
											/* Traitement du formaulaire pour l'accès à l'espace membre */
											
// on teste si le visiteur a soumis le formulaire de connexion

if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    if ((isset($_POST['membre_login']) && !empty($_POST['membre_login'])) && (isset($_POST['membre_pass']) && !empty($_POST['membre_pass']))) {

				// On se connecte à la base de données
				
        $base = mysql_connect ('localhost', 'root', ''); 
        mysql_select_db ('gestion', $base);

        // requête pour la déclaration de la session id
        
        $query='SELECT * FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'" AND membre_pass_md5="'.md5(addslashes($_POST['membre_pass'])).'"';
	  		$result=@mysql_query($query);
	  		$row=@mysql_fetch_array($result);

        // on teste si une entrée de la base contient ce couple login / pass
        
        $sql = 'SELECT count(*) FROM gestion_membre WHERE membre_login="'.addslashes($_POST['membre_login']).'" AND membre_pass_md5="'.md5(addslashes($_POST['membre_pass'])).'"';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        $data = mysql_fetch_array($req);
        
        // On libère l'espace mémoire et on ferme la base de données
        
        mysql_free_result($req);
        mysql_close();
        
        // si on obtient une réponse, alors l'utilisateur est un membre
        
        if ($data[0] == 1){
        		
        		// On déclare des lors les variables de sessions pour la suite du programme
        		
        		session_start(); 																		// variable de session
            $_SESSION['membre_login'] = $_POST['membre_login']; // Variable de session contenant le pseudo du membre
						$_SESSION['membre_id'] = $row[0];										// Variable de session contenant l'id du membre        
            header('Location: membre.php');											// On redirige le membre sur la page membre
            exit();																							// On sort
        }
        
        // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
        
        elseif ($data[0] == 0) {
        	
         //$erreur = 'Compte non reconnu.';
					
					// On affiche une boîte de dialogue informant la personne que les coordonnées saisies dans le formulaire sont incorrecte
					
					echo '<SCRIPT language="JavaScript" type="text/javascript">	
								window.alert("Compte non reconnu dans la base de données");
								</script>';
        }
        
        // sinon, alors la, il y a un gros problème
        
        else {
        	
        		// Déclaration du message d'erreur 
        		
            $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
        }
    }
    else {
    	
    		// Declaration du message d'erreur
    		
        $erreur = 'Au moins un des champs est vide.';
    }
}

	                    /* Fin traitement du formaulaire pour l'accees a l'espace membre */						
?>

par zeus » 30 janv. 2006, 16:54

Dans le 2nd, celui de 15h15

Même si page est incluse, tu devrais pouvoir afficher des trucs

par newbee » 30 janv. 2006, 16:27

Et si tu affiche les valeurs identifiant et motdepasse dans le 1er scripts, elles sont remplies ?
- Dans le 1er script, c'est à dire dans mon premier post?
c'est la que je n'ai même pas de message d'erreur, nada, peanuts.
- Si c'est dans le 1er script posté à 15h15, je ne sais pas car cette page est une include, donc pas affichée... (c'est le bordel maintenant dans ce sujet, sorry)

par zeus » 30 janv. 2006, 16:21

Et si tu affiche les valeurs identifiant et motdepasse dans le 1er scripts, elles sont remplies ?

par newbee » 30 janv. 2006, 16:16

C'est à dire ?

Pas un message affiché ?
Si! Message d'erreur :
Undefined index: identifiant... sur ma pge de récup d'info


P.S : Encore désolé pour ma bévue du 1er post (re- :oops: )