kostenloser Webspace werbefrei: lima-city


Variable aktualisiert sich erst nach Neuladen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo.

    Ich habe ein Formular mit einem Textfeld, wo man etwas in eine Textdatei speichern kann, und ein Textfeld wo man eine Zeile aus der Textdatei wieder löschen kann.

    In dieser Reihenfolge steht das in meinem php Dokument:

    1. Anzahl der Zeilen in der Textdatei wird ermittelt mit folgendem Code:
    //Anzahl Mitspieler
    $file = file("textdateien/m_spieler.txt");
    $anzahl_mitspieler = count($file);
    $i = $anzahl_mitspieler;

    2. Textfeld für das Eintragen in die Textdatei mit folgendem Code:
    <input name="name2" type="text"  size="50" maxlength="50" <?php if ($i >=10) {echo "disabled";}; ?> value="<?php if ($i >=10) {echo "Du hast die maximale Anzahl von 10 Spielern erreicht";}; ?>"/>

    Das heißt, dass das Textfeld deaktiviert werden soll, wenn die Anzahl der Zeilen 10 erreicht hat.
    3. Textfeld zum löschen einer Zeile mit folgendem Code:
    <?php
    if(isset($_POST['nr'])) {
        $zeile = $_POST['nr'] - 1;
        $datei = "textdateien/m_spieler.txt";
     
        $zeilen = file($datei);
        unset($zeilen[$zeile]);
     
        $handle = fopen($datei, 'wb');
        fwrite($handle, implode('', $zeilen));
        fclose($handle);
    } ?>


    Mein Problem ist jetzt, dass die Anzahl der Zeilen in der Textdatei also $i nicht aktualisiert wird, wenn ich eine Zeile hinzufüge oder lösche. Erst wenn ich die gesamte Seite neu lade. Ich glaube das liegt daran, dass die $i jeweils über den Textfeldern definiert wird. Wie kann ich mein Problem lösen?

    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Hallo

    ich denke das liegt am Browser-Cache, den kannst Du ausschalten / deaktivieren,
    dann sollte es ohne Browser-Reload gehen, dass gleich "aktuelle" Werte kommen.

    PHP:
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: max-age=0, post-check=0, pre-check=0", false);
    header("Pragma: no-cache");



    .htaccass
    Header set Cache-Control "must-revalidate, no-store, no-cache, max-age=0, pre-check=0, post-check=0"
    Header set Pragma "no-cache"



    bei PHP beachten, die header() Angaben ganz oben im Script stehen müssen,
    also bevor irgend eine Ausgabe an Browser gesendet wird.

    bei .htaccess wirkt der Cache-Control für alle Dateien im dem Ordner,
    in dem die .htaccess Datei liegt, diese Variante würde ich empfehlen.

    PS:
    es gibt auch noch
    header("Expires: <DATUM> GMT");
    hier kann man ein Ablauf-Datum eintragen, z.B. auch in der Vergangenheit
    und
    header("Last-Modified: " <DATUM> GMT");
    hier kann man die letzte Änderung eintragen, oft aktuelles Datum: gmdate("D, d M Y H:i:s")

    aber es sollte auch ohne diese zwei Datum-Angaben funktionieren
    :)
  4. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Danke schonmal.

    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: max-age=0, post-check=0, pre-check=0", false);
    header("Pragma: no-cache");


    Also das soll noch vor den <head> teil oder in dem <head> teil sein?

    Wo soll das .htaccass hin? Habe das noch nie benutzt...
  5. Hallo

    wenn mit PHP, dann noch vor dem <html> oder <!DOCTYPE>
    also wirklich gaaaaaaaanz oben, noch bevor irgendwas ausgegeben wird
    es darf nichtmal ein Leerzeichen vorher ausgegeben werden, .... garnix .. ganz am Anfang !!!

    <?php 
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: max-age=0, post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    ?>
    <html>
    <head>
    ...
    </head>
    ...


    aber mach es lieber mit .htaccess, das gilt dann für alle Dateien,
    und Du muss es nicht einzeln je Datei in PHP rein schreiben

    wenn .htaccess, einfach eine neue Datei erstellen mit Dateiname: .htaccess
    und dort die Zeilen einfügen

    Mit einer .htaccess Datei kann man u.a. einige Server-Einstellungen "nachträglich" setzen
    wie hier z.B. Cache-Control ... und wenn wir schon bei .htaccess sind,
    dann mach dort doch auch gleich Einstellungen für Error_Reporting

    php_flag display_errors on
    php_value error_reporting 30719
    
    Header set Cache-Control "must-revalidate, no-store, no-cache, max-age=0, pre-check=0, post-check=0"
    Header set Pragma "no-cache"


    mit einer .htaccess ist noch mehr möglich, z.B. auch Passwort-Schutz, Fehlerseiten, etc.
    allgemeine Info: http://de.selfhtml.org/servercgi/server/htaccess.htm
    und sonst googeln nach dem was du machen willst + htaccess,
    z.B: cache-control htaccess
    z.B: error_reporting htaccess
    usw.

    beachte:
    Die Datei heisst nur ".htaccess" nicht "htaccess.txt" oder "htaccess.php"
    (nur vorne der . Punkt, und hinten keine Datei-Endung dran)

    Infos zum Zahlenwert für php_value error_reporting
    siehe: http://www.php.net/manual/de/errorfunc.constants.php

    Für Error-Level "E_ALL" (alle Fehler) ist die Zahl

    32767 in PHP 5.4.x,
    30719 in PHP 5.3.x,
    6143 in PHP 5.2.x,
    2047 für ältere Versionen

    Wichtig bei error_reporting ist auch display_errors on
    damit die Fehler auch angezeigt werden


    Beitrag zuletzt geändert: 29.6.2012 10:57:53 von rssping
  6. Hallo


    rssping schrieb:
    ich denke das liegt am Browser-Cache, ..


    Ich kann mir jetzt nicht vorstellen, dass das am Cache liegt, der Browser-Cache hat doch reingarnichts mit den Variablen in PHP zu tun, bzw. allgemein mit PHP??


    ultimate-bravery schrieb:

    Mein Problem ist jetzt, dass die Anzahl der Zeilen in der Textdatei also $i nicht aktualisiert wird, wenn ich eine Zeile hinzufüge oder lösche. Erst wenn ich die gesamte Seite neu lade. Ich glaube das liegt daran, dass die $i jeweils über den Textfeldern definiert wird.


    Ich glaube das genannte Problem trifft es.

    *Du solltest erst die Datei Auslesen, dann löshen bzw. hinzufügen (falls erfordert), dabei $i um eine hoch bzw runter zählen und dann das Textfeld mit der Überprüfung ;)

    * Die ersten beiden Punkte können bei Bedarf ich getauscht werden (Auslesen / Einfügen bzw. löschen, dann aber kein $i ändern)

    Fabi
  7. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    @ rssping: Sry aber deine Varianten lösen das Problem nicht. Aber trotzdem danke ;)

    @ fabi755: Wenn ich nach den Textfeldern das $i um eins erhöhe bzw verringer wirkt sich das ja nicht auf das $i über den Textfeldern aus. Aber gerade diese $i verwenden ja die Textfelder darunter... Eigentlich muss es ja auch ohne $i + 1 oder $i - 1 gehen. $i zählt ja die Zeilen in der Textdatei und eigentlich müsste das ja automatisch gehen mit dem +1 oder -1 ...

    Weiß noch jemand eine Lösung?
  8. Also noch mal..

    1. Datei auslesen
    2. Zeile löschen ($i - 1) und/oder Zeile hinzufügen ($i + 1)
    3. Textfeld mit Überprüfung


    Sprich, du verarbeitest erst die Daten und dann stellst du weitere Funktionen zur Verfügung

    Falls es immer noch nicht klappt, oder es Probleme gibt, schreib mich bitte an.

    Die Lösung posten wir hier später natürlich noch (falls es Änderungen geben sollte)
  9. stimmt auch wieder, ... einfach gleich beim Speichern den $i Zähler bearbeiten

    Du hast ja vielleicht ein Formular-Feld, das die Aktion angibt ... hinzufügen / entfernen (new/delete)
    z.B. über ein hidden-Field

    also je nach Aktion $i um 1 hoch oder 1 runter

    if(isset($_POST['action']) && $_POST['action'] == 'new')  { 
    $i++; 
    // --- hier Code zum hinzufügen einer Zeile 
    }
    
    if(isset($_POST['action']) && $_POST['action'] == 'delete')  { 
    $i--; 
    // --- hier Code zum entfernen einer Zeile 
    }
    
    echo "<br />Neue Anzahl: ".$i."\n";


    oder Du machst nach dem Speichern einen header-Redirect zur "neuen" Ausgabe
    also den Browser-Reload quasi automatisch
  10. rssping schrieb:

    if(isset($_POST['action']) && $_POST['action'] == 'new')  { 
    $i++; 
    // --- hier Code zum hinzufügen einer Zeile 
    }
    
    if(isset($_POST['action']) && $_POST['action'] == 'delete')  { 
    $i--; 
    // --- hier Code zum entfernen einer Zeile 
    }
    
    echo "<br />Neue Anzahl: ".$i."\n";


    Genau so meinte ich das.


    rssping schrieb:

    oder Du machst nach dem Speichern einen header-Redirect zur "neuen" Ausgabe
    also den Browser-Reload quasi automatisch



    Eine Weiterleitung empfinde ich hier als überflüssig, da du sicher auf der Seite bleiben möchtest.
    Ich leite nach einem Formular grundsätzlich auf keine andere Seite weiter. (Und vorallem nicht auf die selbe Seite erneut?). Eine Weiterleitung wird bei mir nur nach einem Login ausgeführt (durch die Änderung der SessionWerte)



    Beitrag zuletzt geändert: 29.6.2012 11:42:35 von fabi755
  11. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Ok danke ;)

    Die Seite bei dem Klick auf den Button neu zu laden würde in meinem Fall aber auch gehen.

    Also hier ist der Button, auf den man klickt, wenn man z.B. eine Zeile hinzufügen möchte:

    <input name="Posten" type="submit" value="Hinzufügen"/>


    Wie kann ich jetzt sagen, dass die Seite neu geladen wird, wenn man auf diesen Button klickt?
  12. Du weißt nicht wie du ein Formular machst aber schon den Rest? Genial! :D


    <form action="seite.php" method="POST"> 
    <!-- [b]action="seite.php"[/b] <-- Auf welche Seite das Formular beim Absenden "weitergeleitet" wird -->
    
    <input type="hidden" name="action" value="new"> 
    <!-- Welche Aktion ausgeführt werden soll -->
    
    <input type="text" name="eingabe" value="">
    <!-- Benutzer Eingabe, für Zeile oder was auch immer du vor vor hast -->
    
    <input type="submit" name="sendbutton" value="Hinzufügen">
    <!-- Sendebutton (da IM FormTag sendet er an [b]action[/b] sobald er betätigt wird) -->
    
    </form>


    Das ist ein kleines Formular ich hoffe du verstehst es.

    Bei dem PHP-Teil kann ich dir jetzt nicht so ganz helfen, weil ich nur im Groben verstanden habe was du vor hast ;)


    Schick mir einfach eine PN wenn du für den PHP-Teil noch Hilfe brauchst.


    Beitrag zuletzt geändert: 29.6.2012 12:25:06 von fabi755
  13. Hallo

    musst Du garnicht Seiten-Reload machen, Du kannst es ja sofort "direkt" machen

    if(isset($_POST['Posten']) && $_POST['Posten'] == 'Hinzufügen')  {
    $i++;
    // --- hier Code zum hinzufügen einer Zeile
    }
    
    echo "<br />Neue Anzahl: ".$i."\n";


    Hinweis: ich würde nicht "Hinzufügen" als String zum Prüfen nehmen, wegen dem ü
    könnte Probleme machen, wenn Eingabe als iso-8859-1 und Verarbeitung als UTF-8

    mach leiber noch ein hidden-Field mit name="action" und value = "new" oder "delete"
    und prüfe das dann ab, welche Aktion gerade ausgeführt wird

    aber wenn Du "Seite Neu Laden" unbedingt machen willst, gibt es 2 Möglichkeiten:

    mit $go_url legst Du fest, welche Seite genau neu geladen werden soll (mit Parameter)

    a) per php mit header('Location: .... ');
    $go_url = 'index.php?player=1234&seite=spieler'; 
    header("Location: ".$go_url."");

    INFO: auch hier wieder header() Befehl immer vor der ersten Ausgabe im Browser ausführen

    b) per html mit Meta-Tag Refresh (z.B. nach 0.2 Sekunden)
    $go_url = 'index.php?player=1234&seite=spieler'; 
    echo "<meta http-equiv=\"refresh\" content=\"0.2; url=".$go_url."\">";

    INFO: manche Browser erlauben kein Meta-Refresh

    aber wie gesagt, ist eigentlich quatsch die Seite neu zu laden,
    denn Du kannst den $i Zähler ja auch direkt beim Speichern ändern.

    Idee wäre dazu auch, diesen $i Zähler-Wert in Session speichern,
    dann ist er für die Session-Laufzeit immer verfügbar
    ... aber das ist wieder ein anderes Thema :)
  14. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Danke aber habe auch ne Lösung gefunden. War mir nur nicht sicher ob das mit onclick gemacht werden musste.
    Also ich habs jetzt so gemacht:

    if(isset($_POST['Posten']) && isset($_POST['name2'])) {
    	header('Location:zuweisung.php'); exit;
    }
    ?>


    Also es klappt jetzt so wie ich es möchte ;) Danke für die Denkanstöße :)
  15. 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!