2011-03-17 150 views
0

我有一个动态的PHP页面,在按钮单击更改链接到它的CSS文件,我已经做到了将选定的CSS文件保存到会话,所以用户将选择的CSS文件全部在他的会议期间的时间。saveHTML()保存2个副本

我的问题是,编辑链接html元素中的href元素 - 为了链接新选择的文件 - 我使用saveHTML()函数来保存编辑版本,输出是灾难,我有两个副本的页面上的所有元素,我的意思是两个横幅,两个提交按钮,一切都是重复的!

我的代码看起来是这样的:

<!--CSS Theme--> 

<link id = "theme" rel="stylesheet" type="text/css" href="White.css" /> 

<!--Change Theme--> 
<?php 
    if(isSet($_GET["Theme"])) 
    { 
     $th = $_GET["Theme"]; 

     $_SESSION["Theme"] = $th; 

    } 
    else if(isSet($_SESSION["Theme"])) 
    { 
     $th = $_SESSION["Theme"]; 
    } 

    else 
    { 
     $th = 'White.css'; 
    } 

    switch ($th) { 

     case 'Light Blue': 
     $theme_file = 'LightBlue.css'; 
     break; 


     default: 
     $theme_file = 'White.css'; 

} 
    $dom = new DOMDocument; 
    @$dom->loadHTMLFile('HomeWork.php'); 
    $node= $dom->getElementById('theme') ; 
    $node->setAttribute('href', $theme_file); 
    echo $dom->saveHTML(); 


?> 

编辑HomeWork.php是包含前面的代码相同的文件。

你有什么想法是什么问题?

+1

当你去HomeWork.php会发生什么? – 2011-03-17 18:59:40

+0

您试图将PHP加载为HTML。您需要首先获取内容,然后将其加载到DOM中... – ircmaxell 2011-03-17 19:01:40

+0

为什么要使用loadHTMLFile()加载PHP文件?如果该文件中有PHP,它将不会被执行。 – glomad 2011-03-17 19:02:51

回答

1

如果homework.php与您展示的文件完全相同,那么难怪内容是重复的。当你执行homework.php时,打印出DOM代码之前出现的任何HTML。然后你的DOM被执行,再次加载相同的内容,改变属性并再次打印整个代码。

你不需要这个DOM。只需计算您想要使用的CSS文件,就像您已经做过的那样,而不是您的DOM代码,请回显文件名和相应的位置,例如

<?php 
    // code to calculate from $_SESSION which filename to use 
    // store in $fileName variable 
?> 
// HTML Stuff here 
// insert the variable into the HTML 
<link id="theme" rel="stylesheet" type="text/css" href="<?php echo $fileName ?>" /> 
+0

非常感谢,你救了我的一天! – Lisa 2011-03-17 19:30:55

相关问题