За последние 24 часа нас посетили 18718 программистов и 1703 робота. Сейчас ищут 615 программистов ...

Выборка из БД с помощью формы

Тема в разделе "PHP и базы данных", создана пользователем dr83, 19 июл 2011.

  1. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    Доброе утро! поискал, почитал но решения пока не нашел:( прошу совета.

    Суть в следующем:
    есть большой набор показателей по которым должна делаться выборка из БД. пользователю предлагается форма для ввода пороговых значений, содержащая, в том числе и чекбоксы.
    Если все поля заполняются, то проблем нет, но! идея в том, что не все показатели могут быть востребованы... то есть если никакое значение не указано, или "галочка" в чекбоксе не стоит, то и выборка по этим показателям не делается...
    спасибо!

    PHP:
    1. <div align="center">
    2. <form name="filvybor" method="post" action="">
    3.   <p> Выберите критериии филиала по численности персонала </p>
    4.  
    5.   <p> от <input name="ot" type="text" id="search">
    6.   до  <input name="do" type="text" id="search"> </p>
    7.     <p> Выберите критериии филиала по МС. </p>
    8.  
    9.   <p> от <input name="otms" type="text" id="search">
    10.   до  <input name="doms" type="text" id="search"> </p>
    11.    
    12.       <p> Выберите критериии филиала по менеджерам </p>
    13.  
    14.   <p> от <input name="otmen" type="text" id="search">
    15.   до  <input name="domen" type="text" id="search"> </p>
    16.  
    17.   <p> Контракт? (поставить галочку) <input type="checkbox" name="ma" value="1" /> </p>
    18.  
    19.   <input name="Submit" type="submit" value="Показать">
    20. </form>
    21. <table align="center" border="1">
    22. <?php
    23.  
    24. $ot = $_POST['ot'];
    25. $do = $_POST['do'];
    26. $otms= $_POST['otms'];
    27. $doms = $_POST['doms'];
    28. $otdep = $_POST['otmen'];
    29. $dodep = $_POST['domen'];
    30. $ma=$_POST['ma'];
    31. if ($ot=='')
    32. {
    33.     echo "";
    34. }
    35. else
    36. {
    37. echo "Перечень филиалов: <br> с численностью персонала от ".$ot, " чел. до ".$do." чел. <br> с численностью МС от ".$otms, " чел. до ".$doms." чел. <br> с численностью менеджеров от ".$otmen, " чел. до ".$domen." чел. <br>";
    38.  
    39.  
    40. $result = mysql_query("SELECT a.uid, b.uid ,a.name, a.nas, a.ms, a.men, a.ma, b.dohod, b.rashod, b.dolyasob FROM (test AS a INNER JOIN budgettest as b ON a.uid=b.uid) WHERE  a.nas>$ot and a.nas<$do  AND a.ms>$otms AND a.ms<$doms and a.men>$otmen and a.men<$domen and a.ma=$ma ORDER BY a.nas LIMIT 5" );
    41.  
    42. $n= mysql_num_rows($result);
    43.  
    44. echo ('<tr>');
    45. echo ('<td> <p align="center"> UID </p></td>');
    46. echo ('<td> <p align="center"> Наименование филиала </p></td>');
    47. echo ('<td width="150px"> <p align="center">');
    48.  
    49. echo $n;
    50.  echo ('</p></td>');
    51. echo ('<td> <p align="center"> Кол-во МС </p></td>');
    52. echo ('<td> <p align="center"> Кол-во менеджеров </p></td>');
    53. echo ('<td> <p align="center"> Контракт? </p></td>');
    54.  
    55.  
    56. $daa = mysql_fetch_array( $result);
    57.  
    58. if ($daa[6]==1);
    59.  {
    60. $mama="Контракт";
    61.  }
    62.  
    63. if  ($daa=='') {
    64.     echo "<br>Филиалов не существует";
    65. }
    66. else
    67. {
    68.     do {
    69.  
    70. <tr height='10px' align='center'>
    71. <td width='100'>%s</td>
    72. <td width='300'>%s</td>
    73. <td width='100'>%s</td>
    74. <td width='100'>%s</td>
    75. <td width='100'>%s</td>
    76. <td width='100'>%s</td>
    77. </tr>
    78. ", $daa[0], $daa[2], $daa[3],$daa[4],$daa[5],$mama);
    79.  
    80. }
    81. while ($daa = mysql_fetch_array( $result));
    82. }
    83. }
    84. ?>
    85. </table>
    П.с. за код сильно не ругайте:) еще начинаем только... за любые советы спасибо!
     
  2. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
  3. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    каюсь:) но все же курс дал старт, многое получилось сделать, но и многому через форумы учиться приходится! спасибо большое! все работает... единственное с чекбоксом пока не получается:(
     
  4. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Сделайте вопрос более узким, а то информации мало, а кода много, лучше, когда наоборот.
     
  5. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    собственно вот с чем столкнулся...
    <?php

    $ot2 = $_POST['ot2'];
    $do2 = $_POST['do2'];
    $otms2= $_POST['otms2'];
    $doms2 = $_POST['doms2'];
    $otdep2 = $_POST['otmen2'];
    $dodep2 = $_POST['domen2'];
    $ma2=$_POST['ma2'];

    if ($ot2=='')
    {
    echo "";
    }
    else
    {
    echo .....

    Раньше у меня была проверка на первое значение, чтобы оно обязательно было введено, но теперь если вдруг выбирается поиск по другим критериям?

    if (empty($ot2,$do2,....$domen2) так нельзя... в массив тоже пробовал... не хватает знаний(((

    цель: проверить, если форма чистая, чтобы при загрузке страницы выдалась чистая форма...


    [/php]
     
  6. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    можно так:

    Код (Text):
    1. if( empty( $ot2) || empty( $do2)) { ... }
     
  7. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    Вообще перестал показывать... мож не туда вставил?
    if (empty($ot2) || empty( $do2)|| empty( $otms2)|| empty( $doms2)|| empty( $otdep2)|| empty( $dodep2))
    {
    echo '';
    }

    else {
     
  8. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    а если форма будет из 40-50 переменных? я планирую большую... как их все разом проверить? или тут вообще другой алгоритм?
     
  9. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    || заменил на and - заработало...

    и все же - а если 40-50 переменных? можно как-нить через массив? хотя из все равно все перечислять....
     
  10. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    я обычно делаю с помощью массивов. Например, для получения условия на выборку данных
    PHP:
    1.  
    2. $cond=array();
    3. if(isset($ot!=''))
    4. {
    5.      $cond[]="a.nas>$ot":
    6. }
    7. if(isset($do!=''))
    8. {
    9.      $cond[]="a.nas<$do":
    10. }
    11. if(isset($otms2!=''))
    12. {
    13.      $cond[]="a.ms>$otms2":
    14. }
    15. if(isset($doms !=''))
    16. {
    17.      $cond[]="a.ms<$doms ":
    18. }
    19. .....
    20. if(sizeof($o)>0)
    21. {
    22.       $fullcondition=implode(' and ', $cond);
    23.       $result = mysql_query("SELECT a.uid, b.uid ,a.name, a.nas, a.ms, a.men, a.ma, b.dohod, b.rashod, b.dolyasob FROM (test AS a INNER JOIN budgettest as b ON a.uid=b.uid) WHERE   $fullcondition ORDER BY a.nas LIMIT 5" );
    24. ........
    25. }
    26. else
    27. {
    28.       //форма чистая
    29. }
    30.  
    31.  
     
  11. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    Спасибо! тоже вариант!
     
  12. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    большое спасибо за помощь!!! очень продвинулся за сегодня...
    но вот новый гвоздь...

    SELECT a.uid, a.tip, b.uid ,a.name, a.nas, a.ms, a.dep, a.ma, b.dohod, b.rashod, b.dolyasob FROM (geo_test AS a INNER JOIN geo_budgettest as b ON a.uid=b.uid) WHERE 1=1 AND a.dep > '34' AND a.tip= '2' AND a.tip= '3' ORDER BY a.nas LIMIT 50

    вот какой получается пока select путем наращивания...
    AND a.tip= '2' AND a.tip= '3' - это же неверно? должно быть по идее ИЛИ (OR)???

    тогда у меня не получается связать... я не знаю какие 4 варианта будут выбраны...
    if ($_POST['go']==2){
    $where = $where . " AND a.tip= '{$_POST['go']}'";
    $text=$text. "<br> ГО";
    }

    if ($_POST['mr']==3){
    $where = $where . " AND a.tip= '{$_POST['mr']}'";
    $text=$text. "<br> МР";
    }
    if ($_POST['gp']==4){
    $where = $where . " AND a.tip= '{$_POST['gp']}'";
    $text=$text. "<br> ГП";
    }
    if ($_POST['sp']==5){
    $where = $where . " AND a.tip= '{$_POST['sp']}'";
    $text=$text. "<br> СП";
    }

    спасибо...
     
  13. dr83

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

    С нами с:
    19 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    Главное спросить... решение нашел... через IN и implode
    runner спасибо за наводку)