За последние 24 часа нас посетили 18995 программистов и 1614 роботов. Сейчас ищут 649 программистов ...

Выподающий список и сложносоставной запрос.

Тема в разделе "PHP для новичков", создана пользователем DarkMan-4ever, 16 янв 2010.

  1. DarkMan-4ever

    DarkMan-4ever Активный пользователь

    С нами с:
    26 дек 2009
    Сообщения:
    35
    Симпатии:
    0
    PHP:
    1. <?
    2. $sql = "SELECT nazvanie
    3.       from uchastok_dorogi";
    4. $rs = mysql_query($sql);
    5.  
    6. while($row = mysql_fetch_object($rs)) {
    7.     $uchastok_dorogi .= '<option value="' . $row->nazvanie . '">' .
    8. $row->nazvanie . '</option>';
    9. }
    10. ?>
    11. <?
    12. $sql = "SELECT n_brigada
    13.       from brigada";
    14. $rs = mysql_query($sql);
    15.  
    16. while($row = mysql_fetch_object($rs)) {
    17.     $brigada .= '<option value="' . $row->n_brigada . '">' .
    18. $row->n_brigada . '</option>';
    19. }
    20. ?>
    21.  
    22. <table>
    23. <form action="qwer.php" method="POST">
    24. <td>На участке ж/д:</td>
    25. <td><select name="uchastok_dorogi">
    26.             <option value="FALSE"></option>
    27.             <?= $uchastok_dorogi; ?>
    28.     </select></td>
    29. </tr>
    30. <tr>
    31. <td>Предрейсовый обход выполняла бригада:</td>
    32. <td><select name="brigada">
    33.             <option value="FALSE"></option>
    34.             <?= $brigada; ?>
    35.     </select></td>
    36. </tr>
    37. <tr>
    38. <td colspan="2"><input type="submit" value="Занести в базу" name="submit" ></td>
    39. </tr>
    40. </form>
    41. </table>


    PHP:
    1. <?php include("connect.php");?>
    2. <?
    3. $a=$_POST['uchastok_dorogi'];
    4. $b=$_POST['brigada'];
    5. $sql = mysql_query("SELECT * FROM otkaz WHERE `uchastok_dorogi`='$a' AND `brigada`='$b'" ,$db);
    6. echo ("<table border ='1'>");
    7. echo ("<tr><td>На участке ж/д</td><td>Предрейсовый обход выполняла бригада</td></tr>");
    8. while ($tablerows = mysql_fetch_row($sql))
    9. {
    10. echo("
    11.     <tr>   
    12.         <td>$tablerows[1]</td>
    13.         <td>$tablerows[2]</td>
    14.     </tr> ");
    15. }
    16.   echo "</table>";
    17.   mysql_close($db);
    18.   ?>
    Возожно ли такое?
    Т.е. если я выбираю 1 и 2 ом списках значения то выборка пойдет, а вот если я выбиру только в 1 списке, а во втором не будет выбранно ничего, то что присоиться второму??? по моему мнению $b=FALSE, тогда как будет вести себя запрос??? Он просто не будет брать 2 значение в конструкции WHERE `uchastok_dorogi`='$a' AND `brigada`='$b' или же он приствоит WHERE `uchastok_dorogi`='qwerty' AND `brigada`='FALSE', и соответсвенно в запросе не найдет строки со значениями
    |uchastok_dorogi | brigada |
    -----------------------------------
    | qwerty | FALSE |

    и не выведит ничего.

    Можно ли создать такой сложный поиск? когда присутствую множество выпадающих списков, и не всегда их значения полностью выбраны?
     
  2. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Думаю такая проверка тебе поможет
    PHP:
    1. <?php
    2. if($b == 'FALSE') {
    3. $brigada_sql = ''; }
    4. else {
    5. $brigada_sql = ' AND brigada='.$b; }
    6. $sql = "SELECT * FROM otkaz WHERE `uchastok_dorogi`='$a'".$brigada_sql;
    7. ?>
    для первого списка - аналогично только AND понадобится при 2-х выбранных значениях, значит для нее тоже отдельную переменную.
     
  3. DarkMan-4ever

    DarkMan-4ever Активный пользователь

    С нами с:
    26 дек 2009
    Сообщения:
    35
    Симпатии:
    0
    PHP:
    1. <?include ("connect.php");?>
    2. <?
    3. $sql = "SELECT nomer
    4.       from elektrovoz";
    5. $rs = mysql_query($sql);
    6.  
    7. while($row = mysql_fetch_object($rs)) {
    8.     $elektrovoz .= '<option value="' . $row->nomer. '">' .
    9. $row->nomer. '</option>';
    10. }
    11. ?>
    12.  
    13. <?
    14. $sql = "SELECT name1,name2
    15.       from OU_names ";
    16. $rs = mysql_query($sql);
    17.  
    18. while($row = mysql_fetch_object($rs)) {
    19.     $names .= '<option value="' . $row->name1 . '">' .
    20. $row->name2 . '</option>';
    21. }
    22. ?>
    23.  
    24. <?
    25. $sql = "SELECT nazvanie
    26.       from depo";
    27. $rs = mysql_query($sql);
    28.  
    29. while($row = mysql_fetch_object($rs)) {
    30.     $depo .= '<option value="' . $row->nazvanie . '">' .
    31. $row->nazvanie . '</option>';
    32. }
    33. ?>
    34.  
    35. <?
    36. $sql = "SELECT nazvanie
    37.       from uchastok_dorogi";
    38. $rs = mysql_query($sql);
    39.  
    40. while($row = mysql_fetch_object($rs)) {
    41.     $uchastok_dorogi .= '<option value="' . $row->nazvanie . '">' .
    42. $row->nazvanie . '</option>';
    43. }
    44. ?>
    45.  
    46. <?
    47. $sql = "SELECT n_brigada
    48.       from brigada";
    49. $rs = mysql_query($sql);
    50.  
    51. while($row = mysql_fetch_object($rs)) {
    52.     $brigada .= '<option value="' . $row->n_brigada . '">' .
    53. $row->n_brigada . '</option>';
    54. }
    55. ?>
    56.  
    57. <?
    58. $sql = "SELECT n_smena
    59.       from smena";
    60. $rs = mysql_query($sql);
    61.  
    62. while($row = mysql_fetch_object($rs)) {
    63.     $smena .= '<option value="' . $row->n_smena . '">' .
    64. $row->n_smena . '</option>';
    65. }
    66. ?>
    67. <table>
    68. <form action="sql.php" method="POST">
    69. <tr>
    70. <td>Электровоз:</td>
    71. <td><select name="as">
    72.             <option value="FALSE"></option>
    73.             <?= $elektrovoz; ?>
    74.     </select></td>
    75. </tr>
    76. <tr>
    77. <td>Тип:</td>
    78. <td><input type="tip" name="bs"></td>
    79. </tr>
    80. <tr>
    81. <td>Отказавший узел:</td>
    82. <td><select name="cs">
    83.             <option value="FALSE"></option>
    84.             <?= $names; ?>
    85.     </select></td>
    86. </tr>
    87. <tr>
    88. <td>Допушен в рейс из депо:</td>
    89. <td><select name="ds">
    90.             <option value="FALSE"></option>
    91.             <?= $depo; ?>
    92.     </select></td>
    93. </tr>
    94. <tr>
    95. <td>На участке ж/д:</td>
    96. <td><select name="es">
    97.             <option value="FALSE"></option>
    98.             <?= $uchastok_dorogi; ?>
    99.     </select></td>
    100. </tr>
    101. <tr>
    102. <td>Предрейсовый обход выполняла бригада:</td>
    103. <td><select name="fs">
    104.             <option value="FALSE"></option>
    105.             <?= $brigada; ?>
    106.     </select></td>
    107. </tr>
    108. <tr>
    109. <td>Во время отказа эксплуатировала бригада:</td>
    110. <td><select name="gs">
    111.             <option value="FALSE"></option>
    112.             <?= $smena; ?>
    113.     </select></td>
    114. </tr>
    115. <tr>
    116. <td colspan="2"><input type="submit" value="Вывести" name="submit" ></td>
    117. </tr>
    118. </form>
    119. </table>
    120. <?
    121. $a=$_POST['as'];
    122. $b=$_POST['bs'];
    123. $c=$_POST['cs'];
    124. $d=$_POST['ds'];
    125. $e=$_POST['es'];
    126. $f=$_POST['fs'];
    127. $g=$_POST['gs'];
    128.  
    129.  if($a == 'FALSE') {$electro_sql = ''; }
    130.  else {$electro_sql = ' AND `elektrovoz`='.$a; };
    131.  
    132.  if($b == 'FALSE') {$tip_sql = ''; }
    133.  else {$tip_sql = ' AND `tip`='.$b; }
    134.  
    135.  if($c == 'FALSE') {$ou_sql = ''; }
    136.  else {$ou_sql = ' AND `otkazavshyi_uzel`='.$c; }
    137.  
    138.  if($d == 'FALSE') {$depo_sql = ''; }
    139.  else {$depo_sql = ' AND `depo`='.$d; }
    140.  
    141.  if($e == 'FALSE') {$uch_sql = ''; }
    142.  else {$uch_sql = ' AND uchastok_dorogi='.$e; }
    143.  
    144.  if($f == 'FALSE') {$brigada_sql = ''; }
    145.  else {$brigada_sql = ' AND brigada='.$f; }
    146.  
    147.  if($g == 'FALSE') {$smena_sql = ''; }
    148.  else {$smena_sql = ' AND smena='.$g; }
    149.  
    150.  $sql = mysql_query("SELECT * FROM otkaz WHERE `sql`='NULL' ".$electro_sql.$tip_sql .$ou_sql .$depo_sql .$uch_sql .$brigada_sql .$smena_sql, $db);
    151.  echo ("<table border ='1'>");
    152.  echo ("<tr><td>Параметр 1</td><td>Параметр 2</td><td>Параметр 3</td><td>Параметр 4</td><td>Параметр 5</td><td>Параметр 6</td><td>Параметр 7</td></tr>");
    153.  while ($tablerows = mysql_fetch_row($sql))
    154.  {
    155.  echo("
    156.     <tr>    
    157.                         <td>$tablerows[1]</td>
    158.                         <td>$tablerows[2]</td>
    159.          <td>$tablerows[3]</td>
    160.          <td>$tablerows[4]</td>
    161.          <td>$tablerows[5]</td>
    162.          <td>$tablerows[6]</td>
    163.          <td>$tablerows[7]</td>
    164.     </tr> ");
    165.  }
    166.    echo "</table>";
    167.    mysql_close($db);
    168.  ?>
    169.  
    Как парвильно объявить запрос?

    PHP:
    1. $sql = mysql_query("SELECT * FROM otkaz WHERE `sql`='NULL' ".$electro_sql.$tip_sql .$ou_sql .$depo_sql .$uch_sql .$brigada_sql .$smena_sql, $db);
    вот так вот написаол, но не работает!
     
  4. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Выведи
    PHP:
    1. <?php echo $sql
    и посмотри. Не забывай, что между условиями (если их >=2) должны обязательно стоять логические операторы, отделенные от условий пробелами. и после WHERE не должно идти никакого логического оператора. [/b]
     
  5. DarkMan-4ever

    DarkMan-4ever Активный пользователь

    С нами с:
    26 дек 2009
    Сообщения:
    35
    Симпатии:
    0
    вобще ничего не выводит!
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Для отладки делай так.

    PHP:
    1. <?php
    2. $sql = "SELECT * FROM otkaz WHERE `sql`='NULL' ".$electro_sql.$tip_sql .$ou_sql .$depo_sql .$uch_sql .$brigada_sql .$smena_sql;
    3.  
    4. var_dump($sql);
    5. $result = mysql_query($sql) || die(mysql_error());
     
  7. DarkMan-4ever

    DarkMan-4ever Активный пользователь

    С нами с:
    26 дек 2009
    Сообщения:
    35
    Симпатии:
    0
    с запросом вроде бы разобрался! Вот встала такая проблема, некоторые поля у меня содержут - или _ или пробелы!
    В запросе не беруться, т.е. мне надо написть включение как то так
    PHP:
    1. where `tip`='asd-asd'
    сейчас же у меня такая ситуация

    PHP:
    1. where `tip`=asd-asd
    PHP:
    1. if($b == 'FALSE') {$tip_sql = ''; }
    2.   else {$tip_sql = ' AND `tip`='.$b; }
    как это правильно подправить, а то у меня он хватает
    PHP:
    1. if($b == 'FALSE') {$tip_sql = ''; }
    2.   else {$tip_sql = ' AND `tip`=''.$b'; }
    как ошибку!:(