riggidirob: emailversand nach zustandsprüfung

hallo ihr freundlichen helfer da draußen. ich bin an für sich eine absolute niete in eigener programmierung, aber ich finde mich etwas zurecht und bastel mir aus vorhandenen skripten was zusammen. doch jetzt klemmt's. wer kann helfen??

es dreht sich um die tipp-erinnerungs-mail bei einem online-tippspiel.
nachdem eine zeitmessung gemacht wurde, möchte ich zur erinnerung an diejenigen, die noch nicht getippt haben eine mail schicken lassen. ich habe folgende funktion probiert. vielleicht kann mir ja jemand weiterhelfen.

function reminder() {
    $abfrage = sprintf("SELECT Spieltag, datum_erinnern, datum_erinnert FROM erinnern WHERE erinnert = 0 and datum_erinnern < '%s'", date("Y-m-d H:i:s"));
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
      {
      $abfrage = sprintf("SELECT MAX(Anzahl) as Anzahl, Alias FROM Tipps_count WHERE Spieltag = %d GROUP BY Alias", $_SESSION['spieltag']);
      $ergebnis1 = mysql_query($abfrage);
      while($row1 = mysql_fetch_object($ergebnis))
        {
        if ($row1->Anzahl == 0):
          $abfrage = sprintf("SELECT real_name, email FROM users WHERE login = '%s'", $row->Alias);
          $ergebnis2 = mysql_query($abfrage);
          while($row2 = mysql_fetch_object($ergebnis2))
            {
            $realname = $row2->real_name;
            $email = $row2->email;
            $header = "From: ****** <*****@*****.**>\n";
            $header .= "MIME-Version: 1.0\n";
            $header .= "Content-Type: text/html\nContent-Transfer-Encoding: 8bit\n";
            $subject = "Tipp-Erinnerung für den ";
            $subject .=  $_SESSION['spieltag'];
            $subject .= ". Spieltag";
            $body = "<b>Hallo " . $realname . "</b>,<br><br>";
            $body .= "Du hast noch keinen Tipp für den " . $_SESSION['spieltag'] . ". Spieltag abgegeben!<br>";
            $body .= "Bis zum Anpfiff am Freitag (bei Englischer Woche ist der Freitag ein Dienstag) ist das noch möglich. Am besten gleich <a href="http://www.*****.**/*****/login.php">hier klicken</a> und tippen.<br>";
            $body .= "Gut Tipp!";
            }
        endif;
        }
      $abfrage = sprintf("UPDATE erinnern SET erinnert = 1, datum_erinnert = '%s', user = '%s' WHERE Spieltag = %d", date("Y-m-d H:i:s"), $_SESSION['user'], $row->Spieltag);
      $ergebnis3 = mysql_query($abfrage);
      }
  }

komisch ist, dass die tabelle "erinnern" das richtige update bekommt (SET erinnert = 1), allerdings keine mails verschickt werden. wo steckt der fehler? ist mein problem überhaupt verständlich??

liebe grüße,
rob

  1. hallo ihr freundlichen helfer da draußen. ich bin an für sich eine absolute niete in eigener programmierung, aber ich finde mich etwas zurecht und bastel mir aus vorhandenen skripten was zusammen. doch jetzt klemmt's. wer kann helfen??

    es dreht sich um die tipp-erinnerungs-mail bei einem online-tippspiel.
    nachdem eine zeitmessung gemacht wurde, möchte ich zur erinnerung an diejenigen, die noch nicht getippt haben eine mail schicken lassen. ich habe folgende funktion probiert. vielleicht kann mir ja jemand weiterhelfen.

    komisch ist, dass die tabelle "erinnern" das richtige update bekommt (SET erinnert = 1), allerdings keine mails verschickt werden. wo steckt der fehler? ist mein problem überhaupt verständlich??

    liebe grüße,
    rob

    Hallo, ich bin auch nicht gerade ein Experte, aber wenn es nicht noch ne andere Möglichkeit gibt, fehlt bei Dir überhaupt der Befehl zum Mailversand:

    http://de.php.net/mail

    In meinen Mailscripten steht jeweils irgendwo

    mail($Empfängeradresse,$Betreff,$Nachricht)

    Du definierst zwar bspw. den Mail-Body, machst aber nichts damit. Vielleicht ist das das Problem.

    1. danke Rotor für den ersten (offensichtlichen) bug im script. hab ihn in zeile 27 behoben. (s.u.) aber ich muss mich nochmal an Euch wenden. irgendwo stimmt's noch nicht.

      zur erklärung: es dreht sich um die tipp-erinnerungs-mail bei einem online-tippspiel. ich habe versucht eine funktion zu schreiben, die nach zeitüberprüfung zum einen eine email an alle diejenigen rausschickt, die noch nicht getippt haben und zum anderen die tabelle "erinnern" ein update bekommt (SET erinnert = 1) updated.
      das tabellenupdate funktioniert einwandfrei. aber es wird keine mail verschickt.

      1  function reminder() {
      2   $abfrage = sprintf("SELECT Spieltag, datum_erinnern, datum_erinnert FROM erinnern WHERE erinnert = 0 and datum_erinnern < '%s'", date("Y-m-d H:i:s"));
      3    $ergebnis = mysql_query($abfrage);
      4    while($row = mysql_fetch_object($ergebnis))
      5      {
      6      $abfrage = sprintf("SELECT MAX(Anzahl) as Anzahl, Alias FROM Tipps_count WHERE Spieltag = %d GROUP BY Alias", $_SESSION['spieltag']);
      7      $ergebnis1 = mysql_query($abfrage);
      8      while($row1 = mysql_fetch_object($ergebnis))
      9        {
      10        if ($row1->Anzahl == 0):
      11          $abfrage = sprintf("SELECT real_name, email FROM users WHERE login = '%s'", $row->Alias);
      12          $ergebnis2 = mysql_query($abfrage);
      13          while($row2 = mysql_fetch_object($ergebnis2))
      14            {
      15            $realname = $row2->real_name;
      16            $email = $row2->email;
      17            $header = "From: ***** <*****@*****.**>\n";
      18            $header .= "MIME-Version: 1.0\n";
      19            $header .= "Content-Type: text/html\nContent-Transfer-Encoding: 8bit\n";
      20            $subject = "Tipp-Erinnerung für den ";
      21            $subject .=  $_SESSION['spieltag'];
      22            $subject .= ". Spieltag";
      23            $body = "<b>Hallo " . $realname . "</b>,<br><br>";
      24            $body .= "Du hast noch keinen Tipp für den " . $_SESSION['spieltag'] . ". Spieltag abgegeben!<br>";
      25            $body .= "Bis zum Anpfiff am Freitag (bei Englischer Woche ist der Freitag ein Dienstag) ist das noch möglich. Am besten gleich <a href="http://www.*****.**/*****/login.php">hier klicken</a> und tippen.<br>";
      26            $body .= "Gut Tipp!!";
      27            mail($email, $subject, $body, $header);
      28            }
      29        endif;
      30        }
      31      $abfrage = sprintf("UPDATE erinnern SET erinnert = 1, datum_erinnert = '%s', user = '%s' WHERE Spieltag = %d", date("Y-m-d H:i:s"), $_SESSION['user'], $row->Spieltag);
      32      $ergebnis3 = mysql_query($abfrage);
      33      }
      34  }

      müsste es in zeile 8 nicht hinten "$ergebnis1" heißen. wenn ich das aber schreibe, gibt er mir den fehler 404.

      ich bin mir sicher einer von Euch "programmier-gurus" hat schon die lösung. ;)

      1. Mahlzeit,

        das tabellenupdate funktioniert einwandfrei. aber es wird keine mail verschickt.

        Und welche Fehlermeldung tritt auf? "Funktioniert nicht" ist KEINE aussagekräftige Fehlermeldung. Wieso wertest Du den Rückgabewert der Funktion mail() nicht aus? Du kannst Dir Fehler auch per error_reporting() ausgeben lassen.

        3    $ergebnis = mysql_query($abfrage);
        4    while($row = mysql_fetch_object($ergebnis))
        5      {
        6      $abfrage = sprintf("SELECT MAX(Anzahl) as Anzahl, Alias FROM Tipps_count WHERE Spieltag = %d GROUP BY Alias", $_SESSION['spieltag']);
        7      $ergebnis1 = mysql_query($abfrage);
        8      while($row1 = mysql_fetch_object($ergebnis))

        müsste es in zeile 8 nicht hinten "$ergebnis1" heißen.

        Das kommt darauf an, was Du willst. Willst Du in der zweiten (inneren) Schleife die Ergebnisse der äußeren Abfrage verarbeiten, musst Du $abfrage schreiben. Wenn du die Ergebnisse der inneren Abfrage verarbeiten willst, schreib $abfrage1. Mir scheint, es mangelt an grundlegenden PHP-Kenntnissen.

        wenn ich das aber schreibe, gibt er mir den fehler 404.

        Wer gibt Dir den Fehler? PHP? Unmöglich.

        ich bin mir sicher einer von Euch "programmier-gurus" hat schon die lösung. ;)

        Nein. Aber Hinweise, wie DU SELBST die Lösung finden kannst.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|