Jeena Paradies: (MySQL) Werte in Tabelle überprüfen

Hallo,

Also ich bin ja nicht so der coole PHP Programmierer, und deshalb habe ich irgendwie so ein Problem.

Ich will so eine Anmeldung für einen Newsletter einer Band realisieren. Da habe ich das problem, dass man sich mit der gleichen E-Mail Adresse zwei mal anmelden könnte. Das habe ich gelöst, in dem ich abfrage ob es diese schon in der Datenbank gibt:
-------------------------------
$checkmail  = "SELECT email FROM newsletter WHERE email = '".$email."'";
$resultmail = mysql_query($checkmail) OR die(mysql_error());
if(mysql_num_rows($resultmail) != 0)
 {
    echo mysql_num_rows($resultfrei);
    echo "<p>Diese E-Mail Adresse wurde bereits bei uns registriert.</p>\n";
    exit;
  }
-------------------------------

Jetzt unterscheide ich noch ob diese schon freigeschalten ist oder nicht und wollte es genau so mit mysql_num_rows machen. Und da gibt es ein Problem, wenn in diesem Feld der Tabelle nichts drinsteht zeigt er mir trotzdem an,

$checkfrei  = "SELECT frei FROM newsletter WHERE email = '".$email."'";
echo mysql_num_rows($resultfrei);

gibt 1 aus, also gibt es dort diese Zelle obwohl sie leer ist, glaube ich? So lässt sich das ja dann nicht lösen.

Jetzt komme ich wirklich nicht drauf, wie ich herausfinden kann, ob an dieser Stelle eine 1 eingetragen ist oder nichts. Kann man das irgendwie einfach herausfinden, oder muss ich alles aus der Datenbank auslesen und mit php vergleichen?

Grüße
Jeena Paradies

--
"Of course it does not work, but look how fast it is!"
  1. hi,

    Jetzt unterscheide ich noch ob diese schon freigeschalten ist oder nicht und wollte es genau so mit mysql_num_rows machen.

    warum willst du dafür noch eine zweite query machen? das ist doch unperformant.

    mache _eine_ query, die dir ausschliesslich den wert der spalte frei zurückliefert, und zwar für den datensatz, wo deine bisherige bedingung
    WHERE email = '".$email."'";
    zutrifft.

    entweder bekommst du jetzt 0 datensätze zurückgeliefert - dann ist also die emailadresse noch gar nicht in der DB.

    oder aber, du bekommst ein ergebnis - dann kannst du dir dieses jetzt anschauen, ob dort das kennzeichen für freigeschaltet wahr oder falsch ist.

    gruss,
    wahsaga

    1. Hallo,

      Jo du hast recht da spare ich mir nebenbei auch noch den halben Code. Ich habe es jetzt mal umgeschrieben, hab aber jetzt einen Syntax Error in Zeile 7. Außerdem komme ich nicht dahinter wann man diese Punkte machen muss und wann nicht.

      01  // check if email exists
      02  $checkfrei  = "SELECT frei FROM newsletter WHERE email = '".$email."'";
      03  $resultfrei = mysql_query($checkfrei) OR die(mysql_error());
      04  $reihe = mysql_fetch_assoc($resultfrei);
      05  if(mysql_num_rows($resultfrei) != 0)
      06  {
      07   if($reihe['frei']. == 1)
      08    {
      09     echo "<p>Diese E-Mail Adresse wurde bereits bei uns registriert und freigeschalten.</p>\n";
      10     exit;
      11    }
      12   else
      13    {
      14     echo "<h2>Spamschutz2</h2><p>Diese E-Mail Adresse wurde bereits bei uns registriert aber noch nicht freigeschalten.</p>\n";
      15     exit;
      16    }
      17  }

      Grüße
      Jeena Paradies

      --
      "Of course it does not work, but look how fast it is!"
      1. Hallo,

        hab aber jetzt einen Syntax Error in Zeile 7.

        Völlig falsh es ist ein
        Parse error: parse error, unexpected T_IS_EQUAL in /home/vhosts/jeenaparadies.clever-webspace.de/var/www/html/koorbash/newsletter.php on line 45

        Grüße
        Jeena Paradies

        --
        "Of course it does not work, but look how fast it is!"
        1. Hallo,

          Nachtrag:

          Parse error: parse error, unexpected T_IS_EQUAL in /home/vhosts/jeenaparadies.clever-webspace.de/var/www/html/koorbash/newsletter.php on line 45

          Wobei line 45 nach der zählweise aus dem Posting line 7 ist.

          Grüße
          Jeena Paradies

          --
          "Of course it does not work, but look how fast it is!"
      2. Hello,

        [...] hab aber jetzt einen Syntax Error in Zeile 7. Außerdem komme ich nicht dahinter wann man diese Punkte machen muss und wann nicht.

        Na, in Zeile sieben jedenfalls nicht.

        01  // check if email exists
        02  $checkfrei  = "SELECT frei FROM newsletter WHERE email = '".$email."'";
        03  $resultfrei = mysql_query($checkfrei) OR die(mysql_error());

        hier fehlt ein
        if($resultfrei)
        {
          ## nur wenn Ergebnis vorhanden, auswerten möglich
        }

        04  $reihe = mysql_fetch_assoc($resultfrei);

        05  if(mysql_num_rows($resultfrei) != 0)
        06  {
        07   if($reihe['frei']. == 1)

        if($reihe['frei'] == 1) ### einfacher Vergleich mit numerischem Wert

        Die Punkte stehen immer für die Verknüpfung zweier Strings.

        $gesamt = $teil1.$teil2."statischer Text".$teil3

        gesamt =  teil1 + teil2 + "statischer Text" + teil3

        Nur Pluszeichen darf man hier eben nicht nehmen, da PHP sonst versuchen würde, die numerischen Werte zu addieren. Und das ist bei Worten nicht so sinnvoll.

        Grüße

        Tom

        1. Hallo,

          hier fehlt ein
          if($resultfrei)
          {
            ## nur wenn Ergebnis vorhanden, auswerten möglich
          }

          Ach daran hat es gelegen! Ok alles klar. Ist ja kein HTML was über so etwas einfach drüber wegsieht. In Zukunft weiß ich es.

          $gesamt = $teil1.$teil2."statischer Text".$teil3
           gesamt =  teil1 + teil2 + "statischer Text" + teil3
          Nur Pluszeichen darf man hier eben nicht nehmen, da PHP sonst versuchen würde, die numerischen Werte zu addieren. Und das ist bei Worten nicht so sinnvoll.

          Hm ok ich glaube ich kapiere es. Wenn man also numerische Werte hintereinander einfügen will, dann muss man sie verbinden, also mit dem "." so zusagen wie einen zug hintereinander anbinden. Bei Strings kann man da aber ein "+" verwenden, welches bei Zahlen diese addiert.

          Vielen Dank euch beiden, habt mir sehr geholfen. Wenn man sich damit beschäftigt dann wird dass auch langsam alles logischer. Zwar nicht ganz so einfach wie AMIGABasic aber irgendwann steige ich durch.

          Jetzt werde ich mal was basteln, womit ich dann mit einem Link aus der Bestätigungs E-Mail die Adresse für den Newsletter freischalten kann. Und danach, mache ich noch scripts die der Sängerin erlauben Newsletter über ihren Webbrowser zu schreiben, und sie an jeden einzelnen mit Anrede zu verschicken. Dort wird dann auch noch ein Link zum Austragen sein.

          Ich weiß dass es das schon tausendfach fertig gibt, aber ich will es selbst machen, um sie dann überall einsetzten zu können wo es sinnvoll ist. Außerdem lerne ich nur so PHP.

          Also noch mal vielen Dank, wird aber warscheinlich nicht das letzte mal gewesen sein, dass ich wegen dieses Newsletters frage.

          Grüße
          Jeena Paradies

          --
          "Of course it does not work, but look how fast it is!"
          1. hi,

            Ich weiß dass es das schon tausendfach fertig gibt, aber ich will es selbst machen, um sie dann überall einsetzten zu können wo es sinnvoll ist. Außerdem lerne ich nur so PHP.
            Also noch mal vielen Dank, wird aber warscheinlich nicht das letzte mal gewesen sein, dass ich wegen dieses Newsletters frage.

            macht ja nix.
            ich denke, den meisten hilfewilligen hier im forum ist dein ansatz tausend mal lieber, als der nächste frager, der hier wieder mit fragen zu einem irgendwo heruntergeladenen script ankommt, von dessen funktionsweise er keinen blassen schimmer hat :-)

            gruss,
            wahsaga

          2. Hello,

            So muss es aussehen:
            $gesamt = $teil1.$teil2."statischer Text".$teil3

            Das kann man sich darunter vorstellen:
            gesamt =  teil1 + teil2 + "statischer Text" + teil3

            Nur Pluszeichen darf man hier eben nicht nehmen, da PHP sonst versuchen würde, die numerischen Werte der Strings zu addieren. Und das ist bei Worten nicht so sinnvoll.

            Hm ok ich glaube ich kapiere es. Wenn man also numerische Werte hintereinander einfügen will, dann muss man sie verbinden, also mit dem "." so zusagen wie einen zug hintereinander anbinden. Bei Strings kann man da aber ein "+" verwenden, welches bei Zahlen diese addiert.

            Neeeee!

            Die Vorstellung mit dem Zug ist ja schon ganz gut. Aber bei Strings kann man eben nur Punkte verwenden. Wenn "numerische Werte" hintereinander dargestellt werden sollen, dann sind es ja Strings.

            Nur wenn ich wirklich damit rechnen will, dann soll PHP sie als numerische Werte behandeln und dann ist auch das Plus richtig (vorausgesetzt, ich will addieren!).

            Grüße

            Tom

      3. hi,

        07   if($reihe['frei']. == 1)

        was macht der punkt denn da drin?
        der ist der verkettungsoperator für strings - du willst aber an dieser stelle gar nichts verketten, sondern vergleichen ;-)

        gruss,
        wahsaga

      4. hi,

        noch zusätzlich zu toms amnerkung, dass du $resultfrei erstmal auf true oder false prüfen solltest:

        03  $resultfrei = mysql_query($checkfrei) OR die(mysql_error());
        04  $reihe = mysql_fetch_assoc($resultfrei);
        05  if(mysql_num_rows($resultfrei) != 0)

        hier solltest du die schachtelung ändern.
        mysql_fetch_assoc macht ja keinen sinn, wenn mysql_num_rows 0 liefert.

        erst abfragen, ob num_rows gleich 0 -> meldung ausgeben, dass emailadresse noch nicht eingetragen wurde.
        andernfalls -> datensatz mit mysql_fetch_assoc auslesen, und dann kennzeichen "frei" auswerten.

        gruss,
        wahsaga

  2. Hallo,

    Wie befürchtet komme ich wieder mal nicht weiter.

    Ich verschicke mit einer Email diesen Link (mittels urlencode() anscheinend richtig codiert):

    http://www.jeenaparadies.clever-webspace.de/koorbash/newsletter-bestaetigung.php?email=zwiebelkuchen%40gmx.de

    Damit will ich dann die E-Mail Adresse, die mitgegeben wird für den Newsletter entsperren.

    Folgendes habe ich mir überlegt:

    01 $_GET["email"];
    02 $email=urldecode($email);
    06 echo $email;

    Doch wie ich feststellen muss funktioniert die Übergabe aus der Adresszeile nicht, was habe ich da falsch gemacht? Es wird nichts bei echo ausgegeben.

    Grüße
    Jeena Paradies

    --
    "Of course it does not work, but look how fast it is!"
    1. Hallo,

      Wie lange man sich doch mit leichtsinnsfehlern herumschlagen kann tsts.

      01 $_GET["email"];
      02 $email=urldecode($email);
      06 echo $email;

      soll doch natürlich
      01 $email = $_GET["email"];
      heißen, dann geht es auch.

      Grüße
      Jeena Paradies

      --
      "Of course it does not work, but look how fast it is!"