0

以下のテキストボックスを使用してタグを追加しています。

ここに画像の説明を入力

任意のタグ(ここでは「Java」と入力)を入力してEnterキーを押すと、jqueryのtagit()が呼び出されます。

$(function () {

  var availableTagname = [<?=$testTagname?>];

  $('#demo4').tagit({tagSource:availableTagname, sortable:true, tagsChanged:function (a) {
      Counttagname(a);
  } });

「a」はテキストボックスの値です。a = Java ここ。次に Counttagname() が呼び出されます。

function Counttagname(value)
{    
 if(value!="")
    {  
        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 (xmlhttp.readyState==4 && xmlhttp.status==200)
            {                            document.getElementById("divcounttagname").innerHTML="";
                      document.getElementById("divcounttagname").innerHTML=xmlhttp.responseText;
            }
        }
 //         alert(value);
        xmlhttp.open("GET","<?=base_url()?>index.php/admins/joborders/bindcounttagname/"+value,true);
        xmlhttp.send();
    }
    else
    {
        document.getElementById("divcounttagname").innerHTML='';
        document.getElementById("divcounttagname").innerHTML='<div>There are no Candidate</div>';
    }

}

その値 (つまり 'java') は "xmlhttp.open("GET","index.php/admins/joborders/bindcounttagname/"+value,true);" で渡されます。

これで、controllder で bindcounttagname() が呼び出されます。

function bindcounttagname($value)
{   

    $this->load->model('mjoborders');
    $data['counttagname'] = $counttagname = $this->mjoborders-    >Getcounttagname($value);

次に、モデルで Getcounttagname() が呼び出されます。

function Getcounttagname($value)
{   
    $data = array();    
    $Q = $this->db->select('*,count(candidateid) as countcandidate FROM tbl_candidatetag where tagname = "'.$value.'"');
    $Q = $this->db->get();

    if ($Q->num_rows() > 0)
    {
        foreach ($Q->result_array() as $row)
        {   

            $data[] = $row;             
        }
    }       
    $Q->free_result();          
    return $data; 
}

タグは上記のクエリでパラメータとして渡されます。

しかし、2番目のタグを入力すると、そのタグは以前のタグ、つまり IN ('java','css3'); を使用してクエリにも渡される必要があります。

ただし、パラメーターとして複数の値を取ることはありません。

以下のリンクのようなクエリでより多くのタグを渡すために配列を使用しようとしましたが、クエリは行をフェッチしません..1.「WHERE句を使用して配列をクエリに渡す」2.クエリでも静的な2つの値を渡しましたが、行をフェッチしません。

クエリで複数のタグをパラメータとして渡す方法を教えてください。

4

2 に答える 2

0

参照されている回答は機能するはずですが、文字列内の各要素を引用符で囲んでいることを確認する必要があります。この例は数値に対しては機能しますが、値を引用符で囲まないと、クエリは文字列リテラルではなく変数を参照していると見なします。したがって、使用する代わりに、他の質問から:

$value = join(',',$value); 

あなたが使いたい

$value = "'" . implode("','", $value) . "'";

だからあなたの機能は

 function Getcounttagname($value)
{
    $value = "'" . implode("','", $value) . "'";

    $data = array();    
    $Q = $this->db->select('*,count(candidateid) as countcandidate FROM tbl_candidatetag where tagname = "'.$value.'"');
    $Q = $this->db->get();

    if ($Q->num_rows() > 0)
    {
        foreach ($Q->result_array() as $row)
        {   

            $data[] = $row;             
        }
    }       
    $Q->free_result();          
    return $data; 
}

また、jQuery .ajax 関数を使用することで、その ajax コードをはるかに簡単にすることもできます。これは、すでに jQuery を半分しか利用していないためです。

http://api.jquery.com/jQuery.ajax/

于 2013-09-01T19:53:30.873 に答える