kostenloser Webspace werbefrei: lima-city


Zuerst PHP Code ausführen, dann Seite neu laden

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo.

    Durch einen Klick auf einen Button soll folgender Code ausgeführt werden:

    if(isset($_POST['Posten']) && isset($_POST['name2'])) {
        
    	//Datum:
        $datum = date("d.m.Y");
        $uhrzeit = date("H:i");
     
        $name=$_POST['name2'];
        $name=nl2br($name);
        $text = "+'$name'+  \r\n";                             
        $datei=fopen("textdateien/m_spieler.txt","a");
        fputs($datei,$text);
        fclose($datei);
    }
    ?>

    Außerdem soll die Seite, nachdem dieser Code ausgeführt wurde, neu geladen werden. Das hatte ich so vor:

    header('Location:zuweisung.php'); exit;


    Also das soll in den oberen Code unter fclose.
    Unter XAMPP hat das auch geklappt aber auf meinem bplaced Server kommt folgende Fehlermeldung:
    Warning: Cannot modify header information - headers already sent by (output started at /users/spielertrinken/www/zuweisung.php:60) in /users/spielertrinken/www/mitspieler_hinzufuegen.php on line 40


    Ich habe gelesen, dass vor einem header Befehl keine Ausgabe stattfinden darf. Aber wie kann ich mein Ziel sonst erreichen, wenn ich vor dem Neuladen den o.g. Code ausführen will?

    Freue mich über Hilfe ;)
    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. daswing

    Moderator Kostenloser Webspace von daswing

    daswing hat kostenlosen Webspace.

    Ist leider schwierig nur mit PHP vor dem Neuladen Code auszuführen.
    Meine Idde wäre es das am Anfang des Codes das ausführet was eigentlich vor dem Neuladen passieren sollte. Da dies ja aber nur beim Neuladen ausgeführt wird, setzte du eine Überprüfung ein ob die Seite neugaden wurde. Wenn das nicht der Fall ist wird der Code-Schnippsel nicht ausgeführt, sollte die Seite neugeladen werden übergibt man eine Variable das sie neugeladen wird und führt anschließend den Code aus. Verstanden?

    Tipp: Man kann auch bei Lima .php Dateien hochladen und ausführen!

    MfG Stephan
  4. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Ja das verstehe ich aber ich weiß nicht wie die if Abfrage aussehen würde ;) Würde der Code denn dann auch ausgeführt, wenn man die Seite manuel aktualisiert? Das wäre nämlich doof...
    Also ich erkläre mal mein Problem:

    Ich habe eine Textbox, wo man eine Zeile in eine Textdatei schreiben kann. Dazu dient der bereits genannte Code. Und wenn in der Textdatei 10 Zeilen sind soll die Textbox deaktiviert werden. Die Anzahl der Zeilen prüfe ich so:
    $file = file("textdateien/m_spiele.txt");
    $anzahl_mitspieler = count($file);
    $i = $anzahl_mitspieler;

    Und der Code der Textbox ist dann so:
    <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 Problem ist jetzt, dass sich die Variable nicht aktualisiert, wenn man eine Zeile hinzufügt. Also kann die Textbox auch nicht bei 10 Zeilen deaktiviert werden. Die Variable aktualisiert sich erst wenn man die Seite manuel aktualisiert. Und das möchte ich halt automatisch machen, wenn man auf den Button klickt. Oder gibt es denn noch eine Variante mit Javascript?

    Beitrag zuletzt geändert: 30.6.2012 9:21:18 von ultimate-bravery
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Für den Zweck ist AJAX erfunden worden. Damit kannst du den Server (dein PHP-Script) fragen was in der Variablen stehen soll...
    Brauchst du auch ein Codebeispiel?
  6. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Ja wäre gut ;) Habe noch nie mit AJAX gearbeitet ;)
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Also gut.
    Auf deiner Webseite machst du dir eine JavaScript-Funktion die die Daten vom Server abfragt:
    // Browserunabhängige XMLHttpRequests
    function createXMLHttpRequest() {
    	if(window.XMLHttpRequest) {
    		// code for IE7+, Firefox, Chrome, Opera, Safari
    		return new XMLHttpRequest();
    	} else {
    		// code for IE6, IE5
    		//return new ActiveXObject("Microsoft.XMLHTTP");
    		try {
    			return new ActiveXObject('Msxml2.XMLHTTP');
    		} catch(e) { }
    		try {
    			return new ActiveXObject('Microsoft.XMLHTTP');
    		} catch(e) { }
    	}
    	alert("XMLHttpRequest not supported!");
    }
    
    
    function getZeilenanzahl() {
    	// XMLHttpRequest erstellen, sodass es in jedem Browser funktioniert
    	var request = createXMLHttpRequest();
    	request.onreadystatechange = function() {
    		if (request.readyState == 4 && request.status == 200) {
    			var doc = request.responseText;
    			if(doc.length != 0) {
    				// setz deine Variable auf den abgefragten Wert
    				deinevariable = doc;
    			}
    		}
    	};
    	// Request-Typ und URL setzen
    	request.open("GET", "/url/zur/php-datei.php", true);
    	// Request senden (asynchron)
    	request.send();
    }
    In der php-datei.php gibst du die Zeilenanzahl aus:
    <?php
    $file = file("textdateien/m_spiele.txt");
    echo(count($file));
    ?>
    So kannst du die Zeilenanzahl vom Server abfragen ohne die Seite dabei neu zu laden...

    Damit die Variable aktualisiert wird musst du auf deiner Seite nur noch die JavaScript-Funktion
    getZeilenanzahl()
    aufrufen.
  8. Hallo
    sehe ich das richtig,
    Du willst das der User 10 Speiler-Namen eintragen soll / kann / muss
    hier noch 2 Beispiele ohne Ajax,

    Jeweils mit 10 Text-Feldern, um dort Namen einzutragen

    a) zuweisung1.php .... Daten nach Speichern neu laden
    b) zuweisung2.php .... mit header('Location ...');

    zu a) ... nach Speichern die Daten neu aus .txt Datei laden
    <?php 
    // -------------------------------------- 
    
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0");
    header("Pragma: no-cache");
    
    // -------------------------------------- 
    
    $runonfile = 'zuweisung.php'; 			// --- Dateiname des Aufrufs (Script)
    $dateiname = 'textdateien/m_spieler.txt'; 	// --- Dateiname der Spieler-Daten
    $z_umbruch = "\n";  				// --- der Zeilenumbruch (in Daten) 
    
    $datum = date("d.m.Y");
    $uhrzeit = date("H:i");
    
    // -------------------------------------- 
    
    if (!file_exists($dateiname)) { 
    	$neue_zeilen = ''; 
    	  for ($n=0; $n<10; $n++) { 
    		$neue_zeilen .='"hier Name eintragen";"'.$datum.'";"'.$uhrzeit.'"'.$z_umbruch; 
    	  }
    	file_put_contents($dateiname,$neue_zeilen); 
    }
    
    // -------------------------------------- 
    
    $old_data = array(); 
    
    $handle1 = fopen($dateiname, "r");
    while (($row1 = fgetcsv($handle1, 1024, ';')) !== FALSE) {
        $old_data[] = $row1;
    }
    fclose($handle1);
    
    
    // -------------------------------------- 
    
    if (isset($_POST['run']) && $_POST['run'] == 'Speichern') { 
    	
    
    	$neue_zeilen = ''; 
    	
    
    for ($n=0; $n<10; $n++) { 
    	$nrx = str_pad((int) ($n+1),2,'0',STR_PAD_LEFT);
    	$keyname = 'name_'.$nrx.''; 
    	$name = $_POST[$keyname];
    	$name = trim(chop($name));
    	$name = nl2br($name);
    	
    	if ($name == $old_data[$n][0]) { $save_datum = $old_data[$n][1]; $save_zeit = $old_data[$n][2]; } 
    	else { $save_datum = $datum; $save_zeit = $uhrzeit; } 
    	
    	$neue_zeilen .= '"'.$name.'";"'.$save_datum.'";"'.$save_zeit.'"'.$z_umbruch; 
    
    }
    
    	
    	$datei=fopen($dateiname,"w",0666);
    	fputs($datei,$neue_zeilen);
    	fclose($datei);
    	
    
    // ---------------------------------------------------------------
    // ------- nach Speichern die Daten neu aus .txt Datei laden -----
    
    
    $old_data = array(); 
    
    $handle2 = fopen($dateiname, "r");
    while (($row2 = fgetcsv($handle2, 1024, ';')) !== FALSE) {
        $old_data[] = $row2;
    }
    fclose($handle2);
    
    
    	
    } 
    
    
    // -------------------------------------- 
    ?>
    <html>
    <head>
    <title>Spielernamen</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    
    <body bgcolor="#FFFFFF" text="#000000">
    <br>
    <br> ... hier Ausgabe vor dem Formular (Header) ... 
    <br>
    <br>
    
    
    <form name="form1" method="post" action="<?php echo $runonfile; ?>">
    
    <p>Bitte 10 Spieler-Namen eintragen: </p>
    
    <?php 
    // -------------------------------------- 
    for ($n=0; $n<10; $n++) { 
      $nrx = str_pad((int) ($n+1),2,'0',STR_PAD_LEFT);
      $keyname = 'name_'.$nrx.''; 
      echo "<br> NR: ".$nrx." ---  <input type=\"text\" name=\"".$keyname."\" size=\"50\" maxlength=\"50\" value=\"".$old_data[$n][0]."\" /> &nbsp;&nbsp; <small>Last Edit: am: ".$old_data[$n][1]." um: ".$old_data[$n][2]." Uhr</small> \n"; 
    }
    // -------------------------------------- 
    ?>
    
    <br>
    <br>
    OK .... 
    <input type="submit" name="run" value="Speichern">
    </form>
    
    
    <br>
    <br>
    <br> ... hier Ausgabe nach dem Formular (Footer) ... 
    <br>
    <br>
    
    </body>
    </html>




    zu b) ... nach Speichern mit header Browser-Seite neu laden
    Code genau wie oben .... nur anders ist:

    ...
    	...
    	fclose($datei);
    	
    // ---------------------------------------------------------------
    // ------- nach Speichern mit header Browser-Seite neu laden -----
    
    header('Location: '.$runonfile.''); 
    exit; 
    
    }
    
    // -------------------------------------- 
    ?>
    <html>
    ...



    oder wie ist das sonst gemeint, mit den max. 10 Spieler-Namen ?






    Beitrag zuletzt geändert: 30.6.2012 13:18:28 von rssping
  9. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    @ hackyourlife: Danke für den Code aber ich kann leider nichts damit anfangen -.- Ich glaub das wäre ein bisschen zu viel verlangt, wenn ich dich fragen würde, ob ich dir mein Code schicken kann und du deinen da einbaust oder?

    @ rssping: Ne 10 Textfelder würde in meinem Fall doof sein... -.- Gibt es PHP Befehler die einfach nur die Seite neu laden? Also ohne Header?

  10. wenn du das mit header('Location: .....'); machen willst,
    dann wirst du es doch schaffen, die If-Bedingung und Speichern in Datei
    vor einer Ausgabe zu machen, also ganz oben im Script ... ?!?

    einfach vor der ersten Ausgabe den PHP-Code mit if-Bedingung
    und am Ende (innerhalb dieser if-Bedingung) dann den Header-Befehl und exit;

    zu Ajax
    und das Beispiel von hackyourlife ist doch auch gut erklärt

    Du kannst auch Deinen Code hier posten
    dann können evtl. mehrere daran "arbeiten"

    ... mir ist immernoch nicht ganz klar was Du damit eigentlich machen willst

    - User muss nicht, aber kann bis zu max. 10 Namen in Liste eintragen
    - User muss alle 10 Namen in Liste eintragen
    - User muss mind. 1 Name aber max. 10 Namen eintragen

    Wenn Du ein "Game" machst, in der eine Mannschaft 10 Speiler hat,
    warum ist dann ein Formular mit 10 Feldern doof ?

    und sollte das für ein "Game" sein, dann vergiss ganz schnell Speichern in .txt
    mach lieber MySQL, das ist dafür deutlich besser geeignet

  11. Hi,

    ultimate-bravery schrieb:
    Unter XAMPP hat das auch geklappt aber auf meinem bplaced Server kommt folgende Fehlermeldung:
    Warning: Cannot modify header information - headers already sent by (output started at /users/spielertrinken/www/zuweisung.php:60) in /users/spielertrinken/www/mitspieler_hinzufuegen.php on line 40

    Ich habe gelesen, dass vor einem header Befehl keine Ausgabe stattfinden darf. Aber wie kann ich mein Ziel sonst erreichen, wenn ich vor dem Neuladen den o.g. Code ausführen will?
    Wenn es unter xampp geklappt hat, warum sollte es bei bplaced nicht gehen? Was steht den in zuweisung.php:60 und drum herum? Evtl. ist es einfach nur eine php Notice z.B. wegen Zugriff auf die Datei oder ein Leerzeichen vor dem <?php was die Ausgabe gestartet hat?
    Evlt. kannst du auch anstatt header('Location ... die andere Datei includieren?

    Gruß
  12. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Also hier ist meine Seite:
    http://spielertrinken.de/
    So jetzt wisst ihr auch worum es geht. Und bitte nicht meckern über meine Vorgehensweise mit den Textdateien und so ;) Ich kann es bis jetzt nur so.

    Hier ist der Code, um einen Mitspieler hinzuzufügen und zu löschen:

    <?php 
    
    //Anzahl Mitspieler
    $file = file("textdateien/m_spieler$counterstand.txt");
    $anzahl_mitspieler = count($file);
    $i = $anzahl_mitspieler;
    
    ?>
    <!--Spieler hinzufügen-->
    <center>
    <form method="post" action="zuweisung.php">
      <fieldset style="width:340px">
      <legend>Neuen Mitspieler hinzufügen:</legend>
      <label><input name="name2" type="text"  size="50" maxlength="50" <?php if ($i >=9) {echo "disabled";}; ?> value="<?php if ($i >=9) {echo "Du hast die maximale Anzahl von 10 Spielern erreicht";}; ?>"/></label><br />
      
      <input name="Posten" type="submit" value="Hinzufügen" <?php if ($i >=10) {echo "disabled";}; ?> /> 
      </fieldset>
      </form> 
      </center>
      
    <?php
    
    $counter = fopen("textdateien/counter.txt","r+"); 
      $counterstand = fgets($counter, 10); 
    
    if(isset($_POST['Posten']) && isset($_POST['name2'])) {
        //Datum:
        $datum = date("d.m.Y");
        $uhrzeit = date("H:i");
     
        $name=$_POST['name2'];
        $name=nl2br($name);
        $text = "+'$name'+  \r\n";                             
        $datei=fopen("textdateien/m_spieler$counterstand.txt","a");
        fputs($datei,$text);
        fclose($datei);
      // hier soll normalerweise die Seite neu geladen werden
    }
    ?>
    
    
    <!--LÖSCHEN-->
    <center>
    <form method="post">
    Mitspieler löschen: <input type="text" name="nr" placeholder="Zeile eingeben (Bsp: 1)" />
    <input type="submit" name="submit" value="X"/>
    </form>
    </center> 
    <?php
    if(isset($_POST['nr'])) {
        $zeile = $_POST['nr'] - 1; 
        $datei = "textdateien/m_spieler$counterstand.txt";
     
        $zeilen = file($datei);
        unset($zeilen[$zeile]);
     
        $handle = fopen($datei, 'wb');
        fwrite($handle, implode('', $zeilen));
        fclose($handle);
    // hier soll normalerweise die Seite neu geladen werden
    } ?>
    
    <br />
    Eingetragene Mitspieler:<br />
    &nbsp;<select name="fussballer" size="11" style="width: 150px;" >
    
    <?php
    
    $datei = fopen("textdateien/m_spieler$counterstand.txt","r");
    $inhalt = fread($datei, filesize ("textdateien/m_spieler$counterstand.txt"));
    $inhalt = explode("\n",$inhalt);
    $newinhalt='';
    
    foreach($inhalt as $zeile){
    $newinhalt.=$zeile."\n";
    }
    $newinhalt = str_replace("+'","<option value='$name'>",$newinhalt);     
    $newinhalt = str_replace("'+","</option>",$newinhalt);      
    
    echo($newinhalt);
    fclose($datei);
    ?>
    
    </select>
    <br /><br />


    Was würdet ihr jetzt vorschlagen, was ich machen soll? Danke übrigens für eure Hilfe ;)
  13. Hi,

    sehe gerade das Problem nicht.
    Warum soll die Seite überhaupt neu geladen werden? Wegen der Anzahl der Spieler?
    Wie wäre es, wenn du erst die PHP Sachen abarbeitest und am Ende der Seite das HTML ausgibst?

    Gruß
  14. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Ich habe jetzt mal den Wert der Variable $i neben dem Button ausgegeben. Du wirst sehen, wenn du einen Namen hinzufügst, verändert sich der Wert nicht. Erst nach manuellen Neuladen. Und dieses Neuladen soll automatisch geschehen.
  15. Hi,

    bei mir ändert sich der wert wenn ich auf "hinzfügen" klicke, ohne nochmal neu zu laden.

    Gruß
  16. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Komisch... Ich habe auf jeden Fall jetzt eine Lösung gefunden, mit der es bei mir auch geht.
    Am Ende meines Codes habe ich folgendes erweiter:

    <?php
    //Anzahl Mitspieler
    $file2 = file("textdateien/m_spieler$counterstand.txt");
    $anzahl_mitspieler2 = count($file2);
    $t = $anzahl_mitspieler2;
    ?>
    <?php
    if ($i != $t) {
    	?> <script type="text/javascript">javascript:location.reload()</script> <?php
    }
    ?>


    Ich habe eine weitere Variable $t eingeführt, die das gleiche bezweckt, wie die erste Variable $i. Nur $t steht am Ende des Scripts, also wird diese im Gegensatz zu $i beim Klick auf den Button aktualisiert. Dann habe ich eine if abfrage gemacht, ob die beiden Variablen ungleich sind. Das sind sie ja immer. Wenn sie also ungleich sind, also immer, wird die Seite durch einen Javascript Code neu geladen.
  17. Hi,

    na wenn du jetzt zufrieden bist.

    Ich würde zwar vermuten, dass es reicht $i nach dem update der Textdatei zu ermitteln, ganz ohne Vergleich und sonstwas, aber so geht es ja scheinbar auch.

    Gruß
  18. 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!