N2O: array_key_exists ?

Hallo allerseits,

ich bekomme per GET-Formular eine Variable ($name) an eine Bedingung gesendet, die eigentlich prüfen soll, ob der $name schon in der $nutzerdatei enthalten ist. Dann nämlich soll verweigert werden, den Namen noch einmal zu schreiben. Das funktioniert nicht, jedenfalls nicht mit http://de3.php.net/manual/de/function.array-key-exists.php.

Wie sonst?

<?
$dateioeff=fopen("nutzer.txt","a");
$nutzerdatei = @file('nutzer.txt');

if (array_key_exists($name,$nutzerdatei))
{
echo "$name existiert bereits!";
} else {
fputs ($dateioeff, "$name\n");
fclose ($dateioeff);
?>

Gruß
Lachgas

  1. Hallo N20,

    $nutzerdatei = @file('nutzer.txt');

    file() liest die Zeilen in seine Elemente und erzeugt so ein numerisch indiziertes Array, folglich kannst du mit

    if (array_key_exists($name,$nutzerdatei))

    nicht überprüfen, ob eine Zeile in der Datei ist. Schau dir einmal http://php3.de/in-array an.

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. $nutzerdatei = @file('nutzer.txt');
      file() liest die Zeilen in seine Elemente und erzeugt so ein numerisch indiziertes Array, folglich kannst du mit
      if (array_key_exists($name,$nutzerdatei))
      nicht überprüfen, ob eine Zeile in der Datei ist. Schau dir einmal http://php3.de/in-array an.

      Funktioniert leider auch nicht. Oder muss ich mit einer FOR-Schleife durch jedes Array? Und wenn ja, wie?

  2. Hallo N2O,

    ich bekomme per GET-Formular eine Variable ($name) an eine Bedingung gesendet, die eigentlich prüfen soll, ob der $name schon in der $nutzerdatei enthalten ist. Dann nämlich soll verweigert werden, den Namen noch einmal zu schreiben. Das funktioniert nicht, jedenfalls nicht mit http://de3.php.net/manual/de/function.array-key-exists.php.

    $dateioeff=fopen("nutzer.txt","a");
    $nutzerdatei = @file('nutzer.txt');

    Bitte lies Dir im Handbuch file() noch einmal aufmerksam durch.

    if (array_key_exists($name,$nutzerdatei))
    {
    echo "$name existiert bereits!";
    } else {
    fputs ($dateioeff, "$name\n");
    fclose ($dateioeff);

    Warum unterdrückst Du Fehlermeldungen?

    Freundliche Grüsse,

    Vinzenz

    1. Bitte lies Dir im Handbuch file() noch einmal aufmerksam durch.

      Habe ich getan (auch vorher schon). Aber trotzdem existiert doch ein Array, das [1] => "Name 1", [2] => "Name 2", ... so aussieht. Und damit müsste ich doch auch arbeiten können (in_array oder array_key_exists). Das geht aber nicht!

      Warum unterdrückst Du Fehlermeldungen?

      Damit falls "FALSE" ausgegeben wird keine nervige Fehlermeldung erscheint (siehe http://de3.php.net/manual/de/function.readfile.php).

      1. Hallo N2O,

        Bitte lies Dir im Handbuch file() noch einmal aufmerksam durch.

        Lies es nochmals!

        Habe ich getan (auch vorher schon). Aber trotzdem existiert doch ein Array, das [1] => "Name 1", [2] => "Name 2", ... so aussieht. Und damit müsste ich doch auch arbeiten können (in_array oder array_key_exists). Das geht aber nicht!

        Nein, ein Array mit _diesem_ Inhalt existiert nicht.

        Lies bitte die erst Anmerkung in der von mir verlinkten Handbuchseite.

        Natürlich hat David mit dem numerierten Array völlig recht. Aber bevor Du in_array() verwendest, musst Du den Fehler, auf den ich Dich hingewiesen habe, korrigieren :-)

        Warum unterdrückst Du Fehlermeldungen?

        Damit falls "FALSE" ausgegeben wird keine nervige Fehlermeldung erscheint (siehe http://de3.php.net/manual/de/function.readfile.php).

        Fehlermeldungen sind erst dann nervig, wenn Du die Fehler behandelst.

        Freundliche Grüsse,

        Vinzenz

      2. Hallo

        Habe ich getan (auch vorher schon). Aber trotzdem existiert doch ein Array, das [1] => "Name 1", [2] => "Name 2", ... so aussieht. Und damit müsste ich doch auch arbeiten können (in_array oder array_key_exists). Das geht aber nicht!

        Warum erwartest du, dass der Key: z.B. "1" mit dem $name = "Name 1" identisch ist?
        Worauf Vinzenz wohl auch hinauswill, ist, dass file() die Datei zeilenweise
        einliest. Dabei stellt sich die Frage, "Warum sind es _mehrere_ Zeilen?" oder
        auch "Was _bewirkt_, dass da mehrere Zeilen sind?".
        Woraus sich die Frage "Was könnte beim Vergleich der Strings stören?" ergibt.

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
  3. Hello,

    Vielleicht solltest Du uns erstmal erklären, wie die Namen in die Datei hinengekommen sind.
    Dann können wir Dir auch dabei helfen, sie konsistent wiedre herauszubekommen und in ein Array zu überführen. Und dann können wir die notwendigen Durchsuchstrategien ermitteln.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau