$query Abfrage korrekt?

Kimymoon86

Mitglied
Hallo Leute ich erstelle gerade eine Eriinerungs Mail Hilfe.

Und mir macht eine Abfrage ziemlich zu schaffen. Vielleicht könnt ihr mir helfen. Das ganze geht sicherlich auch eleganter zu lösen, leider weis ich nicht wie. ^^ Bin noch Anfänger.
Meine Fehlermeldung ist, dass mir keine Mails versendet werden.
Notice: Undefined variable: mailSendFirst in Line 123.
Aber erst seitdem ich "Siehe Problem weiter unten" eingefügt habe. Also nehme ich an, liegt es am query.
PHP:
$timestamp =time();

#Erster Versuch Variante 1  <---- Welche ist besser?

   $month=strftime("%m",$timestamp ); #gibt aktuelle Zeit nach passenden Angaben zurück
   $day=strftime("%d",$timestamp );
   $year=strftime("%Y",$timestamp );

     $endtime = date('d-m-Y H:i:s ', mktime(23, 59, 59, $month, $day, $year));
     $starttime = mktime(0, 0, 0, $month, $day, $year); #In Unix Timestamp Format

#Zweiter Versuch Variante 2  <---- Welche ist besser?

           $start = date(' d-m-Y H:i', mktime(0, 0, 0, date("m"), date("d")+3, date("Y"))); #von heute morgen 0 Uhr bis .. In UTS Format
           $end = mktime(23, 59, 59, date("m"), date("d")+3, date("Y")); #heute abend 23:59 Uhr
           #echo $starttime," - ",$endtime ;


$query = "SELECT Moderator.ID, Moderator.Name, Moderator.URL2, YARMProgramTable.t1, YARMProgramTable.t2
     FROM YARMProgramTable, Moderator
     WHERE Moderator.ID = YARMProgramTable.ModeratorsPKEY
     AND DATE(FROM_UNIXTIME(YARMProgramTable.t1/1000))
     BETWEEN
     '$starttime' AND '$end' <------ Die Probleme gibt es in dieser Zeile. 
     AND URL2 LIKE '%@%'
     GROUP BY ID
     ORDER BY t1 ASC";

   $result = mysql_query($query) or die(mysql_error());

     while ($sql = mysql_fetch_array($result))  <----- hier komm ich schon gar nicht mehr rein
     {
        $id = $sql['ID'];   #fbr in 3 tagen   
        echo "<br>ID in 3 Tagen (Mail1): $id<br/>";

foreach ($meinArray AS $array)  <------ $meinArray funktioniert, hier ist kein Fehler
       {
         if($array['fbrid'] == $id)
         {
$empfaenger = 'web.de';
           $an = $array ['fbum'];
           echo "<br>$an<br/>";
           $sendung = $array['fbr'];
           $ende = $array['fbret'];
           $start =  $array['fbrst'];
           $datum = $array['fbrd'];

           $betreff = 'Erinnerung';
           $header = 'From: @gmx.de'. "\r\n";
           $nachricht =...
Das ist die Zeile in der ich die Fehlermeldung bekomme
PHP:
$mailSendFirst = mail($empfaenger, $betreff, $nachricht, $header);
         }#schließt if
       }#schließt foreach
     }#schließt while

                 if($mailSendFirst)
                 {    <------------------------------hier soll er Fehler sein. 

                   echo ("<br>Deine Mail wurde erfolgreich versendet (1te Mail) <br />");

                 } else {

                   echo ("<br>Deine Mail konnten nicht versendet werden(1te Mail) <br />");
                     }
 
Sind beide Varianten unschön.
Schreib doch mal, was die Datumsrechnerei soll, dann können wir die eine saubere Between-Lösung anbieten
 
Dafür lernt man ja noch.

Die Datumsrechnerei sollbewirken, dass ich einerseits das Heute Datum 11.06 von 0:00 Uhr bis heute Abend 11.6 von 23:59 Uhr bekomme und dann das gleiche nur 3 Tage später also Datum 14.6 von 0 bis 23:59 Uhr.
Sinn des ganzen. Ich will eine Abfrage die mir alle Werte aus einer DB ausgibt von heute morgen 0 Uhr bis halt zum 14.6 23:59 Uhr. Das soll die Ausgabe eigendlich ausgeben.
 
Dein Ersteer Abschnitt wiederspricht dem Zweiten. Ich geh mal vom Zweiten aus
Dann kann man doch die Logik nehmen:
Entferne Uhrzeiten aus allem. Dann das reine Datum ist zwieschen Heute und Heute+3Tage

In welchem Format liegt dann YARMProgramTable.t1 vor?
 
Könnte eine Änderung in Zeile 25 von

'$starttime'

zu

'$start'

weiterhelfen? Desweiteren sieht das Datumsformat in Zeile 15 komisch aus. Evtl. sollte es 'd-m-Y H:i' sein? Die MySQL-Funktion DATE liefert nur das Datum, nicht die inbegriffen die Uhrzeit. Das Könnte auch eine Fehlerquelle sein. Grundsätzlich empfehle ich an dieser Stelle mal die Ausgabe des SQL-Statements mittels echo und anschließender Analyse / Test in phpMyAdmin oder MySQL Workbench.
 
Der Wert in t1 liegt als BigInteger vor.
Deine Logik will mir nicht ganz auf gehen
ALsBigInt. Aber nicht als UNIX-Timestamp. Oder Wozu teilst du den Wert durch 1000?

Ich frage nur so, damit ich dir eine gute Lösung in SQL presentieren kann. Dazu muss ich aber wissen, wie das Datum gespeichert ist.
Also, warum FROM_UNIXTIMESTAMP(t1/1000) ?
 
Nein er liegt als Big Int. t1 == unixtimestamp + millisekunden, deshalb durch die 1000 rechnen. Sonst kommt ja ein falscher Wert raus.

Ist meine Lösung so falsch?
 
@ saftmeister. Es ist leider keine Lösung $start statt § starttime zu schreiben. Ich wollte den unixtimestamp haben deshalb hab ich in der Zeile 16 die d-m-Y weggelassen.
Ich komm schon gar nicht in die While schleife rein. Ich kann mir das $query ausgeben lassen aber das wars. Wie wende ich die anderen Fehlersuchen an?
 
Jepp, dann ists schon richtig.
Für den Interval Heute bis Heute+3 Tage kann das WHERE einfach so aussehen. Dann musst du nicx im PHP vorrechnen
SQL:
DATE(FROM_UNIXTIME(t1/1000)) BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
 
Zurück