2013-06-18 32 views
0

我一个脚本从这里用户工作的编辑对我的VPS文件,到目前为止,感谢帮助,我有以下几点:PHP的形式EXEC,sed和的file_get_contents

<?php 
if(!empty($_REQUEST['color_choice'])){ 
    exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /home/user/colors/color.choices"); 
    echo 'File color choice has been updated'; 
} 
?> 

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <select name="color_choice">; 
     <option value="red">red</option>; 
     <option value="blue">blue</option>; 
     <option value="black">black</option>; 
     <option value="orange">orange</option>; 
    </select> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

这改变了价值观根据需要,但我还有一个问题,我仍然试图解决。该脚本没有得到文件本身的当前值,所以当我第一次访问该页面时,它总是说“红色”。在我做出改变后,它仍然在php表单上显示“红色”。

编辑:我希望窗体始终在color.choices文件中显示当前值,而不是每次都回到“红色”。如果我将窗体上的值更改为“蓝色”,我希望窗体显示文件中的当前值设置为“蓝色”。

我被告知我需要使用“file_get_contents”来首先从文件本身检索值。我做了一些尝试,但我没有得到任何地方。如果我需要添加更多信息,请告诉我!

+0

我想帮助你,但你目前的问题有点不清楚。提供有关从中检索信息所需的文件的更多详细信息。鉴于您目前的问题,您很难准确理解您的代码的作用(它只是一个简单的表单和exec调用)。你的应用程序目前做了什么,它应该做什么?提交表单的前提条件/后提条件?给我们更多的细节,以便我们帮助!附:你不应该把表单提交给$ _SERVER ['PHP_SELF'] - 坏习惯! ---

如果你提交给自己,你不需要动作attr。 –

+0

您需要先获取值,然后将其设置为表单上的默认选项。你现在如何检索价值?或者存储的值在哪里? –

+0

我的脚本只是一个简单的表单和exec调用,文件本身只有以下值:color = x。我基本上希望表单始终反映服务器上文件中的当前值。所以如果我将表单字段的值更改为蓝色,我希望它显示该值现在在窗体上设置为蓝色。目前,即使进行了更改,每次都会显示“红色”。同样,当我回到页面时,即使数值已变为蓝色,它也会显示为红色。 – jcrane

回答

0

如果你这样做?

<?php 
    $current = file_get_contents("/var/www/html/colors/color.choices"); 
    $color = explode("=", trim($current)); 

    if(!empty($_REQUEST['color_choice'])){ 
     exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /var/www/html/colors/color.choices"); 
     echo 'File color choice has been updated'; 
    } 
?> 

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <select name="color_choice">; 
     <option value="red" <?php if($color[1] == 'red'){?>selected="selected"<?php }?>>red</option>; 
     <option value="blue" <?php if($color[1] == 'blue'){?>selected="selected"<?php }?>>blue</option>; 
     <option value="black" <?php if($color[1] == 'black'){?>selected="selected"<?php }?>>black</option>; 
     <option value="orange" <?php if($color[1] == 'orange'){?>selected="selected"<?php }?>>orange</option>; 
    </select> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 
+0

谢谢。我试了一下,它似乎正确地从文件中读取值,但它不会改变它们。 – jcrane

+0

你为'$ color [1]'的价值得到了什么?就好像你回声或做一个print_r。 –

+0

好吧,我敢打赌,这是因为阅读文件的权限。它必须位于/ home/user目录中,还是可以位于Web文件所在的www目录中?否则,你将不得不改变所有权,以便PHP可以读取它。 –