string aus datei vergleichen

  • hallo zusammen,

    ich versuche $id aus einer txt datei zu vergleiche, aber das klappt bei mir nicht.
    im augenblick funktioniert es so bei mir:

    Code
    if ($id !== "1" && $id !== "2" && $id !== "3") die("id not used!");

    ich möchte aber, wenn die $id in der txt datei nicht vorhanden ist, dass script beendet wird, mit einer fehlermeldung.

    kann mir da jemand bei weiter helfen?

    mfg: micha

  • if ($id <1 || $id>3)
    die("id not used!");

    währe die einfachere Lösung.

    aber die frage ist jetzt, wenn das ganze nicht beendet wird, wie ist dann die id ?! mach doch einfach ne debug Ausgabe.

  • Hallo GreenRover,

    erst mal danke für deine Bemühung, aber ich wollte das die Übergebende ID auch Tatsächlich in data.txt steht. Ist dies nicht der Fall, dann Abbruch mit Fehlermeldung.

    So sieht der Auszug aus meinem Script zum einlesen des Counters bis jetzt aus:

    wissen ist macht, nichts wissen macht auch nichts...

  • Habe den debugg Modus aktiviert und im Script ein Kommentar geschrieben. Was kann ich tun, um dieses Script zu Perfektionieren?

    Habe dieses Script mehr oder weniger zusammen gestellt, aus verschiedenen Tuts und Script snippets.

    Mein Behühen ist, dass dieses Script sicher und Korrekt Funktioniert.

    wissen ist macht, nichts wissen macht auch nichts...

  • ich wuerde z.B.

    Code
    if (preg_match("/[^0-9]+/",$id)) die("Hacking attempt!");


    durch

    Code
    if(!is_numeric($id)) die("Hacking attempt!");


    ersetzen. Ist allerdings nur eine Schoenheitsoperation.

    Sicher ist es, da es keine unkontrollierten Eingaben hat, und man mit Ziffern hoechstens die RAM fuellen kann ^^

    Um gegen jeden GAU gesichert zu sein, kann man noch die eine oder andere Zusatzfunktion einbauen, was allerdings nicht notwendig ist.

  • hi d4f,

    danke für den Tipp, hast du denn eine Idee wie ich das Realisieren kann? Das die ID in:

    Code
    $dbfile = "data.txt";


    vor dem Download abgefragt wird? Im Moment wird die ID so abgefragt:

    Code
    if ($id <1 || $id>3) die("ID: [i]$id[/i] not used!");

    wissen ist macht, nichts wissen macht auch nichts...

  • Hi d4f,

    In der data.txt steht:

    Code
    1|datei.exe|0
    2|datei2.exe|0
    3|datei3.exe|0

    Rufe ich eine ID 4 auf, wird eine neue Zeile in data.txt geschrieben:

    Code
    ||

    Es soll aber keine neue Zeile geschrieben werden, sonderen vorher geprüft werden, ob diese ID in der data.txt vor kommt, wenn nicht? Dann Fehlermeldung wie bei:

    Code
    if ($id <1 || $id>3) die("ID: [i]$id[/i] not used!");

    Ich möchte nicht immer diese Zeile neu anpassen, wenn ich einen download hinzufüge.

    P.S. Das Script sollte ohne diese ^^ Zeile die ID prüfen.

    wissen ist macht, nichts wissen macht auch nichts...

  • so?

    Code
    $dat = fopen($dbfile, "r");
    $found = false;
    if(!dat) die('[SYSTEMFEHLER]');
    while(!feof($dat) {
      $line = fgets($dat);
      $line = explode('|', $line);
      if($line[0] == $_GET['id']) $found = true;
    }
    if(!$found) die('ID exisitert nicht');
  • Hi d4f,

    Jaaaaaaaaaaaaaaaaa!

    Es Funktioniert, vielen Dank für deine Mühe, habe es nun so gemacht:

    Ein paar Fragen habe ich aber noch, muß denn 3-Mal fopen() in dem Script vorkommen? Oder lässt es sich mit einem fopen() und fclose() bewerkstelligen.

    Und warum zuvor die Datei im Read Modus öffnen? Denn eigentlich sollte ja nur geschrieben werden (Downloads).

    Warum kommt diese Meldung: "Notice: Undefined offset: 2" wenn das Script im Debug Modus läuft?

    Codezeile, die die Meldung verursacht:

    Code
    while($erg[$count] != "")

    wissen ist macht, nichts wissen macht auch nichts...

  • also so dürfte es etwas resourcen so spaaren:

    Da es hier um perfektion gehen soll, habe ich auch die änderungen gemacht, die auch nur ganz wenig bringen.
    Z.b. die " gegen ' ersetzt. Da in den " auch nach variabelel ngeparst wird, was bei ' nicht getahen wird.