Der Martin: neue Datei erstellen

Beitrag lesen

Hallo,

Ich versuche mich gerade selbst etwas in PHP einzuführen. Ich mache das aus reinem Spass, weil es mich interessiert.

trotzdem solltest du dir gleich von Anfang an angewöhnen, es richtig[tm] zu machen und dir nicht irgendwelche Schlampereien angewöhnen, die dir später große Sicherheitslöcher aufreißen. Eins ist jetzt schon erkennbar.

Momentan möchte ich eine Seite erstellen, auf der man sich registrieren kann. Dabei wird der Benutzername und das Passwort in einer Datenbank gespeichert. Was nun aber dazu kommen soll ist, dass ich eine neue Datei erstellen möchte, die den Namen des neu registrierten Benutzers trägt. Diese Datei soll in denselben Ordner gespeichert werden, in dem alle Dateien der Homepage sind.

Ich verkneife mir jetzt mal die Frage nach dem Sinn. ;-)

<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8">
    <link rel="stylesheet" type="text/css" href="HomepageStyle.css">
</head>

<div id="text">

  
Hmm. Kein DOCTYPE? Kein öffnendes html-Tag? Kein öffnendes body-Tag?  
  

> <?php  
> $verbindung = mysql\_connect("localhost", "\*-\*" , "\*-\*")  
> or die("Verbindung zur Datenbank konnte nicht hergestellt werden");  
>   
> mysql\_select\_db("\*-\*") or die ("Datenbank konnte nicht ausgewählt werden");  
  
Mittelfristig solltest du dir eine bessere "Fehlerbehandlung" ausdenken als einen Selbstmord des Scripts. Für den Anfang mag ein die() ausreichen; gut ist es nicht.  
  

> $username = $\_POST["username"];  
> $passwort = $\_POST["passwort"];  
> $passwort2 = $\_POST["passwort2"];  
  
Wozu das Umkopieren?  
  

> $result = mysql\_query("SELECT id FROM login WHERE username LIKE '$username'");  
  
Da ist sie schon, die Sicherheitslücke. Du übergibst $username, eine exakte Kopie von $\_POST['username'], ungeprüft an die Datenbank. Don't do that! Never! Da es sich um eine Eingabe vom Client handelt, könnte da \_alles\_ drinstehen, und das kann deine Datenbank gehörig durcheinanderbringen.  
  

>     $eintrag = "INSERT INTO login (username, passwort) VALUES  
>     ('$username', '$passwort')";  
>     $eintragen = mysql\_query($eintrag);  
  
Dito.  
  

>     if($eintragen == true)  
  
"Wenn es wahr ist, dass $eintragen wahr ist, dann ..."  
Ein einfaches  if ($eintragen)  wäre leichter zu lesen und "logischer". Andererseits stammt der Wert aus dem Aufruf von mysql\_query(), das nicht in jedem Fall ein boolsches Resultat liefert (in diesem Fall schon, wegen des INSERT-Statements). Wenn du also schon Wert darauf legst, wirklich die boolschen Werte true oder false abzuprüfen, solltest du einen typsicheren Vergleich notieren (also mit dem Operator ===).  
  

>         $dateiname = "$username \_geheim.php"; //HIER  
>         fOpen($dateiname , "a+"); //HIER  
> [...]  
> Dort wo die beiden HIER stehen, sollte nun der Code für das Erstellen des Ordners stehen.  
  
Ordner? Ich dachte, du wolltest eine Datei erstellen. Und willst du nachher wirklich \_automatisch\_ PHP-Code in diese Datei schreiben? Auch das kann gefährlich sein, je nachdem, woher dieser Code später kommt. Falls es kein PHP-Code ist, der da gespeichert werden soll, würde ich auch nicht die Endung ".php" wählen. Immerhin kann später jeder, der den Namen kennt, die Ressource direkt im Browser aufrufen und so den darin enthaltenen Code ausführen.  
  

> Aber irgendwie bekomme ich immer eine Fehlermeldung.  
  
Dann verrate uns nur ja nicht, welche. Es könnte die Hilfe erleichtern! ;-)  
  

> Kann mir jemand helfen?  
  
Nicht, wenn du wichtige Informationen verschweigst.  
  
Ciao,  
 Martin  

-- 
Das Gehirn ist schon eine tolle Sache: Es fängt ganz von allein an zu arbeiten, wenn man morgens aufsteht, und hört erst damit auf, wenn man in der Schule ankommt.  
  (alte Schülererkenntnis)  
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(