2016-10-13 4 views
0

私はJavascript、PHP、MySqlを一緒に使用していくつかの結果を得ようとしています。私はそれについて何かしたことがあるが、期待通りにはうまくいかない。私を助ける誰かがいることを願っています。Javascriptのmysqlクエリ

私は基本的にcatID、catName、catDesc、およびcatParを含むカテゴリテーブルを作成しました。

この場合、主要なカテゴリとサブカテゴリもいくつか作成しています。メインカテゴリーにはcatPar値はありませんが、カテゴリーがサブカテゴリーの場合は、メインカテゴリーIDが親カテゴリーとして取得されます。

私は主なカテゴリを選択リストとして持って来て、別のクエリとjavascriptを使ってサブカテゴリを持ってきましたが、期待通りに機能しません(作成していません別の選択リスト、上書きするだけです)、最終的には解決策が見つかりませんでした。

私はクエリを実行し、サブカテゴリがある場合はすべて正常ですが、それ以上サブカテゴリがない場合、選択リストは消えており、最終カテゴリは選択できません。

値を(別のサブカテゴリが含まれていない場合)安定した選択オプションに入れることができるようにしたいと考えています。finalという名前を付けて、再びメインカテゴリから開始します。

次に、それらを複数のデータベースに送信します。

追加:サブカテゴリがあれば名前の直前のカテゴリにいくつかの特定の文字を挿入しようとしましたが、できませんでした。

これは私のindex.php

<script> 
function subs(str) { 
    if (str == "") { 
     return; 
    } else { 
     if (window.XMLHttpRequest) { 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp = new XMLHttpRequest(); 
     } else { 
      // code for IE6, IE5 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = function() { 
      if (this.readyState == 4 && this.status == 200) { 
       document.getElementById("result").innerHTML = this.responseText; 
      } 
     }; 
     xmlhttp.open("GET","select_sub.php?q="+str,true); 
     xmlhttp.send(); 
    } 
} 
</script> 
<?php 
$con = mysqli_connect('localhost','root','','test'); 
if (!$con) { 
    die('Could not connect: ' . mysqli_error($con)); 
} 
?> 
<form method="post" enctype="multipart/form-data"> 
    <fieldset> 
     <legend>Add New Category</legend> 
      <label for="category_name">Category Name</label> 
       <input class="input250" type="text" name="category_name" value="" > 
      <label for="category_description">Category Description</label> 
       <input class="input350" type="text" name="category_description" value="" > 
        <?php 
        $select_mains="SELECT * FROM categoriestable WHERE catPar IS NULL"; 
        $bring_mains = mysqli_query($con,$select_mains); 
         if(mysqli_num_rows($bring_mains)>0){ 
        ?> 
        <label for="category_main">Main Category</label> 
         <select name="main_category" onchange="subs(this.value)"> 
          <option value="0">Select a category</option> 
          <?php 
           while($main_categories = mysqli_fetch_array($bring_mains)) { 
            echo "<option value='".$main_categories['catID']."'>".$main_categories['catName']."</option>"; 
           } 
          ?> 
         </select> 
        <?php } else {} 
        ?> 
      <div id="result"></div> 
      <select multiple="true" name="final" id="final"> 
       <option name="sub_category" id="cat" value="0" >Test</option> 
      </select> 
      <input type="submit" value="Add category"> 
    </fieldset> 
</form> 

であり、これはある私のselect_sub.php

<?php 
$q = intval($_GET['q']); 
$con = mysqli_connect('localhost','root','','test'); 
if (!$con) { 
    die('Could not connect: ' . mysqli_error($con)); 
} 
$selected_main_category="SELECT * FROM categoriestable WHERE catPar = '".$q."'"; 
?> 
<?php 
    $has_sub_cat = mysqli_query($con,$selected_main_category); 
    if(mysqli_num_rows($has_sub_cat)>0){ 
?> 
<select id="sub_category" name="sub_category" onchange="subs(this.value)"> 
    <option name="sub_category" id="cat" value="0">Select a sub category</option> 
    <?php while($add_to_list = mysqli_fetch_array($has_sub_cat)) { 
      echo "<option value='".$add_to_list['catID']."'>".$add_to_list['catName']."</option>"; 
    } ?> 
</select> 
<?php } else { ?> 
<?php } ?> 

あなたは以下のデータベーステーブルのサンプル構造を見ることができます。 Sample database table

ありがとうございます。

+0

''"。$ q。 "'' aaaaaaaaaaaaaaaaaaaaaaAAAAAAAAAA – Isaac

+0

@Isaacで何を理解する必要がありますか? –

+1

@EfealBAYRAK投稿したコードが非常に脆弱であるため、https://en.wikipedia.org/wiki/SQL_injectionを読んでください。サイトのデータが侵害される可能性があります。 – ceejayoz

答えて

0

問題はAJAX呼び出しがサブカテゴリが他のサブカテゴリを持っていない何も返さないということである、例えば、空の選択リストを送信してみてください:あなたが追加したい場合は

<?php }else { ?> 
    <select id="sub_category" name="sub_category"> 
     <option name="sub_category" id="cat" value="0">No subcategory</option> 
    </select> 
<?php } ?> 

編集

選択した要素をマルチセレクトに追加すると、カテゴリを含む選択項目にクラスが追加され、次のようなjavascript関数が使用されます。

function addtoFinal(){ 
    var elements=document.getElementsByClassName("clazz"); 
    var opts=""; 
    for(var i=0;i<elements.length;i++){ 
    opts+="<option>"+elements[i].value+"</option>" 
    } 
    document.getElementById("final").innerHTML=opts; 
} 
+0

これは私に空の選択を与えていますが、実際には私が探しているものではありません。私が言及したように、安定したselect [final]オプションに最終結果を書く必要があります。ありがとう。 –