Ankündigung

Einklappen
Keine Ankündigung bisher.

User Daten speichern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • User Daten speichern

    Ich arbeite grad an einem script, welches anzeigen soll, welche registrierten User gerade online sind!
    Irgendwie bekomm ich das aber nicht so richtig hin!
    Hier der Code von meiner Loginseite:

    Code:
    <?php
    session_start();
    session_register("username");
    ?>
    
    <?
    include ("config.php");
    
    $password=crypt($password,$schluessel);
    $password .= "\n";
    $log=0;
    
    
    $userdatei = fopen ("user.txt","r");
    while (!feof($userdatei)) 
    {
    $zeile = fgets($userdatei,50);
    $userdata = explode("|", $zeile);
    if ($userdata[0]==$username && $userdata[1]==$password)
    {
    $log=1;
    }
    }
    fclose($userdatei);
    
    $text = $username;
    $fp = fopen ("allusers.txt","a");
    $file=fopen("br","a");
    $br=trim(fread($file,10));
    fclose($file);
    fwrite($fp,$user.$br);
    fclose($fp);
    
    if ($log==1)
    {
    ?>
    
    
    <p align="center">Willkommen <?php echo $username."!" ?>
        
      <?
    }
    else
    {
    echo "Benutzer existiert nicht oder das Passwort ist falsch!
    <a href=\"javascript:history.back()\">zurück</a>";
    }
    ?>
    Das ist halt noch der erste Versuch, daher auch die txt dateien anstatt mysql.
    Das eigentliche Problem besteht aber hierdrin (auch in diesem code enthalten):

    Code:
    $text = $username;
    $fp = fopen ("allusers.txt","a");
    $file=fopen("br","a");
    $br=trim(fread($file,10));
    fclose($file);
    fwrite($fp,$user.$br);
    fclose($fp);


  • #2
    Was genau soll passieren? Was genau passiert zur Zeit?
    Welche Schritte hast Du unternommen, um den Fehler einzukreisen?
    Laufen Deine Skripte mit error_reporting(E_ALL) und ini_set('display_errors', true); ?

    Kommentar


    • #3
      http://www.lugbz.org/documents/smart...html#beprecise

      Kommentar


      • #4
        Also es sollen alle eingeloggten User angezeigt werden. Es wird aber absolut nichts angezeigt. Das Feld bleibt leer. Naja, Um den Fehler einzukreisen, hab ich alle Stellen getestet, wo ich dachte dass der fehler liegt. Aber es muss irgendwo hier liegen:
        Code:
        $text = $username;
        $fp = fopen ("allusers.txt","a");
        $file=fopen("br","a");
        $br=trim(fread($file,10));
        fclose($file);
        fwrite($fp,$user.$br);
        fclose($fp);
        Also wird theoretisch, wenn alles funzen würde, in die Datei allusers.txt beim einloggen der neueingeloggte Name angezeigt. aber weil ich alles versucht hab um einen Zeilenumbruch (
        bzw <br \>) reinzubringen, aber keiner entstanden ist, hab ich eine Extra Datei (br) geschrieben, in der ein Zeilenumbruch gespeichert ist. Diese habe ich mit
        $file=fopen("br","a");
        $br=trim(fread($file,10));
        fclose($file);
        geöffnet und ausgelesen. Ich denke, dass er nun die in allusers.txt gespeicherten mit dem Zeilenumbruch aus der datei br ersetzt. Ich denke, dass ich damit erstmal alle fragen zu meinem Problem beschrieben habe.
        Wenn ihr noch weitere Fragen dazu habt, könnt ihr ja nochmal fragen.

        Kommentar


        • #5
          Einen Zeilenumbruch im Quellcode erzeugst du mit \n für New Line.

          Kommentar


          • #6
            ja, das wusste ich auch, ich habs jetzt mal wieder reingemacht, jetzt zeigts aber nur den an, der als letztes eingeloggt ist. die andern werden in der Textdatei (allusers.txt) wieder überschrieben!

            Kommentar


            • #7
              fopen, a
              "Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen."

              Also überschreiben kann zumindest mit der Art und Weise wie dus öffnest nicht sein ^^

              Kommentar


              • #8
                Also, wenn Du die Datei dann im Format :

                usera \n
                userb \n

                hast, kannst Du das ganze "fopen" etc. - zum Einlesen - auch einfach durch:

                PHP-Code:
                <?php
                $users 
                file (allusers.txt);
                ?>

                Kommentar


                • #9
                  Zitat von Zergling
                  Also überschreiben kann zumindest mit der Art und Weise wie dus öffnest nicht sein ^^
                  Ja, das dachte ich ja auch, aber der schreibt in die Datei nur auf die erste Zeile an die erste stelle, also über schreibt er den alten user. Wenn man die Datei dann öffnet, sieht man ja, dass nur der aktuell neuste user eigetragen ist!
                  Aber vielleicht kann ja der COde weiterhelfen, von da, wo die eingeloggten user angezeigt werden:
                  Code:
                  <?php
                       $allusers = file("allusers.txt");
                       foreach($allusers as $currentuser);
                  	 echo $currentuser."
                  ";
                  	 fclose($fp);
                  ?>

                  Kommentar


                  • #10
                    Das " fclose($fp); " ^^ macht da keinen Sinn.

                    und ich glaube Du willst:

                    http://faq-phpfriend.de/q/q-race-condition.html

                    lesen.

                    Kommentar


                    • #11
                      ja, das hab ich auch gemerkt, das fclose($fp); hab ich rausgenommen, aber geholfen hats nich! immernoch nach wie vor das selbe problem!

                      Kommentar


                      • #12
                        foreach($allusers as $currentuser);

                        Gruß
                        phpfan

                        Kommentar


                        • #13
                          Also hier mal ein kleines Bsp.:
                          PHP-Code:
                          <?php
                          $data 
                          "testuser";

                          $fp fopen ("allusers.txt","a");
                          fwrite($fp$data."\n");
                          fclose($fp);
                            
                          $users file ("allusers.txt");
                          foreach (
                          $users as $user){
                              echo 
                          $user."
                          \n"
                          ;
                          }

                          ?>

                          Kommentar


                          • #14
                            Das ganze wird aber nicht funktionieren weil:

                            A. umständlich den user da wieder rauszulöschen wenn er nicht mehr online ist.
                            B. Race Conditions (zwei Benutzer gehen gleichzeitig online)

                            Also, warum das ganze nicht lieber mit einer DB machen ?

                            Kommentar


                            • #15
                              das mit dem rauslöschen hab ich schon gemacht, indem ich die datei allusers.txt lösche und ohne den ausgeloggten user neu schreibe.

                              Mit Datenbanken is das so ne sache, davon versteh ich noch net sehr viel. aber wenn du mir zeigen könntest, wie ich das machen kann, wäre ich über diese variante sehr glücklich und würde es mal so versuchen.

                              Kommentar

                              Lädt...
                              X