2013-05-14 85 views
1

我试图根据用户选择的选项值中的任何或所有选择来创建动态查询。例如,如果他们选择一个项目ID,则查询将返回项目ID,大小和存储在第二个表中的课程,或者如果他们选择大小,并且部门将执行另一个查询。显示所选规模的所有项目,并附上相应的经验教训。PHP和mySQL动态查询

继承人到目前为止得到了什么。 我真的可以做一些帮助。

<?php 
$pid = $_POST['project_id'] ; 
$psize = $_POST['projectSize'] ; 
$pdepts = $_POST['depts'] ; 
$lstage = $_POST['stage'] ; 
$ltype = $_POST['type'] ; 
$impacted = $_POST['impacted'] ; 


$sqlString = null; 
echo "Total Number Of Captured Post Variables is:"; 
echo count($_POST); 

echo '<br />'; 

$number = 0; 

foreach ($_POST as $param_name => $param_val) { 

if ($param_val ==""){ 


    }else{ 

    $number++; 

    } 

echo "Param: $param_name = $param_val<br />\n"; 
} 
if($number ==1) { 

}else{ 

} 

?> 

回答

2

我希望这能帮助一点,我还添加了阵列检查,需要检查的安全性和注射:)

<?php 
$pid = $_POST['project_id'] ; 
$psize = $_POST['projectSize'] ; 
$pdepts = $_POST['depts'] ; 
$lstage = $_POST['stage'] ; 
$ltype = $_POST['type'] ; 
$impacted = $_POST['impacted'] ; 
//Your columns in the DB 
$columns = array('project_id'=>'project_id','project_size'=>'project_size','depts'=>'depts','stage'=>'stage'); 

$sqlString = null; 
echo "Total Number Of Captured Post Variables is:"; 
echo count($_POST); 

echo '<br />'; 

$number = 0; 
$queryStr = ""; 
$preStr = array(); 
foreach ($_POST as $key => $val) { 

if (!empty($_POST[$key])){ 
     if(!is_array($_POST[$key])) 
      $currentStr = $columns[$key]." = ".$val; 
     else 
      $currentStr = $columns[$key]." IN (".implode(',',$_POST[$key]).")"; 

     $preStr[] = $currentStr; 
    } 
} 

$queryStr = "SELECT * FROM tableName WHERE ".implode(' AND ',$preStr); 
echo $queryStr; 

if($number ==1) { 

}else{ 

} 

?> 
+0

感谢生病检查了这一点,即时通讯工作在一个PHP项目,没有最好的经验,所以试图尽快cath :) – Tazzy 2013-05-14 14:43:06

+0

谢谢Sedz,ive补充说,在(我更新的字段名称和表名:)这现在写入正确的查询。所以,如果我不选择一个project_id,uery会说WHERE size =而不是哪个很酷。 我的下一个问题是如何提出查询来显示数据退出? – Tazzy 2013-05-14 14:53:09

0

它很容易,只需运行条件为每个查询您要运行:

if(isset($_POST['project_id'])){ 
    //they selected a Project ID. 
    //write the query will return with the project ID, size and a lesson stored in a second table 
} elseif (isset($_POST['projectSize']) && isset($_POST['depts'])){ 
    //they selected a size and department 
    // write a query displaying all projects that are of the chosen size with the lessons against it. 
} elseif (some other condition){ 
    //you can keep adding conditions 
} 

最后,你可能想使用消毒您输入mysql_real_escape_string

0

得到它的工作点:当我echo $ queryStr它输出为“SELECT FROM WHERE”等。

然后,我该如何显示该查询的输出到结果表?

+0

我认为它应该是沿线 $结果= mysql_query($查询) WHILE($行= mysql_fetch_assoc($结果))回声'..... – Tazzy 2013-05-15 07:54:04