Сохранять выборки в сгенерированной php форме после отправки (POST) - PullRequest
0 голосов
/ 27 апреля 2011

В настоящее время я использую 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?

Спасибо!

edit: Это в основном форма, которую я использую, хотя я значительно сократил ее, потому что фактическая реализациядовольно длинный.

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

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

Полагаю, вы сохраняете выбранные пользователем данные в отдельной таблице. Если это так, вам нужно добавить логику, чтобы определить, следует ли отображать значения формы или что уже было сохранено.

<?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 / сессий.

0 голосов
/ 27 апреля 2011

выводит переменные в тег 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, "", ""); 
    }

Надеюсь, это поможет!

...