0

PHP、MySQL、および JavaScript を使用するルーチンがあります。次のように、tbl_category と tbl_subcategory の 2 つのテーブルがあります。

tbl_category

  1. cat_id
  2. 猫の名前

tbl_subcategory

  1. scat_id
  2. cat_parent_id
  3. 猫の名前

彼らは内部にいくつかの情報を持っています

tbl_category:

  1. パンツ
  2. Tシャツ

tbl_subcategory:

  1. 1 ジーンズ
  2. 1 ヘビーデューティー
  3. 2 ブーツ
  4. 2 サンダル
  5. 3 長袖
  6. 3 半袖
  7. 3 ポロ

ファイルの先頭に、javascript ライブラリへのリンクを追加しました。

<script type="text/javascript" src="jquery-1.8.2.min.js"></script>

もちろん、以前にjquery Webサイト(新しいバージョン)からダウンロードしました。

私は今、スクリプトルーチンを持っています:

<script type="text/javascript">

  $(document).ready(function(){
     $("select[name=cat_id").change(function(){
        $("select[name=scat_id]").html('<option value="">Loading...</option>');
        $.post("ajax_subcategory.php",
              {cat_id:$(this).val()},
              function(valor){
                 $("select[name=scat_id]").html(valor);
              }
              )
     })
  })

これで、テーブル tbl_category からのデータが事前にロードされた選択フィールド Category を持つフォームができました。

<form name="form" method="post" action="" enctype="multipart/form-data">
<table width="100%" border="0" cellspacing="6" cellpadding="0">
<tr>
   <td align="right">Category:</td>
   <td><select name="cat_id" >
          <option value="0">Choose category</option>
    <?php
             $sql1 =mysql_query("SELECT * FROM tbl_category ORDER by cat_name")or die(mysql_error());
            while($row = mysql_fetch_array($sql1))
            {
               echo ("<option value=\"$row[cat_id]\"" . ($sql1 == $row["cat_name"] ? " selected" : "") . ">$row[cat_name]</option>");  
            }
          ?></select> 
   </td>
</tr>
<tr>
   <td align="right">Sub-category:</td>
   <td><select name="scat_id" selected="selected" >
       <option value="0">Waiting category...</option>
       </select> 
   </td>
 </tr>
 </table>
 <input type="submit" name="submit" value="Submit"/>
 </form>

そして、ajax_subcategory という名前の php ファイル:

<?php

include "../connect_to_mysql.php";

$cat_id = $_POST['cat_id'];

$sql1 =mysql_query("SELECT * FROM tbl_subcategory WHERE cat_parent_id='$cat_id' ORDER by cat_name")or die(mysql_error());
while($row = mysql_fetch_array($sql1))
 {
    echo ("<option value=\"$row[scat_id]\"" . ($sql1 == $row["scat_name"] ? " selected" : "") . ">$row[scat_name]</option>");  
 }
 ?>

終わり!すべてが完璧で美しく見えます。最初のコンボで項目を選択すると、Javascript が動作し、Loading... が表示されますが、2 番目の ComboBox は常に空です。どの項目を選択しても、空で表示されて小さくなります (幅) .

これは良いルーチンであり、別の Web サイトから Web で作業しているのを見ました。

解決策を見つけるのを手伝ってもらえますか?

ありがとう

4

2 に答える 2

0

まず、データを分析するには、段階的なトラブルシューティングに従う必要があります。あなたの場合、これは私がすることです:

  1. 投稿する前に cat_id を調べます。

    $("select[name=cat_id").change(function(){
         alert($(this).val());
    
  2. mysql_query (ajax_subcategory ページ) 内の文字列をそのまま出力し、クエリが有効かどうかを調べます。このクエリを MySQL コンソールまたは phpMyAdmin で直接試して、その出力を調べてください。

  3. ajax 応答を分析する: FireBug または Chrome の [ネットワーク] タブを使用して、Ajax 応答を確認します。場合によっては、ajax_subcategory ページによって PHP の警告または通知が生成されることがあります。

注: 条件 $sql1 == $row["cat_name"] をチェックする理由がわかりません。$sql1 はリソース ID になり、クエリによると、 $row['cat_name'] はサブカテゴリ名を表す文字列です。

余談ですが、mysql_* 関数は非推奨であり、その使用は強く推奨されていません。mysqli_* 関数または PDO を使用します。

于 2012-11-06T05:42:58.863 に答える
0

に変更$row["scat_name"] して ください$row["cat_name"]

<?php

    include "../connect_to_mysql.php";

    $cat_id = $_POST['cat_id'];

    $sql1 =mysql_query("SELECT * FROM tbl_subcategory WHERE cat_parent_id='$cat_id' ORDER by cat_name")or die(mysql_error());
    while($row = mysql_fetch_array($sql1))
     {
        echo ("<option value=\"$row[scat_id]\"" . ($sql1 == $row["cat_name"] ? " selected" : "") . ">$row[cat_name]</option>");  
     }
     ?>
于 2012-11-06T06:25:44.373 に答える