2013-09-26 3 views
1

J'ai une section de mon code avec quelques conditions qui ne semblent pas fonctionner correctement. J'ai construit un formulaire déroulant conditionnel qui fonctionne pour la plupart jusqu'à présent, sauf quand il atteint un couple elseif. J'utilise JS pour envoyer le nom de l'option de liste déroulante à mon script PHP avec GET qui est là où il semble aller bizarre. Pour la plupart du formulaire, il tire les options pour la prochaine liste déroulante à partir d'une requête MySQL, mais pour la première goutte, je viens d'utiliser quelques autres elseif pour le rendre moins complexe. vous pouvez vérifier le script en direct here. Voici la section me donner du mal (ce sont les deux dernières elseifs):Problèmes avec les conditions elseif

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>"; 
} 

Le premier menu déroulant sera mis $_GET['type'] à « analogique » ou « numérique », mais peu importe quelle option $_GET['type'] est défini pour exécuter le premier elseif qui vérifie si $_GET['type'] est défini. Si $_GET['type'] = 'Analog' alors il devrait retourner le dernier elseif et pas le dernier pour durer.

Ceci est la plupart du scénario de référence:

//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>"; 

Encore une fois, vous pouvez vérifier le script en direct here.

+2

Veuillez ne pas utiliser les fonctions mysq_ * car elles sont obsolètes. Pensez à utiliser [PDO] (http://be1.php.net/pdo) ou [MySQLi] (http://php.net/manual/fr/book.mysqli.php) – DarkBee

Répondre

3

$_GET['type'] = "Digital" est mission, pas un chèque.

Qu'est-ce que vous avez besoin est

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

Même avec $_GET['type'] = "Analog"

Il devrait être

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

En outre, comme mentionné Darkbee, utilisez PDO ou MySQLi

+0

Oh wow, merci beaucoup! J'ai complètement manqué cela même après avoir lu au moins 10 fois. – ZZZZZZZZZZ

+0

Ça arrive :). Ne marquez pas la [réponse acceptée] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) si cela a été utile – karthikr

0

Nous assignons $ _GET ['type'] quand je pense yo u veulent l'opérateur de comparaison equals:

$_GET['type'] = "Digital" 

devient

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

essayer

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

et

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

Deux signes d'égalité est une question d'égalité est une mission (sera revenir n true always)