DropDown для выбора данных с сервера MS SQL

Я пытаюсь заставить веб-приложение PHP отображать данные из определенного Countries из раскрывающегося списка, но я не могу понять, как использовать WHERE [Column] = [Value1, Value2, Value3] в раскрывающемся списке PHP.

Я использую "Adventure Works 2014 Full Database Backup" для тестов.

<html>
</body>
<!-- form for tower selection -->
<form action="test20.php" method="POST">
Please select the tower you are about to work on. </br></br>
<select name="TowerSelect"><option> Choose </option>
<?php
$serverName = 'SERVERNAME';
$uid = 'USERNAME';
$pwd = 'PASSWORD';
$databaseName = 'AdWorks';

$connectionInfo = array( 'UID'=>$uid,
                        'PWD'=>$pwd,
                        'Database'=>$databaseName);

$conn = sqlsrv_connect($serverName,$connectionInfo);
if($conn){
    echo '';
}else{
    echo 'Connection failure<br />';
die(print_r(sqlsrv_errors(),TRUE));
}
$sql = "SELECT BusinessEntityID, FirstName FROM dbo.vKelvin WHERE CountryRegionName = 'United States'";
$result = sqlsrv_query($conn,$sql) or die("Couldn't execut query");
while ($data=sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){

    echo "<option value=";
    echo $data['BusinessEntityID'];
    echo ">";
    echo $data['BusinessEntityID']; 
    echo "</option>";
}
?>
<input type="submit" value="Select Tower">
</select></br></br>
</form>
</body></html>
<?php
if(empty($_POST['TowerSelect'])){     
    $_SESSION['tower'] = ''; 
} else {  
    $_SESSION['tower'] = $_POST['TowerSelect']; 
    echo "<tr>";
    echo $_SESSION['tower'];
    echo "  selected. </p>";
    echo('<td>'.$row['BusinessEntityID'].'</td><td>'.$row['FirstName'].'</td></tr>');
}

person Kelvin Morel    schedule 05.07.2017    source источник
comment
Что вы просите? Вы спрашиваете, как использовать результаты $_POST из элемента выбора формы HTML в запросе SQL SELECT? Я не вижу раскрывающегося списка (я предполагаю, что ‹выбрать›‹/выбрать›) нигде в вашем коде. По крайней мере, мы, кажется, упускаем код, из которого что-то происходит... тогда что-то используется в опубликованном коде (я думаю), и это терпит неудачу?   -  person JBH    schedule 05.07.2017
comment
Только что обновил мой код, хотел бы отобразить выбранное в таблице   -  person Kelvin Morel    schedule 05.07.2017
comment
В моем коде, когда я выбираю BusinessEntityID из раскрывающегося списка, я получаю выбранный идентификатор номера. но я не знаю остальных echo('<td>'.$row['BusinessEntityID'].'</td><td>'.$row['FirstName'].'</td></tr>');   -  person Kelvin Morel    schedule 06.07.2017


Ответы (2)


Я считаю, что это исправлено. Возник ряд проблем с кодом. Вы ссылались на $row, но не было SQL-запроса, который привел бы к $row, вы пытались опубликовать данные после закрывающего тега HTML, вы пытались создать строки для таблицы, не объявляя таблицу, и несколько другие вещи. Отчасти это, вероятно, было результатом быстрого создания тестового примера. Без проблем. Попробуй это...

<?php
$serverName = 'SERVERNAME';
$uid = 'USERNAME';
$pwd = 'PASSWORD';
$databaseName = 'AdWorks';
$connectionInfo = array( 'UID'=>$uid,'PWD'=>$pwd,'Database'=>$databaseName);
$conn = sqlsrv_connect($serverName,$connectionInfo);
if($conn){echo '';}else{echo 'Connection failure<br />';die(print_r(sqlsrv_errors(),TRUE));}

?><html><body>
<!-- form for tower selection -->
<form action="test20.php" method="POST">
Please select the tower you are about to work on. </br></br>
<select name="TowerSelect"><option> Choose </option>
<?php

$sql = "SELECT BusinessEntityID, FirstName FROM dbo.vKelvin WHERE CountryRegionName = 'United States'";
$result = sqlsrv_query($conn,$sql) or die("Couldn't execut query");
while ($data=sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){
    echo '<option value="'.$data['BusinessEntityID'].'">';
    echo $data['BusinessEntityID']; 
    echo "</option>";
}

?><input type="submit" value="Select Tower">
</select></br></br>
</form>
<table cols="3" cellpadding="0" cellspacing="0" border="0">
<?php

if(empty($_POST['TowerSelect'])){     
    $_SESSION['tower'] = ''; 
} else {  
    $sql = "SELECT BusinessEntityID, FirstName FROM dbo.vKelvin WHERE BusinessEntityID = '".$_POST['TowerSelect']."'";
    $result = sqlsrv_query($conn,$sql) or die("Couldn't execut query");
    while ($row=sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){
        $_SESSION['tower'] = $_POST['TowerSelect']; 
        echo '<tr><td>'.$_SESSION['tower'].'  selected.</td>';
        echo     '<td>'.$row['BusinessEntityID'].'</td>';
        echo     '<td>'.$row['FirstName'].'</td></tr>';
    }
}

?></table></body></html>

Примечание. Хотя ответ на ваш вопрос и не важен, рекомендуется использовать PDO и связанные параметры при выполнении вызовов базы данных, чтобы защитить себя от SQL-инъекций и других неприятностей. Я рекомендую вам изучить его, чтобы защитить вашу базу данных. Ваше здоровье!

person JBH    schedule 05.07.2017
comment
Я предполагаю, что проблема в моем ограниченном знании PHP, этот код работает отлично, единственное, что у меня сейчас есть, это то, что в моем раскрывающемся списке должны отображаться только уникальные значения, к настоящему времени у меня есть Канада дважды, США 4 раза и т. д. SELECT DISTINCT возможно? - person Kelvin Morel; 06.07.2017
comment
Правильный. Ознакомьтесь с этим кратким руководством. - person JBH; 06.07.2017

Хорошо, я получил решение, мой выбор был неправильным

$sql = "SELECT DISTINCT CountryRegionName FROM dbo.vKelvin ORDER BY CountryRegionName";
$result = sqlsrv_query($conn,$sql) or die("Couldn't execut query");
while ($data=sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){
echo '<option value="'.$data['CountryRegionName'].'">';
echo $data['CountryRegionName']; 
echo "</option>";
person Kelvin Morel    schedule 06.07.2017