Php legt keine Datei mit Usernamen als txt an. Hilfe

Ich möchte dass für jeden User eine txt Datei angelegt wird, die wie der User heißt. Das Script das ich schon habe funktioniert nicht. kann mir jemand helfen?

Script:

<?php $user = $_POST['user'];
$pw = $\_POST['password']; $pwmd5 = md5($pw); if($\_POST){ $datei = $user.".txt"; $inhalt = $user." ".$pwmd5; $rechte = '666'; $textdatei = fopen($datei, "a+"); if (@chmod($datei, $rechte) == true) { echo 'Bei der Datei: '.$datei.' wurden die Rechte auf '.$rechte.' geändert.'; } else { echo 'Bei der Datei: '.$datei.' konnten die Rechte auf '.$rechte.' nicht geändert werden.';} fwrite($textdatei, $inhalt); fclose($textdatei); print "Daten erfolgreich eingegeben in **$datei** eingegeben. "; } echo " "; ?\>

Hallo,

wenn ich das Skript so wie es ist verwende (gespeichert als counter.php auf einem webserver) funktioniert es.

Es wird eine Datei mit dem eingegebenen Namen erstellt. Der Inhalt ist ebenfalls mein Name und das mittels md5-funktion verschlüsselte Passwort, getrennt von einem "
"

Dass es bei Dir nicht funktioniert kann eigentlich nur einen Grund haben: Das Skript hat nicht die nötigen Berechtigungen, um in dem Ordner in dem es sich befindet Dateien anzulegen. Bitte prüfe, ob für den Ordner in dem die Datei liegt Schreibrechte vergeben sind (z.B. mit Hilfe des FTP-Programms).

Noch eine Anmerkung zu dem "
", dass Du in die Datei schreibst. Falls der Sinn und Zweck war, dass in der Datei ein Zeilenumbruch zwischen dem Namen und dem Passwort eingefügt wird, solltest du „Steuerzeichen“ verwenden, da "
" nur von HTML interpretiert werden kann - gültig wäre hier zum Beispiel „\r\n“.

Ich hoffe, ich konnte helfen

Danke

Hast recht, jetzt funktioniert alles.

Hallo,
gibt es irgendeine Meldung die Ausgegeben wird?.
Hat der Script das Recht auf dem Ordner zu speichern?
Ist die Variable $_POST gesetzt?
Welche PHP Version?. OS?

Hallo,
welcher Teil des Codes Funktioniert nicht?
Ich vermute die datei kann Aufgrund mangelnder Rechte für Apache im Ordner nicht angelegt werden.

den teil:
$user = $_POST[‚user‘];
$pw = $_POST[‚password‘];
$pwmd5 = md5($pw);

solltest in der anweisung "if($_POST){ " schreiben, da die Post Variablen beim ersten aufrufen noch nicht gesetzt sind.

und dabei sollte man dem submit Knopf noch einen namen zuweisen und das ganze dann z.B.: if($_POST[‚senden‘]){ abfragen aus sicherheitsgründen.

Gruß
S.

Mit den richtigen Zugriffsrechten funktioniert das Script ohne Änderung.

Ich möchte aber folgendes zu Bedenken geben in der aktuellen Version deines Scriptes:

  1. Kennt jemand den Usernamen von einem anderen, kann er die andere Datei einfach mit einem neuen Passwort überschreiben.

  2. sollte man den Usernamen schon sehr genau prüfen, da hier eine Datei auf dem Dateisystem abgelegt wird mit der Bezeichnung des eingegebenen Namens.

  3. Usernamen wie „…/“ oder sonstiges sollte generell nicht möglich sein

  4. Dateibezeichnungen mit txt hinten sollten gänzlich vermieden werden oder zumindest in ein Subverzeichnis geschoben werden, dass du mit htaccess schützt.
    ansonsten kann jedermann in deinen txt-Files illern und die md5-Hasches mit Rainbow-Tables oder Bruteforcing knacken.

ich habe dir mal was zusammengecoded, was dies alles soweit beachtet.
Teste das script einfach mal mit der Ordnerberechtigung 0777 (besonders das Subverzeichnis userfiles)

<?php $user = trim($_POST['user']);
$pw = trim($\_POST['newpassword']); $pwmd5 = md5($pw); $oldpw = trim($\_POST['oldpassword']); $oldpwmd5 = md5($oldpw); if ($\_POST) { $fehler=0; if (!preg\_match("=^[\_.a-zäöüÄÖÜß0123456789]+$=i",$user)) { $fehler=1; } if($fehler==1 || stristr($user, '.') == TRUE || stristr($user, '/') == TRUE || stristr($user, '\\') == TRUE) { echo "Ungültiges Zeichen im Usernamen!"; } else { if($user=="" || $pw=="") { echo "Bitte einen Usernamen und Passwort angeben!"; } else { $datei = "userfiles/".$user.".php"; $inhalt = "<?php /* ".$user."
".$pwmd5." \*/ ?\>"; $checkpassword=0; if (file\_exists($datei)) { $checkpassword=1; } if ($checkpassword==1) { $textdatei = fopen($datei, "r"); $contents = fgets($textdatei, 4096); $contents = fgets($textdatei, 4096); $contents=trim(str\_replace("<?php /*","",$contents));
$contents=trim(str\_replace("\*/ ?\>","",$contents)); $oldpassword=$contents; if ($oldpwmd5!=$oldpassword) { echo "Da der User bereits existierte und das alte Passwort nicht übereinstimmt, wird keine Änderung vorgenommen"; fclose($textdatei); exit(); } fclose($textdatei); } $textdatei = fopen($datei, "a+"); fwrite($textdatei, $inhalt); fclose($textdatei); if ($checkpassword==1) { print "Passwort erfolgreich in $datei geändert. "; } else { print "Daten erfolgreich eingegeben in $datei eingegeben. "; } } } } echo " User: Altes Passwort: Neues Passwort: "; ?\>

Was genau funktioniert nicht?
-> Fehlermeldung?
Wenn die Dateien nicht erstellt werden und keine Fehlermeldung kommt funktioniert deine If-Bedingung nicht.