【问题标题】:using php form multiple select in a mysql query在 mysql 查询中使用 php 表单多项选择
【发布时间】:2011-07-26 02:36:05
【问题描述】:

我正在尝试使用搜索表单的结果进行查询。我拥有的领域之一是“状态”。我希望用户能够选择多个状态,然后获得反映所有选定状态的结果列表。这是我用于状态的单个选择表单元素的代码。如果没有选择状态,则反映选择所有记录,以及性别,销售和销售名称:

$query  = "SELECT *, DATE_FORMAT(saledate,'%m/%d/%Y') as saledatex FROM sdusa WHERE";


if (!empty($state)){ 
$query .= " state = '$state' AND";
}

if (!empty($sex)){ 
$query .= " sex = '$sex' AND";
}

if (!empty($sale)){ 
$query .= " breeder = '$sale' AND";
}

if (!empty($salename)){ 
$query .= " salename LIKE '%$salename%' AND";
}

$query .= " saledate >= $salestart
AND saledate <= $saleend
AND birthdate >= $birthstart
AND birthdate <= $birthend
AND actbw <= $actbw1 
AND adj205ww >= $adj205ww1
AND adj365yw >= $adj365yw1
AND rea >= $rea1
AND imf >= $imf1
AND sc >= $sc1

$result = mysql_query($query) or die('Error, query failed');

如何调整查询以从状态的多选列表中获取结果,该列表将为我提供反映所有选定状态的结果列表?我想我可能需要添加一个“foreach”语句或一个计数器 - 但由于我是 php 新手,我不确定代码。

当前输出如下所示:

 <table align='center' width='780' border='1' cellpadding='0' cellspacing='0'     bordercolor='#000000'>
 <tr>
<td width='55' class='s11'><div align='center'>Reg #</div></td>
<td width='100' class='s11'><div align='center'>Name</div></td>  
 <td width='135' class='s11'><div align='center'>Sire</div></td>
 <td width='125' class='s11'><div align='center'>MGS</div></td>
 <td width='180' class='s11'><div align='center'>Breeder</div></td>
 <td width='25' class='s11'><div align='center'>St</div></td>
 <td width='60' class='s11'><div align='center'>Sale Date</div></td>  
 <td width='25' class='s11'><div align='center'>BW</div></td>
 <td width='25' class='s11'><div align='center'>WW</div></td>
<td width='25' class='s11'><div align='center'>YW</div></td>
 <td width='25' class='s11'><div align='center'>M</div></td>
 </tr>
 <?php 
 while($row = mysql_fetch_array($result))
{
echo "<tr height='20'>";
echo "<td class='s11'><div align='center'><a href='sdindselect.php?registration_num=". $row ['registration_num'] ."'>" . $row['registration_num'] . "</a> </div></td>";
echo "<td class='s11'><div align='center'>" . $row['name'] . " </div></td>";
echo "<td class='s11'><div align='center'>" . $row['sire'] . " </div></td>";
echo "<td class='s11'><div align='center'>" . $row['sire3'] . " </div></td>";
echo "<td class='s11'><div align='center'>" . $row['breeder'] . $row['salname'] ." </div></td>";
echo "<td class='s11'><div align='center'>" . $row['salestate'] . " </div></td>";
echo "<td class='s11'><div align='center'>" . $row['saledatex'] . " </div></td>";
echo "<td class='s11'><div align='center'>" . $row['bw'] . " </div></td>";
echo "<td class='s11'><div align='center'>" . $row['ww'] . " </div></td>";
echo "<td class='s11'><div align='center'>" . $row['yw'] . " </div></td>";
echo "<td class='s11'><div align='center'>" . $row['milk'] . " </div></td>";
echo "</tr>";
}
?>

感谢您的帮助!

【问题讨论】:

  • 附带说明为什么不将center 放在s11 类中,想想您节省的所有带宽...

标签: php mysql html


【解决方案1】:

更新! 多选列表将其值作为数组传递。你需要做的是这样的:

if (!empty($state))
{
  $query .= "("; // Encapsulate state values so they'll be resolve independently

  foreach($states as $term)
  {
    if($term !== '')
    {
      $query .= " state = '".trim($term)."' OR";
    }
  }
  $query .= ") AND";
}

【讨论】:

  • Stack 101 上面的想法是正确的,但我建议使用 OR 而不是 AND,因为分配了单个状态的行不会处于多个状态。
  • 没问题。这也是我建议将这部分查询封装在括号中的原因。当您开始将 AND 语句与 OR 语句混合使用时,结果通常很难预测,除非您以这种方式将它们分开。
  • 最后你会有一个尾随OR...这会触发一个mysql错误
  • 获取查询失败消息 - 使用code'$query = "SELECT *, DATE_FORMAT(saledate,'%m/%d/%Y') as saledatex FROM sdusa WHERE"; $states = array(); $states = explode(" ",$state); if (!empty($state)){ $query .= "("; // Encapsulate state values so they'll be resolve independently foreach($states as $term) { if($term !== '') { $query .= " salestate = '".trim($term)."' OR"; } } $query .= ") AND";} code`
【解决方案2】:

这应该为你做:

if (!empty($state)){

$states = array();

取决于每个 $state 值在查询字符串中的分隔方式

示例: $state = "New Jersey,Wyoming,Oregon,Georgia,Maine,Arkansas"

$states  = explode(",",$state); 
$first = true;

foreach($states as $term){

    if($term !== ''){

        if(!$first) $query .= " OR";

        $query .= " state = '".trim($term)."'";
        $first = false;

    }
}

$query .= " AND";

}

希望对你有帮助。

【讨论】:

  • 查询正在运行,但没有结果 - 谢谢你的所有想法 - 让他们继续前进!
  • 当您有多个值时,您的$state 字符串是什么样的?
  • ack - 我不知道 - 当我输入: echo $state: 它只是说 Array.对不起,我是一个新手。感谢您的耐心等待
  • printf($state); 给你什么?
  • 它说数组。我应该声明 $state 变量 - 即 $state=$_POST['state'];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2015-03-25
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多