Jessica: Login-Script

Hallo!

Ich habe ein kl. Problem bei meinem Login-Script (PHP). Über den Passwortgenerator wird ein neues Passwort generiert und überprüft, ob die über ein Formular ermittelte IP des Users schon in der Textdatei gespeichert ist. Falls nicht, soll ein Eintrag erfolgen. Leider wird aber immer ein neuer Eintrag vorgenommen. Was ist da falsch ?

Gruß Jessica

<?php
// Passwort generieren & in Textdatei schreiben
$ip    = $HTTP_POST_VARS["ip"];
global $id_pass;

$buchstaben = array("A", "B", "C", "D", "E", "F", "G", "H", "I");
srand ((double) microtime() * 1000000);
$zahl1 = mt_rand(1,333); $zahl2 = mt_rand(1,333);
$zahl3 = mt_rand(1,9); $zahl4 = mt_rand(1,9);
$id = $buchstaben[$zahl3].$buchstaben[$zahl4].$zahl1.$zahl3.$buchstaben[$zahl4].$zahl2;

$id_pass = $id;

if ($id_pass != "") {
  $ip_vorhanden = array();
  $userdatei = fopen("passwort.txt", "r");
  while (!feof($userdatei)) {
    $zeile = fgets($userdatei, 500);
    $userdata = explode ("|", $zeile);
    array_push ($ip_vorhanden, $userdata[0]);
    }
  fclose($userdatei);

if (!array_search($ip, $ip_vorhanden)) {
    $eintrag = "$ip | $id_pass";
    $userdatei = fopen ("passwort.txt", "a");
    fwrite($userdatei, "$eintrag\n");
    fclose($userdatei);
    } else {
    Return;
    }
  }
?>

  1. Hallo Jessica

    <?php

    zweite if-Anweisung

    if (!array_search($ip, $ip_vorhanden)) {

    wenn die $ip bereits vorhanden ist, gibt

    array_search($ip, $ip_vorhanden) der index als Wert zurück

    mein Vorschalg:

    #   if (array_search($ip, $ip_vorhanden)==false) {

    $eintrag = "$ip | $id_pass";
        $userdatei = fopen ("passwort.txt", "a");
        fwrite($userdatei, "$eintrag\n");
        fclose($userdatei);
        } else {
        Return;
        }
      }
    ?>

    Gruß aus Berlin!
    eddi

    1. Hallo eddi,

      das Problem bleibt leider trotzdem.

      Wenn ich mit "if (array_search($ip, $ip_vorhanden)==false)"
      überprüfe, ob die IP da ist, wird gar kein Eintrag mehr vorgenommen (auch wenn die IP noch fehlt!) und umgekehrt wird mit "if (array_search($ip, $ip_vorhanden)==true)" { $eingabe ... , immer ein neuer Eintrag vorgenommen.

      Eine andere Idee voran es liegen könnte ?

      Gruß Jessica

      1. Hallo Jessica,

        $userdata[0] ist immer die IP plus einen Leerzeichen also frage bitte auch danach in der Form:
        if (array_search($ip.' ', $ip_vorhanden)==false)

        eine bessere Möglichkeit schein mir bei array_push mit trim($userdata[0]) zu arbeiten und von vornherrein if (in_array($ip, $ip_vorhanden)) abzufragen

        Gruß aus Berlin!
        eddi

        1. Hi,

          $userdata[0] ist immer die IP plus einen Leerzeichen also frage bitte auch danach in der Form:
          if (array_search($ip.' ', $ip_vorhanden)==false)

          Das ist mir beim Debuggen auch aufgefallen. Am Besten die Leerzeichen durchgegend weg lassen oder eben trim($userdata) vor dem array_push machen.

          Gruß
          Danny

  2. Hi,

    warte ein paar Minuten, ich probiere das Script mal aus...

    MfG
    Danny