so, hab die ersten Zeilen oben entfernt und die Zeilen umgebrochen
(besonders die Kommentare und die SQL-Querries)
Ich schau jetz nochma ganz genau auf die Hochkommas und ohrfeige mich dann am Ende am besten selber, wenn ich den Fehler dann endlich hab
edit: *ohrfeig*
hab jetz die eckige Klammer und das Hochkomma am Ende entfernt...
Warum ich das nicht gefunden habe, ist mir aber ein Rätsel!
Mein Editor ist scheinbar nicht so gut, wie ich dachte.
Er hat den darauffolgenden Code nicht als String dargestellt, warum auch immer...
Danke nochmal!
Komme vielleicht öfter vorbei, klasse Forum!
Warum T_CONSTANT_ENCAPSED_STRING-Error in Script?
Einklappen
X
-
1. code umbrechen
2.schau dir mal das genau an:
PHP-Code:$box_content = preg_replace_callback('!['.$result['name'].']!', array('this', 'run_module'), $box_content']);
peter
Einen Kommentar schreiben:
-
hab syntax-highlighting im Editor...
Und ich sehe da keinen Fehler?
Wie gesagt, escapte-backslashes werden vom Forum entfernt, die sind drann, wenn du das meinst...
Sowas ist mir noch nie passiert, dass ich irgendwelche Hochkommafehler nicht sehe...Zuletzt geändert von JeyDie; 01.08.2007, 19:34.
Einen Kommentar schreiben:
-
Hol dir nen Editor mit Syntax-Highlighting...
PHP-Code:$box_content = preg_replace_callback('!['.$result['name'].']!', array('this', 'run_module'), $box_content']);
Man kann übrigens auch Dateien anhängen, und muss nicht Code posten, den mal selbst mit 1280 Pixeln Breite nicht auf einem Bildschirm ohne horizontalem Scrollbalken haben kann...
Einen Kommentar schreiben:
-
Die ersten Zeilen sind irrelevant. Bitte entfernen oder umbrechen gemäß unseren Regeln. Danke.
Zum Problem: Schau dir mal die Farbgebung deines Codes da oben an!
Einen Kommentar schreiben:
-
Ok, da ich nicht weiß, wie viel mehr Code erforderlich ist, hier einfach ma die ganze class.kernel.php...
Könnte sein, dass ich einiges zu umständlich gelöst habe.
Ich weiß auch noch nicht, ob das Script genau das macht, was ich will. Denn ich bin beim ersten Testlauf bei genau dem Fehler hängen geblieben...
Einige Stellen sind noch aus dem alten CMS übernommen, von daher sollten etwa 50% des Codes funktionieren, da auch das alte CMS lief.
Ich weiß halt nur nicht, wo in den anderen 50% der Fehler liegt...
PHP-Code:<?php
class kernel
{
var $objects = array();
var $page = array();
var $template = array();
var $last_module = 0;
function &get_instance()
{
static $instance;
if(!isset($instance))
$instance = new kernel;
return $instance;
}
function page()
{
$mysql = &mysql::get_instance();
// If a page is called, the page id is in $_GET['id']
// or the name of the page is in $_GET['name'].
// If no page is called, the ID of the start page
// will be written in $this->page['id']
if(!isset($_GET['id']))
{
if(isset($_GET['name']))
{
if($mysql->query('SELECT id FROM pages
WHERE name = "'.mysql_real_escape_string($_GET['name']).'"') == false)
die(display_system_error(2));
$result = $mysql->get_array();
$this->page['id'] = $result['id'];
$this->page['name'] = $_GET['name'];
}
else
{
if($mysql->query('SELECT start_page
FROM options') == false)
die(display_system_error(2));
$result = $mysql->get_array();
$this->page['id'] = $result['start_page'];
}
}
else $this->page['id'] = $_GET['id'];
// If the Name is not allready in $this->page['name'] yet,
// it will be written in.
if(!isset($this->page['name']))
{
if($mysql->query('SELECT name FROM pages
WHERE id = "'.mysql_real_escape_string($this->page['id']).'"' == false)
die(display_system_error(2));
$result = $mysql->get_array();
$this->page['name'] = $result['name'];
}
}
function template()
{
$mysql = &mysql::get_instance();
// Select template of the page. If $template['id'] is 0
// (= the called page need the standard template),
// $template['id'] will be overwritten with the id of the
// standard template
if($mysql->query('SELECT template_id FROM pages
WHERE id = "'.mysql_real_escape_string($this->page['id']).'"') == false)
die(display_system_error(2));
$result = $mysql->get_array();
$this->template['id'] = $result['template_id'];
if($this->template['id'] == 0)
{
if($mysql->query('SELECT standard_template
FROM options') == false)
die(display_system_error(2));
$result = $mysql->get_array();
$this->template['id'] = $result['standard_template'];
}
// Get the Name of the template
if($mysql->query('SELECT name FROM templates
WHERE id = "'.mysql_real_escape_string($this->template['id']).'"') == false)
die(display_system_error(2));
$result = $mysql->get_array();
$thia->template['name'] = $result['name'];
// Load the selected template in $template['content']
if($mysql->query('SELECT content FROM templates
WHERE id = "'.$this->template['id'].'"') == false)
die(display_system_error(2));
$result = $mysql->get_array();
$this->template['content'] = $result['content'];
}
function load_module($name)
{
if(is_file('module_'.$name.'php'))
{
require_once 'module_'.$name.'php';
if(class_exists($name))
{
if(isset($this->objects[$name]) == false) $this->objects[$name] = new $name;
if(method_exists($this->objects[$name]->page())) return true;
unset($this->objects[$name]);
return false;
}
}
}
function box_content($name)
{
$mysql = &mysql::get_instance();
if($mysql->query('SELECT content FROM boxes
WHERE name = "'.mysql_real_escape_string($name).'"
AND WHERE page_id = "'.mysql_real_escape_string($this->page['id']).'"') == false)
die(display_system_error(2));
$result = $mysql->get_array();
$box_content = $result['content'];
if($mysql->query('SELECT name FROM modules') == false)
die(display_system_error(2));
while($result = $mysql->get_array())
{
if(strpos($box_content, '['.$result['name'].']') !== false)
{
if($this->load_module($result['name']))
{
$box_content = preg_replace_callback('!\['.$result['name'].'\]!', array('this', 'run_module'), $box_content']);
}
}
}
return $box_content;
}
function run_module()
{
$last_module = $this->last_module;
return $this->objects[$last_module]->page();
}
function render_page()
{
echo preg_replace_callback('!\{(.+?)\}!', array('this', 'box_content'), $this->template['content']);
}
}
?>
Fehler einkreisen ist gut.
Nur kann man bei einer Funktion mit drei Parametern schlecht welche weglassen...Zuletzt geändert von JeyDie; 01.08.2007, 19:40.
Einen Kommentar schreiben:
-
Du könntest in diesem oder in dem anderen Forum mal ein größeres Stückchen Code zeigen.
Einen Kommentar schreiben:
-
Grenz das Problem ein - entferne Teile der Zeile, bis es funktioniert, der Teil den du entfernt hast, da liegt dann der Fehler ... so sollte sich ein Parse-Error doch recht schnell finden lassen.
Einen Kommentar schreiben:
-
Ich hab das gleiche Konstrukt aber schon an verschiedenen anderen Stellen im Script und es geht einwandfrei.
Aber gut, ich schau ma, obs funzt.
edit: Geht immernoch nicht, auch wenn ichs so mache...
Jemand ne andere Idee?
Danke schonma für die Hilfe!Zuletzt geändert von JeyDie; 01.08.2007, 18:52.
Einen Kommentar schreiben:
-
Der 2. Parameter ... versuche es mit array('self', 'box_content').
Einen Kommentar schreiben:
-
Warum T_CONSTANT_ENCAPSED_STRING-Error in Script?
Hi allerseits.
Ich bekomme aus mir nicht erklärlichen Gründen folgenden Fehler
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in D:\files\xampplite\htdocs\cmsm\lib\class.kernel.php on line 168
Zeile 168 sieht wie folgt aus (in der Methode, in der sie steht - line 168 ist nur alles ab echo):
PHP-Code:function render_page()
{
echo preg_replace_callback('!\{(.+?)\}!',
array($this, 'box_content'),
$this->template['content']);
}
So weit ich das sehe, verwende ich dort nirgends eine Konstante?
Auch sonnst hab ich im Script keine Konstanten, nur ganz oben wird eine in der index.php definierte Konstante abgefragt, um zu überprüfen, ob die Datei von der index.php oder von einem User aufgerufen wird...
Ich bin wirklich kein Anfänger mehr in PHP, habe jetzt schon mehrere Jahre Erfahung mit dieser Sprache. Aber ich sehe bei diesem Error einfach nicht die Fehlerquelle.
Keine falsch gesetzten Anführungszeichen und so weiter - oder bin ich einfach nur blind?
Die Codezeilen sind übrigens für ein eigenes CMS. Hatte vor einger Zeit schonmal ein kleines CMS für eigene Projekte programmiert, das nun modular umgeschrieben werden soll.
edit: sehe gerade: hab vor den geschweiften Klammern im Reguleren Ausdruck eigentlich noch einen Backslash, um sie zu escapen.
Das Forum stellt die aber irgendwie nicht da, obwohl ich sie mit reingeschrieben hab.Zuletzt geändert von JeyDie; 01.08.2007, 18:26.Stichworte: -
Einen Kommentar schreiben: