2013-10-10 68 views
0

我對PHP(以及一般編程)非常陌生,我試圖讓我的表單域變得粘性,所以每次用戶點擊提交時,他們的選擇都保持在下拉菜單中。該代碼正在適當地改變字體,顏色等,但它會繼續回落到頂部的下拉值。讓我的下降粘滯?

<!DOCTYPE html> 
<html> 
<head><title>Example</title></head> 
<body> 

<form name="FontFamilyForm" method="post"> 

    <select name="fontFamily"> 
    <option value="serif">Serif</option> 
    <option value="sans-serif">Sans-serif</option> 
    <option value="fantasy">Fantasy</option> 
    <option value="monospace">Monospace</option> 

    </select> 
    <input type="submit" /> 
</form> 

<form name="FontSizeForm" method="post"> 

    <select name="fontSize"> 
    <option value="100">Normal</option> 
    <option value="60">Tiny</option> 
    <option value="80">Small</option> 
    <option value="120">Medium</option> 
    <option value="150">Large</option> 
    <option value="200">Extra Large</option> 

    </select> 
    <input type="submit" /> 
</form> 


<form name="BackgroundColorForm" method="post"> 

    <select name="backgroundColor"> 
    <option value="#ffffff">Normal</option> 
    <option name='beetch' value="#dddddd">Light Grey</option> 
    <option value="#aaaaaa">Medium Grey</option> 
    <option value="#888888">Grey</option> 
    <option value="#333333">Dark Grey</option> 
    <option value="#000000">Black</option> 

    </select> 
    <input type="submit" /> 
</form> 



<?php 

    if (isset($_POST['fontFamily'])) 
    { 
     $fontFamilyVar = $_POST['fontFamily']; 

    } 

    if (isset($_POST['fontSize'])) 
    { 
     $fontSizeVar = $_POST['fontSize']; 
    } 

    if (isset($_POST['backgroundColor'])) 
    { 
     $backgroundColor = $_POST['backgroundColor']; 
    } 





?> 
    <style type="text/css"> 

     body { 
      line-height:1.5; 
      width:640px; 
      margin:0 auto; 
      font-family: <?echo $fontFamilyVar?>; 
      font-size: <?echo $fontSizeVar?>%; 
      background-color: <?echo $backgroundColor?>; 
      color: #dddddd; 
     } 
     label {width:12em;float:left;} 
    </style> 

    <p>Test string blah blah blah blah blah</p> 


</body> 

<html> 

回答

5

你需要更新你的代碼按如下:

<select name="fontFamily"> 
    <option <?php if($fontFamilyVar=="serif")  echo 'selected="selected"'; ?> value="serif">Serif</option> 
    <option <?php if($fontFamilyVar=="Sans-serif") echo 'selected="selected"'; ?> value="sans-serif">Sans-serif</option> 
    <option <?php if($fontFamilyVar=="Fantasy") echo 'selected="selected"'; ?> value="fantasy">Fantasy</option> 
    <option <?php if($fontFamilyVar=="Monospace") echo 'selected="selected"'; ?> value="monospace">Monospace</option> 
</select> 

也把你的下面的PHP代碼在頁面的頂部,而不是底部:

<?php 

    if (isset($_POST['fontFamily'])) 
    { 
     $fontFamilyVar = $_POST['fontFamily']; 
    } 
    if (isset($_POST['fontSize'])) 
    { 
     $fontSizeVar = $_POST['fontSize']; 
    } 
    if (isset($_POST['backgroundColor'])) 
    { 
     $backgroundColor = $_POST['backgroundColor']; 
    } 
?> 
+0

非常感謝!這正是我所期待的! – Whoppa

+0

@SamHenderson:聽起來像你應該接受這個答案(http://stackoverflow.com/help/someone-answers) – rici

0

這是因爲在發佈後,你的選擇正在迷失。您可以使用會話更改下拉列表的選定值。

<select name="fontFamily"> 
    <option value="serif"<?=$_SESSION['fontFamily'] == "Serif" ? ' selected="selected"' : ''?>>Serif</option> 
    <option value="fantasy"<?=$_SESSION['fontFamily'] == "Fantasy" ? ' selected="selected"' : ''?>>Fantasy</option> 
</select> 

使用會話即使用戶刷新頁面(F5)在下拉菜單中的值不會更改爲默認的。

不要忘記啓動會話並在發回後爲其分配值。

希望這有助於

+0

感謝您的帖子!我一定會看更多的會議。 – Whoppa

0

的主要方式我做,這是通過簡單地在與「選擇」的標籤列表的頂部伸出以前選擇的選項。這適用於訂單不是特定的列表。

另一種方法是製作一個選項值數組,然後遍歷數組並將先前選定的值與數組中的每個選項進行比較。

$option_value = "two"; 
$array = array('one', 'two', 'three', 'four'); 
$array_count = count($array); 

echo "<select name=\"numbers\">"; 

for ($i=0; $i<$array_count; $i++){ 
    echo "<option value=\"$array[$i]\""; 

    if ($array[$i] == $option_value){ 
     echo " selected"; 
    } 

    echo ">$array[$i]</option>" 
} 

echo "</select>"; 

如果您正在爲有點像在一個小時的分鐘選項列表,你可以做同樣的事情,只有你不必提前聲明數組,你只需要使用$我建立的循環的價值。