【问题标题】:Dropdown menus and where statements下拉菜单和 where 语句
【发布时间】:2013-07-27 01:48:19
【问题描述】:

我有 4 个下拉菜单,提交时可能包含也可能不包含在 mysql 查询中作为 where 语句的值。基本上没有为每个可能的下拉组合编写和 if 语句,我想找出一种方法来插入 where 语句,如果 $_POST['dropdownitem'] 不为空。在下面的块中,基本上任何带有 $_POST 的东西都可能存在,也可能不存在。

$select = dbz( )
->select( )
->from( array( 'l' => 'logs' ) )
->joinLeft( array( 'd' => 'dealers' ), 'l.dealerID = d.id' )
->joinLeft( array( 'p' => 'prospects' ), 'l.dealerID = p.id', array( 'id', 'name AS pname' ) )
->where( 'l.id = ?', $currentUser[ 'id' ] )
->where( 'l.dealerId = ?', $_POST[ 'dealerid' ] )
->where( 'logData LIKE ?', '%' . $_POST[ 'activitytype' ] . '%' );
->where( 'logTime >= ?', $today )
->where( 'logTime < ?', strtotime( $tomorrow ) );

$userLogs = dbz( )->fetchAll( $select );

【问题讨论】:

  • 你为什么不有条件地执行where()调用?
  • 所以我还是初学者。我尝试的是在最后一个 where 之前放置一个 if 语句,但它不起作用。不过,我很可能做错了什么。
  • 您的想法是正确的,但@AlexP 的实现是正确的。

标签: php mysql dynamic if-statement drop-down-menu


【解决方案1】:

您不可避免地需要以不同的方式验证每个发布的值,因此您至少需要进行一些条件检查以确保您的查询构造正确。

如果值发生变化,将其封装在如下所示的函数中可能会为您提供更好的灵活性。我个人认为 switch 语句也将使其更易于阅读并在将来再次更改。

$select = dbz()
  ->select()
  ->from( array( 'l' => 'logs' ) )
  ->joinLeft( array( 'd' => 'dealers' ), 'l.dealerID = d.id' )
  ->joinLeft( array( 'p' => 'prospects' ), 'l.dealerID = p.id', array( 'id', 'name AS pname' ) )

public function addConditionals($query, $userId, array $data = array())
{
  $select->where('l.id = ?', $userId);
  foreach($data as $column => $value) {
    switch(strtolower($column)) {
      case 'dealerid':
        $select->where('l.dealerId = ?', intval($value));        
      break;
      case 'activitytype':
        $select->where('logData = ?', $value));        
      break;
      // etc...
    }
  }
}
addConditionals($select, $currentUser['id'], $_POST);

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多