kostenloser Webspace werbefrei: lima-city


Variable als Textdatei anlegen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    schinkenmedia

    Kostenloser Webspace von schinkenmedia

    schinkenmedia hat kostenlosen Webspace.

    Guten Abend liebe Community,

    ich habe dann noch eine letzte Frage (für heute :biggrin:):

    Ich arbeite wie einige sicherlich schon wissen an einem kleinen Fragespiel. Nun möchte ich Highscorelisten einfügen.
    Dafür möchte ich von jedem Spieler eine Textdatei wo die Punkte drinstehen.

    Die Spieler sollen ihren Namen eingeben und dann soll eine Textdatei mit dem Namen angelegt werden.

    Mein versuch klappte nicht:

    <?php
    $name=$_GET['eingabefeld1'];
    
    $datei = fopen($name,"r+");
    $counterstand = fgets($datei, 10);
    
    if($counterstand == "")
       {
       $counterstand = 0;
       }
    
    if($name==1)
       {
       $counterstand++;
       rewind($datei);
       fwrite($datei, $counterstand);
       $_SESSION['counter_ip'] = true;
       }
    
    
    
    fclose($datei);
    
    echo $counterstand;
    
    ?>
    
    <center>
    
    <form action="test.php" method="get">
    			<input type="text" name="eingabefeld1">
    
    			</input>
    
    			<input type="submit">
    
    			</input>
    
    		</form>
    
    
    
    
    </center>



    Freue mich auf hilfreiche Antworten.


    MfG
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 1. nach progstart kommt das:
    Notice: Undefined index: eingabefeld1 in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 8
    Warning: fopen() [function.fopen]: Filename cannot be empty in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 10
    Warning: fgets() expects parameter 1 to be resource, boolean given in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 11
    Warning: fclose() expects parameter 1 to be resource, boolean given in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 280
    das kommt daher, dass du die auswertung schon VOR der eingabe machst.
    2. schickst ohne eingabe (kein name) dein form ab, kommt wiederum das hier:
    Warning: fopen() [function.fopen]: Filename cannot be empty in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 10
    Warning: fgets() expects parameter 1 to be resource, boolean given in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 11
    Warning: fclose() expects parameter 1 to be resource, boolean given in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 280
    auch das muss vermieden werden.
    3. schicks die daten mit name, kommt das:
    Warning: fopen(hemi) [function.fopen]: failed to open stream: No such file or directory in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 10
    Warning: fgets() expects parameter 1 to be resource, boolean given in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 11
    Warning: fclose() expects parameter 1 to be resource, boolean given in /home/webpages/lima-city/hemiolos/html/forum/hemiolos/test.php on line 280
    um auch das auszumerzen, soll das ding etwas umgebaut werden:

    1. nehme statt GET POST.
    2. zuerst mit form abfragen;
    3. dann abfrage testen und wenn ok, file behandeln.
    und das geht in etwa so:
    <?php
    error_reporting(E_ALL | E_STRICT);
    
    session_start();
    $_SESSION['counter_ip'] = false;
    
    if((!empty($_POST['action']) && $_POST['action'] === 'write') && !empty($_POST['name'])) {
    
      // alle daten vorhanden
      if(is_file($_POST['name']) && is_writable($_POST['name'])) {
    
        // file vorhanden, also increment counter
        $count = file_get_contents($_POST['name']);
        file_put_contents($_POST['name'], ++$count);
        $_SESSION['counter_ip'] = true;
        $res = "{$_POST['name']} $count - mal da!";
    
      } else {
    
        // file existiert noch nicht
        if(file_put_contents($_POST['name'], 1)) {
    
          // alles bestens
          $_SESSION['counter_ip'] = true;
          $res = "{$_POST['name']} 1 - mal da!";
    
        } else {
    
          // du kannst in file nicht schreiben
          unset($_SESSION['counter_ip']);
          session_close();
          exit('lasse dir was einfallen');
        }
      }
    
    } else {
    
      // entweder direkt start oder fehlende daten
      $res = <<< EOT
    <form action="" method="post">
      name: <input type="text" name="name" />
      <input type="submit" name="action" value="write" />
    </form>
    EOT;
    
    }
    
    echo $res;

    p.s.: dein form war auch nicht ok, also vorschlag: html lernen, php lernen und auf logik achten ;)
    ich halte aber diese lösung für außerordentlich ineffizient. sowas gehört doch in eine db.
    UND sehr sehr wichtig: du solltest user-variablen nie ohne validierung übernehmen!

    Beitrag zuletzt geändert: 15.1.2012 3:38:29 von hemiolos
  4. Wenn du den Namen einer Variable einfach in eine Textdatei schreiben möchtest musst du das Dollarzeichen vor dem schreiben mit einem Backslash ausmaskieren!

    Wie so vielen Menschen könnte dir dieses

    http://www.mut.de/PDF9783827267702.html

    Buch gut weiterhelfen!
    Ich habe PHP mit einer älteren Ausgabe des Buches sehr gut und schnell gelernt!

    LG
  5. exifcc schrieb:
    Wenn du den Namen einer Variable einfach in eine Textdatei schreiben möchtest musst du das Dollarzeichen vor dem schreiben mit einem Backslash ausmaskieren!

    Wie so vielen Menschen könnte dir dieses

    http://www.mut.de/PDF9783827267702.html

    Buch gut weiterhelfen!
    Ich habe PHP mit einer älteren Ausgabe des Buches sehr gut und schnell gelernt!

    LG


    Er will nicht den Variablennamen speichern, sondern in der Variable steht der Dateiname der "Textdatei".
    Bsp:

    Du spielst sein Quiz unter deinem Namen exifcc, so sollen deine Punkte in der Datei "exifcc" gespeichert werden.

    BTT
    Wie heiolos schon schrieb: sowas gehört in eine DB.
    Wieso nimmst du keine DB dafür? Ist doch im Grunde einfacher und außerdem lässt sich dies besser für Highscores verwalten (Order By Punkte DESC). So kannst du direkt Highscore insgesamt und Highscore pro Member, ohne große Arbeit, darstellen.




    exifcc schrieb:
    Buch gut weiterhelfen!
    Ich habe PHP mit einer älteren Ausgabe des Buches sehr gut und schnell gelernt!

    Mir fehlt bei einem Buch eindeutig die SuFu...lieber etwas digitales bei dem ich nebenbei eine SuFu hab :)

    Beitrag zuletzt geändert: 17.1.2012 23:59:53 von copynpaste
  6. Oh, das habe ich wohl falsch aufgefasst!

    Der Tipp mit dem Buch gilt trotzdem, für mich persönlich gibts nichts besseres zum Sprachen lernen als ein physisches Buch aufm Schoß! :)
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!