Requète de connexion pour membres

Résolu/Fermé
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 13 oct. 2009 à 06:03
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 19 oct. 2009 à 06:44
Bonjour,

Quelque chose de particulier qui me pose un problème, ça va même vous étonner.

Sur mon site pour que les membres puisses accéder à leurs comptes, ils renseignent deux champs, mail et mot de passe.
Mais je voudrais que deux membres qui ont la même adresse mail puissent accéder à leurs compte il y aurait juste le mot de passe qui fait la différence.
C'est des personnes de la même famille pour leurs éviter de créer une deuxième adresse mail.
Merci de vos réponses et surtout de vos compétences.

[code]
<?php

if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password']))
{
extract($_POST);
$sql = "select password from cruet_membre where email='".$email."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
if($data['password'] != $password)
{
echo "<b><font color='red'>Mauvaise adresse Email ou Mauvais mot de passe...<br> Merci de recommencer.</font></b>";
include('user_login_form.php5');
exit;
}
else
{
$_SESSION['pseudo'] = $email;
echo "<b><font color='red'>Vous êtes bien logué.</font></b>";//Vous êtes bien logué.
echo "<br><a href='index.php5'>Cliquez ici</a>";
exit;
}
}
else
{
echo "<b><font color='red'>Veuillez remplir tous les champs !!!</font></b>";
include('user_login_form.php5');
exit;
}

?>
/code
A voir également:

12 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
13 oct. 2009 à 07:09
Crées deux membre différents dans la table avec la même adresse email mais pas le même mot de passe.
Ensuite, fait comme ça :
<?php
...
// Retirer les espaces en début et en fin de chaine (sécurité)
$mail = trim($_POST['mail']);
$motdepasse = trim($_POST['motdepasse']);

// Requête SQL
$sql = 'SELECT id FROM membres WHERE email = "'.$mail.'" AND motdepasse = "'.$motdepasse.'"';
$req = mysql_query($sql);
$nb = @mysql_num_rows($req);
if($nb > 0) {
    echo 'Vous êtes connecté';
    $membre = mysql_fetch_assoc($req);
    $_SESSION['membre_id'] = $membre['id'];
} else {
    echo 'Erreur';
} 
...
?>
N'oublie pas de sécurisé le script (lors de la requête par exemple avec mysql_real_escape_string).
1
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
18 oct. 2009 à 19:50
Il est où le session_start() ?

Et par pitié, n'utilise pas la fonction extract(), pour ton bien et le bien de ton site que te dis ça.

Où as-tu été chercher cette fonction ?
Il ne faut jamais l'utiliser sur POST ni GET.

Aussi, réfléchis un peu sur ton code, trouve tu normal d'appliquer un trim sur des variables POST avant d'avoir tester leurs existences ?
1
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
18 oct. 2009 à 20:21
+1
C'est clair quand testant si la variable existe après l'avoir défini ne sert à rien ...
Par contre, il peut vérifier si elle est vide avec empty($chaine) (qui renvoie true sur la chaine est vide).
0
Torkass Messages postés 166 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 janvier 2016 95
19 oct. 2009 à 00:04
Salut, tu dis que ton session_start() est dans ta page header, hors j'imagine que tu la places via un include dans les balises :

<html>
<head>
<?php
include "header.php";
?>
</head>

hors si je ne me trompe pas session_start() doit être placé au tout début de la page, il ne doit absolument RIEN y avoir avant lui, en dehors de la balise ouvrant le code php.

Il faut donc procéder ainsi :

<?php
session_start();
?>
<html>
<head>
<?php
include "header.php";
?>
</head>

Bien entendu, tu retires le session_start() de ton fichier header.php. Normalement, ça peut éviter quelques problèmes.

Pour celui de ta requête et du array qui ne sort que le g, essaye plutôt ça :

mysql_fetch_array
à la place de :

mysql_fetch_assoc
Ah oui et retire le @ dans :

$data = @mysql_num_rows($req);
le @ masque les messages d'erreur mais ne les supprime pas.
1
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
15 oct. 2009 à 05:16
Merci de votre réponse, j'ai essayé ca fonctionne il y a juste un petit soucis que je vais essayer de résoudre si je peux, c'est d'afficher le compte des membres lorsqu'ils se connectent.

Merci encore
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
15 oct. 2009 à 07:03
Tu peux stocker l'id du membre dans une variable session (comme $_SESSION['id']).
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
18 oct. 2009 à 09:59
Bonjour,
Merci de vos réponses.
Je galère pour mon problème quelque chose que je ne vois pas, pouvez-vous m'aider.
Je souhaite que les membres puissent se connecter avec la même adresse mail juste le password qui fait la différence. Avec ceci ca n'affiche pas le compte des membres.
Merci beaucoup de votre aide.

[code]
<?php
// Retirer les espaces en début et en fin de chaine (sécurité)
$email = trim($_POST['email']);
$password = trim($_POST['password']);


if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password']))
{
extract($_POST);
$sql = 'SELECT id
FROM cruet_membre
WHERE email = "'.$email.'"
AND password = "'.$password.'"';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = @mysql_num_rows($req);

if($data > 0)
{
echo "<b><font color='red'>Vous êtes bien logué.</font></b>";//Vous êtes bien logué.
echo "<br><a href='index.php5'>Cliquez ici</a>";
$data = mysql_fetch_assoc($req);
$_SESSION['pseudo'] = $email['id'];
exit;
}
if($data['password'] != $password)
{
echo "<b><font color='red'>Mauvaise adresse Email ou Mauvais mot de passe...<br> Merci de recommencer.</font></b>";
include('user_login_form.php5');
exit;
}
}

else
{
echo "<b><font color='red'>Veuillez remplir tous les champs !!!</font></b>";
include('user_login_form.php5');
exit;
}
?>
/code

Et le code de ma page header

[code]
<?php
//deconnection
if (isset($_GET['action']) && $_GET['action'] == "deco")
$_SESSION['pseudo'] = NULL;

//set username
if (isset($_SESSION['pseudo']) && $_SESSION['pseudo'] != NULL)
{
$pseudo = $_SESSION['pseudo'];
}

//Etablishing page body
if (isset($_GET['body']) && $_GET['body'] != NULL)
$body = "pages/" . $_GET['body'] . ".php5";
else
$body = "pages/main.php5";
?>
/code
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
18 oct. 2009 à 11:33
As-tu mis <?php session_start(); ?> au tout début de ton fichier (avant le DOCTYPE, sans aucun espace avant <?php) ?
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
18 oct. 2009 à 16:31
Bonjour,

oui je l'ai mis.............
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
18 oct. 2009 à 16:38
Bizarre... Tu n'as aucun message d'erreur ?
Mets ça après avoir défini la variable de session et sur la page header :
echo '<pre>'.htmlspecialchars(print_r($_SESSION,1)).'</pre>';
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
18 oct. 2009 à 19:31
Bonjour,

Grand merci de pouvoir m'aider, je suis vraiment dans l'impasse...........

Ca m'ouvre une page mais vide au lieu d'ouvrir la page du compte d'un membre ça me dit simplement "bonjours" au lieu de dire "bonjours Gilbert"
En plus ça me met ceci sur la page?
Array
(
[pseudo] => g
)
Le G correspond bien au membre à laquel je me suis connecter là c'est Gilbert

Merci vraiment de ton aide
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
18 oct. 2009 à 23:15
Bonjour et merci de vos réponses.

Je débute en php, pouvez vous me developper un peu plus pourquoi on ne peux pas mettre la fonction extract($_POST) ?

Pour le session_start() c'est sur ma page header et toutes mes pages on un include.

Merci vraiment de votre savoir si vous pouvez encore me donner quelques conseil afin que je puisse mettre en place ce code pour que les membres puisses se connecter avec la même adresse mail, seul le password fera la différence.
Merci

[code]
<?php

if(isset($_POST) && !empty($_POST['email']) && !empty($_POST['password']))
{
extract($_POST);
$sql = 'SELECT id
FROM cruet_membre
WHERE email = "'.$email.'"
AND password = "'.$password.'"';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = @mysql_num_rows($req);

if($data > 0)
{
echo "<b><font color='red'>Vous êtes bien logué.</font></b>";//Vous êtes bien logué.
echo "<br><a href='index.php5'>Cliquez ici</a>";
$data = mysql_fetch_assoc($req);
$_SESSION['pseudo'] = $email['id'];
exit;
}
if($data['password'] != $password)
{
echo "<b><font color='red'>Mauvaise adresse Email ou Mauvais mot de passe...<br> Merci de recommencer.</font></b>";
include('user_login_form.php5');
exit;
}
}

else
{
echo "<b><font color='red'>Veuillez remplir tous les champs !!!</font></b>";
include('user_login_form.php5');
exit;
}

?>
/code
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
19 oct. 2009 à 06:44
Bonjour

En fait maintenant si je garde la même adresse mail et juste en changeant le password, ca m'ouvre la page mais ne reconnait pas les comptes des membres.
Aucun messages d'erreur n'apparait.

Pour la fonction session_start() c'est exactement ce que j'ai fait.

Merci vraiment pour votre aide
0