Formulare, Counter und Auslesung

marie3

Grünschnabel
Hallo alle zusammen,

ich benötige wirklich sehr dringend Eure Hilfe! Ich muss in genau 2 Wochen eine fertige Homepage in der Schule abgeben und habe folgende Anforderungen bekommen...manche konnte ich schon alleine lösen nur sind mir diese ein riesiges Rätsel:


- Die Anzahl der Eingaben soll mitgezählt und angezeigt werden.

- Vorhandene Eingaben müssen sich über ihre Eingabenummer anzeigen lassen.

- Das Auslesen der Eingaben aus der Datei erfolgt auf einer weiteren Seite.


Ich bin nun schon soweit, dass ich eine php-Formulardatei habe, nur speichert mir diese Datei die Eingaben nur in einer Text-Datei und ich hab noch nicht mal eine Ahnung wie ich das alles noch mit Auslesungen und allem angeben soll - genau so wie mir das mit der Nummer ein Rätsel ist - heißt das nun, dass ich ein ganz normales anderes Feld habe - oder soll das besonderes Eigenschaften aufweisen?
Ich habe keine Ahnung!
Ich hoffe ihr könnt mir da irgendwie weiterhelfen - denn die Seiten die mir google vorgeschlagen hat, haben mir nicht geholfen.

Liebe Grüße und Danke, Marie!!

-Ich hoffe wirklich sehr, dass ihr mir weiterhelfen könnt - bin am Rande der Verzweiflung!!

P.S. Zu den Auslesungen habe ich auch schon Codes gefunden - aber alle verlangen, dass ich eine formular-html benötige und eine auslese.php. Nur ist das Formular bei mir ja auch schon php (weil ich die Eingaben in einer Textdatei speichern muss.)
Genau so wie bei dem Counter - ich habe einen Code für den Counter gefunden aber nicht speziell - wie viele Eingaben, nur generell für die ganze Seite.
 
Wie speicherst du in die Daten in einer Datei? Eine Zeile eine Eingabe?
Dann ist das Zählen einfach: Zähle die Zeilen der Datei.
 
also, wenn ich das jetzt richtig verstanden habe...
meine txt. Datei speichert die Eingaben leider nur hintereinander weg und nicht pro einer Formular-Eingabe untereinander :(, wenn man wüsste wie das geht - wäre ich auch sehr, sehr dankbar!
 
Hallo Marie,
also ich hoffe ich kann dir zumindest etwas weiter helfen, vorrausgesetzt ich habe alles richtig verstanden:
1. Man soll auf einer Seite in einem Formularfeld, irgendwelche Eingaben machen die dann in einer Datei gespeichert werden. Wird dabei jede Eingabe in einer eigenen Datei gespeichert oder alle Einträge zusammen in der selben Text-Datei?
2. Die Anzahl der Eingaben soll irgendwo auf deiner Seite angezeigt werden. Wenn du alle Eingaben in einer anderen Datei speicherst, kannst du einfach die Dateien zählen und ausgeben. Ansonsten musst du hinter jeder Eingabe irgendeinen Trenn-String einfügen, wodurch du die einzelnen Eingaben voneinander unterscheiden kannst.
3. Die einzelnen Einträge sollen angezeigt werden können indem man auf deiner Seite die Eingabenummer eingibt. Auch hierbei wäre es am einfachsten wenn du jeden Eintrag in einer eigenen Datei speicherst und der Datei als Namen die Eintragsnummer gibst. So kannst du am einfachsten darauf zugreifen.

Im Umgang mit Dateien solltest du dir folgende Funktionen angucken:
fopen, fclose, fwrite, fpassthru - suche mal im PHP Manual danach.

Falls du damit nicht weiter kommst, melde dich nochmal und sag wo es genau hakt, dann kann ich dir Code-Beispiele geben.
 
Man kann auch einfach alle Eingaben in einer Datei speichern, jeden in eine eigene Zeile ("\n" an den Eintrag einfügen ;-),
Anzahl der Zeilen ist dann gleich Anzahl Einträge, bzw. es macht Sinn, eine extra Datei anzulegen in der nur der Counter gespeichert ist. Bei jedem neuen Eintrag wird dann der Counter erhöht.
Wenn man diese eine Datei dann einliest und anhand der Zeilenumbrüche splittet und in ein Array schreibt, dann ist die Eintragsnummer -1 der Index im Array (Indices starten bei 0). Wenn die Anzahl der Daten zu groß wird, sagen wir mal bei 1000 Einträgen macht man eine neue Datei auf.
Im professionellen Bereich würde man das natürlich mit einer SQL Datenbank lösen.


Zur Aufteilung:
1. Du erstellst für die Eingaben eine HTML-Seite mit dem Formular. Etwa so
HTML:
<html>
<head>
<body>
<form action="action.php" method="post">
<input type="text" name="link" value="" maxlength="100"/><br/>
<textarea name="desc" cols="40" rows="6" wrap="soft" >
 </textarea><br/>
<input type="submit" value=" Absenden "/>
<input type="reset" value=" Abbrechen"/>

</form>
</body>
</head>
</html>
2. Du erstellst eine php Datei namens action.php, welche die Eingaben verarbeitet (Dateien öffnen, Eintrag schreiben, Counter erhöhen und in Datei schreiben,Dateien schließen)
Ein Beispiel das zu obiger HTML Seite passt (kannst du ja zum Testen verwenden)
PHP:
<?php
foreach($_POST as $key=>$value){
 $_POST[$key]=trim(strip_tags($value));
}
$name=$_POST['link'];
$comm=$_POST['desc'];
$file="irgendwas.txt";
$fh = fopen($file, "a+") or die ("Dateizugriff fehlgeschlagen");
fputs($fh,"$name" . "$comm");
fclose($fh);
header("Location: http://example.edu");
?>

3. Du erstellst ein 2. Formular, in dem eine Nummer eingegeben werden kann.
4. Du erstellst eine 2. PHP Datei die den Eintrag raussucht (Eintragsdatei öffnen, in Array einlesen, Zeile der Nummer entsprechend mit echo ausgeben, Datei schließen)

Du solltest dir hier: http://www.php.net/manual/de/ dir mal die Einträge zu
  • fopen
  • fgets
  • rewind
anschauen. Das habe ich benutzt um eine Counter Datei zu implementieren.
 
Zuletzt bearbeitet:
Erst einmal einen riiiesige Danke schön! An alle, die mir schon so verständliche Tipps gegeben haben ohne die Worte:
"Wir sind nicht deine Hausaufgabenmacher"
"Google doch mal"
zu verwenden. Denn ich bin wirklich nicht so eine, die sich denkt, dass es schon genug andere gibt, die meine Hausaufgaben machen können.


Alle Eingaben in eine Datei.
2. Die Anzahl der Eingaben soll irgendwo auf deiner Seite angezeigt werden. Wenn du alle Eingaben in einer anderen Datei speicherst, kannst du einfach die Dateien zählen und ausgeben. Ansonsten musst du hinter jeder Eingabe irgendeinen Trenn-String einfügen, wodurch du die einzelnen Eingaben voneinander unterscheiden kannst.
Ja, genau, die Anzahl der Eingaben soll angezeigt werden (in der Formular-Datei) und was eingegeben wurde auf einer extra-Datei.
3. Die einzelnen Einträge sollen angezeigt werden können indem man auf deiner Seite die Eingabenummer eingibt. Auch hierbei wäre es am einfachsten wenn du jeden Eintrag in einer eigenen Datei speicherst und der Datei als Namen die Eintragsnummer gibst. So kannst du am einfachsten darauf zugreifen.
Darf ich ja nicht...

Werd die Manuals mal suchen...



Man kann auch einfach alle Eingaben in einer Datei speichern, jeden in eine eigene Zeile ("\n" an den Eintrag einfügen ;-),
Versteh ich jetzt nicht. (Oh Gott, ich komm mir hier gerade wie der letzte Trotel vor.)

Anzahl der Zeilen ist dann gleich Anzahl Einträge, bzw. es macht Sinn, eine extra Datei anzulegen in der nur der Counter gespeichert ist. Bei jedem neuen Eintrag wird dann der Counter erhöht.
Wenn man diese eine Datei dann einliest und anhand der Zeilenumbrüche splittet und in ein Array schreibt, dann ist die Eintragsnummer -1 der Index im Array (Indices starten bei 0). Wenn die Anzahl der Daten zu groß wird, sagen wir mal bei 1000 Einträgen macht man eine neue Datei auf.
Im professionellen Bereich würde man das natürlich mit einer SQL Datenbank lösen.
Also, ich hab so eine SQL/MyadminPHP oder was das ist - aber kein Plan, was ich damit machen soll - wenn's so aber einfacher ist, könnte ich es auch so machen.


Die php Datei hat laut phase5 einen Fehler...
 
Zuletzt bearbeitet:
\n ist das Zeichen für einen Zeilenumbruch. Wenn man den an einen Text anhängt wird danach ein Umbruch erzeugt.
Also wenn du deine Einträge mit
fputs($fh,"$Eintrag");
schreibst werden die einfach alle aneinander gehängt ohne Umbrüche.
Mit
fputs($fh,"$Eintrag \n");
wird jeder Eintrag in eine eigene Zeile geschrieben.
 
Ok, also du musst alle Einträge in einer Datei haben und nicht in mehreren? Dann darfst du wahrscheinlich auch keine Datenbank verwenden (das wäre dann MySQL).

Dann musst du wie folgt vorgehen:
- HTML/PHP-Datei mit Formularfeldern zur Eingabe
- Beim Klick auf den Button (Senden der Formulardaten) wird die Eingabe per PHP in deine txt-Datei gespeichert. PHP-Funktionen: fopen(), fwrite(), fclose() -> Guck dir die Parameter bei fopen() an. Du brauchst wahrscheinlich "a".
- Dabei musst du dir noch überlegen, wie du die einzelnen Einträge voneinander trennst. Dafür wäre es gut zu wissen, ob die Eingabe in einem Textfeld oder in einer Textarea (ein- oder mehrzeilige Eingabefelder) gemacht wird?

Hier mal ein Beispiel-Code:
HTML:
<form name="formular" method="post" action="index.php">
	<textarea name="text" cols="30" rows="15"></textarea><br>
    <input type="submit" name="send" value="eintragen">
</form>

PHP:
<?php
	if(isset($_REQUEST['send']) && isset($_POST['text']) && trim($_POST['text']) != "") { //Prüfen, ob das Formular abgesandt wurde, die Eingabe übermittelt wurde und die Eingabe nicht leer ist
		$file = fopen("eintraege.txt", "a"); //Datei zum Schreiben öffnen
		fwrite($file, $_POST['text']); //Neuen Eintrag am Ende der Datei einfügen
		fclose($file); //Datei schließen
		
		if(!file_exists("counter.txt")) { //Wenn die Datei nicht existiert..
			$file = fopen("counter.txt", "a+"); //..erstelle die Datei..
			fwrite($file, "0"); // ..und schreibe 0 als Counter hinein
			fclose($file);	
		}
		
		$file = fopen("counter.txt", "w+"); //Counter öffnen
		$counter = fread($file, filesize("counter.txt")); //aktuellen Stand auslesen
		$counter++; //Counter erhöhen
		fwrite($file, $counter); //Counter zurückschreiben
		fclose($file);
			
	}
?>

Der Code ist ungetestet, sollte aber funktionieren oder dir zumindest helfen.

Danach gehts an das Auslesen. Aber mach erst mal diesen Teil
 
Danke für den Code! Jetzt zeigt er mir aber an das hier

PHP:
$counter = fread($file, filesize("counter.txt"));

"fread(): Length parameter must be greater than 0"
 
Als 2. Parameter brauchst du die Anzahl der Bytes die ausgelesen werden soll. Wenn das mit filesize() nicht klappt, nimm einfach mal direkt eine Zahl.
PHP:
$counter = fread($file, 32);
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück