Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] 2 dimensionales Array mail versenden

Einklappen

Neue Werbung 2019

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

  • [Erledigt] 2 dimensionales Array mail versenden

    Hallo Leute.

    ich Probiere mich gerade an einem Programm ^^
    Zu Beginn gleich, ich weis es wäre besser mit einem PHP Mailer. Aber ich würde es gerne so machen.
    Ich habe Daten in ein 2 Dim Array gespeichert. Und nutze diese Daten, um sie in eine E-Mail einzusetzen.
    Das klappt auch wunderbar.
    Jetzt besagt meine Ausgabe aus dem 2 Dim. Array folgendes:


    Die Sendung Neues aus der Medizin mit der ID 282 gibt Feedback an die Sendung CIT, die am 09.06.2014 von 18:00 bis 18:29 läuft !
    Die Sendung Atelier mit der ID 243 gibt Feedback an die Sendung Ich-gesund, die am 11.06.2014 von 16:01 bis 16:58 läuft !


    Die Daten rechts sind die Daten Pro Email die eingesetzt werden.
    Also in etwa so:
    ...
    Relevante Daten:
    Sendungsname = CIT
    Sendedatum = 10.06.2014
    Sendezeit = von 18:00 bis 18:29
    ...

    also das klappt!
    Nun zu meinem Problem. Diese E-Mail soll 3 Tage bevor die Sendung läuft versendet werden. Also in meinem Fall hier heute.
    Diese Mail soll an die Person geschickt werden wie es in der Zuordnung oben steht. Also an "Neues aus der Medizin".

    Habt ihr eine Ahnung wie ich das am Besten bewältige kann. Ich weis nicht wie ich genau dieses Bedingung erstellen kann. Das Array ist übrigens schon richtig sortiert.
    Meine Versuche haben sich bis jetzt auf foreach beschränkt.
    Ich bekomme eine Mail an alle richtig zugeordnet aber ich weis nicht wie ich mir nur diese bestimmte hole. Manuell ist keine Option!
    PHP-Code:
    $query "SELECT Moderator.ID, Moderator.URL2, YARMProgramTable.ModeratorsPKEY, Moderator.Name, YARMProgramTable.t1, YARMProgramTable.t2
        FROM YARMProgramTable, Moderator 
        WHERE Moderator.ID = YARMProgramTable.ModeratorsPKEY
        AND DATE(FROM_UNIXTIME(YARMProgramTable.t1)) 
        BETWEEN 
        CURRENT_DATE 
        AND DATE_ADD(CURRENT_DATE , INTERVAL 3 DAY)
        AND URL2 LIKE '%@%'
        GROUP BY ID
        ORDER BY t1 ASC"
    ;

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

         while (
    $sql mysql_fetch_array($result)) 
        {
                 
    $id $sql['ID'];    #fbu in 3 tagen    
                 #echo "ID in 3 Tagen (Mail1): $id<br/>";
                 //$id[$i]=$sql['ID'];
                 //i=i+1;
                 #$an = $sql['URL2'];#$empfaenger
                 
    foreach ($meinArray AS $array)
            {
                for (
    $array['fbuid'] ???')
                {
                            
                    $an = $array ['
    fbum'];
                    $sendung = $array['
    fbr'];
                    $endezeit = $array['
    fbret'];
                    $startzeit =  $array['
    fbrst'];
                    $datum = $array['
    fbrd'];
                                    $betreff = '';
                    $header = '
    From'. "\r\n";
                                    $nachricht = 
                    "<html>
                    <body>
                                    <p><u>Relevante Daten: </u></p> 
                     <p><u>Sendungsname</u> = <b>$sendung </b><br> 
                      <u>Sendedatum</u> = <b>$datum </b><br>
                      <u>Sendezeit</u> = von <b>$start</b> bis  <b>$ende</b></p>
    $mailSendFirst = mail($empfaenger, $betreff, $nachricht, $header);
                }
            }
        } 

  • #2
    bitte was:
    PHP-Code:
     for ($array['fbuid'] ???') 
    ich würd ja die probleme isolieren:
    -daten ziehen
    -text schreiben
    -mail schicken

    und wo genau hängst jetzt?

    Kommentar


    • #3
      PHP-Code:
       if ($array['fbuid'] ???) 
      Das hier war der Versuch eine Bedingung zu erstellen. Ich finde aber keine daher die ???.
      Die Zuweisung zu den Inhalten der Mail.
      Was jetzt nicht funktioniert ist, dass ich nur die Sendungen die genau in 3 Tagen sind eine Mail schicke!

      Wi kann ich das bewerkstelligen?

      Kommentar


      • #4
        was soll denn in $meinArray stehen.
        http://php-de.github.io/#debugging

        bedingung macht man mit if() (oder dem ternärer operator) oder als schleife mit while()

        Kommentar


        • #5
          Sorry das "for" war ein überbleibsel, hatte ein bisschen rumprobiert.
          in $meinArray, steht werden alle Teilnehmer einander zugeordnet damit am Schluss eine Matrix raus kommt. Die eben genau diese Ausgabe gibt:die fetten Teile wurden ermittelt.
          Die Sendung Neues aus der Medizin mit der ID 282 gibt Feedback an die Sendung CIT, die am 09.06.2014 von 18:00 bis 18:29 läuft !

          PHP-Code:
          class Rotation
            
          {
              public static function 
          getRotationArray($printAllocation)
              {require(
          '../Connections/dbconnection.php');
           
          mysql_select_db($database$dbconnection);

          $query "SELECT Moderator.ID, Moderator.Name, Moderator.URL2, YARMProgramTable.t1 AS t1,YARMProgramTable.t2
                  FROM YARMProgramTable, Moderator 
                  WHERE Moderator.ID = YARMProgramTable.ModeratorsPKEY
                  AND MONTH(FROM_UNIXTIME(t1/1000)) = MONTH(Now())
                  AND YEAR(FROM_UNIXTIME(t1/1000)) = YEAR(Now())
                  AND URL2 LIKE '%@%'
                  GROUP BY ID
                  ORDER BY t1 ASC
                  "
          ;
                        
                
          $result mysql_query($query) or die(mysql_error());
              
                
                
          /**Variable für UserArray**/
                
          $allocation_user_count 0;
                
                
          /**Ergebnisse werden in ein Array geschrieben**/
                
          while($row mysql_fetch_assoc($result))
                {
                  
          $users[$allocation_user_count] = $row['Name'];
                  
          $email[$allocation_user_count] = $row['URL2'];
                  
          $id[$allocation_user_count] = $row['ID'];
              
                  
          $t1n $row['t1']/1000;    
                  
          $stime[$allocation_user_count] = date("H:i "$t1n);
                  
                  
          $t2n $row['t2']/1000;
                  
          $etime[$allocation_user_count] = date("H:i"$t2n);
                  
                  
          $date[$allocation_user_count] = date("d.m.Y"$t1n);
                  
                          
                  
          $allocation_user_count++;
                }

                
          /**Aktueller Monat**/
                
          $allocation_counter date("n"strtotime("now"));
                
          /**Anzahl der Teilnehmer**/
              
                     
          if ($allocation_counter $allocation_user_count)
                {
                  while (
          $allocation_counter $allocation_user_count)
                  {
                    
          $allocation_counter -= $allocation_user_count;
                  }
                }
                
                 
          /**Falls $allocation_counter == $allocation_user_count, dann wird die (for) Schleife nicht ausgeführt
              ***Es beginnt wieder von vorne **/
                
          if ($allocation_counter == $allocation_user_count)
                {
                  
          $allocation_counter 1;
                }
                 
          /**Zuordnung von FeedbackUser und FeedbackReceiver
              ***Abhängig von der Anzahl der Teilnehmer und des aktuellen Monats**/
              
                
          for ($i 0$i $allocation_user_count$i++)
                {
                  if ((
          $i+$allocation_counter) >= $allocation_user_count)
                  {
                    
          /**Feedback Receiver**/
                    
          $allocation [$i] ['fbr'] = $users[$i];
                    
          /**Feedback Receiver Mail**/
                    
          $allocation [$i] ['fbrm'] = $email[$i];
                    
                    
          /**Feedback Receiver Datum**/
                    
          $allocation [$i] ['fbrd'] = $date[$i];
                    
          /**Feedback Receiver Start**/
                    
          $allocation [$i] ['fbrst'] = $stime[$i];
                    
          /**Feedback Receiver End**/
                    
          $allocation [$i] ['fbret'] = $etime[$i];
                    
          /**Feedback Receiver ID**/
                    
          $allocation [$i] ['fbrid'] = $id[$i];
              

                    
          /**Feedback User**/
                    
          $allocation [$i] ['fbu'] = $users[$i+$allocation_counter $allocation_user_count];
                    
          /**Feedback User Mail**/
                    
          $allocation [$i] ['fbum'] = $email[$i+$allocation_counter $allocation_user_count];
                    
                    
          /**Feedback User Datum**/
                    
          $allocation [$i] ['fbud'] = $date[$i+$allocation_counter -   $allocation_user_count];          
                    
          /**Feedback User Start**/
                    
          $allocation [$i] ['fbust'] = $stime[$i+$allocation_counter $allocation_user_count];
                    
          /**Feedback User End**/
                    
          $allocation [$i] ['fbuet'] = $etime[$i+$allocation_counter $allocation_user_count];
                    
          /**Feedback User ID**/
                    
          $allocation [$i] ['fbuid'] = $id[$i+$allocation_counter $allocation_user_count];
                    

                     
          /**Wenn $printAllocation = true, dann wird es für den User sichtbar gemacht**/
                    
          if ($printAllocation)
                     {
                      echo 
          "Die Sendung  <i>" $allocation [$i] ['fbu'] . "</i> mit der ID <i>" $allocation [$i] ['fbuid'] . "</i> gibt Feedback an die Sendung <i>" $allocation [$i] ['fbr'] . "</i>, die am <i>" $allocation [$i] ['fbrd'] . "
                      </i> von <i>" 
          $allocation [$i] ['fbrst'] . " </i> bis <i>" $allocation [$i] ['fbret'] . "</i> läuft <i>" "</i>!<br />";
                    }....
          return 
          $allocation;
                
              }  
          /**Ende getRotationArray**/
            
          }  /**Ende class Rotation**/
            
            
          $meinArray Rotation::getRotationArray(true); 

          Kommentar


          • #6
            von deiner funlktion fehlr der kopf, es bleibt nur return übrig.
            zudem könnte man den code mal kürzen.

            das problem war, drei tage vorher zu wissen, was in drei tagen an seminaren läuft um es mitzuteilen?

            du benützt dazu:
            Code:
            (..)
                    AND MONTH(FROM_UNIXTIME(t1/1000)) = MONTH(Now())
                    AND YEAR(FROM_UNIXTIME(t1/1000)) = YEAR(Now())
            schade wäre mit http://dev.mysql.com/doc/refman/5.1/...nction_adddate ganz gut gelaufen.

            Kommentar


            • #7
              Danke für die Antwort, aber das ist nicht das Problem.
              Mein Problem ist den passenden E-Mail bekommer zu dem Sendung zu finden.
              Wenn ich also diese Ausgabe habe:
              Die Sendung Neues aus der Medizin mit der ID 282 gibt Feedback an die Sendung CIT, die am 09.06.2014 von 18:00 bis 18:29 läuft !
              Ich möchte das meine Mail verschickt wird, wenn der Rechte Teil (CIT, Datum, Uhrzeit) in den nächsten 3 Tagen liegt, dann soll es an die Sendung 'Neues aus der Medizin' gesendet werden.
              Ich weis nur nicht wie ich das Formuliere

              Das hier
              PHP-Code:
              (..)
                      AND 
              MONTH(FROM_UNIXTIME(t1/1000)) = MONTH(Now())
                      AND 
              YEAR(FROM_UNIXTIME(t1/1000)) = YEAR(Now()) 
              funktioniert wunderbar
              EDIT: Nur leider hast du Recht, es bezieht sich nur auf diesen Monat. Funktioniert also nicht wenn ich eine Sendung am 1 des nächsten Monats habe

              Kommentar


              • #8
                PHP-Code:
                (..)
                return 
                $allocation 
                da steht alles drin wie es soll?

                und du krigst keine email an die user draus?

                poste doch mal ein var_dump().

                Kommentar


                • #9
                  Alles was ich brauche steht in $meinArray. Am Ende des CODES.
                  Mein Problem ist aber nicht in der rotation.php, sondern in der erste_Mail.php.

                  Ich versuch es mal anders zu erklären.

                  Ich möchte gerne, das aus dem hier:
                  PHP-Code:
                  SELECT Moderator.IDModerator.NameModerator.URL2YARMProgramTable.t1 AS t1,YARMProgramTable.t2
                  FROM YARMProgramTable
                  Moderator 
                  WHERE Moderator
                  .ID YARMProgramTable.ModeratorsPKEY
                  AND MONTH(FROM_UNIXTIME(t1/1000)) = MONTH(Now())
                  AND 
                  YEAR(FROM_UNIXTIME(t1/1000)) = YEAR(Now())
                  AND 
                  URL2 LIKE '%@%'
                  GROUP BY ID
                  ORDER BY t1 ASC 
                  Nur die Sendung eine Mail bekommt, die auch genau in 3 Tagen läuft.

                  Ich hab jetzt mal das hier Versucht. Ich glaube das Verhindert, dass beim wechseln des Monats auch die 3 Tage nicht mehr stimmen:
                  PHP-Code:
                  $time=time();

                  $month=strftime("%m",$time);
                  $day=strftime("%d",$time);
                  $year=strftime("%Y",$time);

                  $starttime date('Y-m-d H:i:s'mktime(000$month$day$year));
                  $endtime date('Y-m-d H:i:s'mktime(235959$month$day$year))

                  $query "SELECT Moderator.ID AS ID, Moderator.Name, Moderator.URL2, YARMProgramTable.t1 AS t1,YARMProgramTable.t2 AS t2
                  FROM YARMProgramTable, Moderator 
                  WHERE Moderator.ID = YARMProgramTable.ModeratorsPKEY
                  AND DATE(FROM_UNIXTIME(YARMProgramTable.t1/1000))
                  BETWEEN 
                  '
                  $starttime' AND '$endtime'
                  AND URL2 LIKE '%@%'
                  GROUP BY ID
                  ORDER BY t1 ASC"

                  Kommentar


                  • #10
                    Nur die Sendung eine Mail bekommt, die auch genau in 3 Tagen läuft.
                    Kennste BETWEEN?

                    EDIT: Ah ja, jetzt issed drin...

                    Aber warum mußt Du so viel mit PHP rumjuckeln? Welche Datentypen haben Deine Datenbankfelder?
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      Es muss von der 'Stelle', wofür ich das Programm schreibe, in PHP geschrieben werden.

                      Klar kenn ich Between. Aber da bekomm ich doch nur einen Zeitraum oder etwa nicht. Ich hatte gehofft es gibt etwas das genau den 3ten Tag von heute auswählt.

                      Noch eine "kleine" Frage. Wenn ich an meine $query auch noch eine Anweisung (heutiger Tag + 3 Tage ) anhängen wollte.
                      Würde das so gehen?
                      PHP-Code:
                       $time=time();

                      $month=strftime("%m",$time);
                      $day=strftime("%d",$time);
                      $year=strftime("%Y",$time);

                      $starttime date('Y-m-d H:i:s'mktime(000$month$day$year));
                      $endtime date('Y-m-d H:i:s'mktime(235959$month$day$year)); 
                      $query "
                      SELECT Moderator.ID AS ID, Moderator.Name, Moderator.URL2, YARMProgramTable.t1 AS t1,YARMProgramTable.t2 AS t2
                      FROM YARMProgramTable, Moderator 
                      WHERE Moderator.ID = YARMProgramTable.ModeratorsPKEY
                      AND DATE(FROM_UNIXTIME(YARMProgramTable.t1/1000))


                      BETWEEN 
                      DATE_ADD('
                      $starttime', INTERVAL 3 DAY) AND DATE_ADD('$endtime', INTERVAL 3 DAY)


                      AND URL2 LIKE '%@%'
                      GROUP BY ID
                      ORDER BY t1 ASC"
                      ;
                      $result mysql_query($query) or die(mysql_error());

                           while (
                      $sql mysql_fetch_array($result)) 
                          {
                                   
                      $id $sql['ID'];    #fbu in 3 tagen    
                                   
                      echo "ID in 3 Tagen (Mail1): $id<br/>";
                           
                              foreach (
                      $meinArray AS $array)
                              {
                                  if(
                      $array['fbrid'] == $id)
                                  {
                                                    
                      $empfaenger '@web.de';
                                      
                      $an $array ['fbum'];
                                      
                      $sendung $array['fbr'];
                                      
                      $ende $array['fbret'];
                                      
                      $start =  $array['fbrst'];
                                      
                      $datum $array['fbrd'];

                                      
                      $betreff ' Erinnerung';
                                      
                      $header 'From:@gmx.de'"\r\n";

                                      
                      // für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden
                                      
                      $header .= 'MIME-Version: 1.0' "\r\n";
                                      
                      $header .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";

                                      
                      $nachricht 
                                      
                      "<html>
                                      <body>

                      <p>Hallo SendungsmacherIn!</p>
                      .... Nachricht
                      </body>
                      </html>"
                      ;

                                          
                      $mailSendFirst mail($empfaenger$betreff$nachricht$header);
                                  }
                      #schließt if Anweisung
                              
                      }#schließt foreach
                          
                      }#schließt while


                      if($mailSendFirst
                      {

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

                      } else {

                          echo (
                      "<br>Deine Mail konnten nicht versendet werden(1te Mail) <br />");
                              } 
                      Ich bekomme eine Fehlermeldung. Aber in dem Bereich habe ich nichts verändert.
                      Wenn ich die Zeile die durch das Abtrenne bei BETWEEN ist weglasse bzw da wieder
                      PHP-Code:
                      '$starttime' AND '$endtime' 
                      hinschreibe dann funktioniert es. Wo liegt da der Fehler? Sieht ihn wer?
                      Notice: Undefined variable: mailSendFirst in.. on line 125
                      Deine Mail konnten nicht versendet werden(1te Mail)

                      Ich will also sowas hier schreiben
                      PHP-Code:
                      AND DATE(FROM_UNIXTIME(YARMProgramTable.t1/1000)) 
                          
                      BETWEEN 
                          CURRENT_DATE 
                          
                      AND DATE_ADD(CURRENT_DATE INTERVAL 3 DAY

                      Kommentar


                      • #12
                        2 dimensionales Array mail versenden

                        Hi!
                        Zitat von kimy86
                        ich hatte gehofft es gibt etwas das genau den 3ten tag von heute auswählt
                        Sowas?
                        Code:
                        SELECT DAY( DATE_ADD( NOW(), INTERVAL 3 DAY ) );
                        Delirius

                        PHP - Grundlagen / PDO - Tutorial / PDO - Dokumentation

                        Kommentar


                        • #13
                          Eigentlich schon aber bei dem NOW() bekomm ich jetzt gerade3 und nicht von heute Morgen 0:00 Uhr bis heute Abend 23:59 Uhr. Das will ich mit dem $endtime und $starttime erreichen.

                          Kommentar


                          • #14
                            2 dimensionales Array mail versenden

                            Zitat von Kimy86
                            Ich bekomme eine Fehlermeldung. Aber in dem Bereich habe ich nichts verändert.
                            Und wie lautet die Fehlermeldung?

                            Zur Not lass dir das SQL-Statement ausgeben und schau´ dir an, was darin passiert.
                            Delirius

                            PHP - Grundlagen / PDO - Tutorial / PDO - Dokumentation

                            Kommentar


                            • #15
                              Hab ich oben hingeschrieben: Notice: Undefined variable: mailSendFirst in.. on line 125
                              Deine Mail konnten nicht versendet werden(1te Mail)

                              Kommentar

                              Lädt...
                              X