编辑于2月。 2015年11月11日-11h38
我花了几个小时寻找合适的解决方案而没有实现我的目标。我只想在我的WHERE IN请求中读取我的multiselect []和checkboxes []的选定值。 我已经尝试了几个小时不同的解决方案,但我仍然完全陷入困境。
感谢您的帮助
$secteur_searched="";
if (!empty($_REQUEST['secteur_searched']) AND is_array($_REQUEST['secteur_searched']))
{ foreach ($_REQUEST["secteur_searched"] as $selectedOption)
$secteur_searched.=$selectedOption.",";
}
if ($secteur_searched)
{ $secteur_searched = rtrim($secteur_searched, ',');
$where[] = "j.job_secteur IN (:job_secteur) " ;
$param[':job_secteur']= $secteur_searched;
var_dump($secteur_searched); // returns (1,2,3)
}
if (!empty($where))
{ $query.= ' WHERE ' . implode(' AND ', $where);
}
$query.= " ORDER BY j.job_date_insertion DESC";
$sth =$marInterim ->prepare($query);
$sth->execute($param);
$compte = $sth->fetchAll();
$nb_resultats = count($compte);
$errors['nb_resultats_recherche'] = $nb_resultats; // ok (for ajax)
/********************/
if ( !empty($_REQUEST['afficher_x_resultats']))
{ $per_page=$_REQUEST['afficher_x_resultats'];
}
else {$per_page=10; }
/* Results per page */
$nb_pages = ceil($nb_resultats/$per_page);
$current_page = isset($_REQUEST['page']) && ($_REQUEST['page'] > 0) && ($_REQUEST['page'] <= $nb_pages) ? $_REQUEST['page'] : 1;
$start = ($current_page-1)*$per_page;
$query2= $query." LIMIT $start,$per_page ";
$sth2 =$marInterim ->prepare($query2);
$sth2-> execute($param);
//print_r($sth2->errorInfo());
while($datos= $sth2->fetch(PDO::FETCH_ASSOC))
{ $en_date_insertion=$datos['job_date_insertion'];
$explode_insertion= explode("-", $en_date_insertion);
$date_insertion_fr = $explode_insertion[2]."-".$explode_insertion[1]."-".$explode_insertion[0];
$job_id= $datos['job_id'];
$job_intitule= strtoupper($datos['job_intitule']);
$job_ville = $datos['ville_nom'];
$job_cp = $datos['cp'];
echo 'hello';
echo "
<div class='offers btns'>
<a class='link_vers_offre' href='job_offer_detail.php?job_id=$job_id'>
<table id='table_liste_des_offres'>
<tr>
<td class='liste_intitule'> " .$job_intitule." </td>
<td class='liste_ref'>Offre n°" .$job_id." du ".$date_insertion_fr ." </td>
<td class='liste_ville'> ".$job_cp. " ".$job_ville." </td>
</tr>
</table>
</a>
</div>
";
}
答案 0 :(得分:0)
您没有提供您正在使用的HTML。因此,假设您必须遵循由多个选择,复选框列表和按钮组成的表单。
<form id="frm" name="frm" method="POST">
<select name="secteur_searched[]" id="secteur_searched" multiple="multiple">
<option value="secteur_searched_1" selected>secteur_searched_1</option>
<option value="secteur_searched_2">secteur_searched_2</option>
<option value="secteur_searched_3" selected>secteur_searched_3</option>
<option value="secteur_searched_4">secteur_searched_4</option>
</select>
<br/>
<input type="checkbox" name="type_de_contrat[]" value="type_de_contrat_1" checked="checked" />type_de_contrat_1
<input type="checkbox" name="type_de_contrat[]" value="type_de_contrat_2" checked="checked" />type_de_contrat_2
<input type="checkbox" name="type_de_contrat[]" value="type_de_contrat_3" />type_de_contrat_3
<input type="submit" value="POST VALUES" id="cmd" name="cmd"/>
</form>
如果您希望访问所有复选框/多重选择值posted
,则需要在对象的[]
属性中指定的值的末尾添加name
。如
<select name="secteur_searched[]"></select>
和
<input type="checkbox" name="type_de_contrat[]" />
以下是访问服务器端发布值的方法。
<强>复选强>
foreach ($_POST["secteur_searched"] as $selectedOption)
echo $selectedOption."<br/>";
<强>复选框强>
foreach ($_POST["type_de_contrat"] as $selectedCheckbox)
echo $selectedCheckbox."<br/>";
在发布表单时打印出值的完整代码
if (isset($_POST["cmd"]))
{
if (isset($_POST["secteur_searched"]))
{
foreach ($_POST["secteur_searched"] as $selectedOption)
echo $selectedOption."<br/>";
}
if (isset($_POST["type_de_contrat"]))
{
foreach ($_POST["type_de_contrat"] as $selectedCheckbox)
echo $selectedCheckbox."<br/>";
}
}
下一步是构造pdo
对象使用的参数。这是一个示例代码。
if (isset($_POST["cmd"]))
{
$secteur_searched=""; //$param[':job_secteur']
$type_de_contrat_searched=""; //$param[':type_de_contrat']
if (isset($_POST["secteur_searched"]))
{
foreach ($_POST["secteur_searched"] as $selectedOption)
$secteur_searched.=$selectedOption.",";
}
if (isset($_POST["type_de_contrat"]))
{
foreach ($_POST["type_de_contrat"] as $selectedCheckbox)
$type_de_contrat_searched.=$selectedCheckbox.",";
}
if ($secteur_searched)
$secteur_searched = rtrim($secteur_searched, ','); //get rid of the "," at the end
if ($type_de_contrat_searched)
$type_de_contrat_searched= rtrim($type_de_contrat_searched, ','); //get rid of the "," at the end
echo "type_de_contrat_searched:".$type_de_contrat_searched."<br/>secteur_searched:".$secteur_searched;
}
编辑1
我认为您遇到的问题是访问过帐的值。如果情况不是这样,请告诉我。
编辑2
我不确定你是否试过这个,所以无论如何我都会把它放下来。使用
检查参数绑定是否正确$sth2->debugDumpParams();
执行后
$sth2->execute($param);
编辑3
显然debugDumpParams
没有打印出参数的值。
尽管有文档,但此功能不会打印参数值 说它确实如此。见https://bugs.php.net/bug.php?id=52384(提交回来 2010)。
在manual页面中找到一个有用的功能,如下所示
function parms($string,$data) {
$indexed=$data==array_values($data);
foreach($data as $k=>$v) {
if(is_string($v)) $v="'$v'";
if($indexed) $string=preg_replace('/\?/',$v,$string,1);
else $string=str_replace(":$k",$v,$string);
}
return $string;
}
(也许你已经知道了)用它来显示像这样的准备好的SQL
print parms($query2,$param); //query,your parameter array
答案 1 :(得分:0)
你认为我的选择和复选框名称包含[]:
<select multiple="multiple" name="secteur_searched[]" size="8">
<option value="12">Informatique - Technologie de l'Information</option>
<option value="14">Logistique - Manutention - Transport</option>
// and so on ...
</select>
<input type="checkbox" name="type_de_contrat[]" value="CDI" >
<input type="checkbox" name="type_de_contrat[]" value="CDD" >
依旧......
当我尝试你的方法(谢谢你!),这似乎是正确的,我没有从数据库中得到任何回报。 (我填写的唯一输入是多选)。
$secteur_searched="";
if (!empty($_REQUEST['secteur_searched']) AND is_array($_REQUEST['secteur_searched']))
{ foreach ($_REQUEST["secteur_searched"] as $selectedOption)
$secteur_searched.=$selectedOption.",";
}
if ($secteur_searched)
{ $secteur_searched = rtrim($secteur_searched, ',');
$where[] = "j.job_secteur IN (:job_secteur) " ;
$param[':job_secteur']= $secteur_searched;
var_dump($secteur_searched); // returns (1,2,3)
}
if (!empty($where))
{ $query.= ' WHERE ' . implode(' AND ', $where);
}
$query.= " ORDER BY j.job_date_insertion DESC";
$sth =$marInterim ->prepare($query);
$sth->execute($param);
while($datos= $sth->fetch(PDO::FETCH_ASSOC))
{ $en_date_insertion=$datos['job_date_insertion'];
$explode_insertion= explode("-", $en_date_insertion);
$date_insertion_fr = $explode_insertion[2]."-".$explode_insertion[1]."-".$explode_insertion[0];
$job_id= $datos['job_id'];
$job_intitule= strtoupper($datos['job_intitule']);
$job_ville = $datos['ville_nom'];
$job_cp = $datos['cp'];
echo "
<div class='offers btns'>
<a class='link_vers_offre' href='job_offer_detail.php?job_id=$job_id'>
<table id='table_liste_des_offres'>
<tr>
<td class='liste_intitule'> " .$job_intitule." </td>
<td class='liste_ref'>Offre n°" .$job_id." du ".$date_insertion_fr ." </td>
<td class='liste_ville'> ".$job_cp. " ".$job_ville." </td>
</tr>
</table>
</a>
</div>
";
}
答案 2 :(得分:0)
此功能仅返回
SELECT * FROM marinterim_job_offers j JOIN marimmo_villes v ON v.ville_id = j.job_ville WHERE j.job_secteur IN(:job_secteur)ORDER BY j.job_date_insertion DESC LIMIT 0,10
function parms($query2,$param) {
$indexed=$param==array_values($param);
foreach($param as $k=>$v) {
if(is_string($v)) $v="'$v'";
if($indexed) $query2=preg_replace('/\?/',$v,$query2,1);
else $query2=str_replace(":$k",$v,$query2);
}
return $query2;
} print parms($query2,$param);
然后,$ sth2-&gt; debugDumpParams();
[186] SELECT - FROM marinterim_job_offers j JOIN marimmo_villes v ON v.ville_id = j.job_ville WHERE j.job_secteur IN(-job_secteur)ORDER BY j.job_date_insertion DESC LIMIT 0,10 Params- 1 Key- Name- [12 ] -job_secteur paramno = -1 name = [12] --job_secteur- is_param = 1 param_type = 2
我注意到如果我在MultiSelect中只选择了一个选项,我会得到相应的结果......例如:选项值='5' - &gt;返回与job_secteur 5 ..
对应的结果<select multiple="multiple" name="secteur_searched[]" .../>
谢谢