2011-04-27 109 views
0

我目前使用PHP來填充表單與數據庫中的選擇。用戶在選擇樣式表單中選擇選項並提交此選項,該選項會在使用第二個提交按鈕完成交互之前更新表單下選擇的摘要。提交後(POST)保留在PHP生成的表單中的選擇

我的問題是每次用戶使用第一次提交時,之前的選擇都不會粘住。他們必須再次通過整個表格。

無論如何保持這些選擇目前沒有訴諸如果php語句?有很多選項,所以每個人使用php都會很痛苦。另外,表單正在通過POST提交。從形式

樣品:

<?php 
// GRAB DATA 
$result = mysql_query("SELECT * FROM special2 WHERE cat = 'COLOR' ORDER BY cat") 
or die(mysql_error()); 
echo "<div id='color'><select id='color' name='product_color'>"; 

while($row = mysql_fetch_array($result)) { 
$name= $row["name"]; 
$cat= $row["cat"]; 
$price= $row["price"]; 
echo "<option value='";echo $name;echo"'>";echo $name;echo" ($$price)</option>";} 
echo "</select>"; 
echo "<input type='hidden' name='amount_color' value='";echo $price;echo"'></div>"; 
?> 

我試圖用這個js代碼段重新填充的選擇,但它似乎沒有正常工作......

<script type="text/javascript">document.getElementById('color').value = "<?php echo $_GET['proudct_cpu'];?>";</script> 

這似乎並不工作。除php if語句之外的任何其他建議?

謝謝!

編輯:這基本上是我使用的表單,儘管我已經縮短了它,因爲實際實現時間很長。

// Make a MySQL Connection 
<?php mysql_connect("localhost", "kp_dbl", "mastermaster") or die(mysql_error()); 
mysql_select_db("kp_db") or die(mysql_error()); 
?> 
<br /> 
<form action="build22.php" method="post"> 
<input type="hidden" name="data" value="1" /> 
<br /> 
<br /> 
<?php 
// GRAB DATA 
$result = mysql_query("SELECT * FROM special2 WHERE cat = 'color' ORDER BY cat") 
or die(mysql_error()); 
echo "<div id='color'><select id='color' name='product_color'>"; 

while($row = mysql_fetch_array($result)) { 
$name= $row["name"]; 
$cat= $row["cat"]; 
$price= $row["price"]; 
echo "<option value='";echo $name;echo"'>";echo $name;echo" ($$price)</option>";} 
echo "</select>"; 
echo "<input type='hidden' name='amount_color' value='";echo $price;echo"'></div>"; 
?> 

<input type="submit" value="Update Configuration"> 
</form> 

從表單的選擇上面得到提交後都會以更新用戶提供這樣:

<div id="config" style="background-color:#FFF; font-size:12px; line-height:22px;"> 
    <h1>Current Configuration:</h1> 
    <?php echo "<strong>Color:</strong>&nbsp&nbsp&nbsp&nbsp";echo $_POST['product_color']; ?> 
</div> 

回答

0

呼應變量導入到表格元素的value標籤。如果您發佈所有代碼,我相信我可以幫助您。

UPDATE

啊,所以他們是你需要記住選擇什麼下拉列表?道歉,我昨天急於閱讀你的文章,並認爲這是一個帶有文本輸入的表單。

我剛剛做了一個類似的事情,但沒有嘗試你的代碼讓我看看我能否幫忙。

你需要做的基本上就是在下拉菜單設定一個值來selected="selected"

當我不得不這樣做,我有我的下拉值在數組中,像這樣:

$options = array("stack", "overflow", "some", "random", "words"); 

// then you will take your GET variable: 
$key = array_search($_GET['variablename'], $options); 
// so this is saying find the index in the array of the value I just told you 

// then you can set the value of the dropdown to this index of the array: 
$selectedoption = $options[$key]; 

這是它可能會令人困惑,因爲我的代碼是不同的,所以如果你想使用它,你可能需要重構一下

我有一個doSelect功能,我通過以下參數:

// what we are passing is: name of select, size, the array of values to use and the 
// value we want to use as the default selected value 
doSelect("select_name", 1, $options, $selectedoption, ""); 


// these are the two functions I have: 

// this one just processes each value in the array as a select option which is either 
// the selected value or just a 'normal' select value 
FUNCTION doOptions($options, $selected) 
{   
    foreach ($options as $option) 
    { 

     if ($option == $selected) 
      echo ("<option title=\"$title\" id=\"$value\" selected>$option</option>\n"); 
     else 
      echo ("<option title=\"$title\" id=\"$value\">$option</option>\n"); 
    } 
} 


// this is the function that controls everything - it takes your parameters and calls 
// the above function 
FUNCTION doSelect($name, $size, $options, $selected, $extra) 
{ 
    echo("<select class=\"\" id=\"$name\" name=\"$name\" size=\"$size\" $extra>\n"); 
    doOptions($options, $selected); 
    echo("</select>\n"); 
} 

我知道這是一個很大的人提供在你扔了新的代碼,但如果你可以從數據庫獲取您的選擇值到數組,然後一切應該很好地水到渠成。

我想補充的唯一的事情,在這裏我們稱之爲doSelect開始,我會把那個在if語句,因爲你所選擇尚未設定不想設置的東西:

if (isset($_GET['variable'])) 
    { 
     $key = array_search($_GET['variablename'], $options); 
     $selectedoption = $options[$key]; 
     doSelect("select_name", 1, $options, $selectedoption, ""); 
    }  
    else 
    { 
     doSelect("select_name", 1, $options, "", ""); 
    } 

我希望有幫助!

+0

感謝您的迴應,只是更新了與代碼結構的職位。沒有包括整個事情,因爲它太長了。但這基本上就是它的功能。來自提交的POST信息被回顯給用戶以查看摘要。然而,在submssion之後,這些選擇重置。我知道有一種確保他們保持不變的方式,只是一直沒能弄清楚。 – rdrkra 2011-04-27 15:10:55

+0

啊,所以他們是下拉列表,你需要記住選擇了什麼?道歉,我昨天急於閱讀你的文章,並認爲這是一個帶有文本輸入的表單。 – martincarlin87 2011-04-28 08:48:05

+0

啊太棒了!謝謝(你的)信息。這是我必須要解決的很多問題,但看起來很簡單!如果我有足夠的帖子,那麼我會給你一些upvotes!不幸的是我是一個新手。謝謝你! – rdrkra 2011-04-29 04:16:01

3

我假設你將用戶的選擇存儲在一個單獨的表中。如果是這樣的話,您需要添加一些邏輯來確定您是否應該顯示錶單值或已存儲的內容。

<?php 

    // form was not submitted and a config id was passed to the page 
    if (true === empty($_POST) && true === isset($_GET['config_id'])) 
    { 
     // make sure to properly sanitize the user-input! 
     $rs = mysql_query("select * from saved_configuration where config_id={$_GET['config_id']}"); // make sure to properly sanitize the user-input! 

     $_POST = mysql_fetch_array($rs,MYSQL_ASSOC); // assuming a single row for simplicity. Storing in _POST for easy display later 
    } 

?> 

<div id="config" style="background-color:#FFF; font-size:12px; line-height:22px;"> 
    <h1>Current Configuration:</h1> 
    <?php echo "<strong>Color:</strong>&nbsp&nbsp&nbsp&nbsp";echo $_POST['product_color']; ?> 
</div> 

所以在數據庫中存儲用戶的選擇後,你可以將它們與新的config_id的URL重定向到頁面加載保存的值。如果您沒有將選定的值存儲在表中,則可以使用Cookie /會話進行類似的操作。

相關問題