Problème de connexion avec fichier texte

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de connexion avec fichier texte

par Reynio » 27 mai 2007, 11:28

Et bien vous êtes rapide mine de rien!!

Alors pour vous répondre, c'est un choix de stocker les données dans plusieurs fichiers texte (je pensais que ce serait plus simple et vu que j'ai quand même avancé un peu, j'ai pas le courage de tout reprendre à zéro...) et ensuite, je n'ai compris l'intérêt de fwrite par rapport à mon problème... Mais ça, c'est parce que je n'ai pas encore assez de connaissances sur le PHP et toutes ses fonctions. Mais ça viendra!

Enfin, pour mon problème, c'est vraiment bête, et je tiens à le clamer...
En fait, j'ai simplement rajouter dans la définition de la variable les retours qui sont placé lors de l'enregistrement des données dans le fichier, soit \r et \n... Et maintenant, après une petite bidouille légère du code, ça fonctionne très bien, même sans utiliser explode. je poste mon code final pour ceux qui auront des trucs comme ça à faire dans l'avenir. (et puis si une ligne de code ne vous convient pas, on peut toujours en rediscuter.8-) )
<?php
 $pseudo = $_GET['pseudo']; 
 $pseudo = $pseudo."\r\n"; //on oublie pas les retours qui sont enregistrés avec les données lors de l'inscription
 $code = $_GET['code']; 
 $code = $code."\r\n";
 $tab1 = file("pseudo.txt");
 echo "$pseudo";
 for ($i=0; $i<count($tab1); $i++)  {
   if ($pseudo == $tab1[$i]) { //ici, on récupére le numéro de la ligne si le pseudo correspont à la case du tableau
    $ligne = $i;  }
 }
 $tab2 = file ("code.txt");
 for ($i=0; $i<count($tab2); $i++) {
  if (isset($ligne)) { //si ligne est défini...
   if (($code == $tab2[$i]) && ($i == $ligne)) { //...si le code correspont à celui rentré et si le numéro de ligne correspont à celui...
    $ligne2 = $i;
     echo ", vous vous &ecirc;tes bien connect&eacute;, continuez bien votre visite !<br /> ";
     echo "<a href=Accueil.php?pseudo=$pseudo>Retour à la page d'accueil</a> ";  } //enregistré, l'utilisateur est "connecté".
  }  
 }
 if (isset($ligne) && isset($ligne2)) { 
  }
 else { //si les numéros de ligne ne sont pas définis
  echo ", votre mot de passe ou votre nom d'utilisateur doit &ecirc;tre &eacute;ronn&eacute;.<br /> ";
  echo "<a href=identification.html>Veuillez les saisir &agrave; nouveau</a> ou bien retournez à la <a href=\"accueil.php\">page d'accueil</a>."; 
 }
?>

par jed » 26 mai 2007, 21:40

Stocker toutes les données en txt? Plutôt dangereux ça... Et avec fwrite() ce ne serait pas plus simple?

par thehawk » 26 mai 2007, 21:31

hum ... je sens que je vais encore me faire engueler moi ...

Bon voila pourquoi le tutoriel de phpfrance je voulais parler du systeme pour parcourire ligne par ligne :
while (!feof($fp)){ // On parcours le fichier
  
      $ligne = fgets($fp,4096); // On se déplace d'une ligne

      $liste = explode("|",$ligne); // Champs séparés par |, on en fait un tableau

      $nom = $liste[0];

      $email = $liste[1];

      echo "nom: $nom &nbsp;&nbsp;&nbsp; email: $email<br />";

Qui peut etre modifier ainsi :

$i = 0;
 while (!feof($fp)){ // On parcours le fichier
  
      $ligne = fgets($fp,4096); // On se déplace d'une ligne
if ($ligne == $pseudo)
 {

     // tu met un code similaire pour le pass ici
echo "Pseudo OK"
}
      

     $i++;

      }
Ceci est ma vision certe peut etre erronée mais ca serai ainsi que je vois les choses , l'utilisation de deux fichier txt est obilgatoire ?

par ouckileou » 26 mai 2007, 20:59

tu tutorial de phpfrance il devrait resoudre tes souci
gné ? :-s

par thehawk » 26 mai 2007, 19:16

je pense que c'est ton systeme de parcours ligne par ligne qui a un souci regarde ce bout de code :
   1.
      <?php
   2.
      if (file_exists($fichier))
   3.
      $fp = fopen("fichier.txt", "r"); // le fichier existe, on l'ouvre
   4.
      else{ // le fichier n'existe pas
   5.
      echo "Fichier introuvable !<br />Importation stoppée.";
   6.
      exit();
   7.
      }
   8.
      while (!feof($fp)){ // On parcours le fichier
   9.
      $ligne = fgets($fp,4096); // On se déplace d'une ligne
  10.
      $liste = explode("|",$ligne); // Champs séparés par |, on en fait un tableau
  11.
      $nom = $liste[0];
  12.
      $email = $liste[1];
  13.
      echo "nom: $nom &nbsp;&nbsp;&nbsp; email: $email<br />";
  14.
      }
  15.
      fclose($fp); // Fermeture du fichier
  16.
      ?> 
tu tutorial de phpfrance il devrait resoudre tes souci

Problème de connexion avec fichier texte

par Reynio » 26 mai 2007, 19:02

Bonjour tout le monde!!

Je suis étudiant et apprends le PHP et dois faire un site web sur le cinéma type blog ou des utilisateurs peuvent s'inscrire, se connecter et poster des critiques sur des films ou commenter des critiques déjà postées.
Or, l'une de nos consignes est de stocker toutes nos données dans des fichiers .txt ... Y compris les pseudonymes, mots de passe, courriel, etc...
Mon problème se situe donc au niveau de la connexion ; je m'explique.

Lorsqu'un utilisateur s'inscrit sur le site, chacune des données (donc pseudo employé, mot de passe pour la connexion, adresse courriel, etc) est reçue dans un fichier texte diffèrent selon le code suivant (le nom de fichier diffère pour chaque variable, le stockage est le même) :
$f = fopen("pseudo.txt","a");
 fputs($f,"$pseudo\r\n");
 fclose ($f);
J'ai bien vérifié ce code, il stocke correctement les données dans les fichiers.

Ensuite, pour se connecter, l'idée était que l'utilisateur rentre son mot de passe et son pseudo et qu'ensuite le fichier pseudo.txt puis code.txt soient parcourus pour retrouver le numéro de ligne correspondant au pseudo et au code rentrés s'ils existent dans le fichier. Si les deux numéros sont les mêmes, il s'agit du bon utilisateur, sinon, il y a erreur de pseudo ou de mot de passe. Voici mon code :
<?php
 $pseudo = $_GET['pseudo']; 
 $code = $_GET['code']; 
 $tab1 = file("pseudo.txt");
 echo "$pseudo : pseudo reçu <br />";
 for ($i=0; $i<count($tab1); $i++)  {
   if ($pseudo == $tab1[$i])  //ici, on récupère le numéro de la ligne si le pseudo correspond à la case du tableau
   {
     $ligne = $i;  }
     echo "$tab1[$i]";
     echo "$i";
   }
   echo "$ligne"; // c'est ici que ça ne fonctionne pas...
 $tab2 = file ("code.txt");
 if (isset($ligne)) //si ligne a été défini ...
  {
   for ($i=0; $i<count($tab2); $i++) {
   echo "$i";  
     if (($code == $tab2[$i]) && ($i == $ligne)) { //si le code correspond à celui rentré et si le numéro de ligne correspont à celui...
       echo "Vous vous &ecirc;tes bien connecté $pseudo, continuez bien votre visite!!<br /> ";
       echo "<a href=Accueil.php?pseudo=$pseudo>Retour à la page d'accueil</a> ";  } //enregistré, l'utilisateur est "connecté".
     }   }
 else { //sinon, on affiche un lien vers la page précédante.
  echo "Votre mot de passe ou votre nom d'utilisateur doit &ecirc;tre &eacute;ronn&eacute;<br /> ";
  echo "<a href=identification.html>Veuillez les saisir &agrave; nouveau.</a>"; 
   }  
?>
J'ai essayé en plaçant des "echo" un peu partout de trouver qu'est-ce qui n'allait pas... Et visiblement, le problème se situe au niveau de la variable $ligne qui n'est pas défini. Ce qui signifie (pour moi) que le pseudo (même s'il est correct) n'est pas reconnu dans le fichier texte...
Cela voudrait dire que même si le pseudo est correct, $pseudo est différent de $tab1[$i], alors que chaque case du tableau est écrite correctement...

Question : comment faire pour lire correctement les données du fichier ?
Nota Bene : j'ai essayé d'utiliser la fonction explode mais le résultat n'était pas plus efficace, malheureusement.

Enfin, si cela vous intéresse ou que vous vous demandez comment je compte maintenir la connexion, je génèrerais les liens vers les pages dynamiquement en récupérant le pseudo de l'utilisateur avec $_GET['pseudo'] soit: echo "<a href=\"accueil.php?pseudo=$pseudo\">"

Je sais qu'il y existe des manières plus simples et plus efficaces de traiter des connections ne serait-ce qu'avec des cookies, mais notre prof veut que nous utilisions des fichiers textes.

J'espère que vous pourrez m'aider, et vous souhaite à tous une bonne soirée!