Rato Micefarmer: Liste durchsuchen

Beitrag lesen

$name = $_POST['name'];
$kategorie = $_POST['kategorie'];
$beschreibung = $_POST['beschreibung'];

Es hat keinen Sinn, den Wert einer Variable in einer anderen Variable zu speichern, sofern man nicht vor hat, den Wert im Script zu verändern.

$script = nl2br(htmlentities($_POST['script']));

Warum machst du das nicht auch mit '$beschreibung'?

$text2 = $name."\n";

Du solltest den Inhalt der Variable '$name' überprüfen - schliesslich kommt sie vom User, ist somit also nicht vertrauenswürdig.

foreach($liste as $key => $value) {
  $liste[$key] = $value;
}

Diese Schleife hat gar keinen Sinn. Du gehst alle Schlüssel von '$liste' durch, nur um ihnen einen Wert zuzuweisen, den sie sowieso schon haben. Der Inhalt der Variablen '$liste' ist vor und nach der Schleife komplett identisch.

fwrite($file2,$text2);
fclose($file2);

Dieser Codeschnippsel bewirkt, dass der Name ungeachtet dessen, ob er schon drinnen steht, in eine bestimmte Datei geschrieben wird. Was hat es für einen Sinn, dass ein Name mehrmals drin steht? Weiters ist es unnötig, die Variable '$text2' zu verwenden. Ihr Inhalt ist doch nur der Inhalt der Variable '$name' und ein Zeilenumbruch. Soviel ich weiß, kann man in der Parameterangabe einer Funktion auch Stringverknüpfungen verwenden.

if (in_array($name, $liste)) {
   echo "Sie sind bereits angemeldet.";
   echo "<meta http-equiv='refresh' content='2; URL=index.php?action=seite1'>";
}
else {

Der HTML-Code, der hier ausgegeben wird, ist vollkommener Schwachsinn. Eine Meta-Angabe darf nur im Header platziert werden, wobei der Text eine Zeile darüber nur im Body was zu suchen hat. Warum verwendest du zweimal echo? Du hast zwischen den zwei Ausgaben nicht mal einen Zeilenumbruch. Ich würde dir auch empfehlen, einen Link zu der Seite, zu der nach zwei Sekunden weitergeleitet wird, einzufügen. Außerdem solltest du den User darauf aufmerksam machen, dass eine Weiterleitung erfolgt.

$text = <<<EOV

<table width="100%">
  <tr>
    <td class="code1">
    <b>Name:</b> $name
    </td>
    <td class="code1">
    <b>Kategorie:</b> $kategorie
    </td>
  </tr>
  <tr>
    <td colspan="2" class="code2">
    <b>Skriptbeschreibung:</b> $beschreibung
    </td>
  </tr>
  <tr>
    <td class="code1" colspan="2">
    $script
    </td>
  </tr>
</table><br/><br/>

EOV;

Hier verwendest du die Variablen '$name', '$kategorie', '$beschreibung' und '$script', die ja vom User kommen, ohne sie vorher zu prüfen. Der User könnte z.B. HTML-Tags verwenden und das Layout zerstören oder auch einen JS-Bereich einbauen, wodurch dann Werbung dargestellt wird. Merke: _Niemals_ Variablen, die vom User stammen, ungeprüft verwenden.

$file=fopen("$kategorie.php","a");
fwrite($file,$text);
fclose($file);

Hier verwendest du die Variable '$kategorie' ungeprüft. Was ist, wenn es eine Datei, die '$kategorie.php' heißt, nicht gibt? Oder noch schlimmer, es wird nicht eine Datei bearbeitet, die bearbeitet werden darf, sondern eine andere Datei, z.B. 'index.php'. Warum gibst du diesen Dateien überhaupt die Dateiendung 'php'? So wie ich das sehe, enthalten sie keinen PHP-Code.

echo <<< EOV

<meta http-equiv="refresh" content="2; URL=index.php?action=seite1">
Vielen Dank, dass sie sich eingetragen haben! Sie werden sofort weitergeleitet.

EOV;

}

Wieder die Sache mit der Meta-Angabe.

Was es macht, dürfte nun eigentlich klar sein. Der Code soll eigentlich nur überprüfen, dass man sich nicht 2mal anmelden kann;-)

Anmelden? Geht es bei diesem Code nicht darum, ein Script einzutragen?

(ja, ich hab ich jetzt verstanden, dass eine weiße Seite eine Fehlermeldung ist)

Eigentlich nicht. Sie heißt nur, dass du die Fehlermeldungen nicht anzeigen lässt, bzw. dass du gar nichts oder nur etwas, was der User auf dem ersten Blick nicht sieht, ausgibst.

aber man kann sich trotzdem mehrfach anmelden.

Stell dir mal vor, jemane gibt als Namen etwas ein, das mehrere Zeilenumbrüche enthält. Dann stehen für das Skript somit mehrere Namen anstatt von einem in der Datei. Somit ist das Mehrfach-"Anmelden" problemlos möglich. Wieso redest du überhaupt vom Anmelden? Wofür denn überhaupt? Man kann hier (soweit ich das verstanden habe) doch nur ein Skript eintragen. Das hat mit einem Anmelden doch gar nichts zu tun. Du willst wahrscheinlich verhindern, dass mehrere Skripte mit demselben Namen eingetragen werden.

mfg
Rato

--
§§§
Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
§§§