php - 提交(POST)后在 php 生成的表单中保留选择

标签 php javascript forms submit form-submit

我目前正在使用 php 使用数据库中的选择来填充表单。用户在选择样式表单中选择选项并提交,这会在使用第二个提交按钮完成交互之前更新表单下方的选择摘要。

我的问题是,每次用户使用第一次提交时,之前的选择都不会保留。他们必须再次填写整个表格。

是否有办法在不诉诸 php if 语句的情况下保留这些选择?有很多选项,因此为每个选项都使用 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>

最佳答案

我假设您将用户的选择存储在单独的表中。如果是这种情况,您需要添加一些逻辑来确定是否应该显示表单值或已存储的内容。

<?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>

因此,将用户的选择存储到数据库后,您可以将它们重定向到 URL 中包含新 config_id 的页面,以加载保存的值。如果您不将所选值存储在表中,则可以使用 cookie/ session 执行类似的操作。

关于php - 提交(POST)后在 php 生成的表单中保留选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5806154/

相关文章:

php - Laravel 表单输入不需要

php - 关于fatfree框架查询

javascript - 如何在js中存储多个函数的dom var?

css - Contact Form 7 - 全 Angular 输入一个字段

jquery - 如果确认为 true,则调用另一个 jQuery 函数

php - 包含不必要的 php 文件会减慢网站速度吗?

php - HTML/CSS/PHP 在特定页面上显示选定的元素

javascript - 如何在溢出 :hidden? 的 div 设置中获取隐藏内容的高度

javascript - 隐藏 URL 中的参数值 (guid)

php - 在 PHP 中处理动态数量的输入