• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Inhalt einer Datei auslesen und in andere Datei schreiben

Chris2907

Neues Mitglied
Hi,
ich bin noch relativ unerfahren im Thema PHP. Ich habe via HTML ein Formular erstellt. Nun soll je nachdem welche Position und Abteilung ausgewählt wurde, z.b Azubi & Einkauf, eine bestimmte Datei geöffnet werden. Der Inhalt dieser Datei soll im Anschluss in die Datei geschrieben werden, wo die restlichen Daten erfasst wurden.
Mein PHP Ansatz sieht wie folgt aus:
if ( $_POST['position'] == "Azubi" && $_POST ['auswahl'] == 'Einkauf'&&!file_exists("C:\Zielordner Gruppen\ Azubi_Einkauf.ini"))
{
echo "Datei nicht vorhanden.";
exit;
}
$dz=fopen("C:\Zielordner Gruppen\ Azubi_Einkauf.ini","r");
if($_POST['position'] == "Azubi" && $_POST ['auswahl'] == 'Einkauf' && !$dz)
{
$reihe=fgets($dz,50);
$daten = fopen ("daten.txt");
fwrite($daten, $reihe );
exit;
}

fclose($dz);
}
Hat jemand eine Idee was genau ich falsch mache?
 

Chris2907

Neues Mitglied
Danke für die Antwort. Habe es jetzt wie folgt versucht, allerdings funktioniert das auch nicht wirklich...

if($_POST['position'] == "Azubi" && $_POST ['auswahl'] == 'Einkauf')
{
$file = file_get_contents('C:\Zielordner Gruppen\ Azubi_Einkauf.ini', true);
$daten = 'daten.txt';

file_put_contents($file, $daten);
}

Hab ich da etwas vergessen? Geht mein Ansatz oben bzw. hier in die richtige Richtung?
 

m.scatello

Senior HTML'ler
Die Doku sollte man schon richtig lesen!!

Diese Zeile solltest du dir mal genauer ansehen:
PHP:
file_put_contents($file, $daten);
 

Sempervivum

Senior HTML'ler
IMO sind deine Variablennamen stark irreführend: $file enthält den Inhalt der Quelldatei und $daten offensichtlich den Dateinamen der Zieldatei. Eigentlich müsste es genau umgekehrt sein:
Code:
$data = file_get_contents('C:\Zielordner Gruppen\ Azubi_Einkauf.ini', true);
$filename_dest = 'daten.txt';
Dann findet man sich gleich besser zurecht.

Außerdem frage ich mich, warum Du die Quelldatei absolut und die Zieldatei relativ adressierst?
 

Chris2907

Neues Mitglied
Außerdem frage ich mich, warum Du die Quelldatei absolut und die Zieldatei relativ adressierst?
Die Quelldatei habe ich absolut adressiert, da sie sich im selben Verzeichnis wie die restlichen Dateien, bspw. inhalte.php, index.hmtl befindet und erst nach dem Ausführen des PHP Quellcodes verschoben wird. Die Zieldatei liegt in einem anderen Ordner ab, daher habe ich sie relativ adressiert.
Ich verstehe nicht ganz, was genau ich falsch mache. Ich hab leider kaum bis keine Erfahrung was PHP angeht, daher erkenne ich nicht so ganz, wo ich was vergessen habe.. Habe mir die Anleitung nochmal angeschaut und habe den Quellcode teilweise übernommen und mein Inhalt eingefügt, leider ohne Erfolg.
 

m.scatello

Senior HTML'ler
Ich hab leider kaum bis keine Erfahrung was PHP angeht

leider ohne Erfolg.
Das hat mit Erfahrung nichts zu tun, du liest die Doku nicht richtig!!!

Doku:
file_put_contents(
string $filename,
mixed $data,
int $flags = 0,
?resource $context = null
): int|false
Also
PHP:
file_put_contents($filename, $data);
du hast aber
PHP:
file_put_contents($data, $filename);

Das kommt u.a. davon, wie Sempervivum schon schrieb, wenn Variablennamen stark irreführend sind.
 

Chris2907

Neues Mitglied
Ich habe mir beide Dokus nochmal angesehen, in meinen Augen müsste der Code richtig sein. Funktioniert aber weiterhin nicht.

if($_POST['position'] == "Azubi" && $_POST ['auswahl'] == 'Einkauf')
{
$inhalt = file_get_contents('C:\Zielordner_Gruppen\Azubi_Einkauf.ini', FALSE, NULL, 1); <- Liest Inhalt ab erstem Zeichen aus Azubi_Einkauf.ini bis zum Ende

$data = 'daten.csv';

file_put_contents($inhalt, $data, 1, null, $FILE_APPEND); <- Nimmt den Inhalt aus $inhalt bzw. Azubi_Einkauf.ini und fügt ihn, durch $File_APPEND, am Ende von $data bzw. daten.csv ein.
}
Es wird aber weder der Inhalt ausgelesen, noch wird irgendwas in die bereits vorhandene Datei geschrieben. Wenn ich "C:\Zielordner_Gruppen\Azubi_Einkauf.ini..." in Azubi_Einkauf.txt ändere, wird eine neue CSV Datei im Hauptverzeichnis erstellt. Da werden sämtliche Formulardaten rein geschrieben und die Datei wird nicht in das richtige Verzeichnis verschoben. (Ich habe ein Befehl, welcher die daten.csv Datei mit dem aktuellen Datum versieht und diese Datei in C:\Zielordner verschiebt.)
 

m.scatello

Senior HTML'ler
Ich habe mir beide Dokus nochmal angesehen
Dann solltest du nochmal genau hinsehen!

file_put_contents($inhalt, $data, 1, null, $FILE_APPEND);

Und nochmal: deine Variablennamen sind stark irreführend!!! Was ist $inhalt und was ist $data? In $data stehen bei dir doch nicht die Inhalte, sondern der Dateiname! Wenn du jetzt immer noch nicht den Fehler findest, dann ist dir nicht zu helfen.

Und benutze bitte die Formatierungsmöglichkeiten des Forums, wenn du Quellcode postest.
 

m.scatello

Senior HTML'ler
Tipp:
Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 

m.scatello

Senior HTML'ler
Ich sehe auch gerade, dass du die weiteren Parameter bei file_put_contents durcheinander würfelst. Sie dir bitte mal die Beispiele in der Doku an.
 
Werbung:
Oben