В общем сооружаю я долго долго костыли и казалось мне что должно все работать толково. В итоге встал я и совершенно не понимаю что дальше делать. очень прошу помочь. Как это должно работать: я должен в листбоксе выбрать значение, а потом передать это значение в переменную, после этого сделать запрос из базы по соответствию этому значению, вроде по моей логике все верно, но не работает. В чем косяк? PHP: <!doctype html> <html> <head> <?php include('inc_db.php'); echo "<input type='text' class='iholi' id='test1' name='period' value='Введите период'>"; ?> </head> <body> <p>Статус станции<br> <div class="orent"> <form action="<?=$_SERVER['PHP_SELF']?>" method="post" id="myForm"> <select name='lang' onchange="document.getElementById('myForm').submit()"> <option>Все</option> <option>Годен</option> <option>Ожид.ремонта</option> <option>На заводе</option> <option>Брак</option> <option>Списан</option> </select> </form> </div> <div class="article"> <?php if (isset($_POST['lang'])){ $oper = $_POST['lang']; switch ($oper){ case '0': $lang='Все'; break; case '1': $lang='Годен'; break; case '2': $lang='Ожид.ремонта'; break; case '3': $lang='На заводе'; break; case '4': $lang='Брак'; break; case '5': $lang='Списан'; break;} echo $lang; } ?> </p> <?php // Создать текст запроса $query = "SELECT [ТипСУ], [Зав№СУ], [Дата Д-ж СУ], [Статус] FROM [7Учет неисправностей су] Where (([7Учет неисправностей су].[Дата Д-ж СУ]) between #01/01/2018# and #11/01/2018#) and (([7Учет неисправностей су].[Статус])= $lang )"; // Подготовить запрос $result = odbc_prepare($connect,$query); // Выполнить запрос и вывести результаты odbc_execute($result); odbc_result_all($result, "BGCOLOR='#c0c0c0' border=1"); // Обработка результатов закончена, освободить память odbc_free_result($result); // Закрыть соединение odbc_close($connect); echo $select; } ?> <form method="POST"> <input type="submit" name="nazvanie_knopki" value="Нажмите" /> </form> </body> </html>
изначально не полностью понял вопроса. Получается изначально при проверке произошел ли выбор в lang приходит индекс выбранного значения, а уже потом передается в oper для case. Потому уже исходя из case присваевается lang тестовое значение соответствующее индексу выбора, но уже ручнопалочным способом)))
изначально не полностью понял вопроса. Получается изначально при проверке произошел ли выбор в lang приходит индекс выбранного значения, а уже потом передается в oper для case. Потому уже исходя из case присваевается lang тестовое значение соответствующее индексу выбора, но уже ручнопалочным способом)))
Так-с, отвечу развернуто, чтобы полностью было ясно. В этом месте, о котором Вы говорите все работает (не думаю что это реализовано толково, но это работает), ошибки выдает такие:
Как бы это не было странно switch работает Не работает запрост по переменной lang, хоть в ней и хранятся нужные данные
вы запутались в переменных. в методе пост там не переменная $lang передается а именно индекс выбранного листбокаса под названием lang. А уже потом при свиче переменной $lang присваевается текстовое значение. Разобрался в чем была проблема, оказывается в запросе SELECT переменную надо брать в ковычки: ''. Теперь работает:
пропиши в 30 строке PHP: print_r ( $oper = $_POST['lang'] ); --- Добавлено --- выбери брак и результат сюда выпиши
Для проверки я под листбоксом echo вывожу значение переменной $lang, под лисбоксом собственно и показывает выбор "брак". Правда еще надо рабратьс\я как сделать так чтобы выбор в листбоксе не обнулялся а оставался тем какой выбор и был сделан.
У меня разрыв шаблона, пост реально текст возвращает, не могу сам понять как этот костыль работает)))
В базе поле "статус" в каком формате (число, или текст)? Но если в <option> добавить атрубут value, то будет возвращаться именно он.