Email de validation à l'inscription

Répondre
elisa
le 13/01/2011 à 19:51
elisa
Bonsoir.

Je poste encore un message sur le forum pour avoir votre aide concernant la validation de l'inscription par mail avec un champ " cle " (0 mail non validé, 1 validé) et " actif " dans la bdd.

L'espace membre est celui de la rubrique " les comment faire ".

J'ai ajouté dans la bdd les deux champs concernés et j'ai ajouté sur la page inscription le script approprié pour recevoir un mail avec une clé d'activation. L'inscription se passe bien, je reçois le mail et j'active la clé.
Le problème vient de la page index.php, j'ai un message d'erreur concernant session_start(); et le header, du coup plus personne ne peut se connecter à l'espace membre.

Voilà le code :
<?php
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['username']) && !empty($_POST['username'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

include('includes/bbbbbb.php');
include('includes/bbbbbb.php');

// on teste si une entrée de la base contient ce couple login / pass / email
$sql = 'SELECT id FROM bbbbbb WHERE username="'.mysql_escape_string($_POST['username']).'" AND
pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);


$username= $_POST['username'];

$stmt = $db->prepare("SELECT actif FROM bbbbbbb WHERE username like :username ");
if($stmt->execute(array(':username' => $username)) && $row = $stmt->fetch())
{
$actif = $row['actif']; // $actif contiendra alors 0 ou 1
}


// Il ne nous reste plus qu'à tester la valeur du champ 'actif' pour
// autoriser ou non le membre à se connecter

if($actif == '1') // Si $actif est égal à 1, on autorise la connexion
{

echo'<p align="center">Connectez-vous.</p>';

}
else // Sinon la connexion est refusé...
{

echo'<p align="center">Connexion impossible. Veuillez contacter le webmaster du site par le biais du formulaire de contact.</p>';

}

if ($nb == 1) {
$data = mysql_fetch_array($req);

session_start();
$_SESSION['username'] = $_POST['username'];

$_SESSION['id'] = $data['id'];


mysql_free_result($req);
mysql_close();

header('Location: membre.php');
exit();
}

elseif ($nb == 0) {
$erreur = '<p align="center">Compte non reconnu, merci de v&eacute;rifier vos indentifiants de connexion.</p>';
}

else {
$erreur = '<p align="center">Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.</p>';
}
}
else {
$erreur = '<p align="center">Vous devez remplir tous les champs</p>';
}
}
?>


J'ai posé le code juste après la commande select puis quand j'ai eu le msg d'erreur j'ai mit le code après session_start();, enfin j'ai essayé plusieurs façons mais cela ne fonctionne pas.

Comment faire ?
Merci :))
Bonne soirée.
Wisme
le 13/01/2011 à 20:52
Wisme
Bonsoir ! ;)

Tout d'abord une règle élémentaire de base, il faut toujours mettre le sesion_start(); avant tout code php, notamment si tu utilises des sessions. Je fais toujours comme ça et je n'ai jamais eu de problèmes ^^.

De plus, peux-tu nous afficher ici les messages d'erreurs s'il te plais?
elisa
le 14/01/2011 à 07:12
elisa
Bonjour :)

Effectivement, session_start(); se trouve en haut de chacune des pages de l'espace membre sauf la page index qui est la même que celle de la rubrique " les comment faire ".
Si je place session_start(); en haut de la page index avec le header j'ai un message d'erreur " mauvaise direction " et j'ai une erreur de connexion.

En ce qui concerne le mail de validation sur la page index, le message d'erreur est celui-ci :

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /public_html/membres/index.php:37) in /public_html/membres/index.php on line 44

Warning: Cannot modify header information - headers already sent by (output started at /public_html/membres/index.php:37) in /public_html/membres/index.php on line 53
moogli
le 14/01/2011 à 12:47
moogli
salut,

tu affiche quelque chose à la ligne 37 de l'index.php il faut virer cet affichage ou alors déplacer ton session_start() c'est le seul moyen !


@+
Il en faut peu pour être heureux !!!!!
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours