Formulardaten in TXT Datei speichern

Alegro

Grünschnabel
hallo zusammen,

ich brauche dringend eure hilfe. und zwar benutze ich auf einer homepage einen chat, wo man sich als gast oder als registrierter user anmelden kann. jetzt kommt mein problem:

es gibt bei diesem chat nur die möglichkeit das der admin die userdaten in einer TXT datei abspeichert, also nicht das die user sich reggen und gleich loslegen können.

ich habe das prob in soweit schon gelöst, das ich eine register.php erstellt habe wodurch die daten in der TXT datei automatisch gespeichert werden.
klappt auch alles wunderbar, nur das ich nicht weiß was ich wo eintragen muß, damit sich dort nicht automatisch zwei mit dem gleichen nicknamen anmelden.

bevor die frage kommt :) , ja ich habe die möglichkeit auf eine DB zuzugreifen aber es ist nicht möglich die daten an den chat weiterzugeben. dieser ist so aufgebaut das er die daten aus einer TXT datei ausliest.

hier meine register.php

PHP:
<?php
if(!empty($_POST['txt'])){
$filename = 'user.txt';
foreach($_POST['txt'] as $v){
    $liste[] .= $v;
    }
    $somecontent = implode("****",$liste)."\n";


if (is_writable($filename)) {

   if (!$handle = fopen($filename, "a")) {
         print "Kann die Datei $filename nicht öffnen";
         exit;
   }

   if (!fwrite($handle, $somecontent)) {
       print "Kann in die Datei $filename nicht schreiben";
       exit;
   }

   print "Fertig , deine Daten wurden für den Chat gespeichert.<br /><br />
Du kannst dich jetzt mit deinen Daten dort anmelden.";

   fclose($handle);

} else {
   print "Die Datei $filename ist nicht schreibbar";
}
} else {
?> 
<form id="form1" name="form1" method="post" action="<?php $_SERVER['PHP_SELF']?>">
  <input name="txt['nickname']" type="text" />
  Nickname<br />
  <input type="text" name="txt['passwort']" />
   Passwort
   <br />
  <input type="submit" name="Submit" value="Senden" />
</form>
<?php } ?>

ich sage schon einmal danke für eure antworten.

gruß Alegro
 
Chat und Handling mit einer TXT-Datei ?
Glaube nicht, dass dies auf dauer gut gehen wird.
Wenn du die Möglichkeit schon hast, eine DB zu benutzen, dann mach es auch.
 
sorry, aber ich versuche es nochmal.

vllt. drücke ich mich ja nicht klar genug aus aber es ist das registrieren über eine DB zwar machbar weil ich mehrere habe, aber der chat liest nur eine text datei aus.

das kommt daduch weil der chat auch einen gastzugang hat der ebenfalls in der login.php hinterlegt ist. jetzt kann sich der user über diese login.php als gast oder als gereggter user anmelden.

nochmals meine frage: was muß ich wo in die register.php schreiben um zu überprüfen ob sich der nickname schon in der Text datei befindet.
 
Na dann gucke dir einfach mal die Datei-Funktionen im PHP-Handbuch an.
Ich weis nicht wie deine TXT-Datei aussieht.

Dennoch ist es Blödsinn eine TXT-Datei zu verwenden, wenn die Möglichkeit zu einer DB besteht.
Naja, früher oder später wirst du das schon selber erfahren.
 
meine textdatei sieht so aus:

Alegro****442365el

pro user eine zeile, vorne der nick und hinten das pw. mehr nicht.
die sterne habe ich mir nicht ausgesucht, die sind von der login.php vorgegeben.

aber ist ja auch egal

ich habe jetzt schon zweimal geschrieben das es über eine DB nicht machbar ist, aber das scheint ja keinen zu interessieren. anstatt zu versuchen jemanden zu helfen werden hier nur blöde bemerkungen geschrieben. ich dachte das es hier user gibt die vllt. lösungsansätze haben. das handbuch hilft da nicht gerade weiter, weil ich ja wie bereits ebenfalls schon zweimal geschrieben habe, nicht weiß wo und wie ich es in die register.php einbauen soll.

sorry für meine antwort, aber ich stehe wirklich auf dem schlauch und könnte hilfe und keine guten ratschläge gebrauchen.
 
> und keine guten ratschläge gebrauchen
Die solltest du aber annehmen, denn so ein Chat bringt einige Performance-Probleme micht sich.
Aber klar, wird wieder nicht geglaubt.

> damit sich dort nicht automatisch zwei mit dem gleichen nicknamen anmelden.
Eben schon aus diesem Grund sollte man das über DB abwickeln.
Und das geht !

Natürlich kannst du mit der TXT-Datei rumgeistern.

fopen() kennst du bereits, nun musst du eben die TXT-Datei Zeilenweise auslesen, die Stellen auslesen wo der Username steht, und mit der Usernamen von der Anmeldung vergleichen.
Zum prüfen kannst du stri(), substr() .... preg_match() benutzen.

Fertige Lösungen gibt es nicht.
Und wenn man auf dem „Schlauch” steht, erwarte ich dass man sich das PHP-Handbuch mal genauer anguckt.

Und bevor du dein „wo” und „wie” noch größer schreibst, denk mal über Ratschläge nach.
Vielleicht mache ich diesen Ratschlag, weil ich deine Probleme schon vor 10 Jahren hatte.
 
dürfte ich mal den link zu deinem chat haben, würd mir den gern mal genauer anschauen :)

Problemlösung kann ich CIX88 nur zustimmen, und hier hat mal ein User, student oder was auch immer ein Buch für Studenten geschrieben. 1030 Seiten, da steht sowas auch drin.
 
Hallo zusammen

erstmal möchte ich mich bei allen endschuldigen die ich mit meiner art beleidigt haben könnte.

ich denke ich habe es jetzt fast hinbekommen. nur die abfrage t nicht so ganz. egal welchen neuen user ich eintragen will er sagt immer nickname und passwort existieren schon.

hier meine jetzige register.php:
PHP:
<?php

if (!empty($_POST['txt'])) {

  $filename = 'user.txt';
  unset($form_values);

  //$somecontent = isset($_POST['name']) ? $_POST['name']."\n" : '';
  foreach ($_POST['txt'] as $k => $v) {
    $liste[] .= $v;
    $k = str_replace ("'", "", $k);
    $form_values[$k] = $v;
  }
  $somecontent = implode("****",$liste)."\n";


  // Sichergehen, dass die Datei existiert und beschreibbar ist
  if (is_writable($filename)) {

    // existiert der nickname / das passwort schon in $filename ?
    $lines = file($filename);
    $count_lines = count ($lines);
    for ($i=0; $i<$count_lines; $i++) {
      list ($f_nick, $f_pass) = explode ("****", $lines[$i]);
      $f_nick = trim ($f_nick);
      $f_pass = trim ($f_pass);
      if ($f_nick == $form_values[nickname]) {
        echo "Nickname ". $f_nick ." existiert schon.<br />";
        $abort = 1;
      }
      if ($f_pass == $form_values[passwort]) {
        echo "Passwort ". $f_pass ." existiert schon.<br />";
        $abort = 1;
      }
    }
    if ($abort == "1") exit;


    // Wir öffnen $filename im "Anhänge" - Modus.
    // Der Dateizeiger befindet sich am Ende der Datei, und
    // dort wird $somecontent später mit fwrite() geschrieben.
    if (!$handle = fopen($filename, "a")) {
      print "Kann die Datei ".$filename." nicht öffnen";
      exit;
    }

    // Schreibe $somecontent in die geöffnete Datei.
    if (!fwrite($handle, $somecontent)) {
      print "Kann in die Datei ".$filename." nicht schreiben";
      exit;
    }
    else {
      print "Fertig , deine Daten wurden für den Chat gespeichert.<br /><br />
             Du kannst dich jetzt mit deinen Daten dort anmelden.";
    }

    fclose($handle);

  } else {
     print "Die Datei ".$filename." ist nicht schreibbar";
  }
}
else {
?>

<form id="form1" name="form1" method="post" action="<?php $_SERVER['PHP_SELF']?>">
  <input name="txt['nickname']" type="text" />
  Nickname<br />
  <input type="text" name="txt['passwort']" />
  Passwort<br />
  <input type="submit" name="Submit" value="Senden" />
</form>

<?php } ?>

was ist da bitte falsch

gruß Alegro
 
Klappt das Auslesen jetzt ?
Sonst da mal ein echo reinhacken, um zu überprüfen ob alles richtig übergeben wird und auch ankommt (werte formular, werte txt-datei).

> $form_values[nickname]
In einigen Jahren wird dies nicht mehr funktionieren.
=> $form_values['nickname']

Die Sache mit foreach ($_POST['txt'] ... verstehe ich jetzt nicht ganz, aber du kannst doch gleich mit im Forumular name="nickname" schreiben, anstelle von name="txt['nickname']".
Das ist jedenfalls für dich jetzt einfacher.
 
Zurück