daten bereits vorhanden mit elseif anweisung?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • daten bereits vorhanden mit elseif anweisung?

    hallo,

    bastel gerade an einem kleinen script für die eintragung von email adressen für einen newsletter.

    soweit läuft das script auch, nur würde ich gerne als elseif anweisung ein abfrage machen für die prüfung ob die email adresse bereits vorhanden ist, aber irgendwie will er das nicht machen.

    hier das script:

    <? include("daten.php"); ?>
    <?
    if (isSet($letter))
    {
    if ($email=="")
    {$miss = "<b>Adresse fehlt!</b>";}

    elseif (!ereg ("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$", $email))
    {$miss = "Ungültiges Format!";}

    // bis hierhin läuft es super

    //aber das will er nicht nehmen, warum???
    elseif (mysql_num_rows($res)>0)
    {$miss = "<b>Email wird bereits verwendet!</b>";}


    else {
    $sql = "INSERT INTO $_tabelle (email) VALUES ('$email')";
    $erg = mysql_query($sql);

    $sql = "SELECT * FROM $_tabelle WHERE email='$email'";
    $res = mysql_query($sql);
    $erg = mysql_fetch_array($res);
    echo "<META http-equiv='refresh' content='3; URL=email.php'>";
    echo "<br><center>E-Mail Adresse<br><b>$email</b><br>wurde eingetragen.<br><b>Vielen Dank!</b></center>";

    }
    }
    ?>

    das $miss, wird im bodytag ausgegeben

    kann mir bitte jemand sagen, wo mein fehler liegt!

    vielen dank

    gruß luke

  • #2
    auf den ersten blick ist der code unformatiert - bitte php-tags benutzen.

    des weiteren steht mysql_num_rows irgendwie allein - wo ist die verbindung zur db, wo ist die deklaration von $res?

    des noch weiteren ist die logik etwas kaputt - elseif anweisung würde ich als logische alternative zu switch verwenden, wo es um verschiedene möglichkeiten _einer_ logischen verzweigung gibt. bei dir isses -

    wenn die bäume alt sind, geh schlafen
    wenn die bäume hoch sind, trink ein bier,
    sollten die affen jedoch im käfig sitzen, ist das gras alle.

    du merkst die absurdität?
    hint #1: mach draus einzelne if-abfragen - sieht logischer aus.
    hint #2: teste if abfragen mit
    PHP-Code:
    else die("painfully crying"); //hier die alternative kurz beschreiben - 
    //dann weißt du, welche stelle gemeint ist. 

    Kommentar


    • #3
      PHP-Code:
      elseif (mysql_num_rows($res)>0)
      {
      $miss "<b>Email wird bereits verwendet!</b>";}


      else {
      $sql "INSERT INTO $_tabelle (email) VALUES ('$email')";
      $erg mysql_query($sql);

      $sql "SELECT * FROM $_tabelle WHERE email='$email'";
      $res mysql_query($sql);
      $erg mysql_fetch_array($res);
      echo 
      "<META http-equiv='refresh' content='3; URL=email.php'>";
      echo 
      "<br><center>E-Mail Adresse<br><b>$email</b><br>wurde eingetragen.<br><b>Vielen Dank!</b></center>";

      }

      ist es ein versehen oder kommt die Abfrage an die DB erst nach dem elseif???

      mein Vorschlag wäre:
      PHP-Code:
      $res mysql_query("SELECT email FROM $_tabelle WHERE email='$email'");
      $erg mysql_fetch_array($res);

      elseif (
      strtolower($erg['email']) == strtolower($email))
      //weiter mit fehlermeldung 
      und dann belese dich mal zu register_globals = off, könnte dich später mal betreffen
      mfg
      marc75

      <Platz für anderes>

      Kommentar


      • #4
        hallo marc75,

        erstmal danke für deine antwort.

        ich bin noch nicht so bewandert mit php, daher kann es durchaus passieren, dass nicht alles so klappt wie ich mir das vorstelle )

        so nun zu deinem vorschlag:

        PHP-Code:
        $res mysql_query("SELECT email FROM $_tabelle WHERE email='$email'");
        $erg mysql_fetch_array($res);

        elseif (
        strtolower($erg['email']) == strtolower($email))
        //weiter mit fehlermeldung); 
        wo muß das in meinem script hin und wie gibt er die fehlermeldung aus?

        ich blick da noch nicht so recht durch ;o)

        gruß luke

        Kommentar


        • #5
          Original geschrieben von penizillin
          auf den ersten blick ist der code unformatiert - bitte php-tags benutzen.

          des weiteren steht mysql_num_rows irgendwie allein - wo ist die verbindung zur db, wo ist die deklaration von $res?

          des noch weiteren ist die logik etwas kaputt - elseif anweisung würde ich als logische alternative zu switch verwenden, wo es um verschiedene möglichkeiten _einer_ logischen verzweigung gibt. bei dir isses -

          wenn die bäume alt sind, geh schlafen
          wenn die bäume hoch sind, trink ein bier,
          sollten die affen jedoch im käfig sitzen, ist das gras alle.

          du merkst die absurdität?
          hint #1: mach draus einzelne if-abfragen - sieht logischer aus.
          hint #2: teste if abfragen mit
          PHP-Code:
          else die("painfully crying"); //hier die alternative kurz beschreiben - 
          //dann weißt du, welche stelle gemeint ist. 
          hi penizillin,

          dir auch ein danke fürs antworten, wie gesagt ich bin nicht so bewandert mit php und denke ich weiß einfach noch nicht die möglichkeiten abzusehen, die man mit php machen kann.

          könntest du mir an hand meines scriptes einen vorschlag machen, wie ich das mit einzelnen if anweisungen machen könnte.

          ich lerne am besten, wenn ich sehe wenn es einmal richtig ist, dann wird mir auch der sinn klar )

          vielen dank

          gruß luke

          Kommentar


          • #6
            Mal abgesehen davon das du nicht lesen kannst

            auf den ersten blick ist der code unformatiert - bitte php-tags benutzen.
            und auch diesen Thread ignoriet hast
            http://www.php-resource.de/forum/sho...threadid=47906

            Ist dein Code sehr kurios....

            Auch Grundlagen scheinen dir zu fehlen......

            Das ein elseif() nur geprüft wird wenn die vorherige Bedingung nicht true ist kein Geheimnis. Das das Script nachfolgende elseif Bedingungen ignoriert wenn die vorherige elseif Bedingung bereits zutrifft ist auch kein Geheimnis.......

            Das entspricht dieser Kette in vereinfachter Form:

            PHP-Code:
            if ($blubb)
              echo 
            'blubb';
              else
                if (
            $test)
                  echo 
            'test';
               else
                 if (
            $wuff)
                   echo 
            'bla'
            Auch dein Codesyling finde ich weder übersichtlich noch durchdacht. Es sollte sich eigentlich in die letzten Ecken des www rumgesprochen haben das man bei mysq Funktionen ein or die(mysql_error()); anhängt.
            Mehrzeilige Bedingungsblöcke mit { } zu erstellen obwohl es kein Block ist

            Was das sein soll ist auch nunja....
            PHP-Code:
            <? include("daten.php"); ?>
            <?
            include ist keine Funktion daher sind diese () wohl..................
            auch das zweite <? macht keinen Sinn

            Auch wäre dir das ganze klar wenn du ein Debugging gemacht hättest.....
            [color=blue]MfG Payne_of_Death[/color]

            [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
            [color=red]Merke:[/color]
            [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

            Murphy`s Importanst LAWS
            Jede Lösung bringt nur neue Probleme
            Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
            In jedem kleinen Problem steckt ein großes, das gern raus moechte.

            Kommentar


            • #7
              Original geschrieben von Payne_of_Death
              Mal abgesehen davon das du nicht lesen kannst



              und auch diesen Thread ignoriet hast
              http://www.php-resource.de/forum/sho...threadid=47906

              Ist dein Code sehr kurios....

              Auch Grundlagen scheinen dir zu fehlen......

              Das ein elseif() nur geprüft wird wenn die vorherige Bedingung nicht true ist kein Geheimnis. Das das Script nachfolgende elseif Bedingungen ignoriert wenn die vorherige elseif Bedingung bereits zutrifft ist auch kein Geheimnis.......

              Das entspricht dieser Kette in vereinfachter Form:

              PHP-Code:
              if ($blubb)
                echo 
              'blubb';
                else
                  if (
              $test)
                    echo 
              'test';
                 else
                   if (
              $wuff)
                     echo 
              'bla'
              Auch dein Codesyling finde ich weder übersichtlich noch durchdacht. Es sollte sich eigentlich in die letzten Ecken des www rumgesprochen haben das man bei mysq Funktionen ein or die(mysql_error()); anhängt.
              Mehrzeilige Bedingungsblöcke mit { } zu erstellen obwohl es kein Block ist

              Was das sein soll ist auch nunja....
              PHP-Code:
              <? include("daten.php"); ?>
              <?
              include ist keine Funktion daher sind diese () wohl..................
              auch das zweite <? macht keinen Sinn

              Auch wäre dir das ganze klar wenn du ein Debugging gemacht hättest.....
              sei nicht so hart mit mir, ich bin anfänger und ich kann auch nicht alles gleichzeit lernen und verstehen. ich kann nur fragen und dann es besser machen

              in der daten.php steht die db daten drin, damit ich das nicht immer schreiben muß und das script ist nur ein teil von vielen, daher das includen.

              so nun habe ich aber doch noch ne frage und ich bekomm bestimmt wieder ne garstige antwort , aber ich riskier das mal.

              muß nach so einem block dann die insert abfrage?
              PHP-Code:
              if ($blubb)
                echo 
              'blubb';
                else
                  if (
              $test)
                    echo 
              'test';
                 else
                   if (
              $wuff)
                     echo 
              'bla'

              Kommentar


              • #8
                Die Insert Abfrage darf erst erfolgen wenn die eingegebene eMail Adresse gültig ist und noch nicht existiert.....

                Vor mysql_num_rows gibt es keine Select Abfrage? was erwartest du als Menge?

                Auch ein Select count(*) ist besser als der träge Weg via mysql_num_rows();

                Das mit dem include ist klar aber die Klammern sind überflüssig.....
                [color=blue]MfG Payne_of_Death[/color]

                [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                [color=red]Merke:[/color]
                [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                Murphy`s Importanst LAWS
                Jede Lösung bringt nur neue Probleme
                Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                Kommentar


                • #9
                  Original geschrieben von Payne_of_Death
                  Die Insert Abfrage darf erst erfolgen wenn die eingegebene eMail Adresse gültig ist und noch nicht existiert.....

                  Vor mysql_num_rows gibt es keine Select Abfrage? was erwartest du als Menge?

                  Auch ein Select count(*) ist besser als der träge Weg via mysql_num_rows();

                  Das mit dem include ist klar aber die Klammern sind überflüssig.....
                  die select abfrage dachte ich ist dafür, dass man nach dem korrekten eintrag die email adresse, als bestätigung sieht.

                  ich werd mir auf jeden fall mühe geben meine scripte, besser zu strukturieren.

                  wenn man ein script nimmt zum üben, was auch funktioniert und dort die klammern beim include drin sind, dann gewöhnt man sich das an, wenn ich sie nicht brauche ist das natürlich noch besser

                  dank dir auf jeden fall für deine mühe mit mir!

                  Kommentar


                  • #10
                    nichts zu danken......

                    vll. auch mal anschauen www.schattenbaum.net
                    hab damit aber auch nicht wirklich was anfangen können, hab eher durch 5maliges neucoden eines billigen Scriptes, nachschlagen und in Foren lesen dazugelernt......

                    Und dabei hilft immer die Logik die muss vorhanden sein und man muss seine Möglichkeiten in einer Sprache kennen......Debugging ist dabei der erste Schritt zur Selbsthilfe.....

                    die select abfrage dachte ich ist dafür, dass man nach dem korrekten eintrag die email adresse, als bestätigung sieht.
                    macht auch schon wieder keinen Sinn da du ja im $_POST Array was du durch das Formular bekommst die eMail Adresse bereits hast......

                    Du solltest also zunächst den Formulareintrag nach einem eMail Muster prüfen und da besser preg_match(); anstatt ereg(); verwenden....

                    Danach überprüfen ob der Eintrag bereits in der DB existiert und da würde sich ein einfach Selecht count(*) as menge where email=$formulareintrag anbieten...
                    Sonst müsste PHP nochmals via mysql_num_rows(); die DB nerven..

                    Und wenn die Spalte menge 0 ist dann das Insert Statment abschicken...
                    Bei Erfolg den Eintrag bestätigen ansonsten verneinen und den Grund angeben......
                    [color=blue]MfG Payne_of_Death[/color]

                    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                    [color=red]Merke:[/color]
                    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                    Murphy`s Importanst LAWS
                    Jede Lösung bringt nur neue Probleme
                    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                    Kommentar


                    • #11
                      Original geschrieben von Payne_of_Death


                      Du solltest also zunächst den Formulareintrag nach einem eMail Muster prüfen und da besser preg_match(); anstatt ereg(); verwenden....
                      Damit meinst du doch diese zeile:
                      PHP-Code:
                      if(!ereg ("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$"$email)) 
                      wenn ja, dann beschwert er sich nun

                      PHP-Code:
                      WarningNo ending delimiter '^' found 
                      . bei
                      PHP-Code:
                      if(!preg_match("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$"$email)) 
                      warum macht er das?

                      hab das script nun ein wenig verändert:
                      PHP-Code:
                      <?
                      include daten.php';

                      if (isSet($letter))
                      {
                      if($email=="")
                          {
                          $miss = '<b><center>Adresse fehlt!</b></center>';
                          }
                        else
                          {
                          if(!ereg ("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$", $email))
                            {
                            $miss = '<b><center>Ungültiges Format!</b></center>';
                            }
                          else
                            {
                      $sql = "INSERT INTO $Tabelle (email) VALUES ('$email')";
                      $erg  = mysql_query($sql);

                      echo "<META http-equiv='refresh' content='3; URL=letter.php'>";
                      echo "<br><center>E-Mail Adresse<br><b>$email</b><br>wurde eingetragen.<br><b>Vielen Dank!</b></center>";
                      }
                      }
                      }
                      ?>
                      mir ist nun aber garnicht klar wohin nun die prüfung soll, damit er die doppelt rausfiltert.

                      hilfe ich bin noch nicht schlau genug
                      es wäre sehr nett wenn jemand mir das mal genau so hinschreibt wo und wie es hin muß, dann begreife ich es auch

                      danke!!!

                      Kommentar


                      • #12
                        Persönlicher Rat fang klein an und schau was du machst....
                        Das Syntaxhighlighting sagt schon das was nicht stimmt

                        PHP-Code:
                        include daten.php'; 
                        Flüchtigkeitsfehler vermeiden....

                        Grobes Beispiel:
                        Den Rest was fehlt kannst du selbst...
                        PHP-Code:
                        $error='<font color="red">%s</font>';
                        If ( empty(
                        $email) )
                          
                        printf($error,'eMail-Adressen-Feld im Forumlar ist leer !');
                        elseif ( !
                        preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*?[a-z]+$/is'$email) )
                         
                        printf($error,'Ihre eingetragene eMail Adresse ist ung&uuml;ltig');
                        else
                          {
                             
                        $sql="SELECT COUNT(*) AS menge FROM table WHERE email='".$_POST['email']."'";
                            
                        $res=@mysql_query($sql) or die( sprintf($error,'SQL-ERROR: ').mysql_error() );
                            
                        $row=mysql_fetch_assoc($res);
                            if (
                        $row['menge'] == 0)
                              
                        // DO INSERT eMail
                            
                        else
                              
                        printf($error,'Ihre angegebene eMail existiert bereits !');
                          } 
                        [color=blue]MfG Payne_of_Death[/color]

                        [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                        [color=red]Merke:[/color]
                        [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                        Murphy`s Importanst LAWS
                        Jede Lösung bringt nur neue Probleme
                        Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                        In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                        Kommentar


                        • #13
                          Original geschrieben von Payne_of_Death
                          Persönlicher Rat fang klein an und schau was du machst....
                          Das Syntaxhighlighting sagt schon das was nicht stimmt

                          PHP-Code:
                          include daten.php'; 
                          Flüchtigkeitsfehler vermeiden....

                          Grobes Beispiel:
                          Den Rest was fehlt kannst du selbst...
                          PHP-Code:
                          $error='<font color="red">%s</font>';
                          If ( empty(
                          $email) )
                            
                          printf($error,'eMail-Adressen-Feld im Forumlar ist leer !');
                          elseif ( !
                          preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*?[a-z]+$/is'$email) )
                           
                          printf($error,'Ihre eingetragene eMail Adresse ist ung&uuml;ltig');
                          else
                            {
                               
                          $sql="SELECT COUNT(*) AS menge FROM table WHERE email='".$_POST['email']."'";
                              
                          $res=@mysql_query($sql) or die( sprintf($error,'SQL-ERROR: ').mysql_error() );
                              
                          $row=mysql_fetch_assoc($res);
                              if (
                          $row['menge'] == 0)
                                
                          // DO INSERT eMail
                              
                          else
                                
                          printf($error,'Ihre angegebene eMail existiert bereits !');
                            } 
                          hi,
                          das mit dem daten.php' war ein kopierfehler, im echten script ist das erste' auch da, aber trotzdem danke für alles und nochmals danke für deine gedult.
                          hab es jetzt hinbekommen und verstehe auch wie es funktioniert.

                          gruß luke

                          Kommentar

                          Lädt...
                          X