Flux rss
Rechercher : dans
Par :

Problème: Double Pseudo (Sans Base de Donnée)

ClaudeDavy, le lundi 12 février 2007 à 13:51:26 
 Signaler ce message aux modérateurs

Bonjour à toutes et é tous,

Je débute dans le PHP, mais j'avance bien. J'ai récemment cherché mon erreur dans un code. Mais je n'y arrive pas.

Je fais un petit site comme exercice pour que je comprenne mieux le code php avec les sessions.

Le problème s'est que je voudrais que les inscriptions ne soient pas en Double. Dans mon fichier Texte: Login.txt, quand je remet un même pseudo, il l'accepte et fait foirer tout mon code.

VOici mon code:

<?php
session_start();
?>

<html>
<head>
<title>Inscription</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../css/nouveau.css">
</head>
<body bgcolor="#ffcc99">

<?
echo "<h1>Nouveau Membre</h1>";
?>

<form action="../index.php" method="post">
<input type="submit" value="  Retour   "></form>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Votre prénom(obligatoire) :<br>
<input type="text" name="Nom"><br>
Mot de passe(obligatoire) :<br>
<input type="password" name="Mdp"><br><br>
Email(Pas obligatoire):<br>
<input type="text" name="email"><br><br>
<input type="submit" value="S'inscrire"></form>

<?php
if (isset($_POST["Nom"])||(isset($_POST["Mdp"])))
{
@$nom = $_POST['Nom'];
@$motdepasse = $_POST['Mdp'];
@$email = $_POST['email'];

$fichier="../Identification/login.txt";
$contenu=file($fichier);
	
// La variable commentaire est-elle définie ?		
if ($nom != "" && $motdepasse != "")
{	
foreach($contenu as $indice)
{
$indice = rtrim($indice);
$morceaux = explode(" ", $indice);

if($nom != $morceaux[0] && $email != $morceaux[2])
{
// On ouvre alors le fichier en lecture-écriture
$pointeur=fopen($fichier,"r+");
// On lit les anciennes données et on les stocke dans $anciennes
@$anciennes=fread($pointeur,filesize($fichier));
// Le lien de l'email
if ($email != "")
{
$membre = $nom." ".$motdepasse." ".$email." ";
}
else
{
$membre = $nom." ".$motdepasse." "."Inconnu"." ";
}
// On remet le curseur invisible au début du fichier
rewind($pointeur);
// Dans le fichier, on écrit le nouvel avis devant les anciens :
fputs($pointeur,"$membre\n$anciennes");
// On referme le fichier
fclose($pointeur);
}
else
echo "Email ou Pseudo déjà existants";
}
else
{
echo "Un ou Deux champ(s) vide(s) n'ont pas été rempli.";
}
}
?>

</body>
</html>

1

benkeeper, le lundi 12 février 2007 à 13:57:03

En gros tu souhaiterais tester si le pseudo existe déjà dans ton fichier ou non avant de l'y inscrire?



Ben

Répondre à benkeeper

2

ClaudeDavy, le lundi 12 février 2007 à 13:59:42

Exactement. Il le test, mais pas correctement.

Répondre à ClaudeDavy

3

ClaudeDavy, le lundi 12 février 2007 à 14:01:23

Exactement. J'ai oublié de préciser que dans :
$morceaux[0] ( c'est le nom de 'lutilisateur dans mon fichier texte) et
$morceaux[2] (C'est le mot de passe dans mon fichier texte)

Répondre à ClaudeDavy

4

benkeeper, le lundi 12 février 2007 à 14:12:24

Si le modèle de la ligne est le suivant :

NOM MOTDEPASSE EMAIL\n

La ligne

$morceaux = explode(" ", $indice);

implique que $morceaux[0] = NOM, $morceaux[1] = MOTDEPASSE et $morceaux[2] = EMAIL

Peut être que le problème vient de là.

Autrement, bien que j'ai conscience qu'il s'agit d'un script de test, il vaut mieux prendre pour habitude de ne pas utilise l'espace comme séparateur, pour éviter les erreurs si l'utilisateur entre un espace dans son nom. Personellement j'utiliserai le "pipe" |

ex : NOM|MOTDEPASSE|EMAIL\n

avec un test pour supprimer les pipes éventuellement entrés par l'utilisateur, de cette manière :

$membre = str_replace("|", "",$nom) ."|". str_replace("|", "",$motdepasse). "|" . str_replace("|", "",$email) ."|";

Je sais pas expérience qu'il vaut mieux prendre l'habitude de ces petits détails, y compris pour les tests :)

Ben

Répondre à benkeeper

5

ClaudeDavy, le lundi 12 février 2007 à 14:19:33

Merci, ça m'a réglé le problème des pseudos doubles. Mais, il y a toujours un, mais. ^^

Il me met cette fois-ci le message qu'il y a déjà un double Pseudo ou Email, le problème c'est que même s'il le marque il l'a quand même inscris dans le fichier texte.

Deuxième problème c'est que si j'entre, maintenant un pseudo corecte etc... Il me le met à double Oo

Répondre à ClaudeDavy

6

ClaudeDavy, le lundi 12 février 2007 à 15:19:25

Est-ce que vous pouvez voir ou bien donner votre avis ou vos codes qui vous ont servis pour ce genre de problèmes ?

Le problème vient de la boucle "Foreach" mal placé? && ? || ? Je ne sais pas. :/

Répondre à ClaudeDavy

7

benkeeper, le lundi 12 février 2007 à 18:14:23

Au niveau de votre test je pense qu'il y a un soucis.

Si j'avais à faire un tel script, je testerai d'abord le nouveau pseudo/email contre toutes les lignes du fichier avant de penser à l'inscrire dedans.

En gros :

$doublon = false;

foreach($contenu as $indice){
//Pour chaque ligne
$indice = rtrim($indice);
$morceaux = explode(" ", $indice);

//On teste si le pseudo ou email est équivalent

//Si oui, on passe la variable $doublon à true et on sort de la boucle
if($nom == $morceaux[0] || $email == $morceaux[2]) {
$doublon = true;
break;
}

//Si non, on continue à la ligne suivante
else continue;
}

//Ici on verifie si le pseudo/email a été trouvé dans le fichier
if($doublon){
//Insérer le code correspondant à la présence d'un doublon
}
else {
//on ajoute le pseudo/mot de passe au fichier
$fichier="../Identification/login.txt";
$fp = fopen($fichier, "a"); //j'ouvre en mode append qui place le pointeur à la fin
if($fp) fwrite($fp, $membre . "\n");
fclose($fp);
}


A noter que dans le cas de mon code, les doublons d'email seront interdits au même titre que les doublons de pseudo, à savoir qu'un même pseudo avec une adresse différente ne sera pas accepté et une même adresse avec un pseudo différent ne sera pas acceptée non plus.


Dites moi si ça vous convient :)

Ben

Répondre à benkeeper

8

ClaudeDavy, le mardi 13 février 2007 à 06:23:44

ça me convient tellement parfaitement que je n'arrive pas à décrire ma joie !

Je vous remercie infiniment ! Merci ! Merci !

Répondre à ClaudeDavy

9

 ludivine, le samedi 17 mars 2007 à 16:54:51

Je marrive pa a me créer un pseudo alors aider moi svp

Répondre à ludivine
Livre d'or sans base de donnée et sans pub Bonjour, voila je recherche un livre d'or pour mettre sur mon site , a telecharge, ou a copier, voir a créeer, sans base de donnés car je ne peux pas en avoir avec mon hebeurgeur et sur tout sans pub, ni pop up ni fentre publicitaire. merci pour votre... www.commentcamarche.net/forum/affich-5359589-livre-d-or-sans-base-de-donnee-et-sans-pub
Moteur de recherche sans base de donnée Existe t-il un moyen autre qu'avec une base de donnée pour etablir un moteur de recherche??? Si je veux monter un site web e-commerce par exemple avec des centaines ou des milliers de references, n'est-il pas possible de le faire autrement qu'avec une... www.commentcamarche.net/forum/affich-251107-moteur-de-recherche-sans-base-de-donnee
Créer une base de données sur le Web J'aimerais savoir s'il existe des service en ligne qui offre gratuitement la possibilité d'adapter une base données pour la l'intégrer dans un site Web quand on ne connaît absoluement rien au langage ASP ou PHP. Par exemple à partir d'un fichier... www.commentcamarche.net/forum/affich-214462-creer-une-base-de-donnees-sur-le-web
Creation de base donnée sous oracle 10g xebonjour je vais questionner à propos oracle 10g xe,est ce que l'unique base donnéé utile sous oracle celle qui existe par défaut (qui s'appelle xe)? car mon prabléme est de creer une base donnée sur ce dernier et je veux savoir est ce que c'est... www.commentcamarche.net/forum/affich-3262594-creation-de-base-donnee-sous-oracle-10g-xe
Impossible D'ouvrir Base Données AccessBonjour , j'ai fait une petite base de données access sous access 97 au boulot, nous sommes ensuite passé sous access 2000, les informaticiens ont du faire des modifications pour que ça fonctionne, mais maintenant ça va. J'ai enregistré cette petite... www.commentcamarche.net/forum/affich-554461-impossible-d-ouvrir-base-donnees-access
Reinstaller windows sans perdre donnéesJe voudrais reinstaller windows xp sans perdre mes données.Je l'ai deja fait une fois mais je ne me souviens pas.merci de m'aider www.commentcamarche.net/forum/affich-790377-reinstaller-windows-sans-perdre-donnees
Bases de données - IntroductionQu'est-ce qu'une base de données ? Une base de données (son abréviation est BD, en anglais DB, database) est une entité dans laquelle il est possible de stocker des données de façon structurée et avec le moins de redondance possible. Ces données... www.commentcamarche.net/contents/bdd/bddintro.php3
Connexion à la base de données avec JDBCConnexion à la base de données L'API (Application Programming Interface) JDBC, c'est-à-dire la bibliothèque de classes JDBC, se charge de trois étapes indispensables à la connexion à une base de données : la création d'une connexion à la... www.commentcamarche.net/contents/jdbc/jdbcconnect.php3
Administrateur de bases de donnéesAdministrateur de bases de données L'administrateur de bases de données (parfois appelé responsable de bases de données ou en anglais database administrator, noté DBA) est chargé du maintien et de l'évolution des bases de données constituant le... www.commentcamarche.net/contents/metiers-informatique/administrateur-bases-donnees.php3