Ich frage nach, weil es bei mir nicht funkioniert. Die Datei ist nach dem Vorgang leer...
txt arrays ersetzen und nicht überschreiben
Einklappen
X
-
Original geschrieben von alexs
Sähe das dann so aus?
ich nehme an, du willst immer nur genau eine zeile in der datei haben?
probiere mal folgendes:
PHP-Code:if($_POST['new_username'] == "$new_username"){
// datei zum lesen öffnen
$file = fopen("user.txt","r");
// zeile einlesen
$line=fgets($file,1024);
fclose($file);
// werte aufsplitten
$arr = explode("|",$line);
// erstes array-element durch neuen usernamen ersetzen
$arr[0] = $new_username;
// array-werte wieder zu einer zeile zusammenfügen
$neuer_inhalt = implode("|",$arr);
// datei zum schreiben öffnen
$file = fopen("user.txt","w");
// neuen inhalt schreiben
fwrite($file, $neuer_inhalt);
fclose($file);
}
kurzform, ohne jegliche fehlerbehandlung,
und unter der annahme, dass die bedingung
if($_POST['new_username'] == "$new_username")
richtig ist - obwohl ich da meine zweifel habe ... aber ob er in den if-zweig reingeht, kannst du ja selber prüfen ...I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Original geschrieben von alexs
Kann mir jemand verraten, wie ich diesen Code übertragen kann, wenn mehere Zeilen vorhanden sind?
das einlesen kannst du dir mit file() etwas einfacher machen, das liefert dir ein array zurück, in dem für jede zeile ein eintrag existiert.
mit explode machst du dir daraus dann am besten eine zweidimensionales array (schleife), führst deine änderungen durch, und erzeugst mit implode wieder ein ein-dimensionales array aus strings (wieder schleife).
anschliessend schreibst du die einzelnen zeilen wieder in die datei, ebenfalls in einer schleife.
oder, wenn du es dir etwas einfacher machen willst, schaust du dir serialize/unserialize an.
damit kannst du komplette arrays in einen string verwandeln, auch mehrdimensionale.
dann bräuchtest du nur noch deinen string aus der datei einlesen, in ein array wandeln, ersetzen - und dann das array wieder in einen string wandeln, und diesen wieder in die datei schreiben. das reduziert die zahl der schleifen natürlich - mit dem kleinen nachteil, dass das datenformat in der datei dann nicht mehr so "lesbar" für den menschlichen betrachter ist.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Alles was ich im Internet zu Zeidimensionalen Arrays gefunden habe ist folgendes:
PHP-Code://Zweidimensionalse Array
<?php
int zweiD [][] = new int[3][2];
// Erste Spalte Zweite Spalte
// Erste Zeile zweiD[0][0] zweiD[0][1]
//Zweite Zeile zweiD[1][0] zweiD[1][1]
//Dritte Zeile zweiD[2][0] zweiD[2][1]
?>
PHP-Code:// datei zum lesen öffnen
$file = fopen("user.txt","r");
// zeile einlesen
$line=fgets($file,300);
fclose($file);
foreach($lines as $line) {
for($i=0; $i< count($arr); $i++) {
echo "$arr[$i]";
//Ausgabe: Username7363a0d0604902af7b70b271a0b96480NameNachnameEmail
}
}
// werte aufsplitten
$arr = explode("|",$line);
// erstes array-element durch neuen usernamen ersetzen
$arr[0] = $new_username;
// array-werte wieder zu einer zeile zusammenfügen
$neuer_inhalt = implode("|",$arr);
// datei zum schreiben öffnen
$file = fopen("user.txt","w");
// neuen inhalt schreiben
fwrite($file, $neuer_inhalt);
fclose($file);
}
Kommentar
-
PHP-Code:foreach($lines as $line) {
for($i=0; $i< count($arr); $i++) {
echo "$arr[$i]";
//Ausgabe: Username7363a0d0604902af7b70b271a0b96480NameNachnameEmail
}
}
und warum verwendest du diese variable $lines dann nicht auch innerhalb der foreach-schleife?
stattdessen sehe ich dich auf ein array $arr zugreifen - wo kommt das denn her, wird doch gar nicht definiert in deinem code?
btw: wäre schön, wenn du deinem posting nicht nur den quelltext, sondern auch eine problembeschreibung beifügen könntest - und zwar eine, die ausführlicher ist, als beispielsweise "funzt nicht".I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Ok, ich probiere es mal
Also, ich möchte mit "foreach($line as $xline)" und "for($i=0; $i< count($xline); $i++)" jede Zeile zählen, weil ich ja eine Datei mit mehrzeiligen Arrays habe. Dann möchte ich, wenn es in der Datei folgender Maßen aussieht
peter|dfc3b0c8e8cbba841c1c18c78931b192|der|die|das
alex|7363a0d0604902af7b70b271a0b96480|wer|wie|was
den Usernamen also $arr[0] auslesen und ersetzen.
Jedoch kann/weiß ich nicht, wie ich das deutlicher beschreiben kann
Kommentar
-
Das foreach Problem ist gelöst *freu*
Nun möchte ich mit $xline[$i][0] den ersten Wert des Arrays aufrufen, dass der User nach seinem Login verwendet, aber beim Schreiben wird die Datei wieder zu einer Zeile konvertiert.
PHP-Code:if(is_array($file)) {
foreach($line as $xline) {
for($i=0; $i< count($xline); $i++) {
echo "$xline[$i][0]";
}
}
}
PHP-Code:if($_POST['new_username'] == "$new_username"){
// datei zum lesen öffnen
$file = fopen("user.txt","r");
// zeile einlesen
$line=fgets($file,300);
fclose($file);
// überprüfen, ob datei array ist
if(is_array($file)) {
//jede zeile als $xline
foreach($line as $xline) {
//zeilen zählen
for($i=0; $i< count($xline); $i++) {
//$arr[0] von eingeloggtem user ausgeben
echo "$xline[$i][0]";
}
}
}
// werte aufsplitten
$arr = explode("|",$line);
// erstes array-element durch neuen usernamen ersetzen
$arr[0] = $new_username;
// array-werte wieder zu einer zeile zusammenfügen
$neuer_inhalt = implode("|",$arr);
// datei zum schreiben öffnen
$file = fopen("user.txt","w");
// neuen inhalt schreiben
fwrite($file, $neuer_inhalt);
fclose($file);
}
Zuletzt geändert von alexs; 25.04.2004, 14:12.
Kommentar
-
Original geschrieben von alexs
PHP-Code:// werte aufsplitten
$arr = explode("|",$line);
ohne jetzt streiten zu wollen:
ein bisschen mehr darüber nachzudenken, was du tust, könnte sicher nicht schaden.
es kann auch hilfreich sein, wenn du dir erst mal den nötigen ablauf auf einem blatt papier aufzeichnest/aufschreibst, ganz ohne PHP-befehle - und dann erst nachher diesen ablauf, wenn er logisch hinreichend durchdacht ist, in PHP umzusetzen versuchst.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Jetzt bin ich wirklich fertig
Das ist jetzt alles was ich mir zusammen reimen konnte.
Der Username wird zwar zum newUsername, aber 1. wird er nicht in die Datei geschriebn und wenn er das würde, würde er in jeder Zeile den ersten Wert = newUsername setzen. Bitte, kann mir jemand einen Codeschnipsel oder so geben, ich bin echt depressive geworden. Ich versuche jetzt schon seit 11 Uhr morgens hier was zu Stande zu bringen.
PHP-Code:if($_POST['new_username'] == "$new_username"){
// variablen
$file = "user.txt";
$content = file($file);
$lines = count($content);
$rep_new = "$new_username";
// zeilen zählen
for ($x=0;$x<$lines;$x++)
{
$rep_old = "$arr[0]";
// inhalt ersetzen
$content[$x] = str_replace("$rep_old","$rep_new",$content[$x]);
// Kontrollausgabe, ob str_replace funzte
echo " '<b>$arr[0]</b>'($x) --> '<b>$new_username</b>' Array: $content[$x]";
echo "<br>";
}
// datei zum schreiben öffnen
$fp = fopen($file,"w");
for($i=0;$i<$lines;$i++)
{
// neuen Inhalt bestimmen
$write[$i]=trim($content[$i]);
// endlich schreiben verdammt
fwrite($fp,$write[$i],300);
}
fclose($fp);
echo"<br><br>";
// wie viele arrays gibt es in der txt datei?
echo "Arrays: $lines";
}
Zuletzt geändert von alexs; 25.04.2004, 16:58.
Kommentar
Kommentar