0

我在将从动态下拉列表中选择的变量传递给 PHP 文件时遇到问题。我希望 PHP 选择 db 表中与变量匹配的所有行。这是到目前为止的代码:

选择.php


<html>
<head>
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
   <script type="text/javascript">
    $(document).ready(function(){
        $("select#type").attr("disabled","disabled");
        $("select#category").change(function(){
        $("select#type").attr("disabled","disabled");
        $("select#type").html("<option>wait...</option>");            var id = $("select#category option:selected").attr('value');
        $.post("select_type.php", {id:id}, function(data){
            $("select#type").removeAttr("disabled");
            $("select#type").html(data);
        });
    });
    $("form#select_form").submit(function(){
        var cat = $("select#category option:selected").attr('value');
        var type = $("select#type option:selected").attr('value');

        if(cat>0 && type>0)
        {
            var result = $("select#type option:selected").html();
            $("#result").html('your choice: '+result);

            $.ajax({
            type: 'POST',
            url: 'display.php',
            data: {'result': myval},
            });



        }
        else
        {
            $("#result").html("you must choose two options!");
        }
        return false;
    });
});
</script>
</head>
<body>
    <?php include "select.class.php"; ?>
    <form id="select_form">
        Choose a category:<br />
        <select id="category">
            <?php echo $opt->ShowCategory(); ?>
        </select>
    <br /><br />
    Choose a type:<br />
    <select id="type">
         <option value="0">choose...</option>
    </select>
    <br /><br />
    <input type="submit" value="confirm" />
    </form>
    <div id="result"></div>
    <?php include "display.php"; ?>

    <div id="result2"></div>         
</body>
</html>

这是我希望将变量传递给的 display.php。该文件将从数据库中选择标准,然后在 select.php 中打印结果。

<?php


class DisplayResults
{
protected $conn;

    public function __construct()
    {
        $this->DbConnect();
    }

    protected function DbConnect()
    {
        include "db_config.php";
        $this->conn = mysql_connect($host,$user,$password) OR die("Unable to connect to the database");
        mysql_select_db($db,$this->conn) OR die("can not select the database $db");
        return TRUE;
    }

    public function ShowResults()

    {

        $myval = $_POST['result'];
        $sql = "SELECT * FROM specialities WHERE 'myval'=sp_name";
        $res = mysql_query($sql,$this->conn);
           echo "<table border='1'>";
           echo "<tr><th>id</th><th>Code</th></tr>";
        while($row = mysql_fetch_array($res))
        {

            while($row = mysql_fetch_array($result)){
            echo "<tr><td>";
            echo $row['sp_name'];
            echo "</td><td>";
            echo $row['sp_code'];
            echo "</td></tr>";
        }
            echo "</table>";
        //} 
        }
        return $category;
    }

}

$res = new DisplayResults();
?>

我真的很感激任何帮助。如果我可以提供更多详细信息,请告诉我。

db图链接:http: //imgur.com/YZ0SuVw

第一个下拉列表来自专业表,第二个来自专业表。我想做的是显示工作表中与下拉框中选择的专业匹配的所有行。这将需要将下拉列表中的变量(结果)的结果转换为作业表中的 spec_code。不确定如何执行此操作。谢谢!

4

1 回答 1

0

好吧,不可能正确回答您的问题,因为我们不知道您的 SQL 查询中要使用的是类别字段还是类型字段。

下面是一些概念代码,它应该为您指明正确的方向。

但首先,一些评论..

HTML/JS

  1. 当您在提交时检查catandtype变量是否“大于 0”时,您应该首先将值解析为整数,因为默认情况下 post 值作为文本发送。
  2. 您的myval价值无法破译,请说明您的意图。
  3. 为了进一步参考,您重复的 jQuery 查询 like$("select#type")可以存储在变量 like 中var $type = $("select#type"),然后被引用 like $type.attr('disabled', 'disabled')。我不是 100% 确定 jQuery 如何缓存结果,但理论上它应该需要更少的 jQuery 处理,它也减少了重复代码

PHP

  1. 检查是否使用isset()!empty()在使用这些值之前设置了超变量索引,否则将显示警告(或通知,无法调用)。所以而不是$myvar = $_POST['myfield']$myvar = isset( $_POST['myfield'] ) ? $_POST['myfield'] : "";
  2. 确保在使用 SQL 查询之前对值进行转义或强制转换/清理。对于 MySQL 库,您将使用mysql_real_escape_string()函数。
  3. mysql库已被弃用并且容易被黑客攻击。强烈建议使用较新的mysqli库。
  4. 同样,不知道该sp_name列是用于类别还是类型字段。我已经包括了两者。
  5. 尽管将值放在您的 where 表达式(列名之前)中很奇怪,但它违反了正常做法,不推荐使用。而不是'myval'=sp_namesp_name='myval'
  6. 修复了你的循环showResults()
  7. showResults()您从未在display.php中调用过该方法。另请注意,它返回一个值,因此我们还必须将其打印到屏幕上。

HTML/JS

<html>
<head>
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
   <script type="text/javascript">
    $(document).ready(function(){
        $("select#type").attr("disabled","disabled");
        $("select#category").change(function(){
        $("select#type").attr("disabled","disabled");
        $("select#type").html("<option>wait...</option>");            var id = $("select#category option:selected").attr('value');
        $.post("select_type.php", {id:id}, function(data){
            $("select#type").removeAttr("disabled");
            $("select#type").html(data);
        });
    });
    $("form#select_form").submit(function(){
        // Fetch values and parse them to integers
        var cat = parseInt( $("#category").val(), 10 );
        var type = parseInt( $("#type").val(), 10 );

        if(cat>0 && type>0)
        {
            $("#result").html('your choice: '+type);

                        // Prepare data
                        var data = {
                            category: cat,
                            type: type
                        }

            $.ajax({
                            type: 'POST',
                            url: 'display.php',
                            data: data
            });

        }
        else
        {
            $("#result").html("you must choose two options!");
        }
        return false;
    });
});
</script>
</head>
<body>
    <?php include "select.class.php"; ?>
    <form id="select_form" action="">
        Choose a category:<br />
        <select id="category">
            <?php echo $opt->ShowCategory(); ?>
        </select>
    <br /><br />
    Choose a type:<br />
    <select id="type">
         <option value="0">choose...</option>
    </select>
    <br /><br />
    <input type="submit" value="confirm" />
    </form>
    <div id="result"></div>
    <?php include "display.php"; ?>

    <div id="result2"></div>         
</body>
</html>

显示.php

<?php


class DisplayResults
{
protected $conn;

    public function __construct()
    {
        $this->DbConnect();
    }

    protected function DbConnect()
    {
        include "db_config.php";
        $this->conn = mysql_connect($host,$user,$password) OR die("Unable to connect to the database");
        mysql_select_db($db,$this->conn) OR die("can not select the database $db");
        return TRUE;
    }

    public function ShowResults()

    {   
        // Fetch values from POST and escape/cast the values to prevent SQL injection
        $category = (int) ( isset( $_POST['category'] ) ? $_POST['category'] : 0 );
        $type = (int) ( isset( $_POST['type'] ) ? $_POST['type'] : 0 );

        // Use the values in your SQL query 
        // 
        // PLEASE CHANGE THE COLUMN NAMES TO MATCH YOUR SOLUTION
        //==================
        $sql = "SELECT * FROM specialities WHERE category='". $category ."' and type='". $type ."' ";


        $res = mysql_query($sql,$this->conn);
           echo "<table border='1'>";
           echo "<tr><th>id</th><th>Code</th></tr>";
        while($row = mysql_fetch_array($res))
        {
            echo "<tr><td>";
            echo $row['sp_name'];
            echo "</td><td>";
            echo $row['sp_code'];
            echo "</td></tr>";
        //} 
        }
                echo "</table>";
        return $category;
    }

}

$res = new DisplayResults();

// Get and print results
echo $res->showResults();
?>
于 2013-03-03T18:35:01.660 回答