PHP - Array Element mit String verleichen

RobertGree

Cadet 3rd Year
Registriert
Feb. 2007
Beiträge
40
Guten Abend miteinander!
Ich bin mit meinem Latein am Ende, vielleicht könnt ihr mir aber helfen!

Mein Problem:
Ich habe eine Datei. Diese Datei ist eine PHP-Datei in der ich etwas ändern möchte. In der PHP-Datei ist ein Array deklariert, also zB. soetwas:

$array[benutzer1] = 'Admin';
$array[benutzer5] = 'Putzmann';
$array[benutzer7] = 'Porschefahrer';
(nur so als Bsp.)

Diese Datei habe ich mit file() in Array verfrachtet. Jetzt möchte ich prüfen, ob ein String
($Element = "\$login[\"".$Benutzername."\"] = \"".$Irgendwas."\";";)
das gleiche ist wie ein Element aus dem neuen, mit file() erstellten Array.
Also dachte ich an etwas wie

if ($das_file_Array[$i] == $Element)
{
.....
}


Das funktioniert aber nicht! Ich habe keine ganz genaue Ahnung warum, vermute aber dass in dem file_Array am Ende der Zeile noch Dinge für Zeilenumbruch oder so stehen. Wie gesagt, ist nur eine Vermutung.
Kann mir jemand Helfen? Wäre super, vielen Dank schon mal!
Schönen Abend, Grüße,
RGausBC
 
Ich verstehe diese Zeile, also den Sinn, hier absolut überhaupt nicht:
Code:
$Element = "\$login[\"".$Benutzername."\"] = \"".$Irgendwas."\";";

V.a. willt du das dann mit dem Benutzernamen vegleichen oO

Die Abfrage müsste doch eher sein
Code:
if ($das_file_Array[$i] == $Benutzername)

Und was ist denn benutzer1, benutzer5 und benutzer7?

Also bitte mal mehr Input, notfalls mal ganze Code-Stücke posten...
 
Das soll nur der String sein. Ersatzweise könnte da auch '$login["Benutzername"] = "123abc"' stehen. Das soll mit den Elementen aus dem file_Array vergleichen werden. Jetzt verständlicher?
 
Also du hast ein assoziatives Array, der Index ist der Benutzername, und der Wert ist das Kennwort
also nach dem Schema
$array["Benuzername"] = "Kennwort"

Wie genau wird das Array in die Datei gespeichert und gelesen?

Wenn du es vernünftig machst, dann brauchst du für die Abfrage ja nur noch
if ($array[$Benutzername] == $Kennwort)
machen und gut ist... dann brauchst du auch keine 300 Vergleiche machen...
 
schau dir die Funktion preg_match(); an.

Kleines Testscript:

PHP:
<?php

$text = " blablablaaaaa array[benutzer5] = 'Putzmann' laberlaberlaber";


if(preg_match("/array\[benutzer5\] = 'Putzmann'/i",$text)):
     echo "Hab was gefunden!";
else:
     echo "hab es nicht gefunden...";
endif;
?>
 
Danke für die Antworten, aber das hilft mir noch nicht weiter. Aber es ist zugegeben auch nicht ganz einfach zu verstehen, was ich will.

Ich versuchs nochmal:
Ich habe eine PHP-Datei, die ich verändern will. In der sind in einem Array Benutzernamen und die dazugehörigen Kennwörter gespeichert. Den ganzen Aufwand betreibe ich im Übrigen nur, um eine Benutzernamenänderungsmöglichkeit zu schaffen.
Ich habe also irgendwo den alten Benutzernamen, den neuen und das Kennwort.

Jetzt möchte ich ein Script erstellen, das die Datei in dem das Array deklariert ist ändert. Es soll an der Stelle an der der bisherige Name & Kennwort stand die Zeile löschen und dort einen neuen Array-Wert (eine neue Zeile) hineinschreiben, also die Zeile
$login["benutzer1"] = "123abc";

durch diese
$login["neuerbenutzername"] = "123abc";

ersetzen.

Dazu habe ich die PHP Datei in dem BN & PWs gespeichert sind mit der Funktion file() in ein Array geladen. jetzt steht in diesem, ich nenne es file_Array, an jedem Index eine andere Zeile der Datei, also am Index 0 steht <?php, am Index 1 steht die erste Zuweisung von BN und PW und so weiter.

Jetzt möchte ich die durch ein Formular übergebenen Werte, also den neuen Benutzernamen, das Kennwort zur Authentifizierung und den alten Benutzernamen mit einem Wert im file_array vergleichen um zu überprüfen, an welcher Zeile der Eintrag in der ursprünglichen PHP-Datei mit den BN & PWs stand. Der Index an dem es eine Übereinstimmung gibt +1 wäre meine Zeilennummer. Das rausschmeißen und einfügen krieg ich hin, es hängt nur am Vergleichen.

Für den Vergleich habe ich den String $Element gemacht. Hier steht dann (die variablen haben die Werte die ich durch ein Formular bekommen habe) eigentlich das gleiche drin wie im file_Array an der entsprechenden Stelle.

mit if($Element == $file_Array[$i]) komme ich allerdings nicht weiter. Ein Test in dem ich die Werte von $Elemente und file_Array[$i] ausgegeben habe zeigt, dass in beiden exakt das gleiche steht. Aber anscheinend eben doch nicht, die If-Anweisung sagt immer, sie habe nichts gefunden.

Vielleicht ist das jetzt klarer, vielen Dank!
 
lies die datei nicht in ein array, sondern als ganzes, und lade es als String in eine simple variable. Suche per regex (also preg_match()) nach der kompletten variable mit dem Benutzernamen und dem Passwort (ich würde GRUNDSÄTZLICH das PW sowieso nie im klartext, sondern nur als md5 speichern! Und auch nur in kombination von beiden korrekten angaben ändern!) und ersetze diesen wert dann mit der funktion preg_replace() den alten wert mit dem neuen wert und speichere den krams wieder ab.

Ich würde dir, ganz ehrlich, den einsatz einer MySQL Datenbank empfehlen. Alles andere ist in diesem Fall absolut sinnfrei, glaub mir. Das Updaten von Passwörtern/Accountdaten ist hier zigfach einfacher - und allem Voran weitaus (und zwar immens weitaus) sicherer.
 
Ach so nun verstehe ich erst wie du das genau machst...

Die Datei mit den Passwörtern wird via "include" bzw "require" eingebunden...

Tja, eine schöne Lösung ist das wahrlich nicht, und auch schön die Passwörter aller User einsehen zu können...

Wie TchiboMann sagt arbeite besser anders... und der Vorschlag von ihm sollte funktionieren...

Wenn du kein MySQL nehmen kannst, schau mal ob du SQLite benutzen kannst...
 
thx 1668mib :)

@RGausBCinBW

Ich hab noch etwas recht wichtiges vergessen... wenn du beispielsweise per Formular dem User das Passwort etc verändern lassen willst, solltest du, wenn du tatsächlich den Weg über diese "Passwortdatei" gehst (was zwar nicht sicher, aber vergleichsweise auch sicher zu gestalten geht) a) die Passwörter ausschliesslich als md5, als SHA-wert oder andere (oder gar eigene) Hashwerte speichern, b) direktzugriffe ablocken, beispielsweise:

PHP:
//hiermit verbietest du direktzugriffe, kannst die Passwortdatei aber über php problemlos includen. gleich
//hinter <?php einfügen!
if($_SERVER['PHP_SELF'] == "passwortdatei.php"):
    die("oops....");
endif;

c) einen Blocker einbauen, der nach 3-maliger falschangabe des ursprünglichen Passwortes die Passwort-ändern funktion deaktiviert und dich auf Manipulationsverdachts hinweist

und d) solltest du grundsätzlich ein Double-Opt-In-Verfahren verwenden. Du solltest demnach die eMail-adresse des Nutzers mit abspeichern und ihm eine Bestätigungsmail zur Passwortänderung zusenden, bevor du tatsächlich das Passwort änderst. Und gerade dieses Verfahren ist deutlich einfacher umzusetzen, wenn du eine richtige Datenbank nutzt.

Das alles gilt generell für die simple "Passwortdatei", als auch für die Verwendung von MySQL oder SQLite oder ähnliches.


Ich bin zwar absolut kein Profi (meiner eigenen Meinung nach, leider sehen das einige andere Leute anders...) oder jemand, der sich irgendwie wichtig machen will oder so, aber der Schutz eines Useraccounts ist und bleibt eine hochwichtige Sache, gerade dann, wenn das System für mehrere User offen sein soll und über sensible Features verfügt. Berherzige dringendst die Ratschläge, da ansonsten dein System für jedes Scriptkiddie offen ist und für ein immenses Schadenspotential sorgen kann.
 
Zuletzt bearbeitet:
Vielen Dank!

Ja, ich bin mir darüber im klaren, dass es so wie es jetzt ist keine non+Ultra-Lösung ist. Das ist für mich alles Neuland und ich will mich vorantasten und denke das ist der beste weg etwas zu lernen. Um Verschlüsselung will ich mich demnächst kümmern, alles schritt für schritt - aber danke für ne gut gemeinten Hinweise & Ratschläge!

Liebe Grüße,
RGausBCinBW
 
Zurück
Oben