【问题标题】:How do I make my drop down select menu persistently show the same data after a query is done using the menu?使用菜单完成查询后,如何使下拉选择菜单持续显示相同的数据?
【发布时间】:2015-10-30 22:42:23
【问题描述】:

所以我遇到了下拉选择框的问题。我正在做的是让某人登录数据库,然后数据库显示选择框中的所有可用表。然后,用户可以选择他们希望查看的表格,点击选择然后砰!有表信息。

但是,我在选择框中的数据在点击选择后仍然存在问题。出于某种原因,它只是让它空了。我正在使用会话变量,也许这会影响它?我现在才刚刚开始学习它是如何工作的。看看让我知道你的想法:

<?php
session_start();

if(!isset($_SESSION['session_level'])):
    $_SESSION['session_level'] = 0; ?>
<? endif ?>
<?php
if(isset($_POST['host'])):
    $_SESSION['host'] = $_POST['host'];
    $_SESSION['dbname'] = $_POST['dbname'];
    $_SESSION['username'] = $_POST['username'];
    $_SESSION['pw'] = $_POST['pw'];
?>
<?php endif ?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8' />
        <title>Login Test</title>
    </head>

    <body>

        <?  
        if (isset($_POST['return']))
        {
            $_SESSION['session_level'] = 0;
        }
        else if (isset($_POST['submit']))
        {   
            try
                {
                    $db = new PDO("mysql:host=".$_POST['host'].";dbname=".$_POST['dbname'], $_POST['username'], $_POST['pw']);  

                }
            catch(Exception $error)
                {
                $_SESSION['session_level'] = 0;?>
                    <a href='<?= $_SERVER['PHP_SELF'] ?>'>Click here to return.</a> 
                    <? echo "\n"; ?>
                <?die("Connection to user database failed: " . $error->getMessage());

                }
            try
                {
                $db->setAttribute(PDO::ATTR_ERRMODE, PDO:: ERRMODE_EXCEPTION);
                $query = "SHOW TABLES";
                $results = $db->query($query)->fetchAll();
                $_SESSION['session_level'] = 1;
                }
            catch(Exception $error)
                {
                    echo "Problem with query!";
                    $_SESSION['session_level'] = 0;?>
                <a href='<?= $_SERVER['PHP_SELF'] ?>'>Click here to return.</a> 
            <?  }
        }
        ?>
        <?php if($_SESSION['session_level'] == 0){?>
        <h1>Database Practice</h1>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name='initialentry'>
            <table border='0' style='text-align: center'>
                <tr>
                    <td style='text-align: right;'>Enter host name:</td>
                    <td style='text-align: left;'>
                    <input type='text' name='host' value='localhost'>
                    </td>
                </tr>
                <tr>
                    <td style='text-align: right;'>Enter database name:</td>
                    <td style='text-align: left;'>
                    <input type='text' name='dbname' value='zxyx999'>
                    </td>
                </tr>
                <tr>
                    <td style='text-align: right;'>Enter user name:</td>
                    <td style='text-align: left;'>
                    <input type='text' name='username' value='zxyx999'>
                    </td>
                </tr>
                <tr>
                    <td style='text-align: right;'>Enter password:</td>
                    <td style='text-align: left;'>
                    <input type='password' name='pw' width='15' value='12345'>
                    </td>
                </tr>
                <tr>
                    <td style='text-align: right;'><input type="reset" name="reset" value="Reset"></td>
                    <td style='text-align: left;'><input type="submit" name="submit" value="Submit"></td>
                </tr>
            </table>
        </form>
<?php }


else if ($_SESSION['session_level'] == 1)
{
    ?>

        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name='getForm'>
            <select name='select'>
                <? foreach($results as $row)
                    echo "<option value=" . $row[0] .">" .$row[0]. "</option>"; ?> 
            </select>
            <input type="submit" name="selected" value="Select">
            <input type="submit" name="return" value="Return to Main Screen">           
        </form>
    <?php   


    if(isset($_POST['selected']))
    {
        try
        {
            $db = new PDO("mysql:host=".$_SESSION['host'].";dbname=".$_SESSION['dbname'], $_SESSION['username'], $_SESSION['pw']);
        }
        catch(Exception $error)
        {
            die("Connection to user database failed: " . $error->getMessage());
        }

        try
        {
            $query = $db->prepare("SELECT * FROM " . $_POST['select']);
            $query->execute();
            $header = true;
        }
        catch(Exception $error)
        {
            echo "Query failed.";
        }
        echo "</br>";

        ?>

        <?php

        echo "<table border='1'>";

        while ($row = $query->fetch(PDO::FETCH_ASSOC))
        {
            echo "<tr>";
            if($header == 'true')
            {
                foreach($row as $index => $fieldValue)
                {
                    echo "<td>";
                    echo $index;
                    echo"</td>";
                }
            echo "</tr>";
            $header = 'false';  
            }

            echo "<tr>";
            foreach($row as $index => $fieldValue)
            {
                echo "<td>";
                echo $fieldValue;
                echo "</td>";
            }
            echo "</tr>";
        }

        echo "</table>";

    }
}

        ?>

</body>
</html>

【问题讨论】:

    标签: php html mysql pdo


    【解决方案1】:

    如果我很了解您的问题,那么我的建议是更改您的表格并这样做:

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name='getForm'>
            <input type="hidden" name="selected" value="true">
            <select name='select'>
                <? foreach($results as $row)
                    echo "<option value=" . $row[0] .">" .$row[0]. "</option>"; ?> 
            </select>
            <input type="submit" value="Select">
    </form>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name='getForm'>
            <input type="hidden" name="return" value="true">
            <input type="submit" value="Return to Main Screen">
    </form>
    

    这意味着您必须创建 2 个表单而不是 1 个表单,因为 submit 按钮上的 name 值在所有浏览器上的解释方式不同。因此,通过删除并用输入类型 hidden 替换它,它将确保该字段在提交表单后存在。

    【讨论】:

    • 点击提交并输出表格后下拉菜单仍为空白:/
    • 下拉你的意思是&lt;select name="select"&gt;?此外,“空白”是指内部没有选项或没有“预选”选项?
    • 没错。没有选择任何东西的能力。这让我觉得 SHOW TABLES 查询没有被重新激活。但我不知道为什么。
    • 表示有错误。但它显示在您的选择中。如果您的浏览器上有firebug 插件,请检查您的选择。它会揭示你的错误。如果你还没有firebug,我强烈建议你安装它;)
    • 哦,这太花哨了。所以,我跑了firebug 并检查了脚本区域。它说Access to restricted URI denied.。这是正确的部分吗?如果是,这个错误对您有意义吗?
    【解决方案2】:

    当您重新填充选择列表时,如果选择的选项与正在填充的选项匹配,那么您可以将那段代码设为&lt;option selected value=",该选项现在将成为默认的选定项。

    我意识到下面的代码不是 PHP,我的意思是它应该是一个简单的 If 语句,在选项中包含 selected 标记。

    /*
    
    Adding the "selected" tag to an option, makes it the default.
    
    */
    <select>
        <option value="" style="display:none;">Select a Value</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select>
    <br /><br />
    <select>
        <option value="" style="display:none;">Select a Value</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3" selected>3</option>
        <option value="4">4</option>
    </select>

    【讨论】:

    • 我添加了,但是显示表格后它仍然没有显示任何内容。
    • 我想确保我理解正确。有一个用户登录的表单。一旦过去,就会出现另一个带有选择框的表单,允许用户选择一个选项。选择后,用户提交该表单。然后页面重新加载并显示请求的信息,您希望选择框仍然是用户选择的内容。
    • 我希望它仍然是用户选择的内容,并且我希望他们也能够选择其他选项。
    • 正是...所以您将使用已有的代码循环遍历所有选项,并添加 if 语句的代码“如果循环中的当前选项匹配最初选择的选项,然后将标签“选定”添加到选项中。”
    • 我知道这不是您想要的,但就个人而言,我会使用 jQuery 和 AJAX 来访问数据。这样数据将被更新,但页面永远不必刷新。您仍然可以使用 PHP 获取数据并将数据发送到您的数据库,但 AJAX 将能够即时发出这些请求。
    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    相关资源
    最近更新 更多