PHP Warning bei Newsletter-Job erstellen

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
achiboy
Beiträge: 138
Registriert: Do 26. Aug 2004, 05:05
Kontaktdaten:

PHP Warning bei Newsletter-Job erstellen

Beitrag von achiboy » Do 19. Okt 2023, 08:19

Ist es ok, wenn ich für jeden Punkt ein eigenes Thema mache?

Beim Erstellen des Newsletter-Jobs wird folgende Warning geschrieben:

Code: Alles auswählen

PHP Warning:  Undefined variable $sValue in ...\contenido\plugins\newsletter\classes\class.newsletter.php on line 399
In der ...\contenido\plugins\newsletter\classes\class.newsletter.php wird in der Funktion _deChunkHTTPBody der Header zusammengebaut:

Code: Alles auswählen

        $aParts = preg_split("/\r?\n/", $sHeader, -1, PREG_SPLIT_NO_EMPTY);

        $aHeader = [];
        for ($i = 0;$i < sizeof ($aParts); $i++) {
            if ($i != 0) {
                $iPos       = cString::findFirstPos($aParts[$i], ':');
                $sParameter = cString::toLowerCase(str_replace(' ', '', cString::getPartOfString($aParts[$i], 0, $iPos)));
                $sValue     = trim(cString::getPartOfString($aParts[$i], ($iPos + 1)));
            } else {
                $sField      = 'status';
                $aParameters = explode(' ', $aParts[$i]);
                $sParameter  = $aParameters[1];
            }

            if ($sParameter == 'set-cookie') {
                $aHeader['cookies'][] = $sValue;
            } elseif ($sParameter == 'content-type') {
                if (($iPos = cString::findFirstPos($sValue, ';')) !== false) {
                    $aHeader[$sParameter] = cString::getPartOfString($sValue, 0, $iPos);
                } else {
                    $aHeader[$sParameter] = $sValue;
                }
            } else {
                $aHeader[$sParameter] = $sValue;
            }
        }
Das Problem scheint beim "Status" zu liegen. Denn da werden die folgenden Werte ermittelt:
  • $sParameter: 200
  • $sValue:
Liegt das Problem also in den folgenden Zeilen?

Code: Alles auswählen

                $sField      = 'status';
                $aParameters = explode(' ', $aParts[$i]);
                $sParameter  = $aParameters[1];
$sField wird nirgends verwendet.
In $sParameter scheint der Wert zu liegen, den wir als $sValue brauchen?

ich bin wirklich sehr unsicher, aber könnte in dem Fall der folgende Code korrekt sein?

Code: Alles auswählen

                $sParameter  = 'status';
                $aParameters = explode(' ', $aParts[$i]);
                $sValue      = $aParameters[1];

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: PHP Warning bei Newsletter-Job erstellen

Beitrag von Faar » Fr 20. Okt 2023, 16:29

achiboy hat geschrieben:
Do 19. Okt 2023, 08:19
Ist es ok, wenn ich für jeden Punkt ein eigenes Thema mache?
Eher nein, weil das sonst kein Ende nimmt. Lieber sammeln in einem Posting.
Es sind nur PHP Warnungen, keine fatale Fehler.
Beim Erstellen des Newsletter-Jobs wird folgende Warning geschrieben:

Code: Alles auswählen

PHP Warning:  Undefined variable $sValue in ...\contenido\plugins\newsletter\classes\class.newsletter.php on line 399
Ja, wieder eine der vielen Variablen, die nicht vorher deklariert wurden.
Vermutlich trifft eine IF Entscheidung nicht zu und dann gibt es $sValue einfach nicht, wird aber später leichtsinnigerweise abgefragt, ohne vorher festzustellen, ob sie überhaupt existiert. Ja, das ist PHP 8.x
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

achiboy
Beiträge: 138
Registriert: Do 26. Aug 2004, 05:05
Kontaktdaten:

Re: PHP Warning bei Newsletter-Job erstellen

Beitrag von achiboy » Sa 28. Okt 2023, 10:51

wie muss ich vorgehen, damit ich beim Beheben von so Kleinigkeiten, wie undefinierte Variabeln definieren, mithelfen kann?

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: PHP Warning bei Newsletter-Job erstellen

Beitrag von Faar » So 29. Okt 2023, 11:14

achiboy hat geschrieben:
Sa 28. Okt 2023, 10:51
wie muss ich vorgehen, damit ich beim Beheben von so Kleinigkeiten, wie undefinierte Variabeln definieren, mithelfen kann?
Der einfachste Fall ist, wenn sowas auftaucht:

Code: Alles auswählen

<?php
echo $broetchen." Brötchen wurden gekauft.";
// falsch, $broetchen ist nicht definiert
?>

<?php
$broetchen = 0; // Variable wird erzeugt und mit 0 als Zahl definiert, "" wäre dann ein String
$broetchen = 2; // Der Variablen wird die Zahl 2 zugewiesen, als String wäre es "2". Wenn man mit der Variablen rechnen will, nimmt man Zahl.
echo $broetchen." Brötchen wurden gekauft."; // sollte als Ergebnis '2 Brötchen wurden gekauft.' ausgeben.
?>

<?php
$broechten = $_POST["anzahl"]; // $_POST["anzahl"] gibt es erst, wenn das Formular abgeschickt wurde, also existiert es beim ersten Seitenaufruf noch nicht, Fehler
echo $broetchen." Brötchen wurden gekauft.";
<form action="cassa.php" method="post">
...
?>

<?php
$broechten = $_POST["anzahl"] ?? "0"; // Wenn $_POST["anzahl"] noch nicht existiert, wird hier das Zeichen "0" übergeben, als String. Damit wird kein Fehler ausgelöst.
echo $broetchen." Brötchen wurden gekauft."; // das würde dann '0 Brötchen wurden gekauft.' beim ersten Seitenaufruf ausgeben.
<form action="cassa.php" method="post">
...
?>
Natürlich kann die Sache komplizierter werden und.
In den alten Modulen findet sich oft genug auch noch NULL als Zuweisung für eine Variable, die eigentlich ein String erwartet aber NULL ist kein String. Beispiel altes Modul content_text:

Code: Alles auswählen

// alt
if ($edit) {
    $label = mi18n("LABEL_TEXT");
} else {
    $label = NULL;
}
// Hier oben sind gleich 2 Fehler, weil $edit nicht immer definiert ist und $label eine String-Variable sein sollte, da sie im Folgenden dann den String an das Template übergibt. Das Template würde dann ein NULL bekommen, was nun gar nicht passt.

// neu
if (cRegistry::isBackendEditMode()) {
    $label = mi18n("LABEL_TEXT");
} else {
    $label = '';
}
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

achiboy
Beiträge: 138
Registriert: Do 26. Aug 2004, 05:05
Kontaktdaten:

Re: PHP Warning bei Newsletter-Job erstellen

Beitrag von achiboy » So 29. Okt 2023, 12:38

Nein, ich meine, wie kann ich beim Contenido Projekt mithelfen

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: PHP Warning bei Newsletter-Job erstellen

Beitrag von Faar » Mo 30. Okt 2023, 09:34

achiboy hat geschrieben:
So 29. Okt 2023, 12:38
Nein, ich meine, wie kann ich beim Contenido Projekt mithelfen
Hier, über Github:
https://github.com/CONTENIDO/CONTENIDO
Einen eigenen Fork machen, seine Sachen darauf entwickeln und mit dem original Quellcode aktuell halten, weil Xmurrix manchmal schnell und viel arbeitet, und wenn man meint, man hat was brauchbares, dann einen Pull Request starten.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten