试图让php select下拉保留其提交值

时间:2018-03-13 14:22:05

标签: php

是一个php新手,需要一些帮助。基本上我有一个脚本,使用PHP填充下拉选择栏。我希望在提交后保留用户在此下拉列表中选择的值,因此用户不必再次选择它,这是我尝试使用的脚本片段。

   <?php
// Start the session
session_start();

$_SESSION["dir"] = $_POST['hiddenVal'];
//echo "hi at last" .$_SESSION["dir"];
?>

<script>
function loadValues()
{
var $x=obj.options[obj.selectedIndex].value;
document.getElementById("hiddenVal").value = $x;
//alert(document.getElementById("hiddenVal").value);
}
</script>

<script>

  function country(obj){
  //alert(obj.options[obj.selectedIndex].value); //if you want to show in alart
  //or put in a variable 
  var $x=obj.options[obj.selectedIndex].value;
  document.getElementById("hiddenVal").value = $x;
  alert($x);

  }

 </script>

 <body onload="loadValues();">

 <form action="dir20.php" method="post">
 <input type="hidden"  id="hiddenVal" name = "hiddenVal"/>
 <input type="submit" name="submit" id="submit" value="Submit" />
 </form>
 </body>













<?php
$path = '/docdownloads';
//echo  'php_'.$abc;

$dirs = array();

// directory handle
$dir = dir($path);

while (false !== ($entry = $dir->read())) {
    if ($entry != '.' && $entry != '..') {
       if (is_dir($path . '/' .$entry)) {
            $dirs[] = $entry; 
            //echo "$entry</br>";

       }
    }
}










?>

<select name="country" id="country"  onChange="country(this)" required>
<!--<option value="">-----------------</option>-->
<?php
    asort($dirs);
    reset($dirs); 
    foreach($dirs as $p => $w):
        echo '<option value="'.$w.'">'.$w.'</option>'; //close your tags!!
    endforeach;
?>
</select>







<?php
$tex = $_SESSION["dir"];

//$def = "docdownloads";

//$dir = "c:/".$tex;
$dir = "c:/docdownloads/".$tex;
//echo "tex is". "$dir";
echo "</br>";
//if ($handle = opendir('.')) {
    if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {

        if ($entry != "." && $entry != "..") {

            echo "$entry</br>";
        }
    }

    closedir($handle);
}
?>

5 个答案:

答案 0 :(得分:3)

您想要针对所选选项检查$ _GET var。如果当前选项存在且已选中,则为选项提供所选属性。

-----------------

<?php
    asort($dirs);
    reset($dirs); 
    foreach($dirs as $p => $w):

        $selected = isset($_GET['country']) && $_GET['country'] === $w ? "selected" : "";
        echo '<option value="'.$w.'"'.$selected.'>'.$w.'</option>';
    endforeach;
?>
</select>

答案 1 :(得分:0)

如果您还没有为用户分配ID,则需要使用相应的ID将提交的选项保存在数据库中。然后当你加载你的下拉框时,在你的脚本中插入一个IF子句来检查用户是否已经保存了一个选项。

答案 2 :(得分:0)

要实现这一点,您应该保存用户选择进入会话的值 并且在显示表单时,您应该检查会话中是否存在该值以及是否存在 - 将其显示为所选选项。

答案 3 :(得分:0)

GETPOST(取决于您的表单method)获取国家/地区的提交值,并在foreach循环

中进行比较
$countryId = isset($_POST['country']) ? $_POST['country'] : ''; //or $_GET['country'];
foreach($dirs as $p => $w):
    $selected = $countryId==$w ? 'selected' : '';
        echo '<option value="'.$w.'" '.$selected.'>'.$w.'</option>';
    endforeach;

假设您的表单action位于同一页面上,如果不同,请将国家/地区值存储在session中,并从此页面中的session检索

答案 4 :(得分:0)

  

Blockquote您需要将select元素放在表单中。否则它将不会提交

问题解决了,脚本现在有效,非常感谢!