Timeout Überbrückung

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

  • Timeout Überbrückung

    Moin moin,
    nach Stunden des Kopfzerbrechens ahb ich mich jetzt entschieden hier mal wieder ins Forum zu posten...ich kann den Fehler einfach nicht finden.
    Ich habe ein Newsletter script gebaut und muss da jetzt wegen sehr vielen Adressen in der DB eine timeout Überbrückungs Funktion irgendwie einbauen. Standardmässig wird sowas ja mittlerweile immr mit meta-refresh gemacht und ich hab mich auch für diese variante entschieden. Das ist script ist vim Prinzip eigentlich einfach.
    ich hab zu versuchszqwecken eingestellt dass pro Schleifen Durchgang EINE mail verschickt wird...
    Problem: Wenn das script dazu übergeht die letzte mail zu senden wird das MySQL query nicht richtig gemacht und MySQL sagt es wäre keine weiter Adresse mehr da...irgdnwie komisch und hängt sich dann in einer Endlosschleife auf...
    ich hab dann mal um rauszufinden was dass ist die MySQL numrows vom query ausgegeben...
    ich hab 4 user in der DB(nur zum Test), bis Nummer 3 geht alles wunderbar, dann wird wieder refresht und das script sagt immer noch, "an 3 user versendet" es sollten aber 4 sein...anschliessend hängt sich das script dann in ner Endloschleife auf. "an 3 user versendet", "an 3 user versendet", "an 3 user versendet" etc.....

    Hier mal der Code:

    ###### timeout Daten #########
    if(!($start)){$start = 0;}
    if(!($sent_to)){$sent_to = 0;}


    ###### Wieviele auf einmal versendet werden ########
    $send_amount = 1;
    #######################################

    ### mail-adressen werden ausgelesen ###
    $mail_connect = mysql_query("SELECT * FROM $tab_user ORDER BY id LIMIT $start,$send_amount", $verbindung);
    $no_mail_connect = mysql_num_rows($mail_connect);

    $anzahl_adressen = mysql_num_rows($exist_control);


    ####################################################################
    ############### Daten des Newsletters werden abgefragt #############
    $mails_sent_in_loop= 0;

    while($daten = mysql_fetch_array($mail_connect))
    {
    $adresse = $daten[mail];
    $betreff = $main_daten[betreff];

    ######### Inhalt #########
    $inhalt = $content;
    if($main_daten[content_type] == "text"){$inhalt = eregi_replace("{abmelde-Link}","".$script_url."delete.php?action=del&mail=$daten[mail]","$inhalt");}
    else{$inhalt = eregi_replace("{abmelde-Link}","<a href=\"".$script_url."delete.php?action=del&mail=$daten[mail]\">$daten[mail] abmelden</a>","$inhalt");}

    ### Der Newsletter wird versendet ###
    $newsletter = mail($adresse, $betreff, $inhalt, $header);

    if($newsletter)
    {
    $sent_to++;
    $mails_sent_in_loop++;
    }

    ##### Wenn die Anzahl von Adressen erreicht wurde wird der user
    ##### ermittelt von dem an in der naechsten Schleife versendet werden soll
    if($mails_sent_in_loop == $no_mail_connect){$start = $sent_to+1; break;}

    }# while ende

    if($mails_sent_in_loop == $no_mail_connect)
    {
    ### Wenn noch versendet wird die Seite refresht
    if($sent_to !== $anzahl_adressen)
    {
    echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
    echo "<meta http-equiv=\"refresh\" content=\"3; Url=post_send.php?action=send_newsletter&senden= Ja &id=$id&sent_to=$sent_to&start=$start&m=$m\">\n";

    $meldung = "still_sending";
    }

    ######## Wenn der Newsletter komplett versendet wurde ###############
    else
    {
    $log = mysql_query("INSERT INTO $tab_log SET vorgang='<b><font color=\"red\">Newsletter \"$main_daten[betreff]\" wurde versendet</font></b>', datum='$datum', type='admin'", $verbindung);
    $update_main = mysql_query("UPDATE $tab_main SET status='versendet' WHERE id='$id'", $verbindung);
    $meldung = "alles_versendet";

    echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
    benachrichtigung("alles_verschickt", "");
    }
    } # ende $send_newsletter
    else
    {
    benachrichtigung("nicht_alles_verschickt", "");
    $meldung = "versenden_fehler";
    }



    ich hoffe jemand hat ne idee...dass ist bestimmt was mit den Variablen die kontrollieren ob alles versendet wurde...

    Viele Grüsse, Flo

  • #2
    was is denn $exist_control?
    $anzahl_adressen = mysql_num_rows($exist_control);
    wäre auch nett wenn Du mal den code ansehnlich darstellen würdest.
    Zuletzt geändert von MelloPie; 23.12.2003, 21:08.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Re: Timeout Überbrückung

      Original geschrieben von ultimazer_1
      nach Stunden des Kopfzerbrechens ahb ich mich jetzt entschieden hier mal wieder ins Forum zu posten...
      Dieser Satz ... im Zusammenhang mit dem Screenshot läßt mich etwas verwirrt schauen ...
      Angehängte Dateien
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        nach Stunden des Kopfzerbrechens ahb ich mich jetzt entschieden hier mal wieder ins Forum zu posten...
        ...ich hab sont schon mal unter nem anderen usernamen hier was gepostet...passwort aber vergessen )

        jetzt nochmal wegen meinem problem....
        $exist_control iss ne kleine Funktion die überprüft ob überhaupt Adressen vorhanden sind und dann falls keine drin sind eine fehlermelsung ausgibt, das hat aber mit der Schleife und so nichts zu tun deswegen hab ich das rausgelassen, da ich nich die ganze Seite mit code zubauen wollte hier.

        das ganze sieht so aus:
        $exist_control = mysql_query("SELECT * FROM $tab_user", $verbindung);
        ...üver mysql_num_rows wird dann das ganze überprüft.

        ich hab mir nur Arbeit gespart und die variable in der Schleife etc. benutzt.

        Viele Grüsse, Flo

        Kommentar


        • #5
          Bring mal Deinen code in leserliche Form.
          Mr. all in one row.
          php tags wären auch nett, so als Weihnachtsgeschenk.

          Shit schon wieder Weihnachten
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            So wenn du unbedingt die ganze Seite mit code voll haben willst ...here you go!

            PHP-Code:
            if($action == "send_newsletter" && $senden == "  Ja  ")
              {
               
            ######## Prüfung ob Daten vorhanden sind  ########## 
               
            $exist_control mysql_query("SELECT * FROM $tab_user"$verbindung); 
               if(
            mysql_num_rows($exist_control)>=1)
                 {
                  
            #############################################
                  ###### MySQL-daten werden abgefragt #########

                  
            $main_daten_connect mysql_query("SELECT * FROM $tab_main WHERE id='$id'"$verbindung);
                  
            $main_daten mysql_fetch_array($main_daten_connect);

                  if(
            $main_daten[content_type] == "html-bb")
                    {
                     
            $header "From: $settings[absender]\r\n";
                     
            $header.= "X-Mailer:sky-newsletter\n";
                     
            $header.= "MIME-version: 1.0\n";
                     
            $header.= "Content-Type: text/html\r\n";
                     
            $header.= "Content-Transfer-Encoding: 8bit\r\n";

                     
            $inhalt StripSlashes($main_daten[inhalt]);
                     
            $inhalt bbcode($main_daten[inhalt]);
                     
            $inhalt nl2br($inhalt);
                     
            $content "<html>\n";
                     
            $content.= "<body>\n";
                     
            $content.= "$inhalt\n";
                     
            $content.= "</html>\n";
                     
            $content.= "</body>\n";
                    }
                  if(
            $main_daten[content_type] == "purehtml")
                    {
                     
            $header "From: $settings[absender]\r\n";
                     
            $header.= "X-Mailer:sky-newsletter\n";
                     
            $header.= "MIME-version: 1.0\n";
                     
            $header.= "Content-Type: text/html\r\n";
                     
            $header.= "Content-Transfer-Encoding: 8bit\r\n";

                     
            $inhalt StripSlashes($main_daten[inhalt]);
                     
            $inhalt nl2br($inhalt);
                     
            $content $inhalt;
                    }
                  if(
            $main_daten[content_type] == "text")
                    {
                     
            $header "From: $settings[absender]\r\n";
                     
            $header.= "X-Mailer:sky-newsletter\n";
                     
            $header.= "MIME-version: 1.0\n";
                     
            $header.= "Content-Type: text/plain";

                     
            $inhalt StripSlashes($main_daten[inhalt]);
                     
            $content $inhalt;
                    }
                  
                   
            ###### timeout Daten #########
                   
            if(!($start)){$start 0;}
                   if(!(
            $sent_to)){$sent_to 0;}


                   
            ###### Wieviele auf einmal versendet werden ########
                   
            $send_amount 1;
                   
            #######################################

                   ### mail-adressen werden ausgelesen ### 
                   
            $mail_connect mysql_query("SELECT * FROM $tab_user ORDER BY id LIMIT $start,$send_amount"$verbindung);
                   
            $no_mail_connect mysql_num_rows($mail_connect);

                   
            $anzahl_adressen mysql_num_rows($exist_control);


                   
            ####################################################################
                   ############### Daten des Newsletters werden abgefragt #############
                   
            $mails_sent_in_loop0;

                   while(
            $daten mysql_fetch_array($mail_connect)) 
                      {
                       
            $adresse $daten[mail];
                       
            $betreff $main_daten[betreff];

                       
            ######### Inhalt #########
                       
            $inhalt $content;
                       if(
            $main_daten[content_type] == "text"){$inhalt eregi_replace("{abmelde-Link}","".$script_url."delete.php?action=del&mail=$daten[mail]","$inhalt");}
                       else{
            $inhalt eregi_replace("{abmelde-Link}","<a href=\"".$script_url."delete.php?action=del&mail=$daten[mail]\">$daten[mail] abmelden</a>","$inhalt");}
                            
                       
            ### Der Newsletter wird versendet ###
                       
            $newsletter mail($adresse$betreff$inhalt$header);

                       if(
            $newsletter)
                         {
                          
            $sent_to++;
                          
            $mails_sent_in_loop++;
                         }

                       
            ##### Wenn die Anzahl von Adressen erreicht wurde wird der user 
                       ##### ermittelt von dem an in der naechsten Schleife versendet werden soll 
                       
            if($mails_sent_in_loop == $no_mail_connect){$start $sent_to+1;}

                      }
            # while ende
             
                  
            if($mails_sent_in_loop == $no_mail_connect)
                    {
                     
            ### Wenn noch versendet wird die Seite refresht
                     
            if($sent_to !== $anzahl_adressen)
                       {
                        echo 
            "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
                        echo 
            "<meta http-equiv=\"refresh\" content=\"3; Url=post_send.php?action=send_newsletter&senden=  Ja  &id=$id&sent_to=$sent_to&start=$start&m=$m\">\n";
                        
                        
            $meldung "still_sending";
                       }

                     
            ######## Wenn der Newsletter komplett versendet wurde ###############
                     
            else
                       {
                        
            $log mysql_query("INSERT INTO $tab_log SET vorgang='<b><font color=\"red\">Newsletter \"$main_daten[betreff]\" wurde versendet</font></b>', datum='$datum', type='admin'"$verbindung);
                        
            $update_main mysql_query("UPDATE $tab_main SET status='versendet' WHERE id='$id'"$verbindung);
                        
            $meldung "alles_versendet";

                        echo 
            "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
                        
            benachrichtigung("alles_verschickt""");
                       }
                    } 
            # ende $send_newsletter
                  
            else
                   {
                    
            benachrichtigung("nicht_alles_verschickt""");
                    
            $meldung "versenden_fehler";
                   }
                                      
                 } 
            #ende $exist_control


                ####### Falls keine Adressen vorhanden sind #########
                
            else{$meldung "keine_adressen";} 
            ...hoffentlich hilft dir das ...

            jo so geht's mir auch von wegen Weihnachten ....aber zumindest bekommt man Geschenke .

            Viele Gruesse, Flo

            Kommentar


            • #7
              evt ists das hier. nimm mal ein = raus !== , da muss ja auch der Typ gleich sein...

              if($sent_to !== $anzahl_adressen)
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                hm...habs makl n bisschen geändert noch bevor du replied hast ...jetzt sendet er zumindest wieder teilweise richtig.
                Ich hab zu testzwecken 4 user in der DB und an 3 wird alles richtig verschickt jetzt jedoch bekommt eine Adresse in der mitte der DBkeine mail was ziehmlich komisch ist.
                wenn die Seite fertig durchgelaufen ist kommen auf einmal 2 Meldungen!(es sollte natürlich nur eine sein).
                Einmal 'erfolgreich versendet' und dann 'Newsl. konnte nur an 3 von 4 user versendet werden'...das sind meldungen vom script.
                Deswegen ist es auch komisch das eine Adresse in der mitte der DB die maio nicht bekommt und nicht der letzte...denn da ist ja glaube ich das Problem.

                Hier nochmal der geänderte code:

                PHP-Code:
                if($action == "send_newsletter" && $senden == "  Ja  ")
                  {
                   
                ######## Prüfung ob Daten vorhanden sind  ########## 
                   
                $exist_control mysql_query("SELECT * FROM $tab_user"$verbindung); 
                   if(!
                mysql_num_rows($exist_control)>=1)
                     {
                $meldung "keine_adressen";} 
                   else
                     {
                      
                #############################################
                      ###### MySQL-daten werden abgefragt #########

                      
                $main_daten_connect mysql_query("SELECT * FROM $tab_main WHERE id='$id'"$verbindung);
                      
                $main_daten mysql_fetch_array($main_daten_connect);

                      if(
                $main_daten[content_type] == "html-bb")
                        {
                         
                $header "From: $settings[absender]\r\n";
                         
                $header.= "X-Mailer:sky-newsletter\n";
                         
                $header.= "MIME-version: 1.0\n";
                         
                $header.= "Content-Type: text/html\r\n";
                         
                $header.= "Content-Transfer-Encoding: 8bit\r\n";

                         
                $inhalt StripSlashes($main_daten[inhalt]);
                         
                $inhalt bbcode($main_daten[inhalt]);
                         
                $inhalt nl2br($inhalt);
                         
                $content "<html>\n";
                         
                $content.= "<body>\n";
                         
                $content.= "$inhalt\n";
                         
                $content.= "</html>\n";
                         
                $content.= "</body>\n";
                        }
                      if(
                $main_daten[content_type] == "purehtml")
                        {
                         
                $header "From: $settings[absender]\r\n";
                         
                $header.= "X-Mailer:sky-newsletter\n";
                         
                $header.= "MIME-version: 1.0\n";
                         
                $header.= "Content-Type: text/html\r\n";
                         
                $header.= "Content-Transfer-Encoding: 8bit\r\n";

                         
                $inhalt StripSlashes($main_daten[inhalt]);
                         
                $inhalt nl2br($inhalt);
                         
                $content $inhalt;
                        }
                      if(
                $main_daten[content_type] == "text")
                        {
                         
                $header "From: $settings[absender]\r\n";
                         
                $header.= "X-Mailer:sky-newsletter\n";
                         
                $header.= "MIME-version: 1.0\n";
                         
                $header.= "Content-Type: text/plain";

                         
                $inhalt StripSlashes($main_daten[inhalt]);
                         
                $content $inhalt;
                        }
                      
                       
                ###### timeout Daten #########
                       
                if(!($start)){$start 0;}
                       if(!(
                $sent_to)){$sent_to 0;}


                       
                ###### Wieviele auf einmal versendet werden ########
                       
                $send_amount 1;
                       
                #######################################

                       ### mail-adressen werden ausgelesen ### 
                       
                $mail_connect mysql_query("SELECT * FROM $tab_user ORDER BY id LIMIT $start,$send_amount"$verbindung);
                       
                $no_mail_connect mysql_num_rows($mail_connect);

                       
                $anzahl_adressen mysql_num_rows($exist_control);


                       
                ####################################################################
                       ############### Daten des Newsletters werden abgefragt #############
                       
                $mails_sent_in_loop0;

                       while(
                $daten mysql_fetch_array($mail_connect)) 
                          {
                           
                $adresse $daten[mail];
                           
                $betreff $main_daten[betreff];

                           
                ######### Inhalt #########
                           
                $inhalt $content;
                           if(
                $main_daten[content_type] == "text"){$inhalt eregi_replace("{abmelde-Link}","".$script_url."delete.php?action=del&mail=$daten[mail]","$inhalt");}
                           else{
                $inhalt eregi_replace("{abmelde-Link}","<a href=\"".$script_url."delete.php?action=del&mail=$daten[mail]\">$daten[mail] abmelden</a>","$inhalt");}
                                
                           
                ### Der Newsletter wird versendet ###
                           
                $newsletter mail($adresse$betreff$inhalt$header);

                           
                $sent_to++;
                           
                $mails_sent_in_loop++;

                           
                ##### Wenn die Anzahl von Adressen erreicht wurde wird der user 
                           ##### ermittelt von dem an in der naechsten Schleife versendet werden soll 
                           
                if($mails_sent_in_loop == $no_mail_connect){$start $sent_to+1;}
                           if(
                $sent_to == $anzahl_adressen)
                             {
                              break;
                              
                $still_sending "no";
                             }
                            else{
                $still_sending "yes";} 

                          }
                # while ende
                 
                         ### Wenn noch versendet wird die Seite refresht
                         
                if($still_sending == "yes")
                           {
                            echo 
                "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
                            echo 
                "<meta http-equiv=\"refresh\" content=\"3; Url=post_send.php?action=send_newsletter&senden=  Ja  &id=$id&sent_to=$sent_to&start=$start&m=$m\">\n";
                            
                            
                $meldung "still_sending";
                           }

                         
                ######## Wenn der Newsletter komplett versendet wurde ###############
                         
                else
                           {
                            
                $log mysql_query("INSERT INTO $tab_log SET vorgang='<b><font color=\"red\">Newsletter \"$main_daten[betreff]\" wurde versendet</font></b>', datum='$datum', type='admin'"$verbindung);
                            
                $update_main mysql_query("UPDATE $tab_main SET status='versendet' WHERE id='$id'"$verbindung);
                            
                $meldung "alles_versendet";

                            echo 
                "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
                            
                benachrichtigung("alles_verschickt""");
                           }                          
                     } 
                #ende $exist_control 

                Kommentar


                • #9
                  break;
                  $still_sending = "no";
                  sollte das break nicht nach der anweisung stehen???
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #10
                    hm....hab das mal versucht. Du hast auf jeden fall recht.
                    ich hab jetzt mal die Adressen auf 19 erhöht und 5 Schleifendurchgänge vor dem refresh, bis No. 15 geht alles wunnebar und dann gehts auf einmal nur bis 18 und dann kommt die Meldung es konnten nur 18von 19 versendet werden....das iss dann halt die Fehlermeldung des scripts.

                    Arg, das muss irgendwas mit dem MySQL und dem Limit sein, das er die letzte Adresse nicht auslesen kann oder so...vielleicht ist das was mit der $start variable....keine Ahnung
                    ich hab da rumexperimentiert aber bis jetzt...

                    Vielen dank für deine Bemühungen , Flo

                    P.S.: Frohe Weihnachten!!!

                    Kommentar


                    • #11
                      lass Dir mal die sql statements immer ausgeben oder in eine datei schreiben... dann wirste schlauer sein
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar


                      • #12
                        ...hab den Fehler gefunden, aber noch keine Lösung

                        So, ich hab den Fehler gefunden...aber noch keine Lösung .
                        Aaaalsooo...ich hab mir mal in der while-schleife immer die Adresse über 'echo' ausgeben lassen und neben diesem IE Fenster noch meinen phpMyAdmin augemacht, da hab ich festgestellt das das ERSTE refresh eine Adresse überspringt!...alles andere läuft wunderbar aber das ERSTE refresh hat nen haken drin...deswegen iss am Ende auch immer eine Adresse zuwenig! denn diese eine Adresse (die 4. bei 3mails pro schleife) wird halt übersprungen...wenn das nich 'fucked in the head' iss...kein Plan.

                        Hm, wie meinst du das mit dem mysql-statement, was genau soll ich mir da ausgeben lassen?...ich mein das ganze liegt irgendwie an der $start variable die halt beim ersten mal nich richtig funzt....deswegen läuft das LIMIT beim query nich richtig und dann kommt halt der Fehler.

                        Viele Grüsse, Flo

                        P.S.: Danke für Hilfe obwohl Weihnachten ist!

                        Kommentar


                        • #13
                          Re: ...hab den Fehler gefunden, aber noch keine Lösung

                          Original geschrieben von ultimazer_1
                          Hm, wie meinst du das mit dem mysql-statement, was genau soll ich mir da ausgeben lassen?...ich mein das ganze liegt irgendwie an der $start variable die halt beim ersten mal nich richtig funzt....deswegen läuft das LIMIT beim query nich richtig und dann kommt halt der Fehler.
                          was ist denn an echo "SELECT ...."; so schwierig?
                          Kissolino.com

                          Kommentar


                          • #14
                            aaachsooooo....

                            naja, auch egal denn habs Problem gelöst....
                            Vielen dank für die Hilfe!

                            das ergebiss gibts dann im neuen Jahr unter sky-scripts.de zum Download.

                            Viele Grüsse und Frohe Weihnachten!, Flo

                            Kommentar

                            Lädt...
                            X