PHP Switch case, всегда возвращает ошибку - PullRequest
0 голосов
/ 19 октября 2018

У меня есть веб-страница, на которой я ввожу строку и через $ POST она переходит в скрипт PHP, выполняет там выбор SQL и возвращает данные на странице.Для одного запроса выбора работает нормально.Но я пытаюсь также включить другие операторы Select для поиска с другими значениями.

Поэтому, когда я запускаю свой php (с веб-страницы) без переключателя, он всегда работает так, как я ожидаюк.Без ошибок.

 <html>
<!-- some style ... -->
<?php

$HOST="10.133.96.132";

// Database user
$DBUSER="tibco";

// Database password
$PASS="suyash123";

// Database name
$DB="VFD2TEST";

// Database Error - User Message
$DB_MSG_ERROR='Could not connect!<br />Please contact the site\'s administrator.';


############## Make the mysql connection ###########

$conn = oci_connect ($DBUSER, $PASS, "//10.133.96.132:7041/VFD2TEST");

if (!$conn) {
   $m = oci_error();
   echo $m['message'], "\n";
   exit;
}
$select123 = $_POST['value'];
$output123 = shell_exec("cat data.lst |grep $select123| awk -F: '{print $2}'");

switch ($output123) 
{
     case "QUERY1":
        $c = "SELECT * FROM EAITUXSERVICES WHERE TUX_ADAPTERS='".$_POST['value']."'";
         $result = oci_parse($conn, $c);
         oci_execute($result);
         break;
     case "QUERY2":
            $c = "SELECT * FROM EAITUXSERVICES WHERE COMPONENT='".$_POST['value']."'";
            $result = oci_parse($conn, $c);
            oci_execute($result);
         break;
     case "QUERY3":
        $c = "SELECT * FROM EAITUXSERVICES WHERE TUX_SERVICES='".$_POST['value']."'";
            $result = oci_parse($conn, $c);
            oci_execute($result);
         default:
         $c = "SELECT * FROM EAITUXSERVICES WHERE STATION_NAME='".$_POST['value']."'";
         $result = oci_parse($conn, $c);
         oci_execute($result);
         break;
 }

echo '<TABLE>';
echo '<thead>';
echo '<tr>
    <th>ADAPTERS</th>
    <th>SERVICE</th>
        <th>CALLING_APP</th>
        <th>BP_NAME</th>
        <th>STATION_NAME</th>
         <th style="padding-right:20px;">COMPONENT</th>
        </tr>';
echo '</thead>';
while (($row = oci_fetch_array($result, OCI_BOTH)) != false)
{

  echo '
  <tr>
    <td>'.$row[0].'</td>
    <td>'.$row[1].'</td>
    <td>'.$row[3].'</td>
    <td>'.$row[4].'</td>
    <td>'.$row[5].'</td>
    <td>'.$row[6].'</td>

</tr>';

}


echo '</TABLE>';

oci_free_statement($result);
oci_close($conn);

?>

</html>

Вывод следующих значений:

 $select123 = $_POST['value'];
    $output123 = shell_exec("cat data.lst |grep $select123| awk -F: '{print $2}'");

равен QUERY1

, поэтому он должен переключаться

================================= EDIT ====================================

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

==================================================================================

================================ EDIT2 =========================================

Теперь я обрезал переменную, поэтому нет проблем с пробелами или специальными символами

<html>
<!-- some style ... -->
<?php

$HOST="10.xxx.xxx.132";

// Database user
$DBUSER="tibco";

// Database password
$PASS="xxxxx";

// Database name
$DB="TEST";

// Database Error - User Message
$DB_MSG_ERROR='Could not connect!<br />Please contact the site\'s administrator.';


############## Make the mysql connection ###########

$conn = oci_connect ($DBUSER, $PASS, "//10.xxxx.96.xx:xxx/xxxx");

if (!$conn) {
   $m = oci_error();
   echo $m['message'], "\n";
   exit;
}
$select123 = $_POST['value'];
$output123 = shell_exec("cat data.lst |grep $select123| awk -F: '{print $2}'");
$output234 = trim($output123);
echo $output234;
if ($output234=="QUERY3")
{
$c = "SELECT * FROM EAITUXSERVICES WHERE COMPONENT='".$_POST['value']."'";  
}
else if ($output234=="QUERY1")
{

$c = "SELECT * FROM EAITUXSERVICES WHERE TUX_ADAPTERS='".$_POST['value']."'";
}   
$result = oci_parse($conn, $c);
oci_execute($result);

echo '<TABLE>';
echo '<thead>';
echo '<tr>
    <th>ADAPTERS</th>
    <th>SERVICE</th>
        <th>CALLING_APP</th>
        <th>BP_NAME</th>
        <th>STATION_NAME</th>
         <th style="padding-right:20px;">COMPONENT</th>
        </tr>';
echo '</thead>';
while (($row = oci_fetch_array($result, OCI_BOTH)) != false)
{

  echo '
  <tr>
    <td>'.$row[0].'</td>
    <td>'.$row[1].'</td>
    <td>'.$row[3].'</td>
    <td>'.$row[4].'</td>
    <td>'.$row[5].'</td>
    <td>'.$row[6].'</td>

</tr>';

}


echo '</TABLE>';

oci_free_statement($result);
oci_close($conn);

?>

</html>

Теперь мой выходравно QUERY1 и QUERY3 соответственно, но результата нет, раньше работал запрос, который ищет STATION_NAME, теперь работает тот, который ищет COMPONENT, а не имя станции.Действительно странно.

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Я не смог запустить его с помощью оператора Switch, но смог сделать это с помощью if ... else

вот код

if (!$conn) {
   $m = oci_error();
   echo $m['message'], "\n";
   exit;
}
$select123 = $_POST['value'];
$output123 = shell_exec("cat data.lst |grep $select123| awk -F: '{print $2}'");
$output234 = trim($output123);
if ($output234=="QUERY3")
{
        $c = "SELECT * FROM EAITUXSERVICES WHERE COMPONENT='".$_POST['value']."'";  
        $result = oci_parse($conn, $c);
        oci_execute($result);
} 
//else if ($output234=="QUERY1")

    //{
        //$c = "SELECT * FROM EAITUXSERVICES WHERE TUX_ADAPTERS='".$_POST['value']."'"; 
        //$result = oci_parse($conn, $c);
        //oci_execute($result);

    //}

else if ($output234=="QUERY2")

    {
        $c = "SELECT * FROM EAITUXSERVICES WHERE TUX_SERVICES='".$_POST['value']."'";   
        $result = oci_parse($conn, $c);
        oci_execute($result);

    }

else

    {
        $c = "SELECT * FROM EAITUXSERVICES WHERE STATION_NAME='".$_POST['value']."'";   
        $result = oci_parse($conn, $c);
        oci_execute($result);

    }   

echo '<TABLE>';
echo '<thead>';
echo '<tr>
    <th>ADAPTERS</th>
    <th>SERVICE</th>
        <th>CALLING_APP</th>
        <th>BP_NAME</th>
        <th>STATION_NAME</th>
         <th style="padding-right:20px;">COMPONENT</th>
        </tr>';
echo '</thead>';
while (($row = oci_fetch_array($result, OCI_BOTH)) != false)
{

  echo '
  <tr>
    <td>'.$row[0].'</td>
    <td>'.$row[1].'</td>
    <td>'.$row[3].'</td>
    <td>'.$row[4].'</td>
    <td>'.$row[5].'</td>
    <td>'.$row[6].'</td>

</tr>';

}


echo '</TABLE>';

oci_free_statement($result);
oci_close($conn);

?>

</html>

Надеюсь, это кому-то поможет

0 голосов
/ 19 октября 2018

Реальный ответ, который я чувствую, должен выглядеть просто trim:

$output123 = trim(shell_exec("cat data.lst |grep $select123| awk -F: '{print $2}'"));

switch ($output123) 
{
...
}
0 голосов
/ 19 октября 2018

Вы, вероятно, пропускаете ['value'] в $ select123 и разрыв в случае "QUERY3".

Тогда вы можете упростить свой код следующим образом:

$conn = oci_connect ($DBUSER, $PASS, "//YY.XXX.ZZ.132:XXXX/TEST");

if (!$conn) {
   $m = oci_error();
   echo $m['message'], "\n";
   exit;
}
$select123 = $_POST;
$output123 = shell_exec("cat data.lst |grep $select123| awk -F: '{print $2}'");
$c = "SELECT * FROM EAITUXSERVICES WHERE ";
switch ($output123) {
     case "QUERY1 ":
        $c .= "TUX_ADAPTER";
     break;
     case "QUERY2 ":
        $c .= "COMPONENT";
     break;
     case "QUERY3 ":
        $c .= "TUX_SERVICES";
     break;
     default:
         $c .= "STATION_NAME";
     break;
 }
$c .= "='".$_POST['value']."'";
$result = oci_parse($conn, $c);
oci_execute($result);

echo '<TABLE>';
echo '<thead>';
echo '<tr>
    <th>ADAPTERS</th>
    <th>SERVICE</th>
        <th>CALLING_APP</th>
        <th>BP_NAME</th>
        <th>STATION_NAME</th>
         <th style="padding-right:20px;">COMPONENT</th>
        </tr>';
echo '</thead>';
while (($row = oci_fetch_array($result, OCI_BOTH)) != false)
{

  echo '
  <tr>
    <td>'.$row[0].'</td>
    <td>'.$row[1].'</td>
    <td>'.$row[3].'</td>
    <td>'.$row[4].'</td>
    <td>'.$row[5].'</td>
    <td>'.$row[6].'</td>

</tr>';

}


echo '</TABLE>';

oci_free_statement($result);
oci_close($conn);

?>

</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...