Page 1 sur 1

accès à une page sur test existence email dans fichier txt

Posté : 01 nov. 2006, 20:28
par emilie1955
Je voudrais limiter l'ouverture de certaines pages de mon site web à ceux qui sont inscrits à ma lettre d'info.

J'ai déjà un formulaire d'inscription à ma newsletter. Les inscriptions vont s'ajouter dans un fichier .txt comme ceci:

[email protected]|[email protected]|

Je voudrais que ce soit simple pour l'utilisateur, il n'aurait qu'à saisir une fois son email puis si elle existe dans la liste, la page s'affiche, sinon on le redirige vers ma page d'inscription ...

Il faudrait ensuite que cette variable reste en mémoire d'une page à l'autre et je ne sais pas trop comment faire.

Idéalement (mais pas obligatoire) le script pourrait ajouter l'adresse saisie si elle n'est pas dans la liste... au lieu de rediriger vers le formulaire actuel.

Comme vous pouvez le constater, j'ai très peu d'expérience... j'ai regardé des scripts d'identification, mais ce n'est pas ce que je cherche, je ne veux pas de password.. ou de cookie.

Merci de me mettre sur la voie !

Émilie... du Québec

Posté : 01 nov. 2006, 20:54
par albat
Les sessions sont la réponse. :pouce:

Pas mal de sujets sur ce forum en parlent... ;)

Posté : 01 nov. 2006, 21:02
par Ultiny
Deja commence par mettre le contenu de ton fichier dans une variable avec file_get_contents(), puis utilise explode() pour réaliser un tableau à partir du contenu du fichier.

Aussi, tu aura ensuite :

$email[0] = [email protected]
$email[1] = [email protected]
...

D'ici tu peu utiliser in_array() pour voir si l'adresse soumise se trouve dans ce tableau, et après à toi de voir ce que tu veu faire.

Comme tu à l'air de débuter, je t'ai donné le nom des fonctions dont tu va avoir besoin, mais à toi d'écrire le code en les mettant bout à bout.

ça commence mal...

Posté : 02 nov. 2006, 18:25
par emilie1955
Merci pour vos réponses...

J'essaye depuis hier et ça va mal...

Code : Tout sélectionner

echo file_get_contents('http://localhost/technibeauce2006/news/result.lst');
Déjà cette instruction n'affiche rien dans mon navigateur.

Pourtant, si je demande l'url http://localhost/technibeauce2006/news/result.lst directement, je vois le contenu du fichier.

Pourquoi ça marche pas ???

Posté : 02 nov. 2006, 19:10
par Ajoloca
Bonjour,

Je te propose de procéder par étapes.

J'ai en entrée un fichier au format CSV, existe-t-il une fonction PHP qui traite ce type de fichiers ?

La doc, elle répond OUI, donc tu regardes ICI et après la systaxe (vers le bas de la page) tu as des exemples qui correspondent à ce que tu cherches.

Une fois ton tableau construit, pour le conserver tout au long de la session kla réponse a été donnée par albat tu conserves ton tableau comme une variable de sesseion. Exp:
$_SESSION['abonnes'] = serialize($tab_abonnes);
et pour le récupérer
$tab_abonnes = unserialize($_SESSION['abonnes']);

Posté : 05 nov. 2006, 18:54
par emilie1955
Merci pour l'aide...

j'avance... voici ce que j'ai fait

J'ai ce code sur quelques pages du site...

Quand je teste l'existence de la variable de session... elle n'existe pas.

Qu'est-ce qui cloche ?

Code : Tout sélectionner

<? if ((isset($_SESSION['client'])) && (!empty($_SESSION['client']))) { include('_top.php'); echo 'La variable "client" existe et vaut: ' . $_SESSION['client']; print "<h4>SESSION EN COURS</h4>"; include('contenu_videoFR.php'); include('_foot.php'); exit; } else { // pas de session : proposer la connexion include ($formulaire); } function validation_email ($email) { return (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email)); } ////////// déclaration des variables///////////// $liste = 'news/result.lst'; $inscrits = file_get_contents($liste); $tableau = explode('|',$inscrits); $formulaire = 'news/formulaire.txt'; $email = $_REQUEST['email']; ///////////////////////////////////////////////// //if (isset($email)) if ($email != '') { // si l'adresse est mal formatée on revient avec le formulaire if (validation_email($email)==FALSE) { echo "<h4 align='center'>Votre email:<font color=\"#B50000\"> $email </font>est mal formatée </h4>"; include ($formulaire); exit(); } // si l'adresse est dans le tableau, on ouvre la porte if (in_array ($email, $tableau)) {$ok = TRUE; session_start(); $_SESSION['client'] = $email; include('_top.php'); print "<h4>SESSION EN COURS</h4>"; print "<h4>Votre adresse <font color=\"#B50000\"> $email </font> est d&eacute;j&agrave; dans notre liste.<br> Vous avez acc&egrave;s &agrave; nos contenus vid&eacute;os</h4>"; include('contenu_videoFR.php'); include('_foot.php'); exit(); } // si l'email n'est pas dans la liste... on l'ajoute if ($ok == FALSE) { //print "Votre adresse $email n'est pas dans la liste<br>"; $fp = fopen("$liste","a");fputs($fp,"$email|");fclose($fp); session_start(); $_SESSION['client'] = $email; include('_top.php'); print "<h4>Merci de votre inscription <font color=\"#B50000\"><b> $email </b></font></h4>"; include('contenu_video1.php'); include('_foot.php'); exit(); } } //elseif (!isset($email)) elseif ($email=='') { include ($formulaire);} // dans ce formulaire il n'y a qu'un champs email ?>
PS pour Ajoloca...

j'ai pas réussi à travailler avec le fgetcsv... c'est comme je disais plus haut... j'suis pas très à l'aise, je débute.

Merci encore

Émilie

Posté : 05 nov. 2006, 19:10
par Cyrano
Le session_start() n'a rien à faire dans tes tests de validité : il doit être en tout début du code avant le premier if. Sinon, ta session n'est pas démarrée et ton tout premier if va de toutes façons retourner FALSE.

Donc ton code corrigé donnerait ceci :
<?php
session_start();
if ((isset($_SESSION['client'])) && (!empty($_SESSION['client'])))
{
    include('_top.php');
    echo 'La variable "client" existe et vaut: ' . $_SESSION['client'];
    print "<h4>SESSION EN COURS</h4>";
    include('contenu_videoFR.php');
    include('_foot.php');
    exit;
}
else
{
    // pas de session : proposer la connexion
    include ($formulaire);
}

function validation_email ($email)
{
    return (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email));
}

////////// déclaration des variables/////////////
$liste      = 'news/result.lst';
$inscrits   = file_get_contents($liste);
$tableau    = explode('|',$inscrits);
$formulaire = 'news/formulaire.txt';
$email      = $_REQUEST['email'];
/////////////////////////////////////////////////

//if (isset($email))
if ($email != '')
{
    // si l'adresse est mal formatée on revient avec le formulaire
    if (validation_email($email)==FALSE)
    {
        echo "<h4 align='center'>Votre email:<font color=\"#B50000\"> $email </font>est mal formatée </h4>";
        include ($formulaire);
        exit();
    }
    // si l'adresse est dans le tableau, on ouvre la porte
    if (in_array ($email, $tableau))
    {
        $ok = TRUE;
        $_SESSION['client'] = $email;
        include('_top.php');
        print "<h4>SESSION EN COURS</h4>";
        print "<h4>Votre adresse <font color=\"#B50000\"> $email </font> est d&eacute;j&agrave; dans notre liste.<br>
               Vous avez acc&egrave;s &agrave; nos contenus vid&eacute;os</h4>";
        include('contenu_videoFR.php');
        include('_foot.php');
        exit();
    }

    // si l'email n'est pas dans la liste... on l'ajoute
    if ($ok == FALSE)
    {
        //print "Votre adresse $email n'est pas dans la liste<br>";
        $fp = fopen("$liste","a");fputs($fp,"$email|");fclose($fp);
        $_SESSION['client'] = $email;
        include('_top.php');
        print "<h4>Merci de votre inscription <font color=\"#B50000\"><b> $email </b></font></h4>";
        include('contenu_video1.php');
        include('_foot.php');
        exit();
    }
}

//elseif (!isset($email))
elseif ($email=='')
{
    include ($formulaire);
}

// dans ce formulaire il n'y a qu'un champs email
?> 

toujours pas de session

Posté : 06 nov. 2006, 15:17
par emilie1955
Merci Cyrano

Voici mon code:
<?
session_start(); 
if ((isset($_SESSION['client'])) && (!empty($_SESSION['client']))) 
{
      include('_top.php');
      echo 'SESSION "client" en cours: ' . $_SESSION['client'];
      include('contenu_video1.php');
      include('_foot.php'); 
      exit;
}
else
 {
  // pas de session : proposer la connexion
  include ($formulaire);
 }

////////// déclaration des variables/////////////
$liste = 'news/result.lst';
$inscrits = file_get_contents($liste);
$tableau = explode('|',$inscrits);
$formulaire = 'news/formulaire.txt';
$email = $_REQUEST['email'];
/////////////////////////////////////////////////

function validation_email ($email)
{ 
return (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email)); 
} 

//if (isset($email))
if ($email != '')
{
  // si l'adresse est mal formatée on revient avec le formulaire
  if (validation_email($email)==FALSE)
     {
     echo "<h4 align='center'>Votre email:<font color=\"#B50000\"> $email </font>est mal formatée </h4>";
     include ($formulaire);
     exit();
     }
     // si l'adresse est dans le tableau, on ouvre la porte
  if (in_array ($email, $tableau))
     {
      $ok = TRUE;
      $_SESSION['client'] = $email;
      include('_top.php');
      print "<h4>Votre adresse <font color=\"#B50000\"> $email </font> est d&eacute;j&agrave; dans notre liste.<br>
               Vous avez acc&egrave;s &agrave; nos contenus vid&eacute;os</h4>";
      include('contenu_video1.php'); 
      include('_foot.php'); 
      exit();
     }

  // si l'email n'est pas dans la liste... on l'ajoute
     if ($ok == FALSE)
             {
                 //print "Votre adresse $email n'est pas dans la liste<br>";
                 $fp = fopen("$liste","a");fputs($fp,"$email|");fclose($fp);
                 $_SESSION['client'] = $email;
                 include('_top.php'); 
                 print "<h4>Merci de votre inscription <font color=\"#B50000\"><b> $email </b></font></h4>";
                 include('contenu_video1.php'); 
                 include('_foot.php'); 
                 exit();
            }
}

//elseif (!isset($email))
elseif ($email=='')

{ include ($formulaire);}

?>
Et je n'ai toujours pas de session...

À la 5e ligne je n'obtiens pas l'affichage du nom de la session:
echo 'SESSION "client" en cours: ' . $_SESSION['client'];
Voyez-vous le problème ?

Merci encore pour votre précieuse aide et bonne semaine à tous !

<Émilie>

[RÉSOLU]

Posté : 07 nov. 2006, 14:56
par emilie1955
Merci encore pour votre précieuse aide tous...

voici le code qui fonctionne impec:

<?php 
session_start(); 

////////// déclaration des variables///////////// 
$liste      = 'news/result.lst'; 
$inscrits   = file_get_contents($liste); 
$tableau    = explode('|',$inscrits); 
$formulaire = 'news/formulaire.txt'; 
$email      = $_REQUEST['email']; 
///////////////////////////////////////////////// 

if ((isset($_SESSION['client'])) && (!empty($_SESSION['client']))) 
{ 
    include('_top.php'); 
    echo 'Bienvenue: ' . $_SESSION['client'].'<br>';
    include('contenu_videoFR.php'); 
    include('_foot.php'); 
    exit();
} 


function validation_email ($email) 
{ 
    return (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email)); 
} 


//if (isset($email)) 
if ($email != '') 
{ 
    // si l'adresse est mal formatée on revient avec le formulaire 
    if (validation_email($email)==FALSE) 
    { 
        echo "<h4 align='center'>Votre email:<font color=\"#B50000\"> $email </font>est mal formatée </h4>"; 
        include ($formulaire); 
        exit(); 
    } 
    // si l'adresse est dans le tableau, on ouvre la porte 
    if (in_array ($email, $tableau)) 
    { 
        $ok = TRUE; 
        $_SESSION['client'] = $email; 
        include('_top.php'); 
        echo 'Bienvenue: ' . $_SESSION['client'] . '<br>';
        include('contenu_videoFR.php'); 
        include('_foot.php'); 
        exit(); 
    } 

    // si l'email n'est pas dans la liste... on l'ajoute 
    if ($ok == FALSE) 
    { 
        //print "Votre adresse $email n'est pas dans la liste<br>"; 
        $fp = fopen("$liste","a");fputs($fp,"$email|");fclose($fp); 
        $_SESSION['client'] = $email; 
        include('_top.php'); 
        echo 'Bienvenue: ' . $_SESSION['client'] . '<br>';
        include('contenu_videoFR.php');
        include('_foot.php'); 
        exit(); 
    } 
} 


elseif ($email=='')
{
    include ($formulaire);
}  // dans ce formulaire il n'y a qu'un champs email
?>