2013-06-18 93 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可以讀取它。 –