cr: if bedingung ergebnis falsch

hallo,

ich versuche grad folgendes, scheitere aber bisher noch daran:

ein php script soll überprüfen, ob eine zahl in einer datenbank bereits vorhanden ist, wenn nicht, dann soll sie die nummer eintragen

so,

problem ist:

b = file(datenbank);
a = "usereingabe"

if(a != b)
{
soll er die in die db eintragen
und noch etwas anderes 1x ausführen
}
else
{
echo "Wert vorhanden";
}

problem ist nur, dass er aus mir unerklärlichen gründen die true bedingung nicht 1 mal ausführt, sondern meißt so oft, wie der wert nicht übereinstimmt...
wie schalte ich das ab? also wenn 3 werte in  der datenbank sind und die usereingabe nicht stimmt, dann schreibt er 3 mal die usereingabe rein...schwachsinn...1x reicht, aber wie?

danke

cr

  1. Liebe(r) cr,

    b = file(datenbank);
    a = "usereingabe"

    if(a != b)
    {
    soll er die in die db eintragen
    und noch etwas anderes 1x ausführen
    }
    else
    {
    echo "Wert vorhanden";
    }

    problem ist nur, dass er aus mir unerklärlichen gründen die true bedingung nicht 1 mal ausführt, sondern meißt so oft, wie der wert nicht übereinstimmt...

    das hast Du so programmiert. Der tut ja auch genau das, was er soll.

    Ach, Du wolltest etwas anderes? Dann musst Du ihm das auch sagen! Zum Beispiel so:

    $gefunden = false;  
    $a = $blah;  
    $b = $blubb;  
      
    if ($a == $b) {  
        // Wert vorhanden! Merken!  
        $gefunden = $b;  
    }  
      
    if ($gefunden === false) {  
        // die dreifachen Gleichheitszeichen stellen sicher, dass nicht versehentlich ein numerischer Wert von "0" oder "-1" missinterpretiert wird  
        eintragen_in_db($gefunden),  
    }
    

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. hi,

      danke!

      leider macht das skript imme noch das selbe...

      alos hier mal etwas genauer:

      die datenbank ist eine txt.

      inhalt

      1000
      1200
      1500

      das script:

      $gefunden = false;

      $b = file("datenbank.txt");
      $a = 1000;

      foreach($b as $bneu)
      {
        if($bneu == $a)
        {
        $gefunden = $a;
        echo "wert gefunden";
        }

      if($gefunden === false)
        {
        echo "schreibe wert in die datenbank, da nicht vorhanden";
        }

      }

      leider schreibt er auch hier den eintrag nicht 1mal sondern so fot, wie er false bei der suche bekommt...

      wo ist der fehler?

      danke.

      cr

      1. Liebe(r) cr,

        inhalt

        1000
        1200
        1500

        $b = file("datenbank.txt");

        $b ist nun ein Array, das den Text der Datei zeilenweise in seine Array-Felder eingetragen hat. Inklusive des Zeilenendes!!!

        if ($a == trim($bneu)) // trim() entfernt alle Leerzeichen drumherum und Zeilenenden-Zeichen.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

  2. hi,

    ein php script soll überprüfen, ob eine zahl in einer datenbank bereits vorhanden ist, wenn nicht, dann soll sie die nummer eintragen

    Mit "Datenbank" meinst du demzufolge

    b = file(datenbank);

    also ein Flatfile?

    a = "usereingabe"

    if(a != b)

    problem ist nur, dass er aus mir unerklärlichen gründen die true bedingung nicht 1 mal ausführt, sondern meißt so oft, wie der wert nicht übereinstimmt...

    Wenn du file() benutzt, bekommst du (im Erfolgsfall) ein Array zurückgeliefert. Ein solches kannst da nicht einfach mit einer Nutzereingabe, die wohl einen String darstellen dürfte, vergleichen.

    Was du vergleichen kannst, sind die einzelnen Einträge im Array - also Array in Schleife durchlaufen, und dann einzeln vergleichen.
    Oder Array-Funktionen wie in_array benutzen.

    Dabei aber berücksichtigen, dass file() das/die Zeilenumbruchzeichen am Ende jedes Zeilenwertes beibehält.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }