extremetk
Goto Top

Fatal error Cannot access empty property in

Emailversand aus Contenido (CMS) über PHP Datei fehlerhaft

Moin Zusammen!

Ich habe mit Hilfe dieses Forums einen Webserver installiert. Funktioniert wirklich sehr gut und
läuft zudem auch stabil. Ist ein Debian Lenny + ISQ Config 3.

In dem CMS System (Contenido benutze ich) kann ich Emails versenden. Dafür ist ein bestimmtes
Formular hinterlegt. Es gibt mehrere Arten des Emailversandes.
Normalerweise ist dort "sendmail" ausgewählt. Da der Server jedoch in unserem Netzwerk steht möchten
wir das SMTP Protokoll benutzen. Sobald ich jedoch auf SMTP umstelle und alle Daten hinterlege erscheint
folgender Fehler nach dem Versand des Formulars im FrontEnd:

Fatal error: Cannot access empty property in /var/www/clients/client1/web1/web/cms/front_content.php(1006) : eval()'d code on line 750  

In Zeile 750 steht dann folgendes:

 
/* Check if category is public */
$sql = "SELECT public FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'";  
$db->query($sql);
$db->next_record();

$public = $db->f("public");  
Kann damit jemand etwas anfangen oder benötigt Ihr dafür die ganze front_content.php?

LG Tobias
Kommentar vom Moderator masterG am 18.01.2010 um 19:38:42 Uhr
Ich hab mir erlaubt deinen Code in einen Codeblock zu packen

Content-ID: 133310

Url: https://administrator.de/forum/fatal-error-cannot-access-empty-property-in-133310.html

Ausgedruckt am: 23.12.2024 um 06:12 Uhr

nxclass
nxclass 13.01.2010 um 08:11:57 Uhr
Goto Top
eval()'d code on line 750
kann es sein, dass Du an der falschen Stelle den Fehler suchst !?
eXtremeTK
eXtremeTK 13.01.2010 um 09:22:45 Uhr
Goto Top
Hm, das sind jedoch die Zeilen rund um die Zeile 750. Gehe davon aus, dass die PHP Datei
Fehlerhaft ist, die er anzeigt oder könnte das auch eine andere sein, wo die Mailkonfiguration
Standardmäßig abgelegt ist?

Gruß
dog
dog 13.01.2010 um 10:15:03 Uhr
Goto Top
Das eval() sagt eigentlich schon, dass du die Stelle nicht finden können wirst face-smile (zumindest nicht ohne Xdebug).
Auch ist die relevante Zeile nicht 750 sondern 1006.

Ich würde mich in so einem Fall an die Entwickler wenden, weil das nach einem Bug aussieht.

Grüße

Max
nxclass
nxclass 13.01.2010 um 10:34:54 Uhr
Goto Top
geh mal in die Zeile 1006 - da sollte ein eval() Befehl stehen - vor diesem Befehl kannst Du ja mal den Parameter ausgeben welcher dem eval() übergeben wird.
Wenn jetzt der Code angezeigt wird - kannst Du mal in die Zeile 750 schauen.

Vermutlich ist dort ein Zugriff auf eine Objekteigenschaft (Objekt Variablen), welche protected oder private ist.

Evtl. prüfst Du mal deine PHP Version und die von deiner Contenido Version (bzw. des entsprechenden Plugins) ab.

EDIT: hier ein Link zum deutschen Forum - mit Lösung !?
http://forum.contenido.org/viewtopic.php?f=62&t=23431&p=128899& ...
eXtremeTK
eXtremeTK 13.01.2010 um 10:39:53 Uhr
Goto Top
Hi Max. Danke das du mich eben mit den Zeilen aufgeklärt hast!
Beim Entwickler nachfragen ist schwierig, da bis jetzt ein externer Dienstleister die Seite entwickelt
hat, jedoch immer andere Freiberufler beschäftigt, somit nicht selber programmiert.
Muss nun erstmal schauen, wer der Entickler von dem Modul ist.

Beste Grüße
Tobias
eXtremeTK
eXtremeTK 13.01.2010 um 10:48:54 Uhr
Goto Top
Moin.
Wie lasse / bzw. wie muss ich vorgehen um den Parameter ausgegeben zu bekommen?
Und zu welchem Zeitpunkt muss ich in die Zeile 750 schauen? Muss ich das im Linux per Kommandozeile machen
oder die Datei dann per FTP wieder runterladen?

Meine PHP Version ist neuer als die Version auf dem Server, jedoch funktioniert die SMTP Einstellung ebenfalls
auch nicht im Internet auf dem Hetzner Server, wo die Homepage im moment noch läuft. Das ist dort eine ältere
PHP Version, aber wie gesagt, dort erhalte ich den gleich Fehler wie auf meinem Debian Lenny + ISP Config System.


Richtig habe den eval() Befehl gefunden:

$aExclude = explode(',', getEffectiveSetting('frontend.no_outputbuffer', 'idart', ''));
if (in_array(Contenido_Security::toInteger($idart), $aExclude)) {
eval ("?>\n".$code."\n<?php\n");
} else {
write html output into output buffer and assign it to an variable
ob_start();
eval ("?>\n".$code."\n<?php\n");
$htmlCode = ob_get_contents();
ob_end_clean();

process CEC Hook to do some preparations before output
$htmlCode = CEC_Hook::execute('Contenido.Frontend.HTMLCodeOutput', $htmlCode);

#If chain execution return value is an array
if (is_array($htmlCode)) {
$htmlCode = $htmlCode;
}

// print output
echo $htmlCode;
}

}
}
else
{
                  1. if user is in the backend display offline articles
                  if ($contenido)
                  {
                  eval ("?>\n".$code."\n<?php\n");
                  }
                  else
                  {
                  if ($error == 1)
                  {
                  echo "Fatal error: Could not display error page. Error to display was: 'No contenido session variable set. Probable error cause: Start article in this category is not > set on-line.'";
                  }
                  else
                  {
                  header($errsite);
                  }
                  }
                  }
                  }


Habe nun nocheinmal im Code des Moduls nachgeschaut. Danke auch nochmal für deinen Link zum deutschen Forum.
Bei mir sieht das Modul jedoch deutlich anders aus. Komischerweise, denn mein Modul ist ebenfalls vom gleichen
Entwickler und auch in der Version 1.0

Hier ein Teil unseres Modulcodes:

$mail->From = "CMS_VALUE";
$mail->FromName = "CMS_VALUE[2]";
$mail->AddAddress("CMS_VALUE[1]", "");
$mail->Subject = "CMS_VALUE[3]";
$mail->Body = $mail_body;
$mail->WordWrap = 50;
$mail->Send();


Bei dem Modul im Beispiel sieht es so aus:

$mail->From = "CMS_VALUE";
$mail->FromName = "CMS_VALUE[2]";
$mail->Sender = "info@xxxxxx.de";
$mail->AddReplyTo($_POST['EMail'], $vorname." ".$nachname);
$mail->AddAddress("CMS_VALUE[1]", "");
$mail->AddCC($_POST['Email'], $vorname." ".$nachname);
$mail->Subject = "CMS_VALUE[3]";
$mail->Body = $mail_body;
$mail->WordWrap = 50;
$mail->Send();
eXtremeTK
eXtremeTK 22.01.2010 um 20:14:01 Uhr
Goto Top
Moin Zusammen.

Ich habe mitlerweile den Fehler gefunden. Es lag an einer falschen Einstellung im Postfix-Mailserver, welche bei Debian Lenny + ISP Config mit installiert wurde.
Dort waren die SMTP Einstellungen falsch eingetragen, daraus reproduzierte sich immer dieser Fehler beim Absenden des Formulars.

Euch vielen DANK für die Hilfe!