0

動的ドロップダウンから選択した変数を PHP ファイルに渡す際に問題が発生しています。PHP で、変数に一致する db テーブル内のすべての行を選択する必要があります。これまでのコードは次のとおりです。

select.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();
?>

助けていただければ幸いです。詳細を提供できる場合はお知らせください。

データベース図へのリンク: http://imgur.com/YZ0SuVw

最初のドロップダウンは職業テーブルから、2 番目は専門テーブルから取得します。私がやりたいことは、ドロップダウン ボックスで選択された専門分野に一致する、jobs テーブルのすべての行を表示することです。これには、ドロップダウンからの変数 (結果) からの結果を、ジョブ テーブルにある spec_code に変換する必要があります。これを行う方法が正確にはわかりません。ありがとう!

4

1 に答える 1

0

SQLクエリで使用されるのがカテゴリフィールドなのかタイプフィールドなのかがわからないため、質問に正しく答えることができません.

以下は、正しい方向を示すコンセプトコードです。

しかし、最初に、いくつかのコメント..

HTML/JS

  1. cat送信時におよびtype変数が「0 より大きい」ことを確認する場合は、デフォルトで投稿値がテキストとして送信されるため、最初に値を整数に解析する必要があります。
  2. myval値を解読することは不可能です。意図を指定してください。
  3. さらに参照するには、繰り返される jQuery クエリを like$("select#type")変数に格納してから、 like を参照することができvar $type = $("select#type")ます$type.attr('disabled', 'disabled')。jQuery が結果をキャッシュする方法は 100% わかりませんが、理論的には 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_nameする代わりにsp_name='myval'
  6. ループを修正しshowResults()ました。
  7. display.phpでメソッドshowResults()を呼び出したことはありません。また、値を返すため、画面にも出力する必要があることに注意してください。

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>

display.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 に答える