2013-06-22 86 views
0

此表單的目的是更新我的服務器上的文件,並在更改後在表單本身上反映更新後的更改。下面是當前的代碼我有幫助,從幾個用戶:php表單與exec,file_get_contents和爆炸

<?php 
    $file = "/var/www/html/colors/color.choices"; 
    $contents = file($file, FILE_SKIP_EMPTY_LINES); 
    $color = explode("=", $contents[0]); 
    $size = explode("=", $contents[1]); 
    $shape = explode("=", $contents[2]); 

    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'; 
    } 
    if(!empty($_REQUEST['size_choice'])){ 
     exec('sed -i '.escapeshellarg('s/size=.*/size='.$_REQUEST['size_choice'].'/g')." /var/www/html/colors/color.choices"); 
     echo 'File size choice has been updated'; 
    } 
    if(!empty($_REQUEST['shape_choice'])){ 
    exec('sed -i '.escapeshellarg('s/shape=.*/shape='.$_REQUEST['shape_choice'].'/g')." /var/www/html/colors/color.choices"); 
    echo 'File shape 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="black" <?php if($color[1] == 'black'){?>selected="selected"<?php }?>>black</option>; 
    </select> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <select name="size_choice">; 
     <option value="large" <?php if($size[1] == 'large'){?>selected="selected"<?php }?>>large</option>; 
     <option value="small" <?php if($size[1] == 'small'){?>selected="selected"<?php }?>>small</option>; 
    </select> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <select name="shape_choice">; 
     <option value="round" <?php if($shape[1] == 'round'){?>selected="selected"<?php }?>>round</option>; 
     <option value="square" <?php if($shape[1] == 'square'){?>selected="selected"<?php }?>>square</option>; 
    </select> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

更新:我已經調整了代碼,似乎幾乎有工作。現在最後的選擇總是按預期工作。因此,在這種情況下,「形狀」值現在可以很好地工作。但是,「顏色」和「尺寸」選項會更新color.choices文件,但更新不會反映在窗體本身上。爲什麼現在最後一個選項適用於表格,但前兩個選項不適用?

+0

這行''color = explode(「=」,trim($ current));'只會在一行上有效。如果你添加新的選項到你的文件中,你需要在分解每一行之前分解它。 – 2013-06-22 03:27:15

回答

0

你可以這樣做。我會給你兩個選擇。

第一個選項是使用file();

<?php 
    $file = "/var/www/html/colors/color.choices"; 
    $contents = file($file, FILE_SKIP_EMPTY_LINES); 
    $color = explode("=", $contents[0]); 

    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> 

所以如果你的color.choices文件在下面有這些選項。然後你的數組將從0,1,2開始,就像我上面用於你的顏色例如$contents[0]將是顏色線。 $content[1]將是形狀線。等等。然後,你仍然必須將它們爆炸成一個新的變種。

color=blue 
shape=round 
size=large 

第二個選項推薦),你可以做到這一點。

我會做的就是讓它成爲一個ini文件。您已經以ini的形式使用該文件,爲什麼不更容易使用這些值呢?

重命名color.choicescolor_choices.ini

然後你的代碼會是這樣。現在

<?php 
    $attr = parse_ini_file("/var/www/html/colors/color_choices.ini"); 
    $color = $attr["color"]; 
    $size = $attr["size"]; 
    $shape = $attr["shape"]; 

    if(!empty($_REQUEST['color_choice'])){ 
     exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /var/www/html/colors/color_choices.ini"); 
     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 == 'red'){?>selected="selected"<?php }?>>red</option>; 
     <option value="blue" <?php if($color == 'blue'){?>selected="selected"<?php }?>>blue</option>; 
     <option value="black" <?php if($color == 'black'){?>selected="selected"<?php }?>>black</option>; 
     <option value="orange" <?php if($color == 'orange'){?>selected="selected"<?php }?>>orange</option>; 
    </select> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

內color_choices.ini會這個樣子。

[attributes] 
color=blue 
shape=round 
size=large 

使用INI文件是更好,因爲那麼你可以使用key名而不必知道他們是在文件中的順序。一旦解析,它已經是一個數組的形式,所以你可以撥打$attr["color"]$attr["shape"]等等,它們在color_choice.ini文件中的順序無關緊要。您可以根據需要添加任意數量的屬性。還請注意,表單變量也會更改爲$color

例如

echo $attr["size"]; //value will be large 
+0

再次感謝Pjack的幫助!我將我原來的帖子更新爲我提出的兩個選項的代碼。它現在改變了它們兩個,但我回到了表單不顯示它在文件中設置的值的問題。 (我將不得不使用上面的選項1,儘管知道ini文件很好) – jcrane

+0

是否確保在嘗試選項時表單顯示'$ color'而不是'$ color [1]'二?這應該沒有問題。 –

+0

好吧,如果任何一個幫助,免費升級並接受答案。 :) –