rajouter un champ

Petit nouveau ! | 6 Messages

11 janv. 2009, 18:38

j'avais posté ce message dans le forum débutant (c'est moi...) pas de réponse, sans doute que les débutants ne peuvent pas me répondre...
bonjour,
je ne suis que graphiste, et je débute en php et MySQL,
j'ai un accès membre ou les membres peuvent s'enregistrer, et après validation par email, dans la base un champ "valid" qui passe de 0 à 1 (jusquà là tout va bien).
j'ai trouvé sur ce forum un super tuto pour la connexion et je vous en remercie ( Magohamoth,
Sujet du message: [Tuto] Inscription et connexion dans un espace membres)
je sèche sur l'ajout d'une fonction, en plus de son email et de son mot de passe, je voudrais pouvoir vérifier que le membre est bien validé ("valid" = 1) avant de lui permettre de continuer, et éventuellement si ce n'est pas le cas ("valid=0") lui demander de refaire sa validation.
merci pour votre aide,
christian

un bout du script sans l'accés à la base...: 
<?php



// Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1)
header('Content-type: text/html; charset=UTF-8');

/* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
function Verif_magicquotes ($chaine) 
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
} 

// Initialisation du message de réponse
$message = null;


// Si le formulaire est envoyé
if (isset($_POST['email'])) 
{

    /* Récupération des variables issues du formulaire
    Teste l'existence les données post en vérifiant qu'elles existent, qu'elles sont non vides et non composées uniquement d'espaces.
    (Ce dernier point est facultatif et l'on pourrait se passer d'utiliser la fonction trim())
    En cas de succès, on applique notre fonction Verif_magicquotes pour (éventuellement) nettoyer la variable */
    $email = (isset($_POST['email']) && trim($_POST['email']) != '')? Verif_magicquotes($_POST['email']) : null;
    $pass = (isset($_POST['pass']) && trim($_POST['pass']) != '')? Verif_magicquotes($_POST['pass']) : null;
    

    // Si $pseudo et $pass différents de null
    if(isset($email,$pass)) 
    {
// Parametres mysql à remplacer par les vôtres

// Connexion au serveur mysql

    
         // Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1)
         mysql_query("SET NAMES 'utf8'");
    
         // Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string
         $email = mysql_real_escape_string($email);
         $password = mysql_real_escape_string($pass);
    
    
         /* Requête pour récupérer les enregistrements répondant à la clause : 
         champ du pseudo et champ du mdp de la table = pseudo et mdp postés dans le formulaire*/
        $requete = "SELECT * FROM membres WHERE email = '".$email."' AND pass = '".$pass."'";  
        
         // Exécution de la requête
         $req_exec = mysql_query($requete) or die(mysql_error());
    
         // Création du tableau associatif du résultat
         $resultat = mysql_fetch_assoc($req_exec); 

         // Les valeurs (si elles existent) sont retournées dans le tableau $resultat; 
         if (isset($resultat['email'],$resultat['pass']))  
         

               {
                 /* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
                 qui donne au visiteur la possibilité de visiter les pages protégées.  */
                 session_start();
                 $_SESSION['login'] = $email;
            
                 // A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle.
                 $message = 'Bonjour '.htmlspecialchars($_SESSION['login']).' <a href = "pagetestok.php">Cliquez ici pour vous connecter</a>';
                }
                else
                {   // Le pseudo ou le mot de passe sont incorrect
                $message = 'Le pseudo ou le mot de passe sont incorrect';
                } 

    }
    else 
    {  //au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli
    $message = 'Les champs email et Mot de passe doivent être remplis.';
    }
}


?> 



ViPHP
AB
ViPHP | 5818 Messages

11 janv. 2009, 19:33

Et bien justement j'avais fait exprès d'utiliser * dans la requête pour sélectionner tous les champs (ce qui dans l'absolu n'est pas recommandé car on obtient une meilleure optimisation de la requête en nommant les champs).
Donc dans ta table si tu as un champ nommé 'valid' tu pourras lire son contenu dans l'élément du tableau $résultat ayant comme index 'valid', soit $resultat['valid'] (même principe que pour les autres champs 'email' et 'pass')

Ce qui donne
$requete = "SELECT * FROM membres WHERE email = '".$email."' AND pass = '".$pass."'";  
        
         // Exécution de la requête
         $req_exec = mysql_query($requete) or die(mysql_error());
    
         // Création du tableau associatif du résultat
         $resultat = mysql_fetch_assoc($req_exec); 

         // Les valeurs (si elles existent) sont retournées dans le tableau $resultat; 
         if (isset($resultat['email'],$resultat['pass']))  
         
             {

              if(isset($resultat['valid']) && $resultat['valid'] == 1)

                 {
                 /* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
                 qui donne au visiteur la possibilité de visiter les pages protégées.  */
                 session_start();
                 $_SESSION['login'] = $email;
            
                 // A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle.
                 $message = 'Bonjour '.htmlspecialchars($_SESSION['login']).' <a href = "pagetestok.php">Cliquez ici pour vous connecter</a>';
                }
                else
                {   // Authentification correcte mais le mail n'est pas validé puisque différent de 1
                $message = 'Authentification correcte mais email non validé';
                } 

           }
            else
           {   // Le pseudo ou le mot de passe sont incorrect
                $message = 'Le pseudo ou le mot de passe sont incorrect';
           } 

Petit nouveau ! | 6 Messages

11 janv. 2009, 19:54

je suis "bloffé" par la rapidité de votre réponse,
mais je suis perdu...
j'ai le message d'erreur : Parse error: syntax error, unexpected $end in /home/meetin67/public_html/meetingjob/connection.php on line 233
j'ai remplacé valid par actif qui est le nom du champ dans ma base

#
/* Requête pour récupérer les enregistrements répondant à la clause :
champ du pseudo et champ du mdp de la table = pseudo et mdp postés dans le formulaire*/
$requete = "SELECT * FROM membres WHERE email = '".$email."' AND pass = '".$pass."' AND pass = '".$actif."' ";


// Exécution de la requête
$req_exec = mysql_query($requete) or die(mysql_error());

// Création du tableau associatif du résultat
$resultat = mysql_fetch_assoc($req_exec);

// Les valeurs (si elles existent) sont retournées dans le tableau $resultat;
if (isset($resultat['email'],$resultat['pass']))

{
if(isset($resultat['actif']) && $resultat['actif'] == 1)
{


/* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
qui donne au visiteur la possibilité de visiter les pages protégées. */
session_start();


$_SESSION['login'] = $email;


// A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle.
$message = 'Bonjour '.htmlspecialchars($_SESSION['login']). ' <a href = "login_membre_ok.php">Cliquez ici pour accéder à vos évaluations</a>';
}
else
{ // Le pseudo ou le mot de passe sont incorrect
$message = 'Votre email ou le mot de passe sont incorrects';
}
}
else
{ //au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli
$message = 'Les champs email et mot de passe doivent être remplis.';
}
}
?>

ViPHP
AB
ViPHP | 5818 Messages

11 janv. 2009, 20:22

Je n'ai mis que le code à modifier (et un peu avant pour la compréhension). Il faut insérer ce code dans l'ancien.

Petit nouveau ! | 6 Messages

11 janv. 2009, 20:30

mille fois merci, ça marche...
il y avait une parenthèse de trop...
je suis vraiment très content cela faisait un moment que je butais sur cette fonction,
je découvre ce forum et la surprise est totale pour sa qualité, j'espère un jour pouvoir aussi aider les autres.
si je peux encore te demander une autre chose:
est-il possible dans le message "bonjour...
de remplacer l'email par le prénom?
ce script est magnifique...

ViPHP
AB
ViPHP | 5818 Messages

11 janv. 2009, 20:45

Toujours le même principe, si tu as un champ 'prenom' dans ta table tu pourras y avoir accès dans le tableau $resultat de la requête.

Dond il te suffit de faire 'Bonjour '.htmlspecialchars($resultat['prenom']).' ...

Petit nouveau ! | 6 Messages

11 janv. 2009, 21:00

magique...
en une heure tu as résolu une semaine de galère pour un débutant,
tout marche, je te fiche la paix pour ce soir et te souhaite une très bonne soirée,
mille fois merci encore pour ta réactivité et ton aide,
Christian,
PS: je signale que ce message est résolu