0

我正在使用下面的文本框来添加标签。

在此处输入图像描述

当我输入任何标签(在这里说'Java')然后按回车键时,会调用 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; 
}

标记在上述查询中作为参数传递。

但是,当我输入第二个标签时,该标签也应该在查询中传递更早的标签,即 IN ('java','css3');

但它不会将多个值作为参数。

我尝试使用数组在如下链接的查询中传递更多标签,但查询不获取任何行.. 1.“使用 WHERE 子句将数组传递给查询”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 回答
0

如果可以将多个参数传递给 Getcounttagname,我会像这样重写它:

function Getcounttagname($value1, $value2, ...)
{   
    $values = func_get_args();
    $val_str = implode("', '", $values);
    $data = array();    
    $Q = $this->db->select("*,count(candidateid) as countcandidate FROM tbl_candidatetag where tagname IN('".$val_str."'");
    $Q = $this->db->get();

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

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

我正在做的是将所有参数放入一个如下所示的字符串中:'a', 'b', 'c'并使用它们构建 sql 查询。所以最终的查询看起来像select * from tbl_candidatetag where tagname IN('a', 'b', 'c')这样,所有这些标签都将包含在结果集中。

于 2013-08-31T10:18:21.973 回答