2013-09-26 3 views
1

У меня есть раздел моего кода с несколькими условиями elseif, которые, похоже, не работают должным образом. Я создал условную раскрывающуюся форму, которая работает по большей части до сих пор, за исключением того, когда она достигает пары elseifs.Проблемы с условиями elseif

Я использую JS для отправки имени раскрывающегося списка в свой PHP-скрипт с GET, где он кажется странным. Для большей части формы он вытягивает опции для следующего выпадающего списка из MySQL-запроса, но для первой капли я просто использовал несколько elseifs, чтобы сделать его менее сложным. Вы можете проверить живой сценарий here. Вот раздел дает мне неприятности (это последние два elseifs):

if (isset($_GET['setpoint'])) { 
    while ($row = mysql_fetch_array($result)) { 
     echo "<option value='" . $row{'stp'} . "'>" . $row{'stp'} . "</option>"; 
    } 
} elseif (isset($_GET['power'])) { 
    echo "<option>Please Choose Setpoint Options</option>"; 
    while ($row = mysql_fetch_array($result)) { 
     $row{'stp'} = ucfirst($row{'stp'}); //capitalizes the first letter; necessary? 
     echo "<option value='" . $row{'stp'} . "'>" . $row{'stp'} . "</option>"; 
    } 
} elseif (isset($_GET['source'])) { 
    echo "<option>Please Choose Input Range</option>"; 
    while ($row = mysql_fetch_array($result)) { 
     echo "<option value='" . $row{'sir'} . "'>" . $row{'sir'} . "</option>"; 
    } 
} elseif (isset($_GET['type']) && $_GET['type'] = "Digital") { 
    echo "<option>Please Choose Input Source</option>"; 
    echo "<option value='RS232C'>RS232C</option><option value='RS422'>RS422</option><option value='RS485'>RS485</option><option value='current loop'>current loop</option>"; 
} elseif (isset($_GET['type']) && $_GET['type'] = "Analog") { 
    echo "<option>Please Choose Input Source</option>"; 
    echo "<option value='DC current'>DC Current</option><option value='DC voltage'>DC Voltage</option><option value='AC current'>AC Current</option><option value='AC voltage'>AC Voltage</option><option value='process'>Process</option><option value='thermocouple'>Thermocouple</option><option value='RDT'>rdt</option>"; 
} 

Первый выпадающий установит $_GET['type'] либо «Analog» или «Digital», но независимо от того, какой вариант $_GET['type'] установлен, он просто запустит первый elseif, который проверяет, установлен ли $_GET['type']. Если $_GET['type'] = 'Analog', то он должен возвращать последний elseif, а не второй.

Это большая часть сценария для справки:

//prevents injections 
//any order 
isset($_GET['type'])?$type = urldecode($_GET['type']):""; 
//$type = mysql_real_escape_string(urldecode($_GET['type'])); 
isset($_GET['source'])?$source = mysql_real_escape_string(urldecode($_GET['source'])):""; 
isset($_GET['range'])?$power = mysql_real_escape_string(urldecode($_GET['range'])):""; 
isset($_GET['setpoint'])?$setpoint = mysql_real_escape_string(urldecode($_GET['setpoint'])):""; 

//forms the query depending on what data is recieved through GET 
//first option on the bottom; last option on the top to avoid conflicts 
if (isset($_GET['setpoint'])) { 
    $query = "SELECT DISTINCT stp FROM meters WHERE sio='$range' AND pso='$power' AND stp='$setpoint' ORDER BY model"; 
} elseif (isset($_GET['power'])) { 
    $query = "SELECT DISTINCT stp FROM meters WHERE sio='$range' AND pso='$power' ORDER BY model"; 
} elseif (isset($_GET['range'])) { 
    $query = "SELECT DISTINCT pso FROM meters WHERE sio='$range' ORDER BY model"; 
} elseif (isset($_GET['source'])) { 
    $query = "SELECT DISTINCT sir FROM meters WHERE sio LIKE '%$source%' ORDER BY sir"; 
} 

//creates a result array from query results 
isset($query)?$result = mysql_query($query):""; 

//outputs dropdown options dependent on what GET variables are set 
//first option on the bottom; last option on the top to avoid conflicts 
if (isset($_GET['setpoint'])) { 
    while ($row = mysql_fetch_array($result)) { 
     echo "<option value='" . $row{'stp'} . "'>" . $row{'stp'} . "</option>"; 
    } 
} elseif (isset($_GET['power'])) { 
    echo "<option>Please Choose Setpoint Options</option>"; 
    while ($row = mysql_fetch_array($result)) { 
     $row{'stp'} = ucfirst($row{'stp'}); //capitalizes the first letter; necessary? 
     echo "<option value='" . $row{'stp'} . "'>" . $row{'stp'} . "</option>"; 
    } 
} elseif (isset($_GET['source'])) { 
    echo "<option>Please Choose Input Range</option>"; 
    while ($row = mysql_fetch_array($result)) { 
     echo "<option value='" . $row{'sir'} . "'>" . $row{'sir'} . "</option>"; 
    } 
} elseif (isset($_GET['type']) && $_GET['type'] = "Digital") { 
    echo "<option>Please Choose Input Source</option>"; 
    echo "<option value='RS232C'>RS232C</option><option value='RS422'>RS422</option><option value='RS485'>RS485</option><option value='current loop'>current loop</option>"; 
} elseif (isset($_GET['type']) && $_GET['type'] = "Analog") { 
    echo "<option>Please Choose Input Source</option>"; 
    echo "<option value='DC current'>DC Current</option><option value='DC voltage'>DC Voltage</option><option value='AC current'>AC Current</option><option value='AC voltage'>AC Voltage</option><option value='process'>Process</option><option value='thermocouple'>Thermocouple</option><option value='RDT'>rdt</option>"; 

Опять же, вы можете проверить в реальном времени сценарий here.

+2

Пожалуйста, не используйте функции mysq_ *, поскольку они устарели. Подумайте, используя [PDO] (http://be1.php.net/pdo) или [MySQLi] (http://php.net/manual/en/book.mysqli.php) – DarkBee

ответ

3

$_GET['type'] = "Digital" это назначение, а не проверка.

Что вам нужно

$_GET['type'] == "Digital" 

То же самое с $_GET['type'] = "Analog"

Это должно быть

$_GET['type'] == "Analog" 

Кроме того, как упоминалось Darkbee, используйте PDO или MySQLi

+0

О, вау, большое спасибо! Я полностью пропустил это, даже прочитав хотя бы 10 раз. – ZZZZZZZZZZ

+0

Бывает :). Пометьте [ответ как принято] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work), если он был полезен – karthikr

0

Вы назначая $ _GET ['type'], когда я думаю, что и хотите, оператор сравнения equals:

$_GET['type'] = "Digital" 

становится

$_GET['type'] == "Digital" 
0

попробовать

elseif (isset($_GET['type']) && $_GET['type'] == "Digital") 

и

elseif (isset($_GET['type']) && $_GET['type'] == "Analog") 

Два равных знаков является равноправным одно задание (будет Ретур n true always)

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