2016-07-06 4 views
0

У меня есть два выпадающих списка, которые заполняются из таблиц MySQL. В таблицах MySQL они имеют ограничения внешнего ключа, поэтому таблица «активы» имеет столбец «отдел», который связан с таблицей отдела. Таким образом, у каждого актива есть связанный отдел.PHP MySQl Chained Select

Мое первое выпадающее меню - «отдел», и я хочу, чтобы второе выпадающее меню отображало только результаты из выбранного отдела.

Вот мой код.

<select id="location" name="location"> 
    <option value="">Select Asset Location</option> 
<?php 
     $pdo = new PDO('mysql:host=localhost;dbname=maintlog', 'root', '*******'); 
     #Set Error Mode to ERRMODE_EXCEPTION. 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $pdo->prepare('Select id,name from location'); 
     $stmt->execute(); 
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
     { 
      echo "<option value='$row[id]'>$row[name]</option>"; 
     } 
    ?> 
</select> 

и актива:

<select id="asset" name="asset"> 
    <option value="">Select Asset</option> 
<?php 
     $pdo = new PDO('mysql:host=localhost;dbname=maintlog', 'root', '*****'); 
     #Set Error Mode to ERRMODE_EXCEPTION. 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $pdo->prepare('Select id,assetcode from assets'); 
     $stmt->execute(); 
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
     { 
      echo "<option value='$row[id]'>$row[assetcode]</option>"; 
     } 
    ?> 
</select> 

Я понятия не имею, где начать с этим, я сделал JavaScript прикованных выбирает, но не с MySQL/PHP.

Thanks

+0

Javascript change событие в первом выпадающем списке. В случае сделайте запрос ajax и заполните второе раскрывающееся меню. – Daan

+1

Ничто в этом коде как показано на рисунке не может SELECT отдела. Поэтому вам придется сначала загрузить раскрывающийся список Asset. Затем, когда Dept выбирается с использованием AJAX, запросите содержимое раскрывающегося списка Asset из отдельного PHP-скрипта, передайте ему выбранный Dept_id и верните активы на основе этого Dept_id и заполните DDE-файлы с помощью javascript – RiggsFolly

+0

. Было бы проще, если бы значения были в HTML как отдельные варианты. Там всего около 10 мест, и я не могу предвидеть, что растет ... –

ответ

-1

С обязательным связыванием параметров вы можете уменьшить количество кода, который вы должны писать и обслуживать.

Попробуйте следующий пример, чтобы избавиться от вашей, если (1), если (2), если (3) .....

if (filter_input(INPUT_GET, "smartload")) { 
    sleep(1); 
} 

header("Access-Control-Allow-Origin: *"); 

$response[""] = "--"; 

/* Locations and asset details data 
-------------------------------------------------------- */ 
if (filter_input(INPUT_GET, 'location')) { 
    $pdo = new PDO('mysql:host=localhost;dbname=********', 'root', '********'); 
    #Set Error Mode to ERRMODE_EXCEPTION. 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $stmt = $pdo->prepare('SELECT id,assetcode from assets where location=:getLocation'); 
    $stmt->bindParam(':getLocation', filter_input(INPUT_GET, 'location'), PDO::PARAM_INT); 
    $stmt->execute(); 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
    { 
     $response ["$row[id]"]="$row[assetcode]"; 
    } 
} 
print json_encode($response); 
?> 

Bind параметр для запроса и выполнить. Не нужно повторять код снова и снова.

+0

Спасибо! Я немного нуб, когда дело доходит до PHP. Гораздо приятнее. –

-1

Я попал туда, в конце. Я закончил тем, что использовал немного Javascript и дополнительный HTML. Я также использовал jquery.chained для этого, чтобы работать правильно.

$(function(){ 
        $("#asset").remoteChained({ 
         parents : "#location", 
         url : "selectData.php?smartload=1", 
         loading : "loading assets....", 
        }); 
         }); 

Так что, когда место загрузки или выбран он пробуждается другой PHP скрипт, который затем использует IF заявления для возврата значений с различными запросами MySQL. (Пример ниже).

<?php 

if (isset($_GET["smartload"])) { 
    sleep(1); 
} 

header("Access-Control-Allow-Origin: *"); 

$response[""] = "--"; 

/* Locations and asset details data 
-------------------------------------------------------- */ 
if (isset($_GET["location"])) { 
    if ("1" == $_GET["location"]) { 
     $pdo = new PDO('mysql:host=localhost;dbname=********', 'root', '********'); 
     #Set Error Mode to ERRMODE_EXCEPTION. 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $pdo->prepare('SELECT id,assetcode from assets where location=1'); 
     $stmt->execute(); 
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
     { 
      $response ["$row[id]"]="$row[assetcode]"; 
     } 
    }; 

    if ("2" == $_GET["location"]) { 
     $pdo = new PDO('mysql:host=localhost;dbname=********', 'root', '********'); 
     #Set Error Mode to ERRMODE_EXCEPTION. 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $pdo->prepare('SELECT id,assetcode from assets where location=2'); 
     $stmt->execute(); 
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
     { 
      $response ["$row[id]"]="$row[assetcode]"; 

     } 
    }; 

    if ("3" == $_GET["location"]) { 
     $pdo = new PDO('mysql:host=localhost;dbname=********', 'root', '********'); 
     #Set Error Mode to ERRMODE_EXCEPTION. 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $pdo->prepare('SELECT id,assetcode from assets where location=3'); 
     $stmt->execute(); 
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
     { 
      $response ["$row[id]"]="$row[assetcode]"; 
     } 
    }; 
} 

print json_encode($response); 
?> 

Затем идентификатор ниспадающего «актив» заполняется ответ в файл PHP Javascript призвал.

Спасибо!

+0

Программирование Yoda. Долгое время не вижу :-) Проверьте мой ответ на гораздо более короткую версию вашего кода, не добавляя if для каждого местоположения. – DKSan