Franz: Script funktioniert auf einmal nicht mehr

Hallo,

seid einiger Zeit kann ich aus meinem Script keine Newsletter mehr verschicken.
Ich glaube bei meinen Provider wurde die Software getauscht, denn zuvor hat alles jahrelang geklappt.
Jetzt ist MySQL 4.1.12 und phpMyAdmin 2.8.0 installiert.(Keine Ahnung, ob das etwas damit zu tun hat).

So nun zum Problem: Ich gebe im Admin-Formular den Betreff und den Text ein. Klicke ich auf absenden, werden die Newsletter versendet, aber ohne den Text(Betreff wird übernommen). Also erhalten die User eine Mail mit Absender und Betreff aber leeren Textfeld.

Und ich erhalte vom Script folgende Meldung:

Warning: ereg_replace(): Invalid preceding regular expression in /home/.sites/68/site404/web/Programm/admin/newsletter2.php on line 55

Warning: ereg_replace(): Invalid preceding regular expression in /home/.sites/68/site404/web/Programm/admin/newsletter2.php on line 56

Warning: ereg_replace(): Invalid preceding regular expression in /home/.sites/68/site404/web/Programm/admin/newsletter2.php on line 57

Warning: ereg_replace(): Invalid preceding regular expression in /home/.sites/68/site404/web/Programm/admin/newsletter2.php on line 58

Warning: ereg_replace(): Invalid preceding regular expression in /home/.sites/68/site404/web/Programm/admin/newsletter2.php on line 59

Hier der Script-Teil: die 4.Zeile ist die line 55

$result=mysql_query("select id, name, prename, password, email from V4_accounts $pu");
while($zeile=mysql_fetch_row($result)) {
$text=$mailtext;
$text=ereg_replace("{password}",$zeile[3],$text);
$text=ereg_replace("{vorname}",$zeile[2],$text);
$text=ereg_replace("{name}",$zeile[1],$text);
$text=ereg_replace("{login}",$zeile[4],$text);
$text=ereg_replace("{link}","$script_url/_p.php?userid=$zeile[0]&mailid",$text);
mail("$zeile[4]","$betreff","$text","From: $seitenname <$adminmail>");

Kennt jemand dieses Problem? Wäre für jede Hilfe dankbar!

  1. Hallo Franz.

    Warning: ereg_replace(): Invalid preceding regular expression in /home/.sites/68/site404/web/Programm/admin/newsletter2.php on line 55

    Wo genau hier der Fehler liegt, kann ich nicht sagen, da ich mich nie mit den POSIX-kompatiblen Funktionen für reguläre Ausdrücke befasst habe.
    Wenn überhaupt, dann solltest du die PCRE-kompatiblen Funktionen verwenden, was aber in deinem Fall völlig überflüssig ist.

    $text=ereg_replace("{password}",$zeile[3],$text);
    $text=ereg_replace("{vorname}",$zeile[2],$text);
    $text=ereg_replace("{name}",$zeile[1],$text);
    $text=ereg_replace("{login}",$zeile[4],$text);
    $text=ereg_replace("{link}","$script_url/_p.php?userid=$zeile[0]&mailid",$text);

    Hier reicht str_replace vollkommen aus. (Und schmeiße bei dieser Gelegenheit gleich die Anführungszeichen beim zweiten Parameter in der letzten Zeile raus, die sind überflüssig.)

    Einen schönen Dienstag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Hallo Ingrid.

      $text=ereg_replace("{link}","$script_url/_p.php?userid=$zeile[0]&mailid",$text);

      […] (Und schmeiße bei dieser Gelegenheit gleich die Anführungszeichen beim zweiten Parameter in der letzten Zeile raus, die sind überflüssig.)

      Das kommt davon, wenn man eine sauberer Schreibe gewohnt ist: Die Anführungszeichen halten hier natürlich den String beisammen.
      Sauberer wäre: $script_url.'/_p.php?userid='.$zeile[0].'&amp;mailid'

      Einen schönen Dienstag noch.

      Gruß, Ashura

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
      1. echo $begrüßung;

        Das kommt davon, wenn man eine sauberer Schreibe gewohnt ist: Die Anführungszeichen halten hier natürlich den String beisammen.

        Für PHP ist es durchaus sauber, die Variablen parsenden Stringbegrenzer zu verwenden und in einem so eingeschlossenen String Variablennamen aufzuführen. Das gehört zum Konzept der Sprache. (Die Frage, ob das Konzept sauber ist, steht auf einem anderen Blatt.)

        Sauberer wäre: $script_url.'/_p.php?userid='.$zeile[0].'&amp;mailid'

        Warum ersetzt du das & durch &amp; wenn es sich bei der Mail offensichtlich (hier meine ich wirklich "offensichtlich" und nicht "anscheinend") nicht um HTML-Text handelt? (Offensichtlich deshalb, weil ich ansonsten ein HTML-Content-Header vermissen würde.)

        echo "$verabschiedung $name";

        1. Hallo dedlfix.

          Für PHP ist es durchaus sauber, die Variablen parsenden Stringbegrenzer zu verwenden und in einem so eingeschlossenen String Variablennamen aufzuführen. Das gehört zum Konzept der Sprache. (Die Frage, ob das Konzept sauber ist, steht auf einem anderen Blatt.)

          Ich finde letzteres zutreffend. Diese Vermischung ist für mich einfach unsauber.

          Sauberer wäre: $script_url.'/_p.php?userid='.$zeile[0].'&amp;mailid'

          Warum ersetzt du das & durch &amp; wenn es sich bei der Mail offensichtlich (hier meine ich wirklich "offensichtlich" und nicht "anscheinend") nicht um HTML-Text handelt?

          Ein Reflex. Es ist in der Tat nicht ganz sicher, welches Content-Types die Mails sind.

          Einen schönen Dienstag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
  2. Hallo,

    worann es genau liegt, kann ich Dir auch nicht sagen. Mir ist allerdings schleierhaft, warum Du nicht mit der komfortablen Funktion str_replace() folgendermaßen arbeitest:

    $strings=array('{password}', '{vorname}', '{name}', '{login}', '{link}');  
    $replace=array($zeile[3], $zeile[2], $zeile[1], $zeile[4],$script_url.'/_p.php?userid='.$zeile[0].'&mailid');  
    $text=str_replace($string,$replace,$mailtext);
    

    Gruß aus Berlin!
    eddi

    --
    PHP: unter Linux installieren, in Bearbeitung: Konfigurieren
  3. Hallo Franz,

    $result=mysql_query("select id, name, prename, password, email from V4_accounts $pu");

    wie sollte Deiner Meinung nach das SQL-Statement aussehen?
    Wie sieht das SQL-Statement aus?

    Sprich: Was ist Deiner Ansicht nach der Inhalt von $pu, was steht wirklich drin, wo kommt die Variable $pu her.

    Entspricht bei allen Datensätzen, die durchlaufen werden, der Inhalt des Arrays $zeile Deinen Erwartungen?

    Wo ist Deine Fehlerbehandlung?

    Freundliche Grüße

    Vinzenz

  4. Hell-O!

    Warning: ereg_replace(): Invalid preceding regular expression in [...]
    [...]
    $text=ereg_replace("{password}",$zeile[3],$text);

    Die geschweiften Klammern fungieren als Intervalloperatoren und dürften hier zum beschriebenen Problem führen. Maskiere sie, und alles wird gut. Btw, du bist nicht der erste mit dem Problem (PHP-Bugreport #36198).

    Siechfred

    --
    Hier könnte Ihre Werbung stehen.
    Neue Freunde || Stramplerdesign
    1. Hello,

      Warning: ereg_replace(): Invalid preceding regular expression in [...]
      [...]
      $text=ereg_replace("{password}",$zeile[3],$text);

      Die geschweiften Klammern fungieren als Intervalloperatoren und dürften hier zum beschriebenen Problem führen. Maskiere sie, und alles wird gut. Btw, du bist nicht der erste mit dem Problem (PHP-Bugreport #36198).

      Würde es nicht ausreichen, einfach nur Einfachhäkchen zu benutzen?   '{password}'

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. Hell-O!

        Die geschweiften Klammern fungieren als Intervalloperatoren und dürften hier zum beschriebenen Problem führen. Maskiere sie, und alles wird gut.
        Würde es nicht ausreichen, einfach nur Einfachhäkchen zu benutzen?   '{password}'

        M.E. nicht, da der Intervalloperator kein PHP-Spezifikum ist, sondern zum Regulären Ausdruck gehört. Ob man den Ausdruck in einfachen oder doppelten Anführungszeichen notiert, dürfte eigentlich keinen Einfluss auf das Parsen des regulären Ausdrucks haben. Aber vielleicht gibt's da ja Sonderregeln in PHP.

        Siechfred

        --
        Hier könnte Ihre Werbung stehen.
        Neue Freunde || Stramplerdesign
    2. Hell-O!

      Warning: ereg_replace(): Invalid preceding regular expression in [...]
      [...]
      $text=ereg_replace("{password}",$zeile[3],$text);

      Die geschweiften Klammern fungieren als Intervalloperatoren und dürften hier zum beschriebenen Problem führen. Maskiere sie, und alles wird gut. Btw, du bist nicht der erste mit dem Problem (PHP-Bugreport #36198).

      Siechfred

      Hallo, ich weiß nicht was "maskieren" heißt? Soll ich vor dem Wort password einen Backslash geben? So etwa "{\password}" ?

      1. Hell-O!

        ich weiß nicht was "maskieren" heißt?

        Es bedeutet, dass du Sonderzeichen ihre vorbestimmte Funktion (hier: Intervalloperator) nimmst, sie also "tarnst". In Regulären Ausdrücken "tarnst" du Sonderzeichen, indem du ihnen einen Backslash voranstellst.

        Soll ich vor dem Wort password einen Backslash geben? So etwa "{\password}" ?

        Bist du dem geposteten Link gefolgt?

        Siechfred

        --
        Hier könnte Ihre Werbung stehen.
        Neue Freunde || Stramplerdesign
        1. Hell-O!

          ich weiß nicht was "maskieren" heißt?

          Es bedeutet, dass du Sonderzeichen ihre vorbestimmte Funktion (hier: Intervalloperator) nimmst, sie also "tarnst". In Regulären Ausdrücken "tarnst" du Sonderzeichen, indem du ihnen einen Backslash voranstellst.

          Soll ich vor dem Wort password einen Backslash geben? So etwa "{\password}" ?

          Bist du dem geposteten Link gefolgt?

          Siechfred

          Hallo,

          ich bin den Link gefolgt und verstehe jetzt überhaupt nichts mehr. Denn dort wird nicht nur ein Backslash vorangestellt, sondern auch ein ?, also {?password}

          1. Hell-O!

            ich weiß nicht was "maskieren" heißt?

            Es bedeutet, dass du Sonderzeichen ihre vorbestimmte Funktion (hier: Intervalloperator) nimmst, sie also "tarnst". In Regulären Ausdrücken "tarnst" du Sonderzeichen, indem du ihnen einen Backslash voranstellst.

            Soll ich vor dem Wort password einen Backslash geben? So etwa "{\password}" ?

            Bist du dem geposteten Link gefolgt?

            Siechfred

            Hallo,

            ich bin den Link gefolgt und verstehe jetzt überhaupt nichts mehr. Denn dort wird nicht nur ein Backslash vorangestellt, sondern auch ein ?, also {?password}

            Oder gehört es so: "{?password}" ..

            1. Hallo,

              jetzt habe ich das Script so geändert:

              $result=mysql_query("select id, name, prename, password, email from V4_accounts $pu");
                while($zeile=mysql_fetch_row($result)) {
                 $text=$mailtext;
                 $text=ereg_replace("{?password}",$zeile[3],$text);
                 $text=ereg_replace("{?vorname}",$zeile[2],$text);
                                      $text=ereg_replace("{?name}",$zeile[1],$text);
                                      $text=ereg_replace("{?login}",$zeile[4],$text);
                                      $text=ereg_replace("{?link}","$script_url/_p.php?userid=$zeile[0]&mailid",$text);
                 mail("$zeile[4]","$betreff","$text","From: $seitenname <$adminmail>");

              Jetzt wird keine Fehlermeldung mehr ausgegeben und die eMail werden mit Text verschickt, aber im Text habe ich PLATZHALTER {Vorname} {Name}
              Und genau so steht es jetzt im ausgesendeten Newsletter. Hier sollten aber die Namen aus der Datenbank übernommen werden.
              Wenn ich die PLATZHALTER so eingebe {?Vorname} ...
              wird im Newsletter {\Vorname\} daraus.
              Was mache ich hier falsch?

              1. Hallo,

                jetzt habe ich das Script so geändert:

                $result=mysql_query("select id, name, prename, password, email from V4_accounts $pu");
                  while($zeile=mysql_fetch_row($result)) {
                   $text=$mailtext;
                   $text=ereg_replace("{?password}",$zeile[3],$text);
                   $text=ereg_replace("{?vorname}",$zeile[2],$text);
                                        $text=ereg_replace("{?name}",$zeile[1],$text);
                                        $text=ereg_replace("{?login}",$zeile[4],$text);
                                        $text=ereg_replace("{?link}","$script_url/_p.php?userid=$zeile[0]&mailid",$text);
                   mail("$zeile[4]","$betreff","$text","From: $seitenname <$adminmail>");

                Jetzt wird keine Fehlermeldung mehr ausgegeben und die eMail werden mit Text verschickt, aber im Text habe ich PLATZHALTER {Vorname} {Name}
                Und genau so steht es jetzt im ausgesendeten Newsletter. Hier sollten aber die Namen aus der Datenbank übernommen werden.
                Wenn ich die PLATZHALTER so eingebe {?Vorname} ...
                wird im Newsletter {\Vorname\} daraus.
                Was mache ich hier falsch?

                So jetzt funktioniert alles wieder.

                Vielen, vielen Dank für die Hilfe. Das mit dem maskieren war super!
                DANKE!!!

                1. Hallo,

                  Vielen, vielen Dank für die Hilfe. Das mit dem maskieren war super!
                  DANKE!!!

                  Ja super. Die Meile machst Du aber immer noch zu sieben Vierteln!

                  Gruß aus Berlin!
                  eddi

  5. Hallo.

    seid einiger

    Genügt es dir nicht, wenn wir uns nur einig sind?
    MfG, at