2015-03-23 3 views
-1

Я использую функцию переключателя для изменения переменных на моей странице в зависимости от переменной, заданной в URL-адресе (http://localhost/design/?state=AL).PHP Get Variable From Case Switch

я получаю ошибку: Notice: Undefined переменной: topBeacon в C: \ WAMP \ WWW \ дизайн \ включает \ strobeLaws.php на линии 84

Это мой PHP код:

<?php 
    if(isset($_GET['state'])) 
{ 
    $term = strtolower($_GET['state']); 
    switch($term) 
    { 
     case 'SL': 
      echo "<td>Please select a state.</td>"; 
      break; 
     case 'AL': 
      $topBeacon = 'Amber'; 
      $forwardBeacon = 'Amber'; 
      $rearBeacon = 'Amber'; 
      break;   
    } 
} 
?> 

И раздел HTML, содержащий, где переменная должна повторить:

<tr> 
<td>Top Beacon:</td> 
<td><?php echo $topBeacon; ?></td> <!--Line 84 From Error --> 
</tr> 

Я думаю, что я сделал все правильно, но я не понимая, почему я получаю сообщение об ошибке, когда моя переменная установлена ,

+0

$ topBeacon будет DEFINED только если переключатель приземляется на «AL». если он приземляется на что-либо еще, $ topBeacon останется неопределенным. – hanshenrik

+0

Я знаю, как это работает. Я уже упоминал, что даже при установке «AL» он все еще не работает. – user3658885

ответ

0

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

Я сказал, что мой URL выглядит следующим образом: http://localhost/design/?state=AL

Я забыл, что эта линия существует: $ TERM = strtolower ($ _ GET [ 'состояние']);

И пример одного из моих случаев:

  case 'AL': 
      $topBeacon = 'Amber'; 
      $forwardBeacon = 'Amber'; 
      $rearBeacon = 'Amber'; 
      break;  

Моего выключатель случае функция ждет для URL, чтобы приземлиться на прописных буквах, а термин $ становился превратились строчные буквы.

Это полный обновленный код до сих пор (рабочий, который, не в том числе все 50 государств):

<?php 
if(isset($_GET['state'])) 
{ 
    $term = strtoupper($_GET['state']); 
    switch($term) 
    { 
     default: 
      $topBeacon = 'Select A State'; 
      $forwardBeacon = 'Select A State'; 
      $rearBeacon = 'Select A State'; 
     case 'SL': 
      $topBeacon = 'Select A State'; 
      $forwardBeacon = 'Select A State'; 
      $rearBeacon = 'Select A State'; 
      break; 
     case 'AL': 
      $topBeacon = 'Amber'; 
      $forwardBeacon = 'Amber'; 
      $rearBeacon = 'Amber'; 
      break;  
    } 
} 
?> 
<table style="width:400px" id="strobeLawsTable"> 
    <tr> 
    <td>Top Beacon:</td> 
    <td><?php echo isset($topBeacon) ? $topBeacon : ''; ?></td>  
    </tr> 
    <tr> 
    <td>Forward Facing:</td> 
    <td><?php echo isset($forwardBeacon) ? $forwardBeacon : ''; ?></td>  
    </tr> 
    <tr> 
    <td>Rear Facing:</td> 
    <td><?php echo isset($rearBeacon) ? $rearBeacon : ''; ?></td>  
    </tr> 
</table> 
0

Подумайте о пути кода для случая, когда $term равно 'SL', $topBeacon не установлен и поэтому приводит к неопределенной ошибке.

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

Например:

<tr> 
<td>Top Beacon:</td> 
<td><?php echo isset($topBeacon) ? $topBeacon : ''; ?></td> 
</tr> 

Другой альтернативой было бы по умолчанию $topBeacon (и другие переменные):

$topBeacon = ''; 
// default additional variables 

$term = strtolower($_GET['state']); 
switch($term) 
{ 
    // ... 
+0

Thing - мой url установлен в $ state = AL прямо сейчас, у которого есть переменная, заданная в операторах switch. Даже когда я добавил ваше решение isset, ничего не происходит, когда я переключаю URL-адрес с SL на AL. – user3658885

+0

Кажется, что что-то не так в вашем коде. Например, вы тестируете нижний регистр и верхний регистр. –

+0

Да, это то, что я не замечаю. Он кажется правильным, но он не регистрирует тот факт, что переменная задана по какой-либо причине. Должно быть что-то маленькое, что я пропускаю. – user3658885