Как включить определенные элементы столбца в предложение MySQL Select на основе ввода пользователя в форме PHP / HTML? - PullRequest
2 голосов
/ 19 января 2012

У меня есть простой список вставок (jQuery Mobile) из нескольких элементов с переключателями Flip, Drop down, check box и Slider.

Я поместил этот список вставок в HTML-форму.

<div data-role="fieldcontain">
      <ul data-role="listview" data-inset="true">
        <li data-role="list-divider"> Inhouse capabilities </li>
        <li> <label for="flip-b">Project Manager</label>
            <select name="slider" id="flip-b" data-role="slider">
                <option value="no">No</option>
                <option value="yes">Yes</option>
            </select>
         </li>   
        <li> <label for="flip-b">Site Supervisor</label>
            <select name="slider" id="flip-b" data-role="slider">
                <option value="no">No</option>
                <option value="yes">Yes</option>
            </select>
        </li>
         <li><label for="flip-b">Architect</label>
            <select name="slider" id="flip-b" data-role="slider">
                <option value="no">No</option>
                <option value="yes">Yes</option>
            </select>
          </li>
        <li><label for="flip-b">Builderworks</label>
            <select name="slider" id="flip-b" data-role="slider">
                <option value="no">No</option>
                <option value="yes">Yes</option>
            </select>
          </li>
          <li><label for="flip-b">Electrical</label>
            <select name="slider" id="flip-b" data-role="slider">
                <option value="no">No</option>
                <option value="yes">Yes</option>
            </select>
          </li>
          <li><label for="flip-b">Mechanical</label>
            <select name="slider" id="flip-b" data-role="slider">
                <option value="no">No</option>
                <option value="yes">Yes</option>
            </select>
          </li>
          <li><label for="flip-b">Hydraulics</label>
            <select name="slider" id="flip-b" data-role="slider">
                <option value="no">No</option>
                <option value="yes">Yes</option>
            </select>
          </li>
          <li><label for="flip-b">Joinery</label>
            <select name="slider" id="flip-b" data-role="slider">
                <option value="no">No</option>
                <option value="yes">Yes</option>
            </select>
          </li>
          <li> 
                <label for="select-choice-1" class="select">Main Location:</label>
                   <select name="select-choice-1" id="select-choice-1">
                      <option value="NSW">NSW</option>
                      <option value="ACT">ACT</option>
                      <option value="VIC">VIC</option>
                      <option value="SA">SA</option>
                      <option value="QLD">QLD</option>
                      <option value="NT">NT</option>
                      <option value="WA">WA</option>
                      <option value="TAS">TAS</option>
                    </select>                     
          </li> <!-- Select Menus: Main Location-->

            <li>     
                <div  data-role="fieldcontain">
                <fieldset data-role="controlgroup">
                    <legend>CBA Reference</legend>
                    <input type="checkbox" name="checkbox-1a" id="checkbox-1a" class="custom" />
                    <label for="checkbox-1a">Commercial</label>
                    <input type="checkbox" name="checkbox-2a" id="checkbox-2a" class="custom" />
                    <label for="checkbox-2a">Retail</label>
                </fieldset>
                </div>
            </li>                          
 </ul>             
    </div> <!-- End of Field Contain div tag -->   
 <a href="#additionalinfo" data-role="button" data-inline="true" data-iconpos="left" data-theme="b">Additional Info</a>
<a href="./search2.html" rel="external" data-ajax="false" data-role="button" data-inline="true" data-icon="search" data-iconpos="left" data-theme="e">Search</a>

`

Я хочу знать, как я могу включить только элементы, выбранные пользователем в моем запросе SQL.

Допустим, пользователь хочет найти работников-электриковв QLD он выберет «Да» для «Электротехника» и «QLD» в качестве основного местоположения, а также другие элементы, к которым он не будет прикасаться.

Теперь, как я могу включить только эти два значения в предложение select.* Скажите, выберите «Электричество», «Основное местоположение» из таблицы, где «Главное местоположение» = «QLD».

Я использовал метод POST для сбора ввода пользователей.Я использую PHP, MySQL для этого проекта.

Есть идеи, как этого добиться?

1 Ответ

2 голосов
/ 19 января 2012

Я не читал поля, поэтому вам придется адаптироваться, но это больше вопрос php, чем вопрос mysql. Вам нужно будет составить список критериев, а затем объединить их вместе.

$criterias = array();

if(isset($_POST['option1']) && $_POST['option1'] == 'yes'){
    $criterias[] = '(mytable.myfield1 = 1)';
}

if(isset($_POST['option2']) && $_POST['option2'] == 'yes'){
    $criterias[] = '(mytable.myfield2 = 1)';
}

$sql = 'SELECT * FROM mytable'.(count($criterias) > 0 ? ' WHERE '.implode(' OR ', $criterias) : '').' ORDER BY mytable.sortkey';

Это поможет вам составить любой список критериев, который вы хотите. Обратите внимание, что при взлете я использовал ИЛИ, потому что эти критерии кажутся инклюзивными, поэтому вы показываете работников по их типу в зависимости от выбора пользователя. Но я точно не уверен, что это то, что вы хотели.

Обратите внимание, что вы можете настроить свои критерии намного сложнее и объединить две информации вместе, например:

if(isset($_POST['option2']) && $_POST['option2'] == 'yes'){
    $criterias[] = '(mytable.myfield2 = 1 AND mytable.location = "'.$_POST['location'].'")
}

Таким образом, вы можете иметь много типов, которые относятся к определенному местоположению или даже к разным местоположениям одновременно, если хотите.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...