我目前正在使用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>    ";echo $_POST['product_color']; ?>
</div>
答案 0 :(得分: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>    ";echo $_POST['product_color']; ?>
</div>
因此,在将用户的选择存储在数据库中之后,您可以将它们重定向到URL中具有新config_id的页面以加载保存的值。如果您没有将所选值存储在表格中,则可以使用cookie / sessions进行类似的操作。
答案 1 :(得分:0)
将变量回显到表单元素的value
标记中。如果您发布所有代码,我相信我可以帮助您。
<强>更新强>
啊,所以他们是下拉列表,你需要记住选择了什么?道歉,我昨天匆匆看了你的帖子,认为这是一个带有文字输入的表格。
我自己做了类似的事情,但没有尝试你的代码,让我看看能不能帮忙。
基本上您需要做的是在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");
}
我知道有很多新的代码都是你的,但是如果你能从db中获取你的选择值,那么其他一切都应该很好地落到实处。
我要添加的唯一内容是,在我们调用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, "", "");
}
我希望有所帮助!