#php #javascript #forms #submit #form-submit
#php #javascript #формы #Отправить #форма-отправить
Вопрос:
В настоящее время я использую 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>amp;nbspamp;nbspamp;nbspamp;nbsp";echo $_POST['product_color']; ?>
</div>
Ответ №1:
Я предполагаю, что вы сохраняете выборки пользователя в отдельной таблице. В этом случае вам нужно добавить некоторую логику, чтобы определить, следует ли отображать значения формы или то, что уже было сохранено.
<?php
// form was not submitted and a config id was passed to the page
if (true === empty($_POST) amp;amp; 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>amp;nbspamp;nbspamp;nbspamp;nbsp";echo $_POST['product_color']; ?>
</div>
Таким образом, после сохранения пользовательских выборок в базе данных вы можете перенаправить их на страницу с новым config_id в URL для загрузки сохраненных значений. Если вы не сохраняете выбранные значения в таблице, вы можете сделать что-то подобное с файлами cookie / сеансами.
Ответ №2:
повторите переменные в 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");
}
Я знаю, что вам было брошено много нового кода, но если вы можете получить выбранные значения из базы данных в массив, тогда все остальное должно стать на свои места.
Единственное, что я бы добавил, это в начале, где мы вызываем 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, "", "");
}
Я надеюсь, что это поможет!
Комментарии:
1. Спасибо за ответ, только что обновил сообщение со структурой кода. Не включил все это целиком, потому что это слишком долго. Но по сути, именно так это и функционирует. Информация о публикации из отправки передается пользователю для просмотра сводки. Однако после отправки эти выборки сбрасываются. Я знаю, что есть способ js гарантировать, что они останутся неизменными, просто не смог разобраться в этом.
2. ах, так это выпадающие списки, которые вам нужны, чтобы запомнить, что было выбрано? Прошу прощения, вчера я в спешке прочитал ваш пост и подумал, что это форма с текстовыми вводами.
3. Отлично! Спасибо за информацию. Это совсем немного, с чем мне нужно разобраться, но выглядит прямолинейно! Если бы у меня было достаточно сообщений, я бы дал вам несколько положительных отзывов! К сожалению, я скромный новичок. Спасибо вам все же!
4. без проблем, если это сработает, просто примите ответ и не стесняйтесь спрашивать здесь, нужна ли вам какая-либо помощь с этим материалом. Я сам новичок в stack overflow, но я получаю отличную помощь, поэтому я стараюсь помогать другим, когда я действительно знаю, как на что-то ответить!