2013-08-18 50 views
0

我一直在研究改變服務器上文件中的值的PHP表單。表單正確地更改了值,但我需要表單的<option value="round" <?php if($shape == 'round'){?>selected="selected"<?php }?>>Round</option>部分始終顯示在文件中設置的當前值,但目前沒有。PHP表單選項字段將不會顯示文件中的當前值

#file contents (the lines the values are on changed on a regular basis) 
size=large 
color-name=red 
shape=round 
height=short 
weight=heavy 

<?php 

$file = "/home/user/color.props"; 
$contents = file($file, FILE_SKIP_EMPTY_LINES); 

foreach($contents as $line) { 
    list($option, $value) = explode('=', $line); 
    if ($option == 'color-name') { 
     $color_name = $value; 
    } elseif ($option == 'shape') { 
     $shape = $value; 
    } 
} 

    if(isset($_REQUEST['color_choice'])){ 
     exec('sed -i '.escapeshellarg('s/color-name=.*/color-name='.$_REQUEST['color_choice'].'/g')." /home/user/color.props"); 
     echo 'Color setting has been updated'; 
    } 

?> 

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

你也可以粘貼文件的內容嗎? – jexx2345

+0

完成。我正在使用:$ color_name = explode(「=」,trim($ contents [2]));但文件中值的行總是在變化,所以它不能很好地工作。 – jcrane

+0

您正在訪問'$ color_name'就像一個數組,但基於您的代碼,我不認爲它會包含多個值,因此'$ color_name [1]'將始終爲空...... – JLewkovich

回答

0

我還不清楚你到底在做什麼。您當前的代碼僅保存從文件讀入的最後一個'color-name''shape'對象。

<option value="red" <?php if($color_name == 'red'){?>selected="selected"<?php }?>>Red</option>; 
<option value="blue" <?php if($color_name == 'blue'){?>selected="selected"<?php }?>>Blue</option>; 
<option value="green" <?php if($color_name == 'green'){?>selected="selected"<?php }?>>Green</option>; 
<option value="purple" <?php if($color_name == 'purple'){?>selected="selected"<?php }?>>Purple</option>; 

注意:它則可以通過進行這種改變配置selected選擇你的文件中讀取的方式追加回車/行返回你的變量的結束......例如,$color_name上我的最終包含在字符串的結尾兩個額外的十六進制值:x0dx0a

編輯#2:嘗試讓你的表格是這樣的:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    <select id="color_choice"> 
     <option id="round">Round</option> 
     <option id="square">Square</option> 
    </select> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 
<script> 
    var option = document.getElementById("color_choice"); 
    option.options['<?php echo $shape ?>'].selected = true; 
</script> 

我敢肯定,這將工作,改變了我取得了:
1)使用JavaScript代替PHP來改變所選擇的
2)使用id屬性而不是valuename
3)添加<script>標籤在形式結束時,如果它的前(它可能不工作)

您必須根據您從文件中提取的值的類型對錶單和腳本進行更改......但您應該能夠弄清楚如何處理該問題。

+0

我會嘗試澄清我試圖完成的事情:表單編輯color.props值的值,這完美地工作。我希望選項值字段始終反映color.props文件中的實際(當前)值。如果我將其更改爲「藍色」,表單上的選項值字段應該顯示爲「藍色」。目前,無論color.props文件中的值是什麼,表單字段選項都會重置爲第一個值「red」。 – jcrane

+0

@jcrane嘗試在文件更改後再次運行此行:'$ contents = file($ file,FILE_SKIP_EMPTY_LINES);' – JLewkovich

+0

您的意思是將該行放在我的代碼中的表單之後? – jcrane

相關問題