WinFuture-Forum.de: Laufschrift Aus Textdatei - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Laufschrift Aus Textdatei


#1 Mitglied ist offline   schwedenfan 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 18. Juni 08
  • Reputation: 0

geschrieben 18. Juni 2008 - 13:16

Hallo,

ich hab mir bereits folgendes gebastelt: ein Formular, mit dem man Sätze in eine Textdatei speichern kann. Diese Sätze sollen dann aus der Textdatei in einer Laufschrift wieder ausgegeben werden.
Ich bin leider nicht so sehr der PHP-Profi, aber ich habe es schon hingekriegt, dass das Ganze grundsätzlich funktioniert.

Leider gibts noch zwei Probleme:
1. Wenn man eine Eingabe macht und abschickt, wird zwar der Eintrag gespeichert, aber nicht gleich ausgegeben, sondern erst bei einer nächsten Eingabe. Lässt sich das vielleicht irgendwie lösen. Ich komm bisher nicht drauf.

2. Eigentlich sollte die Textdatei verkehrtherum ausgelesen werden, also der neueste Eintrag immer zuerst. Oder gibt es vielleicht eine Möglichkeit, schon die Textdatei immer oben mit dem neuesten Beitrag zu beschreiben?

Für eventuelle Warnungen wegen des <marquee>-Tags etc.: die Kompatibilität ist nicht so schlimm, weil die Anwendung nur für eine bestimmte Veranstaltung gebraucht wird und ich die Konfiguration des verwendeten Rechners kenne. :wink:

Vielen Dank schon mal für Tipps!
Grüße, schwedenfan

<html>
<head>
<title>Neues Dokument</title>
</head>
<body>
<center>
<font size="18px">
<?php
$fpr2 = fopen("daten.txt", "r");

echo
"<marquee scrolldelay='200'>";
while(feof($fpr2) == false)
{
$line = fgets($fpr2);
echo $line;
}

echo"</marquee>";
?>
</font>
<form action="<?php $PHP_SELF ?>" method="post">
 <input type="text" name="zeile"> <br>
 <input type="submit" value="Eintrag speichern">
</form>
<?php
// Formulareingabe speichern
if ($_POST) {
 $zeile = $_POST["zeile"];
 $text = "$zeile \n"; // Textstring zusammensetzen

 $dateiname = "daten.txt"; // Name der Datei
 $handler = fOpen($dateiname, "a+"); // Datei zum Text anhängen öffnen
 fWrite($handler, $text); // Dateiinhalt in die Datei schreiben
 fClose($handler); // Datei schließen
}
?>
</center>
</body>
</html>

0

Anzeige



#2 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 18. Juni 2008 - 13:43

Versuch mal damit:

fClose($handler); // Datei schließen
echo '<meta http-equiv="Refresh" content="0"; URL="">';;

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 18. Juni 2008 - 13:46

0

#3 Mitglied ist offline   schwedenfan 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 18. Juni 08
  • Reputation: 0

geschrieben 18. Juni 2008 - 13:49

Das ist leider nicht so gut, weil die Seite dann ununterbrochen neu lädt und man gar nix mehr eingeben kann. :wink:
0

#4 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 18. Juni 2008 - 13:53

Versteh nich was du meinst, die Seite läd doch nur wenn du etwas eingibst! Wenn der Post leer ist wird da nichts neu laden!
0

#5 Mitglied ist offline   schwedenfan 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 18. Juni 08
  • Reputation: 0

geschrieben 18. Juni 2008 - 13:56

Oh, wie dumm von mir. Ich hatte jetzt fclose zweimal drin. Funktioniert jetzt wunderbar. Vielen Dank. :wink:

Hats du vielleicht auch noch eine Idee zu meiner zweiten Frage mit dem "umgekehrten Auslesen" der Datei?

Grüße, schwedenfan
0

#6 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 18. Juni 2008 - 15:12

Hey,
finde du hast es viel zu umständlich gemacht.
Habe es mal eben auf die schnelle komplett neu geschreiben:
<?php
//Alte Daten einlesen
$fp = fopen("daten.txt","r");
$dat_old = fgets($fp);
fclose($fp);

// Neue daten auslesen
if(!empty($_POST)){
$text_new=$_POST["zeile"];

// Neuen String zusammensetzten
$new_string= "$text_new $dat_old";

//Neuen String speichern
$handle = fopen("daten.txt", "w"); 
fwrite($handle, $new_string); 
fclose($handle);
}
//Ausgabe des lauftextes
echo "<marquee scrolldelay='5'>";

$fp = fopen("daten.txt","r");
$daten = fgets($fp);
echo $daten;
echo "</marquee>";

?>
<div align="center" >
<form action="<?php $PHP_SELF ?>" method="post">
<input type="text" name="zeile"> <br>
<input type="submit" value="Eintrag speichern">
</form>
</div>


So müsste es doch gehen!

Gruß,
Toasterfraktion
0

#7 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 18. Juni 2008 - 16:40

Wieso eigentlich die ganze Speicherei in der Textdatei? Man übergibt den alten Text in einem versteckten Formularfeld mit und bastelt den an den Neuen hintendran und das ist dann der "neue", alte Text. Ohne zwischenspeichern oder man speichert ihn vorsichtshalber in jeder Schleife einmal ab um den Text zu sichern aber die Textdatei kann aus der eigentlichen Lauftextwiedergabe rausgelassen werden. Das ist doch nur unnütze Rechenzeit, dann ist das ganze Script eine Sache von 5 Zeilen. (bildlich gesprochen, wenn man es schön übersichtlich macht, können es auch ein paar mehr sein)

Muß jetzt zur Bandprobe, wenn ich wiederkomme schreib ich das mal kurz oder vielleicht hat das bis dahin ja schon ein anderer gemacht.

Dieser Beitrag wurde von Gitarremann bearbeitet: 18. Juni 2008 - 16:42

Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#8 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 18. Juni 2008 - 16:48

@ Gitarremann
*vordenkopfhau* Du hast ja Recht. :-D mit den Hiddenfeldern ist es wirklich einfacher. Ich bemerke wie nützlich solche hiddenfelder sein könne, aber können da nicht auch mal Daten verloren gehen, da sie ja nur übergeben wird?

Viel Spass beim Proben!

Gruß
0

#9 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 18. Juni 2008 - 21:14

So, mehr ist es nicht:

<?php $neuer_text = $_POST['textneu']; $alter_text = $_POST['textalt'];
   if ($neuer_text) {$alter_text = $neuer_text." - ".$alter_text;} ?><marquee><?=$alter_text?></marquee>
   <form action="lauftext.php" method="post"><input type="text" name="textneu" />
   <input type="hidden" name="textalt" value="<?=$alter_text?>" />
   <input type="submit" name="senden" value="Abschicken" /></form>



Und wenn man angst vor einem Datenverlust hat, Rechner stürzt zwischendrin mal ab oder so, dann kann man ja bei jedem Durchlauf die Variable $alter_text in eine Textdatei schreiben, um sie einfach nur zu sichern oder die Variable $neuer_text. Muß man nur aufpassen, dass man bei $neuer_text immer nur dazuschreibt und bei $alter_text überschreibt.

(Hab das jetzt nur mal so unübersichtlich gemacht, dass ich bei den versprochenen 5 Zeilen bleibe)


Achso bei action natürlich die entsprechende Datei ändern. Die hieß bei mir nur lauftext.php.

Dieser Beitrag wurde von Gitarremann bearbeitet: 18. Juni 2008 - 21:17

Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#10 Mitglied ist offline   schwedenfan 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 18. Juni 08
  • Reputation: 0

geschrieben 19. Juni 2008 - 16:57

Hallo!

Vielen lieben Dank erstmal für eure Hilfe. Ich bevorzuge aber dann doch den Vorschlag von Toasterfraktion, weil ich das selber noch einigermaßen durchblicke. (danke schön dafür!) Steh mit PHP aber wirklich ziemlich am Anfang und das Zusammensetzen der Strings versteh ich noch nicht so ganz.

Wenn ich die einzelnen Eingaben in der Laufschrift etwa jeweils durch einen Stern abtrennen will, um das ganze übersichtlicher zu machen, kann ich das dann hier bewerkstelligen?

fwrite($handle, $new_string);

Aber wie? :angry:

Viele Grüße, schwedenfan
0

#11 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 19. Juni 2008 - 17:57

Zitat

das Zusammensetzen der Strings versteh ich noch nicht so ganz

Welcher denn? Dann kann ich dir es erklären!


Zitat

Wenn ich die einzelnen Eingaben in der Laufschrift etwa jeweils durch einen Stern abtrennen will, um das ganze übersichtlicher zu machen, kann ich das dann hier bewerkstelligen?
Hm ich weiß nun nicht ganz was du meinst! :-P

Meinst du das hier?
echo "Anzahl:".$variable;

echo $string.$variable.$variable2.$usw;

0

#12 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 19. Juni 2008 - 19:20

Beitrag anzeigenZitat (schwedenfan: 19.06.2008, 17:57)

Hallo!

Vielen lieben Dank erstmal für eure Hilfe. Ich bevorzuge aber dann doch den Vorschlag von Toasterfraktion, weil ich das selber noch einigermaßen durchblicke. (danke schön dafür!) Steh mit PHP aber wirklich ziemlich am Anfang und das Zusammensetzen der Strings versteh ich noch nicht so ganz.

Wenn ich die einzelnen Eingaben in der Laufschrift etwa jeweils durch einen Stern abtrennen will, um das ganze übersichtlicher zu machen, kann ich das dann hier bewerkstelligen?

fwrite($handle, $new_string);

Aber wie? :)

Viele Grüße, schwedenfan


Ich kann es ja mal kommentieren:

<?php 
 
 // hier werden einfach nur die per Formular übergebenen Werte abgefragt
 // der alte Text wird in einem versteckten Feld übergeben und der neue kommt von der Eingabe
 $neuer_text = $_POST['textneu']; 
 $alter_text = $_POST['textalt'];
 
 // hier wird unter der Bedingung, dass ein Text eingegeben wurde, der alte Text genommen und der neue vorne
 // drangemacht mit dem Minus als Trennzeichen. Da einfach nur ein Sternchen hinmachen statt des Minus.
 // Die ganze If-Bedingung könnte auch weggelassen werden aber so passiert beim ersten Aufrufen nix und wenn
 // man ohne Eingabe den Abschicken Knopf drückt passiert auch nix.
 if ($neuer_text) {$alter_text = $neuer_text." - ".$alter_text;} ?>
 
 // Der aktuelle Text heißt jetzt natürlich "$alter_text". Ist im ersten Moment verwirrend aber der wird im
 // Formular dann ja als alter Text übergeben und der Text steht dann im marquee-Tag.
 <marquee><?=$alter_text?></marquee>
 
 // Und das ist einfach nur das Formular. Da wird der neue Text eingegeben und der alte text in dem versteckten 
 // Feld (hidden)mit übergeben
 <form action="lauftext.php" method="post">
 <input type="text" name="textneu" />
 <input type="hidden" name="textalt" value="<?=$alter_text?>" />
 <input type="submit" name="senden" value="Abschicken" />
 </form>

Dieser Beitrag wurde von Gitarremann bearbeitet: 19. Juni 2008 - 19:22

Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#13 Mitglied ist offline   schwedenfan 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 18. Juni 08
  • Reputation: 0

geschrieben 26. August 2008 - 17:06

Ich muss dieses Thema nochmal kurz nach oben holen.
Habe das Skript, das mir Toasterfraktion in Beitrag #6 zur Verfügung gestellt hat, im Einsatz.
Auf einem Webserver läuft das Ding auch wunderbar.
Jetzt wollte ich das ganze auf einem lokalen Apache-Server (XAMPP in neuester Version) zum laufen bringen und das funktioniert nicht. Scheint irgendwie an dem PHP_SELF zu liegen, denn wenn ich eine Nachricht abschicke, sagt mir der Browser, dass er diese Datei nicht gefunden habe.
(register_globals hab ich aber schon auf ON gesetzt, das hab ich nämlich über Internetrecherche rausgefunden.)
Und der Lauftext funktioniert auch nicht, da stehen dann bei lokaler Ausführung nur die Skriptteile, die für die Ausgabe des Lauftextes zuständig sind.

Weiß jemand vielleicht, woran das liegen könnte?
0

#14 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 26. August 2008 - 18:26

Es heisst ja auch $_SERVER['PHP_SELF'];.
0

#15 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 26. August 2008 - 19:22

Beitrag anzeigenZitat ([Elite-|-Killer]: 26.08.2008, 19:26)

Es heisst ja auch $_SERVER['PHP_SELF'];.

Und ein echo o.ä. gehört auch noch davor.

Ich habe den Code mal kurz überarbeitet und ihn lesbarer gestaltet:
<?php
//Alte Daten einlesen
$fp = fopen('daten.txt', 'r');
$daten = fgets($fp);
fclose($fp);

//Neue Daten auslesen
if (isset($_POST['zeile']) && (strlen($_POST['zeile']) > 0)) {
	$text_new = $_POST['zeile'];
	
	//Neuen String zusammensetzten
	$daten .= ' '.$text_new;
	
	//Neuen String speichern
	$fp = fopen('daten.txt', 'w');
	fwrite($fp, $daten);
	fclose($fp);
}

//Ausgabe des Lauftextes
echo '<marquee scrolldelay="5">';
echo $daten;
echo '</marquee>';
?>
<div style="text-align: center;">
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
	<input type="text" name="zeile"> <br />
	<input type="submit" value="Eintrag speichern">
</form>
</div>


Gruß,
Stefan
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0