Tut es aber…
function check($name) {
$lines = file(„user.txt“);
foreach ($lines as $line) {
$entr_arr = explode(";", $line);
if (in_array($name, $entr_arr)) {
hier ist das Problem…
Wenn ein array aus einer Datei kommt dann stehen meistens aber
nicht immer hinten die return characters \n, \r oder sogar
kombiniert.
Kommt auf den Editor und das Betriebssystem an, ob nur ein linebreak und/oder return vorkommen. Windows \n\r unter Windows, \n unter UNIX, \r bei Mac, außer bei speziellen Editoren, wo sich das festlegen lässt. Ich habe die User-Datei entsprechend meiner Vorgabe mit Notepad unter Windows erstellt und auf einem Linux-Webspace mittels print_r die Arrays überprüft, das Skript funktioniert.
Diese hängen dann an jedem Namen dran, tauchen aber nicht
ersichtlich in einer html-Ausgabe auf.
Deswegen gehören sie auch zu den unsichtbaren Steuerzeichen.
Ich würde das eher ein wenig anders angehen und aus den ganzen
Namen einen langen String bilden.
ein explode(";", trim($line)) täts auch - anscheinend „explodiert“ aber der Line-Break am Ende von selbst weg, jedenfalls gibts kein leeres Array-Element in $entr_arr auch ohne trim.
Diesen mit der Funktion implode
anschliessend würde ich überprüfen ob der name in diesem
kompletten String drin ist.
etwa mit if (strpos(" ".$string,$name)>0) return true;
AAAAAber…
Ein Name „Klaus“ würde dann auch gefunden werden, wenn es nur
einen „Klaus-Peter“ gibt.
Ja, und wenn jemand „uschi“ eingibt heißt dann findet das Skript auch den User…
Von daher ist die komplette konzeptionierung auf
Textdateienbasis sehr wackelig meiner Meinung nach.
Ja, ist es, und unsicher dazu. Deine Abänderung macht es aber leider noch schlimmer.
User/Passwörter sollten kodiert in einer Datenbank gespeichert werden, das ist der saubere Weg, schon allein der Erweiterbarkeit wegen. Du musst dann auch nicht zwangsläufig jedem, der Zugang zum Webspace hat (oder erhält), zugleich Zugang zu den Benutzerdaten geben.
Gruß,
Rudy