2015-06-11 7 views
3

В форме пользователя необходимо проверить параметры, которые будут получать бюллетень, например:Выбрать с несколькими условиями

<input type="checkbox" name="male" value="1" /> 
<input type="checkbox" name="female" value="1" /> 
<input type="checkbox" name="person" value="1" /> 
<input type="checkbox" name="company" value="1" /> 

Но у меня есть проблема, как создать запрос для БД с проверенными вариантами

У меня этот код до сих пор, но это не хорошо, потому что бюллетень должен быть 1 все время, и после этого у меня есть OR, потому что, когда я кладу и я не получаю результаты, которые мне нужно:

if($options['male']) { 
      $sqlAddMale = " OR gender = 2 "; 
     } 
     if($options['female']) { 
      $sqlAddFemale = " OR gender = 1 "; 
     } 
     if($options['person']) { 
      $sqlAddPerson = " OR VAT = '' "; 
     } 
     if($options['company']) { 
      $sqlAddCompany = " OR VAT <> '' "; 
     } 

     $query = " 
      SELECT email FROM users WHERE newsletter=1 
      ".$sqlAddMale." 
      ".$sqlAddFemale." 
      ".$sqlAddPerson." 
      ".$sqlAddCompany."   
      "; 
+0

и проблема? – Goikiu

+0

Начните с вашего SQL-запроса сначала в SQL и получите это для работы, все OR's делает результаты очень открытыми. Поместите свой SQL, который должен работать, например, для одного примера (что-то вы ожидаете) –

+0

, если вы не получите результаты вы хотите - что-то не так с данными? с первого взгляда вы должны использовать 'AND' –

ответ

1

Я думаю, Вам это нужно mething так:

$placeOr = false; 
if($options['male']) { 
    $placeOr = true; 
    $sqlAddMale = " (newsletter=1 AND gender = 2) "; 
} 
if($options['female']) { 
    $sqlAddFemale = (($placeOr)?" Or ":""); 
    $sqlAddFemale .= " (newsletter=1 AND gender = 1) "; 
    $placeOr = true; 
} 
if($options['person']) { 
    $sqlAddPerson = (($placeOr)?" Or ":""); 
    $sqlAddPerson .= " (newsletter=1 AND VAT = '') "; 
    $placeOr = true; 
} 
if($options['company']) { 
    $sqlAddCompany = (($placeOr)?" Or ":""); 
    $sqlAddCompany .= " (newsletter=1 AND VAT <> '') "; 
    $placeOr = true; 
} 

$query = " 
    SELECT email FROM users WHERE 
    ".$sqlAddMale." 
    ".$sqlAddFemale." 
    ".$sqlAddPerson." 
    ".$sqlAddCompany."   
    "; 
+0

У меня есть ошибка в sql, вот запрос после вашего кода, когда я проверяю женщину и человека 'SELECT acEmail AS email FROM _site_vuser WHERE (newsletter = 1 AND anGender = 1) (newsletter = 1 AND acVAT = ' ') ' – gandrap

+0

Извините, произошла ошибка. Я обновил код. –

+0

Пожалуйста, проверьте его! –

0

Вот как вы можете решить проблему, используйте одну переменную, чтобы создать свой ИНЕКЕ, используйте AND operater, когда вы добавляете первое условие, иначе использовать OR

$sqlString = ''; 
if($options['male']) { 
     $sqlString = " AND gender = 2 "; 
    } 
    if($options['female']) { 
     if(!$sqlString) $sqlString = " AND gender = 1 "; 
     else 
      $sqlString .= " OR gender = 1 "; 
    } 
    if($options['person']) { 
     if(!$sqlString) $sqlString = " AND VAT = '' "; 
     else 
      $sqlString .= " OR VAT = '' "; 
    } 
    if($options['company']) { 
     if(!$sqlString) $sqlString = " AND VAT <> '' "; 
     else 
      $sqlString .= " OR VAT <> '' "; 
    } 

    $query = "SELECT email FROM users WHERE newsletter=1'".$sqlString."'"; 
+0

Я тоже попробую ваше решение. thx – gandrap

+0

@gandrap спасибо –

+0

@gandrap я ошибся в 1-м условии, так что теперь я его отредактировал, вместо '$ sqlString =" OR gender = 2 ";' Теперь у меня есть '$ sqlString =" AND gender = 2 «'; –

Смежные вопросы