PHP PHP Variabele an eine andere PHP Datei übergeben

Marco-Ligon

Newbie
Registriert
Feb. 2019
Beiträge
7
Guten Tag ich möchte momentan eine PHP Webseite schreiben.
Das ist mein Bis hergier Code:
<form action="testen2.php" method="post">
Name: <input type="text" name="name" /><br />
Versicherungsnummer: <input type="text" name="kvn" /><br />
test: <input type="password" name="passwort" /><br />
<input type="submit" value="neuer Partient anlegen" />
</form>
<?php
$Name = $_POST['name'];
$Kvn = $_POST['kvn'];
$passwort = $_POST['passwort'];
$user_info = array($Kvn, $passwort, $Name);
$txtname = $Kvn.".txt";
$txtname2 = "ad.txt";


if(!empty($Name) AND !empty($Kvn) and !empty($passwort)) {
$eintrag = implode(";", $user_info)."\r\n";
file_put_contents("$txtname", $eintrag, FILE_APPEND);
echo "$Name, $Kvn wurde angelegt und in der Txt gespeichert ";
} else {
echo "Bitte alle Felder ausfüllen";
}


// session_start();
//$_SESSION["x"]=$txtname2;
?>
<!-- html part unter php für buttons -->
<form action="testen1.php" method="post1">

<br>


<button formaction="testen1.php">
zurück auf die letzte Seite
</button>
<button formaction="a.php">
zur Seite a
</button>
<?php
$handle = fopen ("ad.txt", "r");
$handle2 = fopen ("222222.txt", "r");

while ( $inhalt = fgets ($handle, 6666 ))
{

echo "<li> $inhalt ";
echo "<li> $handle2 ";
}

fclose($handle);
?>
In der a.php Datei sollen die in der Testen2.php erstellten Txt Dateien ausgelesen werden und als Liste ausgegeben werden.
Mein Problem ist, dass keine Ahnung habe wie die txt Dateien, welche ja den Versicherungsnummer als Dateinamen haben wieder in der php liste ausgeben kann, da ich ja im Voraus nicht weiß, wie die angegebene Versicherungsnummer lautet.
Ich möchte am ende zwei Listen (links und eine Liste rechts) erstellen, in welchen ich die in den txt Dateien eingespeicherten Werte ausgebe. Zwischen den Listen Links und Rechts sollen Automatisch die eingetragenen Werte aufgeteilt werden.
 
Zuletzt bearbeitet:
Ich versteh das Problem nicht ganz.
Du weißt doch wie die Versicherungsnummer heißt, heißt du kannst in deiner Schleife ohne Probleme die entsprechende Datei öffnen.

Du kannst ja problemlos statt fopen ("222222.txt", "r"); auch fopen ($someVar . ".txt", "r"); in der While-Loop machen. So kommst du dann an die unterschiedlichen Dateien wenn du in der while-Schleife die richtige Datei lädst.


Möchte aber mal kurz drauf hin weisen dass das alles sehr sehr gewagt aussieht :p
Ich hoffe dass das so niemals echte Daten speichern wird, oder das per Apache/htaccess ein Login passiert. Weniger kritisch wenn das nur in einem lokalem Netzwerk läuft, aber trotzdem sehr unsicher. Grade wenn WLAN oder offene LAN-Buchsen rumhängen.
Es wäre echt fahrlässig Klartext-Passwörter in eine txt zu speichern die jeder Nutzer aufrufen kann. Zusätzlich dann irgendwelche Versicherungsdaten, ich würde dir meine Daten nicht anvertrauen :evillol:

Besteht die Möglichkeit eine Datenbank (z.B. MySQL) zu benutzen? Das würde nicht nur etwas sicherer sein (weil dann eben nur ein MySQL-Nutzer drauf zugreifen kann), sondern du sparst dir auch recht viele File-System Zugriffe.
Eine Datenbank wäre meiner Meinung nach um einiges eleganter. So eine Struktur per CSV (sind ja im Endeffekt per ; getrennte Datensätze) zu speichern wird nicht gut skalieren.

Du lädst dir die "index"-Textdatei die möglicherweise Tausende von Zeilen haben kann, und dann lädst du in der while-Loop nochmal Tausende von weiteren txts.
Die Tausende von txts kann man sich sparen indem du eine Übersicht baust die dann gezielt nur eine Datei aufruft. Quasi ein Link der die a.php?id=VERSICHERUNGSNUMMER_DIE_ICH_SEHEN_WILL aufruft und dann nur gezielt diese eine Datei einliest.
 
  • Gefällt mir
Reaktionen: Cool Master
Joshinator schrieb:
Ich versteh das Problem nicht ganz.
Du weißt doch wie die Versicherungsnummer heißt, heißt du kannst in deiner Schleife ohne Probleme die entsprechende Datei öffnen.

Du kannst ja problemlos statt fopen ("222222.txt", "r"); auch fopen ($someVar . ".txt", "r"); in der While-Loop machen. So kommst du dann an die unterschiedlichen Dateien wenn du in der while-Schleife die richtige Datei lädst.


Möchte aber mal kurz drauf hin weisen dass das alles sehr sehr gewagt aussieht :p
Ich hoffe dass das so niemals echte Daten speichern wird, oder das per Apache/htaccess ein Login passiert. Weniger kritisch wenn das nur in einem lokalem Netzwerk läuft, aber trotzdem sehr unsicher. Grade wenn WLAN oder offene LAN-Buchsen rumhängen.
Es wäre echt fahrlässig Klartext-Passwörter in eine txt zu speichern die jeder Nutzer aufrufen kann. Zusätzlich dann irgendwelche Versicherungsdaten, ich würde dir meine Daten nicht anvertrauen :evillol:

Besteht die Möglichkeit eine Datenbank (z.B. MySQL) zu benutzen? Das würde nicht nur etwas sicherer sein (weil dann eben nur ein MySQL-Nutzer drauf zugreifen kann), sondern du sparst dir auch recht viele File-System Zugriffe.
Eine Datenbank wäre meiner Meinung nach um einiges eleganter. So eine Struktur per CSV (sind ja im Endeffekt per ; getrennte Datensätze) zu speichern wird nicht gut skalieren.

Du lädst dir die "index"-Textdatei die möglicherweise Tausende von Zeilen haben kann, und dann lädst du in der while-Loop nochmal Tausende von weiteren txts.
Die Tausende von txts kann man sich sparen indem du eine Übersicht baust die dann gezielt nur eine Datei aufruft. Quasi ein Link der die a.php?id=VERSICHERUNGSNUMMER_DIE_ICH_SEHEN_WILL aufruft und dann nur gezielt diese eine Datei einliest.


Hi danke für die Antwort ich habe das ganze einmal probeweise erstellt. Ich speicher das ganze momentan in den Txt Dateien um die neu erstellten Sachen einfacher lesen zu können. Natürlich speicher ich das ganze später in einer Datenbank.
<?php
$handle = fopen ($someVar . ".txt", "r");


while ( $inhalt = fgets ($handle, 6666 ))
{

echo "<li> $inhalt ";
echo "<li> $handle2 ";
}

fclose($handle);
?>
ich glaube so meinst du das, jedoch klappt das leider bei mir nicht. Ich habe grade erst angefangen in php mir eine Webseite zu erstellen. Also sorry wenn ich mich etwas dumm anstelle.
 
Dir ist bewusst, dass du im Prinzip noch mal von vorne anfangen kannst, wenn du später auf MySQL umstellst? Viel von deinem Code wirst du dann nicht mehr nutzen können. Warum also nicht gleich richtig machen?
 
Tourgott schrieb:
Dir ist bewusst, dass du im Prinzip noch mal von vorne anfangen kannst, wenn du später auf MySQL umstellst? Viel von deinem Code wirst du dann nicht mehr nutzen können. Warum also nicht gleich richtig machen?
Weil ich gerne ein Erfolgserlebnis haben möchte bevor ich die nächsten 8 Tage jeden Abend damit verbringe nach der Arbeit die Datenbank zu erstellen. Da ich momentan ein Funktionierende Datei habe also warum nicht für die Tests benutzen.
Also ich habe keine Ahnung wie ich das mit dem fopen ($someVar . ".txt", "r") benutzen kann.
Wäre nett mir bei meinem Problem zu helfen und jetzt keine Diskussion anzufangen warum ich keine Datenbank benutze sondern das ganze noch als txt-Dateien speichere.
 
  • Gefällt mir
Reaktionen: new Account()
Du hast ja nur in der Schleife Zugriff auf die KVN-Nummer, du kannst also nicht vor der Loop drauf zugreifen.
Aber wie bereits gesagt, so lädst du für jede KVN in deinem Index eine weitere Datei.

Du könntest die List so umbauen das die mit Links funktioniert, und dann per get-Parameter eine Detailansicht aufrufen.
Im Prinzip -> a.php wird aufgerufen, hat eine Liste mit allen KVNs, User clickt auf Listen-Element -> Element ist ein Link der zu a.php?id=GEKLICKTE_KVN führt -> script prüft in der while-Loop ob die aktuelle KVN mit dem get-Parameter übereinstimmt -> Script lädt die Txt -> PHP gibt eine Website mit "zwei Spalten"-Layout zurück.

PHP:
<?php
$handle = fopen ($someVar . ".txt", "r");


while ( $inhalt = fgets ($handle, 6666 )) {
   
    // manche PHP Versionen können nicht direkt per [0] drauf zugreifen
    // muss dann erst in ein Array gespeichert werden
    $versNummer = explode($inhalt, ";")[0];
    echo "<li> $inhalt</li>";
   
    // wenn $versNummer z.B. 123456 war wird jetzt versucht die 123456.txt zu öffnen
    $handle2 = fopen($versNummer . ".txt", "r");
    echo "<li> $handle2</li>";
}

fclose($handle);
?>

Aber wie bereits von @Tourgott erwähnt, du schreibst damit einen Großteil des Codes neu wenn du auf SQL baust.
 
Zuletzt bearbeitet:
@Joshinator
Joshinator schrieb:
PHP:
<?php
$handle = fopen ($someVar . ".txt", "r");


while ( $inhalt = fgets ($handle, 6666 )) {
  
    // manche PHP Versionen können nicht direkt per [0] drauf zugreifen
    // muss dann erst in ein Array gespeichert werden
    $versNummer = explode($inhalt, ";")[0];
    echo "<li> $inhalt</li>";
  
    // wenn $versNummer z.B. 123456 war wird jetzt versucht die 123456.txt zu öffnen
    $handle2 = fopen($versNummer . ".txt", "r");
    echo "<li> $handle2</li>";
}

fclose($handle);
?>

Aber wie bereits von @Tourgott erwähnt, du schreibst damit einen Großteil des Codes neu wenn du auf SQL baust.
2019-02-25_13-35-02.png


Ich lade leider immer noch in den selben Fehlercode wie vorher rein.
 
Mein Fehler, die zweite Zeile kann ganz weg. Habe ich zu viel kopiert.

PHP:
<?php
    $handle = fopen ("ad.txt", "r");

    while ( $inhalt = fgets ($handle, 6666 )) {
      
        $kvn = explode($inhalt, ";")[0];
        $handle2 = fopen ($kvn . ".txt", "r");
        //les den Spaß aus der Datei
        echo "<li> $inhalt ";
        echo "<li> $handle2 ";
        //schließ $handle2
    }

    fclose($handle);
?>

Aber die grundlegende Logik dahinter kapierst du? Ich öffne das Inhaltsverzeichnis, loope durch jeden Eintrag, öffne dann die entsprechende Seite und lese dann dort die richtige Datei.
Wie man die Zeilen per PHP ließt lässt sich ja googlen, gibt dafür genug 3-Zeilen Tutorials. Das Forum ist ja nicht dafür gedacht das dir der Code zum Copy&Pasten gegeben wird. Geht ja darum das zu was lernst und es in Zukunft selbst hinbekommst.
 
@Joshinator
Joshinator schrieb:
Mein Fehler, die zweite Zeile kann ganz weg. Habe ich zu viel kopiert.

PHP:
<?php
    $handle = fopen ("ad.txt", "r");

    while ( $inhalt = fgets ($handle, 6666 )) {
     
        $kvn = explode($inhalt, ";")[0];
        $handle2 = fopen ($kvn . ".txt", "r");
        //les den Spaß aus der Datei
        echo "<li> $inhalt ";
        echo "<li> $handle2 ";
        //schließ $handle2
    }

    fclose($handle);
?>

Aber die grundlegende Logik dahinter kapierst du? Ich öffne das Inhaltsverzeichnis, loope durch jeden Eintrag, öffne dann die entsprechende Seite und gebe lese dann dort die richtige Datei.
Es tut mir echt leid aber ich weiß nicht warum ich das nicht hin bekomme. Als erstes müsste ich sagen, dass ich nicht weiß wie die .txt Dateien heißen, da ich den namen irgendwie aus einer anderen (testen2.php) bekommen müsste um die text Dateien ausgeben zu können(). Ich hatte nur als Test zweck oben gesagt, dass die txt Datei ad.txt heißt.
<?php
while ( $inhalt = fgets ($handle, 6666 )) {

$kvn = explode($inhalt, ";")[0];
$handle2 = fopen ($kvn . ".txt", "r");
//les den Spaß aus der Datei
echo "<li> $inhalt ";
echo "<li> $handle2 ";
//schließ $handle2
}

fclose($handle);
?>
2019-02-25_13-35-02.png

Das bekomme ich zurück beim öffnen der Seite.
 
Nicht das ich hier was falsch Versanden habe:

  • User öffnet deine testen.php, gibt Daten ein, sendet ab
  • User landet auf der testen2.php, die speichert die Daten in die ad.txt
  • Die a.php öffnet die ad.txt

Für mich hat die a.php dann genau die Daten die sie braucht. Die KVN steht ja als erstes Element in jeder Zeile. Was bekommst du dann nicht hin?
Solange die entsprechenden Daten in der ad.txt und die "Details" aus der anderen txt da sind passt doch alles?
 
@Joshinator
Der User lädt mit der testen2.php, die speichert die Daten in die eine .txt Datei mit dem Namen der vorher auf der Testen1.php im Feld Krankenversicherungsnummer eingegeben worden ist. Es wird nicht alles in eine Datei gespeichert sondern in mehrere.
 
Das ist mir klar, eben diese "VERSICHERUNGSNUMMER.txt" habe ich mit "Details" gemeint.
Deine "ad.txt" ist das Inhaltsverzeichnis für deine Armada an "VERSICHERUNGSNUMMER.txt"-Dateien.

Deine Ad.txt sieht doch so aus:

Code:
123456;tollesPasswort;Max Mustermann
654321;tollesPasswort123;Erika Mustermann
....
....

Wenn jetzt also deine a.php in einer Schleife jeder Zeile aus der ad.txt durch geht, dann kommst du an jede Nummer. Eben wie bereits geschrieben per explode(), dort steht die Nummer dann im Index 0.
Dann kannst du in der Schleife mit dieser Nummer die richtige VERSICHERUNGSNUMMER.txt laden.


Wenn diese ad.txt nicht existiert, dann brauchst du genau so eine Index-Datei damit du weißt welche Versicherungsnummern alle eingegeben wurden.
Alternativ ginge es auch per scandir(), damit bekommst du alle Dateien aus einem bestimmtem Ordner. Damit kannst du auch die Loop ansteuern damit du dann die VERSICHERUNGSNUMMER.txt's öffnen kannst.
 
Joshinator schrieb:
Das ist mir klar, eben diese "VERSICHERUNGSNUMMER.txt" habe ich mit "Details" gemeint.
Deine "ad.txt" ist das Inhaltsverzeichnis für deine Armada an "VERSICHERUNGSNUMMER.txt"-Dateien.

Deine Ad.txt sieht doch so aus:

Code:
123456;tollesPasswort;Max Mustermann
654321;tollesPasswort123;Erika Mustermann
....
....

Wenn jetzt also deine a.php in einer Schleife jeder Zeile aus der ad.txt durch geht, dann kommst du an jede Nummer. Eben wie bereits geschrieben per explode(), dort steht die Nummer dann im Index 0.
Dann kannst du in der Schleife mit dieser Nummer die richtige VERSICHERUNGSNUMMER.txt laden.


Wenn diese ad.txt nicht existiert, dann brauchst du genau so eine Index-Datei damit du weißt welche Versicherungsnummern alle eingegeben wurden.
Alternativ ginge es auch per scandir(), damit bekommst du alle Dateien aus einem bestimmtem Ordner. Damit kannst du auch die Loop ansteuern damit du dann die VERSICHERUNGSNUMMER.txt's öffnen kannst.
Ich glaue wir haben an einander Vorbei geredet. Auf der ersten Seite habe ich nur eine Eingabe von Parametern wie z.B. Namen und Versicherungsnummer.
In der zweiten Seite wird eine txt Datei erstellt. diese hat den Namen, der Versicherungsnummer mit dem Inhalt: 123456;Passwort;Max Mustermann. wenn ich noch mal auf die erste Seite gehe und erneut den namen aber eine andere Versicherungsnummer angebe. So legt man automatisch eine neue Txt an, welche als namen die neue Versicherungsnummer.Txt hat. Das heißt für jede neue Eingabe lege ich auch eine neue txt Datei an.

Nun möchte ich in der a.php diese txt Dateien laden. Ich muss also irgendwie die Namen, der Txt Dateien wissen.
 
Dann verstehe ich nicht wozu die ad.txt-Datei existiert.

Aber wie gesagt, wenn du keine "Index-Datei" hast kannst du per scandir() herausfinden welche Dateien sich in einem Ordner auf dem Server befinden.
Wenn du dann all deine txt-Dateien in einen Unterordner der Website schreibst kannst du dann ganz einfach durch das Array von scandir() loopen. Für jeden Durchlauf lädst du dann die entsprechende Datei wie bereits oben von mir im Beispiel-Code. Nur die Schleifen-Bedingung verändert sich.
 
Du kannst Daten auch mit mit dem Atribut "hidden" übergeben:
echo '<input type="hidden" name="DateiName" value="'.$txtname2.'">';

Ob das allerdings mit Arrays geht bezweifel ich.
 
Man kann per HTML ein Array für ein Form-Element bauen.
HTML:
<input type="hidden" name="dateien[]" value="Wert0">
<input type="hidden" name="dateien[]" value="Wert1">
<input type="hidden" name="dateien[]" value="WertN">

Das kann man dann in PHP über $_POST['dateien'] wie ein richtiges Array benutzen.

Aber das wäre ja keine richtige Lösung wenn jede Seite eine Form wäre damit man die Nummern per Post zwischen den Scripten hin und her schiebt.
Wenn man die Seite in nem neuem Tab aufmacht hat man dann nicht mehr alle Nummern bereit.

Um eine Index-Datei oder scandir() kommt TE nicht drum herum.
Oder halt alles in eine einzelne Datei packen, die 3 Spalten je Zeile sind ja jetzt nicht die Welt.
Ob die dann als CSV, PHP-Array oder JSON gespeichert wird ist ja zweitrangig.
 
Zurück
Oben