【问题标题】:Second drop down list based off of first drop down list using one php file第二个下拉列表基于使用一个 php 文件的第一个下拉列表
【发布时间】:2013-03-21 19:52:38
【问题描述】:

好的,我完成了第一个成功的 SQL 查询,在 PHP 中生成了一个下拉框! (是的,我还是个大菜鸟)

所以我的下一个问题....

如果我点击选择按钮,我必须创建一个新页面还是可以根据提交的第一个列表在同一页面上生成第二个下拉框?

我看到了这个:response to similar question

但我仍然不确定表单动作和方法。保持自我?我需要/应该使用 2 个单独的表格吗? (我还没有准备好处理 AJAX 并且还没有准备好处理 Java,所以请不要考虑这些选项 :))或者我应该只是传递到第二个文件。

如果可以的话,能否解释一下每个表单使用的表单动作和方法?

【问题讨论】:

    标签: php mysql forms


    【解决方案1】:

    如果您还没有准备好使用 AJAX 或 Javascript,那么您需要添加第二个 PHP 页面,该页面将处理用户从第一个下拉框中的选择并显示相应的第二个下拉列表。

    如果您不熟悉这一切,那么我建议您一开始就保持简单!提交表单并显示新页面是最基本的方式。

    因此,在您的第一页 HTML 中,您需要...

    <form action="second_page.php" method="post">
    <select name="selection"> ... your drop-down code goes here ... </select>
    <button type="submit">Next</button>
    </form>
    

    然后在 second_page.php 中你需要...

    $selection = $_POST['selection']; // The variable $selection holds the user's selection
    

    然后您可以根据 $selection 的值输出第二个页面。

    【讨论】:

    • 到目前为止还不错,但我不知道;认为我传递了正确的变量:'code' $wquery="select week_num,week_name from stats_week where season=$this_season order by week_num"; $wresult=mysql_query($wquery); print "选择周:”;打印'';打印""; '代码'
    • 这是您需要在第二个脚本中检查的&lt;select name=="Week_select"&gt;。请注意,这是区分大小写的!最好全部小写,然后在你的第二个脚本中:$week_select = $_POST['week_select'];
    • 你把&lt;form&gt;的开头部分也放在那里了吗?你应该在你的&lt;select&gt;之前有print '&lt;form action="name_of_second_script.php" method="post"&gt;';
    • 如果您想查看第一页发送到第二页的内容,请将其放在第二页代码的开头:echo"&lt;PRE&gt;";print_r($_POST);die(); 这样您就可以确保它实际上发送了应有的内容!
    【解决方案2】:

    我更喜欢通过 Ajax 和 JQuery 来做,像这样:

    function getClassList(elem)
    {
        var contentRequests, contentarr;  // The variable that makes Ajax possible!
        try
        {
    // Opera 8.0+, Firefox, Safari
            contentRequests = new XMLHttpRequest();
        } 
        catch (e)
        {
    // Internet Explorer Browsers
            try
            {
                contentRequests = new ActiveXObject("Msxml2.XMLHTTP");
            } 
            catch (e) 
            {
                try
                {
                    contentRequests = new ActiveXObject("Microsoft.XMLHTTP");
                } 
                catch (e)
                {
    // Something went wrong
                    alert("Your browser broke!");
                    return false;
                }
            }
        }
    // Create a function that will receive data sent from the server
            contentRequests.onreadystatechange = function()
            {
                if(contentRequests.readyState == 4&& contentRequests.status==200)
                {
    
    
                    document.getElementById(elem).innerHTML = contentRequests.responseText;
    
                }
            }
    
            var urltofetch="index.php?methodname=getclasses"
    
            contentRequests.open("GET", urltofetch, true);
            contentRequests.send(null);
    
    
    }
    
    
    function getStudentList(classelem,elem)
    {
    
       var classToFetch =  classelem + " option:selected";
    
       var contentRequests, contentarr;  // The variable that makes Ajax possible!
        try
        {
    // Opera 8.0+, Firefox, Safari
            contentRequests = new XMLHttpRequest();
        } 
        catch (e)
        {
    // Internet Explorer Browsers
            try
            {
                contentRequests = new ActiveXObject("Msxml2.XMLHTTP");
            } 
            catch (e) 
            {
                try
                {
                    contentRequests = new ActiveXObject("Microsoft.XMLHTTP");
                } 
                catch (e)
                {
    // Something went wrong
                    alert("Your browser broke!");
                    return false;
                }
            }
        }
    // Create a function that will receive data sent from the server
            contentRequests.onreadystatechange = function()
            {
                if(contentRequests.readyState == 4&& contentRequests.status==200)
                {
    
    
                    document.getElementById(elem).innerHTML = contentRequests.responseText;
    
                }
            }
            var classname = $(classToFetch).text();
            alert(classname);
            var urltofetch="index.php?methodname=getstudents&cname="+classname
    
            contentRequests.open("GET", urltofetch, true);
            contentRequests.send(null);
    
    }
    

    【讨论】:

    • 看起来更像 Ajax/Javascript,而不是 Ajax/JQuery。
    • 谢谢,但由于我刚刚开始弄湿我的脚,我想我会坚持将它完全保留在 php 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2014-11-16
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多