Création compte avec un .txt

Eléphanteau du PHP | 17 Messages

02 févr. 2012, 23:16

Bonjour,
J'aimerais faire un système de création de compte qui demande le nom de compte et le mot de passe, vérifie si ce nom de compte existe et sinon écrite le nom de compte et le mot de passe. J'ai donc fait sa :
enregistrement.php :
<html><body>
<br><br><br><br><br>
<form method="post" action="enregistrement2.php">
<center>Nom de compte : <input type="text" name="nomdecompte" size="12"><br></center>
<center>Mot de passe : <input type="text" name="motdepasse" size="12"><br></center>
<center><input type="submit" value="Créé le compte"></center>
</form></body></html>
enregistrement2.php :
<?php

$nomdecompte = $_POST['nomdecompte'];
$motdepasse = $_POST['motdepasse'];
if(empty($nomdecompte))
{
print("<center>Le Nom de compte est vide !</center>");
exit();
} 
if(empty($motdepasse))
{
print("<center>Le Mot de passe est vide !</center>");
exit();
} 



$lines = file('Liste des comptes.txt');

foreach ($lines as $lineNumber => $lineContent)

{ 
if($nomdecompte == $lineContent){
print("<center>Imposible de créé ce compte</center>");
exit(0);
}
}

$fichier1 = fopen('Licences.txt', 'a+');
fputs($fichier1,"[$nomdecompte]\r\n");
fputs($fichier1,"mot de passe=$motdepasse\r\n");
fclose($fichier1);

$fichier2 = fopen('Liste des comptes.txt', 'a+');
fputs($fichier2,"$nomdecompte\r\n");
fclose($fichier2);


print("<center>Le compte a bien été créé :");
print("<center> Nom de compte : $nomdecompte </center>");
print("<center> Mot de passe : $motdepasse </center>");


?> 
Mais j'arrive a créé plusieurs foi le même compte
Merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 févr. 2012, 23:28

salut,

a tu bien un pseudo par ligne ?

Si oui tu peux utiliser la fonction file pour avoir une tableau et utiliser la fonction in_array();

Pour l'insertion tu peux utiliser file_puts_contents (avec le flag append) pour l'insertion dans le fichier.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 17 Messages

02 févr. 2012, 23:39

Oui, au départ je met des fichier vides, pour la fonction je l'avais déjà vu mais comme je vien de commencer le php il y a quelque jours je n'y arrive vraiment pas.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 févr. 2012, 23:46

$comptes = file('fichier compte.txt');
if (in_array($comptes, $lepseudosaisis)) {
//ok
}

etc etc

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 17 Messages

03 févr. 2012, 19:48

Merci, mais avec ceci :
<?php

$nomdecompte = $_POST['nomdecompte'];
$motdepasse = $_POST['motdepasse'];
if(empty($nomdecompte))
{
print("<center>Le Nom de compte est vide !</center>");
exit();
} 
if(empty($motdepasse))
{
print("<center>Le Mot de passe est vide !</center>");
exit();
} 

$comptes = file('Liste des comptes.txt');
if (in_array($comptes, $nomdecompte)) {
$fichier1 = fopen('Licences.txt', 'a');
fputs($fichier1,"[$nomdecompte]\r\n");
fputs($fichier1,"mot de passe=$motdepasse\r\n");
fclose($fichier1);

$fichier2 = fopen('Liste des comptes.txt', 'a');
fputs($fichier2,"$nomdecompte\r\n");
fclose($fichier2);


print("<center>Le compte a bien été créé :");
print("<center> Nom de compte : $nomdecompte </center>");
print("<center> Mot de passe : $motdepasse </center>");
}else{
print("<center> Impossible de créé ce comte </center>");
}


?> 
J’obtiens
Warning: in_array() expects parameter 2 to be array, string given in /var/www/www.mon-domen.fr/public_html/enregistrement2.php on line 17
Impossible de créé ce comte

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 févr. 2012, 16:31

inverse compte et nomdecompte ^^

a tu regardé la doc de la fonction in_array() ? tu aurais trouver la solution j'ai inversé l'ordre des arguments ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 17 Messages

04 févr. 2012, 17:21

Ha oui mais je comprend toujours pas avec ce code :
<?php

$nomdecompte = $_POST['nomdecompte'];
$motdepasse = $_POST['motdepasse'];
if(empty($nomdecompte))
{
print("<center>Le Nom de compte est vide !</center>");
exit();
}
if(empty($motdepasse))
{
print("<center>Le Mot de passe est vide !</center>");
exit();
}

$comptes = file('Liste des comptes.txt');
if (in_array($nomdecompte, $comptes)) {
print("<center> Impossible de créé ce comte </center>");
}else{
$fichier1 = fopen('Licences.txt', 'a');
fputs($fichier1,"[$nomdecompte]\r\n");
fputs($fichier1,"mot de passe=$motdepasse\r\n");
fclose($fichier1);

$fichier2 = fopen('Liste des comptes.txt', 'a');
fputs($fichier2,"$nomdecompte\r\n");
fclose($fichier2);


print("<center>Le compte a bien été créé :");
print("<center> Nom de compte : $nomdecompte </center>");
print("<center> Mot de passe : $motdepasse </center>");
}


?>
J'arrive a créé plusieurs fois le même compte.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 févr. 2012, 10:15

Salut,

Ajouté un var_dump sur le tableau retour du fichier tu devrais y voir le retour de ligne ?


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 17 Messages

05 févr. 2012, 10:29

Oui, mon tableau contenait :

Code : Tout sélectionner

silvere silvere
et j'ai obtenu ;
array(2) { [0]=> string(9) "silvere " [1]=> string(9) "silvere " }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 févr. 2012, 15:11

Il y a donc bien le saut de ligne ;)

Cela faut partis des problème lorsque l'on utilise les fichiers plats.
La solution peux être http://www.php.net/trim.

L'utilisation d'un objet serialisé serait peux être une solution plus simple au final (sac si tu doit partager le fichier vers une appli qui ne connais pas la serialisation.


@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

06 févr. 2012, 15:52

La gestion de données via des fichiers à plat me semble plutôt complexe, même pour quelqu'un maitrisant la programmation. Il me semble beaucoup plus simple d'utiliser une base de données.
Il y a une raison de ne pas utiliser de base de données pour faire cela ?

Eléphanteau du PHP | 17 Messages

06 févr. 2012, 18:01

Mon but est de faire une enregistrement pour pouvoir se connecter via mon logiciel.
Je sais pas si avec une base de données, je pourrais récupérer les informations avec mon logiciel.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 févr. 2012, 09:57

Il faut voir quel format ton logiciel peux prendre en compte, si par exemple il accepte le CSV il existe des fonctions simples et efficace qui pourrait t'aider.

Par contre pour ce qui est de la recherche un SGBD est une bonne solution parce que c'est prévu pour :) .

Tu n'est pas obligé d'utiliser mysql (par exemple), il existe la base de données SQLITE (embarquée avec php5) qui peux te permettre de faire la chose simplement.

et il est possible de créer un fichier conforme a ce qu'attend le soft à partir du sgbd.

Après faut que soit certain de ce que ton soft demande en entrée.

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 17 Messages

08 févr. 2012, 13:02

C'est un peu trop compliquer pour moi cela...
Ce que je voulais faire en php est possible en java ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 févr. 2012, 14:22

tout est possible tous est réalisable, je ne vois en quoi se serait plus simple en java qu'en php, mais bon si tu préfère vas y :)

Quelque soit le langage tu aura les mêmes questions que celle que j'ai mis en dessous, a savoir : ce que peux prendre le soft en entrée, et la ben c'est pas une question de langage :mrgreen:

@+
Il en faut peu pour être heureux ......