Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод данных с чекбоксами
 
 автор: Blondy   (23.04.2010 в 14:51)   письмо автору
 
 

Здравствуйте!
Простите что так часто мучаю людей своими вопросами, но я не до конца что-то понимаю поэтому мой код и работает так же как я понимаю)

Предыстория такая: у меня есть страничка, на ней- выпадающий список, где можно выбрать определённое значение- название асу. При нажатии на кнопке «Просмотр» выводится табличка, в которой и делается вывод всего описания этого выбранного асу. Эта задача, слава богу и умным людям отсюда, решена. Теперь передо мной стоит последняя задача (я на это очень надеюсь):
Ниже под выпадающим списком находятся чекбоксы, 2 штуки (решение о чекбоксах- полностью моя инициатива и может быть неправильной) , где можно выбрать выводить информацию об определённом асу вместе с дополнительными модулями или же без них. Чекбоксы подвешиваю на ту же кнопку «Просмотр». Собственно если поставить галочку в 1 чекбоксе- внизу под табличкой где получается описание асу- приводится табличка с возможными модулями. Если выбрать 2 чекбокс- без модулей, то есть ничего не происходит.
И хотела спросить- правильный ли мой код по таким вот соображениям или всё же надо делать иначе?

<body>
<?php 
$database 
"gaz";
$host "localhost";
$username "root";

$gb=mysql_connect($host,$username,$password);
mysql_select_db("gaz"$gb);
$result =mysql_query("SELECT * FROM nomenklatura",$gb);
$myrow mysql_fetch_array($result);
?>
<table width="100%" border="1">
  <tr>
    <td colspan="2"><p>Здесь шапка</p>
    <p align="right">поиск
    </p>
    </td>
  </tr>
  <tr>

    <td width="20%"><ul>
    <li> <a href="ob_deyatelnisti.php">Область деятельности</a></li>
    <li><a href="produkciya.php">Продукция и услуги</a></li>
    <li><a href="nomenklat.php">Номенклатура</a></li>
    <li><a href="publikaci.php">Раздел публикаций</a> </li>
    <li><a href="o_kompani.php">О компании </a></li>
    <li><a href="kantakti.php">Контакты </a></li>
    </td>
    <td><p>В данном разделе вы можете просматривать номенклатуры товаров а так же найти известный вам товар.</p>
    <form method="post" action="nomenklat.php">
    <fieldset>
    <legend>Выберите критерии для просмотра номенклатур</legend>
    <select name="krit">
    <option value="САУ_КЦ">САУ КЦ</option>
    <option value="2">ПКУ ДО-01</option>
    <option value="3">САУ РГС</option>
    <option value="4">САУ ТП УКПГ</option>
    <option value="5">САУ и Р ТП ГСП</option>
    <option value="6">АСДУ н/м</option>
    <option value="7">САУ и К ГНС</option>
    <option value="8">ПКУ ОГ</option>
    <option value="САУ_ВО">САУ ВО</option>
    <option value="10">САУ ГПА</option>
    </select>
    </fieldset><p>
    <fieldset> 
    <legend>Информация о дополнительных модулях</legend>
    <input type="checkbox" name="luch[]" id="yes" value="11"/>Показать модули <p>
    <input type="checkbox" name="luch[]" id="no" value="12"/>Только базовый комплект<p></p>
    </fildset>
    <input type="submit" value="Просмотр" /> 
    </fieldset>
    </form>
<table width="200" border="1">
    <?php 
    $krit 
mysql_real_escape_string($_POST['krit']);
$result =mysql_query("SELECT * FROM nomenklatura WHERE krnazwanie = '$krit'");
while (
$myrow mysql_fetch_array ($result)) {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
"
,$myrow['krnazwanie'],$myrow['plnazwanie'],$myrow['slowa'],$myrow['opisanie'],$myrow['haracteristika'],$myrow['nazwobes'],$myrow['nazkompl']); // действия
}                           
$luch mysql_real_escape_string($_POST['luch']);
 if (
$luch == '11')
 
$result =mysql_query("SELECT krnazwanie,kodkompl FROM komplekt WHERE krnazwanie = '$krit'",$gb);
$myrow mysql_fetch_array($result);
while (
$myrow mysql_fetch_array ($result)) {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
 "
,$myrow['krnazwanie'],$myrow['kodkompl']);
}
?>
      </table> 
    </p></td>
  </tr>
  <tr>
    <td colspan="2">Нижняя шапка</td>
  </tr>
</table>
</body>

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 15:22)   письмо автору
 
   для: Blondy   (23.04.2010 в 14:51)
 

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

  Ответить  
 
 автор: Blondy   (23.04.2010 в 15:27)   письмо автору
 
   для: neadekvat   (23.04.2010 в 15:22)
 

На сколько я знаю - взаимоисключающие действия. то есть либо базовый комплект либо же с модулями)

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 15:31)   письмо автору
 
   для: Blondy   (23.04.2010 в 15:27)
 

Значит, нужно заменить чекбоксы на радио кнопки:
<input type="radio" name="luch" id="yes" value="11"/>Показать модули <p>
<input type="radio" name="luch" id="no" value="12"/>Только базовый комплект<p></p>
В $_POST['luch'] у вас будет хранится 11 или 12. Но ладно, теперь давайте выяснять, что надо делать в том или ином случаи (т.е. если выбраны модули или если базовый комплект).

  Ответить  
 
 автор: Slo_Nik   (23.04.2010 в 15:29)   письмо автору
 
   для: Blondy   (23.04.2010 в 14:51)
 

попробуйте использовать один чекбокс, уберите атрибуты id и value, атрибуту name присвойте значение mod, например, потом вывидите дамп массива $_POST при отмеченом флажке и не отмечая. Если Вы отметите флажок, то увидите приблизительно такую строку Array ( [krit] => САУ_КЦ [mod] => on ) и проверяйте, если есть в POST элемент mod со значением on, то выводить модули, если нет, то выводить базовый комплект

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 15:32)   письмо автору
 
   для: Slo_Nik   (23.04.2010 в 15:29)
 

Если действия взаимоисключающие, то сейчас вы только запутаете человека ненужными ему в данном конкретном случаи советами

  Ответить  
 
 автор: Blondy   (23.04.2010 в 16:25)   письмо автору
 
   для: neadekvat   (23.04.2010 в 15:32)
 

сделала радио) а если не секрет- а в чём отличие между ними и чекбоксами? какие-то случаи?

Теперь задача такая- допустим, пользователь выбрал САУ_КЦ и нажал "с модулями".
обращаемся в бд. там есть таблицы две, которые нужны.
1- komplekt-spraw
Таблица содержит все данные о модулях всех систем. Своеобразный справочник. с полями:
kodkompl // код комплекта-модуля
nazkompl //название комплекта- модуля
haracteristika //характеристика
cena

2 - komplekt
Таблица в которой есть связь между названием сау и модулями для каждой из них.
поля:
krnazwanie //название сау ( пример- САУ_КЦ)
kodkompl //код комплекта-модуля (это и есть связь с предыдущей таблицей)

В общем это структура таблиц моя, в идеале должно быть так- пользователь выбирает из выпадающего списка САУ_КЦ, нажимает "с модулями".
Выдаётся таблица- описание САУ_КЦ
и ниже выдаётся название комплекта- модуля(исключительно для САУ_КЦ), характеристика и цена оного.

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 18:17)   письмо автору
 
   для: Blondy   (23.04.2010 в 16:25)
 

Пардон, конешн, но я не понимаю) Мб кто-то и поймет, но если бы вы еще графически показали то, что хотите - было бы прелестно, ибо:
1. У вас еще не особо много знаний и объясняетесь вы непонятно (по крайней мере для меня)
2. Вы употребляете страшные слова типа САУ_КЦ что еще больше путает ))

Ну, или еще раз распишите, только так:
Пользователь выбирает модуль, на выходе он видет первое (эти данные беруться из такой-то таблицы таким то образом), и вот это (эти данные из второй таблицы такой-то, вот так-то),
Если пользовател выбирает компоненты, то на выходе...

Вот такое вот хочеццо от вас увидеть, все-таки полностью за вас задачу решать - это неправильно будет, по двум причинам:
1. Вы должны учиться думать, думать лучше (нет предела совершенству)
2. Скорее всего, это коммерческий заказ, мы же вам помогаем бесплатно.

А разница между чекбоксом и радио кнопкой - вы так и не заметили? о,О При чекбоксе можно выбрать несколько пунктов, а при радио кнопке только один из вариантов.

  Ответить  
 
 автор: Blondy   (23.04.2010 в 19:43)   письмо автору
 
   для: neadekvat   (23.04.2010 в 18:17)
 

Я честно попыталась изобразить))
Это случай выбора просто базового комплекта:
http://s44.radikal.ru/i106/1004/d8/3f19625f04eb.jpg

Это если выбран вариант- с модулями:
http://i047.radikal.ru/1004/00/e59030031d6a.jpg

и (попытка не пытка) таблицы которые должны здесь использоваться, начальный вариант который я и хотела спросить, дальше конечно додумаюсь сама!)
http://s45.radikal.ru/i107/1004/9c/a4a104619310.jpg

Спасибо вообще за то что помогаете, спасение в вас)
и если честно- это не коммерческий заказ о чём я уже давно жалею)
Буду крайне счастлива если подскажете как мне заставить работать на этом просто радио кнопки- а дальше сама)

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 20:13)   письмо автору
 
   для: Blondy   (23.04.2010 в 19:43)
 

Ок, примерно так и представлял ^^
Теперь вернемся к предложенной вами структуре. Я её изменю и приведу к тому виду, что привык видеть (т.е. названия на английском) =)
1- komplekt-spraw (переименовываем в modules - ведь это информация о модулях?)
Таблица содержит все данные о модулях всех систем. Своеобразный справочник. с полями:
kodkompl // код комплекта-модуля

если код комплекта - это просто порядковое число, с которым вы его в бд добавили, то поле будет называться id, если же это код модуля, который зависит от других документов (уж пардон, я так и не понял, из какой это области у вас. Но так, в общем случаи бывает приходится сохранять те номера и названия, что хранятся в бухгалтерии или оприходованы экономистами), то тогда называться поле будет code
nazkompl //название комплекта- модуля
Переименовываем в name
haracteristika //характеристика
description
cena -> price

Таким образом, получается таблица:
modules
id (или code) | name | description | price

2 - komplekt
Таблица в которой есть связь между названием сау и модулями для каждой из них.
поля:

Не совсем понятно назначение поля. Из соседней темы я понял, что есть еще таблица nomenklatura. Как все эти три таблицы должны быть связаны?

  Ответить  
 
 автор: Blondy   (23.04.2010 в 20:28)   письмо автору
 
   для: neadekvat   (23.04.2010 в 20:13)
 

В таблице modules будет поле code, а не id, тут придётся использовать код,а не порядковый номер) а так всё верно)
Да, есть таблица nomenklatura, она связана со всем вот этим- поле krnazwanie, которое там используется и в таблице komplekt примерно так:

nomenklatura--------- komplekt ------------------------------------------------------------ komplekt-spraw
krnazwanie --------------krnazwanie (одно и то же значение, к примеру САУ_КЦ)
opisanie kodkompl ----------------------------------------------------------------kodkompl (тот же)
и тд

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 21:05)   письмо автору
 
   для: Blondy   (23.04.2010 в 20:28)
 

Значицо так, вот что я вам рекомендую при условии, что code числовое значение, а не строка типа AS34F. Если это именно такая страшная строка, то введите еще поле id (я привожу в структуре только те поля, которые нужны для взимосвязи таблиц)
modules
id | name
А в nomenklatura храните не название, а id модуля в таблице modules (и через форму передавайте не название, а id модуля). В принципе, тут два варианта:
1. Если в nomenklatura вы храните только id (например module_id), тогда при каждом запросе нужно будет делать примерно следующее:
("SELECT * FROM nomenklatura as t1, modules as t2 WHERE t1.module_id = $krit AND t2.id = $krit");
И тут главное чтобы не было одинаквых имен полей в этих таблицах.

В общем-то, можно т через LEFT JOIN объединить, но результат тот же получается, ибо условия заранее известны, да и что-то я давно с бд не работал, шарики за ролики заходят =))

Так вот, у вас будет информация из двух таблиц, и выводить можно только ту, что нужна.
В принципе, правильнее было бы в зависимости от того, что попросить пользователь использовать, но ведь нам надо узнать имя модуля для его вывода. И тут в принципе можно денормализовать бд (не думаю, что это так страшно в данном случаи =) ), ввести module_id но оставить krnazwanie (назову его module_name, а то ваше даже как-то не читается =) ) и тогда если пользователь не просил информацию о модулях, делать запрос только к одной таблице - nomenklatura.

Фух, что-то я давно не практиковался уже, голова со скрежетом алгоритмы пытается родить))

  Ответить  
 
 автор: Blondy   (23.04.2010 в 22:31)   письмо автору
 
   для: neadekvat   (23.04.2010 в 21:05)
 

Я поняла что мало что поняла)) Но попытаюсь разобраться, спасибо вам огромное!) И голова отменная, могу заметить)

можно я задам последний вопрос и не буду больше вас мучить?)
Я пока что практикуюсь как я в общем сделаю вывод с радио кнопками, для примера упростила свою таблицу

http://s005.radikal.ru/i209/1004/7d/c7cf6a1de409.jpg

И вот теперь есть поле dlyanazw , которое хранит у меня то же что и в таблице nomenklatura поле krnazwanie, а точнее- в них одно и тоже пока что занесены только две строки САУ_КЦ и САУ_ВО соответственно.
И вот как я пытаюсь вывести просто посмотреть будет ли работать радио-кнопки:


$luch = mysql_real_escape_string($_POST['luch']);
 if ($luch == '11')
 $result =mysql_query("SELECT * FROM komplekt-spraw WHERE dlyanazw = '$krit'",$gb);
$myrow = mysql_fetch_array($result);
while ($myrow = mysql_fetch_array ($result)) {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
 
 ",$myrow['kodkompl'],$myrow['dlyanazw'],$myrow['nazkompl'],$myrow['haracteristika'],$myrow['cena']);
}
?>


Это хотя бы в какой-то части правильно теоретически? (маленькая заметка- попытка отвлечься от всех проблем с бд и пока просто поглядеть как должны работать кнопки и отображаться хотя бы что-то)

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 22:53)   письмо автору
 
   для: Blondy   (23.04.2010 в 22:31)
 

Чтобы разобраться с кнопками, создайте отдельный пустой файл следующего содержания:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
print_r($_POST);
}
?>
<form action="" method="post">
<input type="radio" name="somename" value="1">Вариант 1<br>
<input type="radio" name="somename" value="2">Вариант 2<br>
<input type="radio" name="somename" value="3">Вариант 3<br>
<input type="radio" name="somename" value="4">Вариант 4<br>
<input type="submit">
</form>

И попробуйте поотправлять тот или иной вариант

И еще, почитайте про бд какую-нибудь литературу. Таблица обязательно должна иметь первычный ключ (или ключевое поле). Какое - я уже предложил добавить поле id, его и следует сделать ключевым.

  Ответить  
 
 автор: Blondy   (23.04.2010 в 23:20)   письмо автору
 
   для: neadekvat   (23.04.2010 в 22:53)
 

Спасибо вам огромнейшее за терпение и подсказки!!!!))
И читаем постепенно что под руки попадается) Хватаюсь за всё, что только получаться начинает)

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 23:22)   письмо автору
 
   для: Blondy   (23.04.2010 в 23:20)
 

Главное не количество прочитанного, а количество усвоенного ;)
Еси чо - обращайтесь =)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования