Michi: if Schleife läuft nicht

Hallo zusammen

Was ist den hier mit diesem Stück Code falsch:

if (!eregi('^([0-9]{3}).([0-9]{2}).([0-9]{3}).([0-9]{3})$', $ahvnr))
   {
    echo ("<font color='red'>Bitte geben Sie die AHV-Nummer nur nach    folgendem Muster ein xxx.xx.xxx.xxx!<br> Die Eingabe von <b>$ahvnr</b> ist nicht korrekt.</font><br>");
   }

Eigentlich sollte man doch meinen, wenn die Zahl nicht nach diesem Muster eingegeben wird, geht der Code in die if Schlaufe und fertig.
Mein Problem ist nun, er geht wohl in die if Schlaufe aber das Script läuft dann immer noch weiter.
Was mache ich bloss falsch?

Danke für euer Hilfe schon mal im voraus.

Gruss
Michi

  1. Mein Problem ist nun, er geht wohl in die if Schlaufe aber das Script läuft dann immer noch weiter.
    Was mache ich bloss falsch?

    Nix, wer sagt denn, dass eine if-Abfrage das Script danach beendet? Wenn du das willst, setz in deine if-Klammern ein "die;" ans Ende, bzw. mach aus deinem echo einfach "die('zahl xyz so angeben');".

    greetz RFZ

    1. geht leider nicht, da ich das script mit einem include in ein anderes einbinde, wird mit dem exit, der ganze Bildschirm weiss und nur der text wird ausgegeben.
      was ich noch komische finde ist, wenn ich noch eine weiter überprüfung ranhänge, geht das script nicht weiter. Also das heisst, die formularinhalte werden nicht in die db geschrieben.

      if (!eregi('^([0-9]{3}).([0-9]{2}).([0-9]{3}).([0-9]{3})$', $ahvnr))
      {
      echo ("<font color='red'>Bitte geben Sie die AHV-Nummer nur nach folgendem Muster ein xxx.xx.xxx.xxx!<br> Die Eingabe von <b>$ahvnr</b> ist nicht korrekt.</font><br>");
      }
      if (!eregi('^([a-zA-Z-])$', $name))
      {
      echo ("<font color='red'>Bitte verwenden Sie beim Namen nur die Zeichen A-Z!<br> Die Eingabe von <b>$name</b> ist nicht erlaubt.</font><br>");
      }

      wenn die nummer genau wie verlangt eingegeben wird aber der name nicht, läuft das script nicht weiter.

      danke und gruss
      michi

      1. Hi,

        if (!eregi('^([0-9]{3}).([0-9]{2}).([0-9]{3}).([0-9]{3})$', $ahvnr))
        {
        echo ("<font color='red'>Bitte geben Sie die AHV-Nummer nur nach folgendem Muster ein xxx.xx.xxx.xxx!<br> Die Eingabe von <b>$ahvnr</b> ist nicht korrekt.</font><br>");
        }
        if (!eregi('^([a-zA-Z-])$', $name))
        {
        echo ("<font color='red'>Bitte verwenden Sie beim Namen nur die Zeichen A-Z!<br> Die Eingabe von <b>$name</b> ist nicht erlaubt.</font><br>");
        }

        wie wäre das hier:

        in der einen datei (die du per include holst)

          
        function eingabe_validierung($ahv_nummer, $name)  
        {  
          $not_valid = false;  
          $fehler_msg = "";  
          if(!eregi('^([0-9]{3})\.([0-9]{2})\.([0-9]{3})\.([0-9]{3})$', $ahv_nummer))  
        {  
          $fehler_msg .= "<font color='red'>Bitte geben Sie die AHV-Nummer nur nach folgendem Muster ein xxx.xx.xxx.xxx!<br> Die Eingabe von <b>$ahvnr</b> ist nicht korrekt.</font><br>";  
          $not_valid = true;  
        }  
          
        if (!eregi('^([a-zA-Z\-])$', $name))  
        {  
          $fehler_msg .= "<font color='red'>Bitte verwenden Sie beim Namen nur die Zeichen A-Z!<br> Die Eingabe von <b>$name</b> ist nicht erlaubt.</font><br>";  
          $not_valid = true;  
        }  
          
          if($not_valid)  
          {  
            return $not_valid;  
          }  
          else  
          {  
            return $fehler_msg;  
          }  
        }  
        
        

        dann machst du an irgend ner stelle nen funktions aufruf und
        machst entweder das was gemacht werden soll wenn OK oder du
        gibst die fehler_msg aus.

        1. Hallo Daniel

          Danke für deine Mühe.
          Ich habe es mir jetzt so gemacht, dass ich bei jeder überprüfung noch eine Variable definiere und das mail oder den db eintrag mache, wenn diese variable nicht stimmt.

          if (blabla)
          {
            echo "das ist falsch";
            $allesok1 = 1;
          }
          if (blabla)
          {
            echo "das ist falsch";
            $allesok2 = 1;
          }

          if ($allesok !== 1 && $allesok !== 1)
          {
            db eintrag
          }

          Sicherlich nicht besonders schöner Code aber umheimlich funktionierend ;-)

          1. Hi,

            if (blabla)
            {
              echo "das ist falsch";
              $allesok1 = 1;
            }
            if (blabla)
            {
              echo "das ist falsch";
              $allesok2 = 1;
            }

            if ($allesok !== 1 && $allesok !== 1)
            {
              db eintrag
            }

            Sicherlich nicht besonders schöner Code aber umheimlich funktionierend ;-)

            Unnheimlich trifft den nagel auf den kopf.

            $allesok1 = false;
            $allesok2 = false;

            if (blabla)
            {
              echo "das ist falsch";
              $allesok1 = true;
            }

            if (blabla)
            {
              echo "das ist falsch";
              $allesok2 = true;
            }

            if ($allesok && $allesok)
            {
              db eintrag
            }

            sieht wesentlich schöner aus.

            1. Hi nochmal,

              $allesok1 = false;
              $allesok2 = false;

              if (blabla)
              {
                echo "das ist falsch";
                $allesok1 = true;
              }

              if (blabla)
              {
                echo "das ist falsch";
                $allesok2 = true;
              }

              if ($allesok1 && $allesok2)
              {
                db eintrag
              }
              else
              {
                if (!$allesok1)
                {
                  echo Fehlermedlung1;
                }

              if (!$allesok2)
                {
                  echo Fehlermedlung2;
                }
              }

              1. und nocheinmal, ergs, wo bin ich nur mit meinen gedanken.

                  
                $allesok1 = true;  
                $allesok2 = true;  
                  
                if (blabla1)  
                {  
                  $allesok1 = false;  
                }  
                  
                if (blabla2)  
                {  
                  $allesok2 = false;  
                }  
                  
                if ($allesok1 && $allesok2)  
                {  
                  db eintrag  
                }  
                else  
                {  
                  if (!$allesok1)  
                  {  
                    echo Fehlermedlung1;  
                  }  
                  
                  if (!$allesok2)  
                  {  
                    echo Fehlermedlung2;  
                  }  
                }  
                
                

                so sollte das natürlich heißen.

                1. und nocheinmal, ergs, wo bin ich nur mit meinen gedanken.

                  $allesok1 = true;
                  $allesok2 = true;

                  if (blabla1)
                  {
                    $allesok1 = false;
                  }

                  if (blabla2)
                  {
                    $allesok2 = false;
                  }

                  if ($allesok1 && $allesok2)
                  {
                    db eintrag
                  }
                  else
                  {
                    if (!$allesok1)
                    {
                      echo Fehlermedlung1;
                    }

                  if (!$allesok2)
                    {
                      echo Fehlermedlung2;
                    }
                  }

                  Hey vielen Dank für alles...werde meinen Code noch entsprechend anpassen. Aber wirklich falsch war es ja eigentlich nicht oder?
                  
                  1. Hi,

                    Hey vielen Dank für alles...werde meinen Code noch entsprechend anpassen. Aber wirklich falsch war es ja eigentlich nicht oder?

                    deiner oder meiner? meiner war schon etwas falsch true und false etwas
                    vertauscht.

                    Deiner war von der idee her sicher richtig, allerdings macht das i.d.R.
                    niemand so, zumindest niemand den ich kenne.

                    wenn du irgendwo ne variable abfrägst (z.B. in einem if-BLOCK) dann
                    sollte es diese Variable zuvor aufjedenfall geben. und für deinen zweck
                    reicht eine variable vom typ boolean.

                    MfG

                    1. Deiner war von der idee her sicher richtig, allerdings macht das i.d.R.
                      niemand so, zumindest niemand den ich kenne.

                      Jetzt kennst du ja jemand ;-)

                      wenn du irgendwo ne variable abfrägst (z.B. in einem if-BLOCK) dann
                      sollte es diese Variable zuvor aufjedenfall geben. und für deinen zweck
                      reicht eine variable vom typ boolean.

                      OK, werde es mir merken. Fange erste an mit PHP...und da ist man um solche Tipps sehr froh!

                      Danke und ein schönes WE

                      1. Hi,

                        OK, werde es mir merken. Fange erste an mit PHP...und da ist man um solche Tipps sehr froh!

                        So ähnlich ging es mir for 4 monaten auch. allerdings hatte ich schon
                        viel erfahrung in anderen sprachen gesammelt.

                        MfG

                2. Moin!

                  Sobald es mehr Bedingungen gibt, die geprüft werden und den Eintrag in die DB bei Nichterfüllung verhindern sollen, sollte man von diesen Einzelvariablen abrücken und Fehlermeldungen "sammeln":

                  $fehler = array(); // Leeres Array anlegen.

                  if (blabla1)
                  {
                    $fehler[] = "Die Bedingung 1 wurde nicht erfüllt";
                  }

                  if (blabla2)
                  {
                    $fehler[] = "Die Bedingung 2 wurde nicht erfüllt";
                  }
                  // Hier weitere Bedingungen

                  if (count($fehler)==0)
                  {
                    db eintrag
                  }
                  else
                  {
                    foreach ($meldung in $fehler)
                    {
                      echo $meldung;
                    }
                  }

                    
                  Kann man auch noch detaillierter ausprogrammieren, wenn die Fehlermeldungen individueller behandelt werden sollen (obwohl Sonderbehandlung von Fehlerzuständen besser in der oberen Bedingung behandelt werden sollte).  
                    
                   - Sven Rautenberg
                  
                  1. Hi,

                    Sobald es mehr Bedingungen gibt, die geprüft werden und den Eintrag in die DB bei Nichterfüllung verhindern sollen, sollte man von diesen Einzelvariablen abrücken und Fehlermeldungen "sammeln":
                    Kann man auch noch detaillierter ausprogrammieren, wenn die Fehlermeldungen individueller behandelt werden sollen (obwohl Sonderbehandlung von Fehlerzuständen besser in der oberen Bedingung behandelt werden sollte).

                    Da hast du natürlich vollkommen recht. wobei ich das hier:

                      
                    if (count($fehler)==0)  
                    {  
                      db eintrag  
                    }  
                    
                    

                    wohl eher so schreiben würden:

                      
                    if (empty($fehler))  
                    {  
                      db eintrag  
                    }  
                    
                    

                    MfG

                    1. Huhu Daniel

                      Da hast du natürlich vollkommen recht. wobei ich das hier:

                      if (count($fehler)==0)
                      {
                        db eintrag
                      }

                      
                      >   
                      > wohl eher so schreiben würden:  
                      >   
                      > ~~~
                        
                      
                      > if (empty($fehler))  
                      > {  
                      >   db eintrag  
                      > }  
                      > 
                      
                      

                      Mmmmh, die erste Variante ist aber viel einfacher zu verstehen und eindeutiger.
                      Man sieht gleich das es um ein Array geht das 0 Elemente haben soll.

                      Diese Informationen liefert die zweite Variante nicht da empty() alles mögliche auswerten kann.

                      Solche Faulenzer sind am Anfang verführerisch aber ich finde die
                      inzwischen eher überflüssig und nutze einige dieser vermeintlichen Abkürzungen gar nicht mehr.

                      Viele Grüße

                      lulu

                      --
                      bythewaythewebsuxgoofflineandenjoytheday
  2. Hi,

    ein if() ist keine Schleife, sondern eine Bedingung. Schleifen bastelst du mit for() bzw. while() und was es sonst noch gibt...

    E7

    1. ein if() ist keine Schleife, sondern eine Bedingung. Schleifen bastelst du mit for() bzw. while() und was es sonst noch gibt...

      ja hast recht...tut mir leid,nur leider hilfe mir das nicht weiter.

  3. Hiho,

    du solltest dir dringend das Konzept einer if BEDINGUNG verdeutlichen. Solch eine Bedingung hat herzlich wenig mit dem weiteren Ablauf des Scriptes zu tun. Eine if Bedingung macht lediglich das folgende. Sie prüft den Teil nach dem if( ob es ein wahrer Ausdruck ist. Falls ja wird der Teil in den geschweiften Klammern ausgeführt. Falls nicht wird geprüft ob es einen elseif oder else Teil gibt. Wenn ja wird dieser teil bewertet und ausgeführt.
    Das alles bzeieht sich aber jeweils nur auf die Anweisungen in den Geschweiften Klammern.
    Nach dem Ende der Bedingung läuft dein Script ganz normal weiter. Du kannst es dir wie einen Art Sprung vorstellen.
    if($a == b){
    irgendwas
    }
    wasanderes

    Wenn $a gleich $ b ist wird "irgendwas" ausgeführt und dann "wasanderes". Ist dem nicht so wird "irgendwas" ignoriert. Die if bedingung wird quasi übersprungen und es geht danach ganz normal mit "wasanderes" weiter.

    Marc

  4. Hi,

    if (!eregi(

    Schonmal mit ereg() probiert? Ich denke nicht, das hier die Unterscheidung von Gross- und Kleinschreibung nötig ist. Ob es der "Fehler" ist, darauf würd ich nicht wetten ;)