我正在使用下面的文本框添加标签。
当我输入任何标签(在这里说'Java')然后按回车键时,会调用jquery的tagit()。
$(function () {
var availableTagname = [<?=$testTagname?>];
$('#demo4').tagit({tagSource:availableTagname, sortable:true, tagsChanged:function (a) {
Counttagname(a);
} });
'a'是文本框的值。 a = java here。然后调用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.“Passing an array to a query using a WHERE clause” 2.在查询中也传递了静态的两个值,但它没有获取任何行。
请告诉我如何在查询中传递多个标记作为参数。
答案 0 :(得分: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')
,这样所有这些标记都将包含在结果集中。
答案 1 :(得分: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了。