Espace Membre

Eléphant du PHP | 71 Messages

07 juin 2011, 11:37

Bonjour tout le monde,

Je suis entrain de faire un espace membre pour une bibliothèque en ligne, Mon problème consiste à :
Quand un membre fais la connexion il passe à une autre page index1 où je souhaite afficher un message : "Bienvenue Mr Nom Prenom",

J'ai réussi à faire la connexion et d'afficher le Message mais il m'affiche tous les nom des Membres qui existent dans ma table membres :non: , et moi je veux afficher juste le nom du membre connecté #-o

voici mon formulaire de connexion (Page index) :
<form id="form1" method="post" >
<table width="257" border="0" align="center">
  <td width="91" height="48"></td>
      <td width="91" height="48"><p class="header_01" align="center"><strong>CONNEXION</strong></p></td>
  </tr>
  <tr>
    <td width="91"><strong>Pseudo</strong></td>
    <td width="156"><input type="text" name="textfieldd" /></td>
  </tr>
  <tr>
    <td width="91" height="48"><strong>Mot de passe</strong> </td>
    <td width="156"><input type="password" name="textfieldd2" /></td>
  </tr>
  <tr>
    <td width="91" height="6"></td>
    <td width="156"></td>
  </tr>
  <td width="91"><div align="right">
    <input type="submit" name="Submit" value="Se connecter"   />
  </div></td>
          </table>
		</form></td>
    </tr>
  </table>

<?php 
				
				
include "connexion.php";

if(isset($_POST['textfieldd']) and isset($_POST['textfieldd2'])) /* teste si les champs on été bien remplis*/
{
$login = $_POST['textfieldd'];
$pwd = $_POST['textfieldd2'];


if(isset($_POST) && !empty($_POST['textfieldd']) && !empty($_POST['textfieldd2'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select Pass from membres where Pseudo='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['Pass'] != $pwd) {
 
   ?>

 <script language="javascript"> 
alert('Login / password incorrect. Merci de recommencer!!');
 </script>
 <?php 
 
   
  }
  else 
  {   
    // vers la page d'accueil de votre espace membres
	  echo header("location:index1.php");
  }   
}
else {
     ?>

 <script language="javascript"> 
alert('Vous devez remplir tous les champs!!');
 </script>
 <?php 
}
Et pour la page Index1 (après connexion) :
include 'connexion.php';

$requet="SELECT * FROM membres ";
$resultt = mysql_query($requet) or exit(mysql_error().'Echec');

while( $data = mysql_fetch_assoc($resultt)) 
  { 
?>

	<p align="right"><strong> Bienvenue  </strong> <?php echo $data['Civilite']; ?>  &nbsp;<?php echo $data['Nom']; ?> &nbsp;<?php echo $data['Prenom']; ?>
	
	</p>
	
<?php 
}

?>	
Quelqu'un peux m'aider ???
Merci d'avance

ViPHP
ViPHP | 2577 Messages

07 juin 2011, 12:04

Bonjour,

Lorsque la personne est identifiée, il faut stocker sont identifiant dans une session ou dans un cookie pour pouvoir le conserver d'une page à l'autre. Tu peux alors utiliser cette identifiant pour accéder à la bonne personne dans la table.

Si je peux me permettre quelques conseils :
- Choisi des noms plus explicitent pour tes champs HTML (name="textfieldd" c'est pas très pratique).
- Lorsque tu utilises les champs $_POST[...], utilises la fonction mysql_real_escape_string() pour les accès à la base de données pour éviter des problèmes d'intrusion.

Eléphant du PHP | 80 Messages

07 juin 2011, 12:08

Bonjour,

Ou alors tu peux passer l'id de la personne qui se connecte dans l'url et t'en servir pour faire ta restriction dans index1.php

Par restriction j'entend que dans ta requête
$requet="SELECT * FROM membres ";
tu rajoutes WHERE Login = $login

$login étant ce que tu auras récupéré dans l'url.
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

Eléphant du PHP | 71 Messages

07 juin 2011, 12:15

J'ai fais la modification suivante dans la page Index1 :
$requet="SELECT * FROM membres WHERE Pseudo = $login ";
Mais j'ai reçu le message d'erreurs suivant que j'ai pas compris car j'ai pas de colonne nommé root #-o :

Unknown column 'root' in 'where clause'Echec

Que ce que je dois faire ??

Eléphant du PHP | 80 Messages

07 juin 2011, 12:46

Oui car c'est une variable, il faut mettre $login entre simple quote.

$requet="SELECT * FROM membres WHERE Pseudo =' $login '";

Mais tu as bien récupérer la valeur de $login dis-moi ? :priere:
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

Eléphant du PHP | 71 Messages

07 juin 2011, 13:07

Merci pour ta réponse, j'ai ajouté les 2 cotes, mais j'ai pas eu le résultat que je veux càd :
je suis connecté mais le message n'est pas affiché ("Bienvenue Mr Nom Prenom") #-o

et je pense que l'erreur car j'ai pas récupéré la valeur de $login comme tu m'a dis ...

comment je fais pour la récupérer ???

Eléphanteau du PHP | 31 Messages

07 juin 2011, 13:35

Dans ta page de connexion, tout en haut, on démarre les sessions:
session_start();
Fais attention aussi, dans ton formulaire, je crois qu'il manque action="#"
Dans la page de connexion du membre, là ou tu vérifie que le membre et le mot de passe existe; si la connexion est réussie tu lui crée une variable de session de membre:
else
  {  
$_SESSION['pseudo'] = $Pseudo;
    // vers la page d'accueil de votre espace membres(pas de echo dans un header)
          header("location:index1.php");
  }   
Pense à toujours mettre le code qui traite le formulaire avant tout code html (c'est plus logique) car ton header ne peut fonctionner si du html est envoyé avant.

Et dans ton index1.php:
pas besoin de while car tu ne récupère qu'une entrée.
<?
$requet="SELECT * FROM membres WHERE Pseudo = '".$_SESSION['pseudo']."'";
$resultt = mysql_query($requet) or exit(mysql_error().'Echec');
$data = mysql_fetch_assoc($resultt));
?>

        <p align="right"><strong> Bienvenue  </strong> <?php echo $data['Civilite']; ?>  &nbsp;<?php echo $data['Nom']; ?> &nbsp;<?php echo $data['Prenom'];</p>
    
Maintenant si tu as des pages qui ne doivent être visibles que pour les membres connectés, il te suffit de mettre ça en haut de la page:
if(!isset($_SESSION['pseudo'])) header("Location: index.php");
Avant de te lancer à fond dans l'espace membre, je te conseille de lire un bon tuto sur les variables de session, yen à pour une demi-heure et tu verra tout serra beaucoup plus clair! :D

Eléphant du PHP | 71 Messages

07 juin 2011, 13:47

Merci pour ta réponse et je vais prendre en considération ce que tu m'as dis, :o

Mais pour mon problème j'ai eu un message d'erreurs lors de la connexion qui est : #-o

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\wamp\www\biblio\index1.php on line 50

??????

Eléphanteau du PHP | 31 Messages

07 juin 2011, 13:51

Je ne connais pas cette erreur mais elle ne vient pas de la connexion mais de la page de redirection (post connexion). D'ailleurs tu ne fais aucune connexion vu qu'aucune variable de session n'est créée. Penches toi sur le code que je t'ai donné et le message devrait surement disparaitre avec. 8-|

Eléphant du PHP | 71 Messages

07 juin 2011, 13:54

Mais siii, l'erreur est produite à la ligne 50 qui est :
$requet="SELECT * FROM membres WHERE Pseudo = '.$_SESSION['pseudo'].'";
c faux ???

Eléphanteau du PHP | 31 Messages

07 juin 2011, 14:27

Je ne sais pas mais en tout cas, il n'y a pas d'erreur de syntaxe dans cette ligne.

Tu devrais utiliser la methode la plus normale pour ta connexion aussi.
Je m'explique:

Toi tu as un formulaire de connexion qui traite la connexion sur la meme page et redirige sur une autre.
En principe le mieux c'est d'avoir une seule page avec cette structure:

if(formulaire envoyé)
{
traitement du formulaire
}

if(variable de session existe)
{
affiche le menu du membre
}sinon{
affiche le formulaire de connexion
}

Il faut bien comprendre qu'avec cette structure, la personne qui va sur l'index de ton site si elle est connectée, retombera toujours sur le menu du membre.
Alors qu'avec ta méthode, il retombera toujours sur le formulaire de connexion. :non:

Eléphant du PHP | 80 Messages

07 juin 2011, 14:42

Mais siii, l'erreur est produite à la ligne 50 qui est :
$requet="SELECT * FROM membres WHERE Pseudo = '.$_SESSION['pseudo'].'";
c faux ???
Oui. :P

Car l'imbrication de quote dans ta requête la fausse, l'ordinateur est bête, il lit de gauche à droite, et ainsi il découpe ça en '.$_SESSION[' puis en '].' avec pseudo qui se balade entre les deux. (Enfin je crois, baneagle me met le doute ...)

Passe $_SESSION['pseudo'] en variable.
$login = $_SESSION['pseudo'];
Et ensuite tu pourras faire :
$requet="SELECT * FROM membres WHERE Pseudo = '$login'";
Ainsi ta requête n'est plus faussée.
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

Eléphanteau du PHP | 31 Messages

07 juin 2011, 14:45

C'est sûr que ca rend la chose plus prudente et c'est à essayer mais moi je n'ai jamais eu à le faire. :wink:

En meme temps quand on recopie mal le code donné plus haut...
C'est:
$requet="SELECT * FROM membres WHERE Pseudo = '".$_SESSION['pseudo']."'";
et pas:
$requet="SELECT * FROM membres WHERE Pseudo = '.$_SESSION['pseudo'].'";

Eléphant du PHP | 71 Messages

07 juin 2011, 15:39

Merci pour vos réponse mais j'ai essayer cette syntaxe
$requet="SELECT * FROM membres WHERE Pseudo = '.$_SESSION['pseudo'].'";
et ca n'a pas marché
mais ça a marché avec cette syntaxe :
$login = $_SESSION['pseudo'];

$requet="SELECT * FROM membres WHERE Pseudo = '$login'";
Mais j'ai eu comme résultat :

Notice: Undefined variable: _SESSION in C:\wamp\www\biblio\index1.php on line 49

RQ : la ligne 49 est : $login = $_SESSION['pseudo'];
#-o #-o

Eléphant du PHP | 80 Messages

07 juin 2011, 15:44

Tu as bien démarré la session avec
session_start();
en haut des 2 pages ?
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.