Mysql Связать 2 input chekbox - в зависимости от выбранных значений в первом, выводить соответст. во 2

antlantis

Новичок
Здравствуйте, уважаемые программисты!

Подскажите пожалуйста, есть форма - в ней два input chekbox. первый определяет тип сортируемых вещей, второй - подтип.

как связать их, чтобы в зависимости от выбранных типов в первом input chekbox - во втором input chekbox выпадали для выбора только соответсвующие подтипы, а не все.


вот код
HTML:
<form method="GET" action="search_filter.php">
<div>
<span>ТИПЫ</span>
<div overflow:auto>

[php]

$result = mysql_query("SELECT * FROM type",$db);
If (mysql_num_rows($result) > 0)
{
 $row = mysql_fetch_array($result);
 do
 {
 $checked_type = "";
 if ($_GET["type"])
 }
}
echo '
<div><input '.$checked_type.' type="checkbox" name="type[]" value="'.$row["id"].'" id="checktype'.$row["id"].'" /><label for="checktype'.$row["id"].'">'.$row

["type"].'</label></div>
';
}
while ($row = mysql_fetch_array($result));   
}
[/php]
</div>
</div>




<!-- ПОДТИПЫ -->
<div>
<span>Подтип</span>
<div overflow:auto>

[php]
$result1 = mysql_query("SELECT * FROM podtype WHERE type = '$checked_type'",$db);

If (mysql_num_rows($result1) > 0)
{
$row1 = mysql_fetch_array($result1);
do
{
$checked_podtype = "";
if ($_GET["podtype"])
{
if (in_array($row1["id"],$_GET["podtype"]))
{
$checked_podtype = "checked";
}
}
echo '
<div><input '.$checked_podtype.' type="checkbox" name="podtype[]" value="'.$row1["id"].'" id="checkbrend'.$row1["id"].'" /><label for="checkbrend'.$row1["id"].'">'.

$row1["podtype"].'</label></div>
';
}
while ($row1 = mysql_fetch_array($result));   
}
[/php]
</div>
</div>

<center><input type="submit" name="submit" id="submit_s" value="Найти" /></center>
</form>

Код не срабатывает - во второй input chekbox не отбираются соответствующие данные

Заранее спасибо большое!!!
 

Andkorol

Новичок
Это ж бред, а не код, 100%-ный Parse Error:
PHP:
If (mysql_num_rows($result) > 0)
{
 $row = mysql_fetch_array($result);
 do
 {
 $checked_type = "";
 if ($_GET["type"])
 }
}
echo '
<div><input '.$checked_type.' type="checkbox" name="type[]" value="'.$row["id"].'" id="checktype'.$row["id"].'" /><label for="checktype'.$row["id"].'">'.$row

["type"].'</label></div>
';
}
while ($row = mysql_fetch_array($result));  
}
Проверка на выбранные типы в коде где?
 

fixxxer

К.О.
Партнер клуба
Гм, do-while есть, а sprintf нету... Детектор Попова в сомнениях.
 

antlantis

Новичок
Простите, если код слишком плох. Попова курсы смотрел, каюсь...Но данный написан по курсам Жур Артура - интернет-магазин. Он тоже прописывает везде $db.
 

antlantis

Новичок
Убрал сохранение выбранных в чекбоксах значение при перезагрузке страницы, оставил просто 2 запроса - первый на выдачу значений type в input chekbox из таблицы type


<?php
$result = mysql_query("SELECT * FROM type",$db);
If (mysql_num_rows($result) > 0)
{
$row = mysql_fetch_array($result);
do
{
echo '
<div><input type="checkbox" name="type[]" value="'.$row["id"].'" id="checktype'.$row["id"].'" /><label for="checktype'.$row["id"].'">'.$row["type"].'</label></div>
';
}
while ($row = mysql_fetch_array($result));
}
?>


Второй - выбрать из таблицы podtype (в которой также есть поле type) все значения podtype, которые соответсвуют выбранным в первом input chekbox - значениям type

Подскажите пожалуйста, что нужно подставить вместо .... при запросе к БД?
Как прописать в запрос массив с несколькими значениями одной переменной?



<?php
$result1 = mysql_query("SELECT * FROM podtype WHERE .........",$db);

If (mysql_num_rows($result1) > 0)
{
$row1 = mysql_fetch_array($result1);
do
{
echo '
<div><input type="checkbox" name="podtype[]" value="'.$row1["id"].'" id="checkpodtype'.$row1["id"].'" /><label for="checkpodtype'.$row1["id"].'">'.$row1

["podtype"].'</label></div>
';
}
while ($row1 = mysql_fetch_array($result1));
}
?>


Поиски ответов в поисковиках не помогли(
 

Andkorol

Новичок
Примерно так:
PHP:
if(!empty($_GET['type'])){
    $types = array();
    foreach($_GET['type'] as $type)
        $types[] = intval($type);

    $result1 = mysql_query("SELECT * FROM `podtype` WHERE `type` IN (" . implode(", ", $types) . ")");

    // твой остальной код
}
 

antlantis

Новичок
Andkorol, спасибо! почитал немного о указанных Вами в коде функциях и конструкциях. Хотя бы примерно понял, что напрямую без заморочек с массивами не сделать обращение к БД в моем случае.

прочитал что "intval - получает целочисленное значение переменной." , а у меня значения type - слова на английском.

Пока к сожалению, не сработало
 

fixxxer

К.О.
Партнер клуба
PHP:
-        $types[] = intval($type);
+        $types[] = "'" . mysql_real_escape_string($type) . "'";
а лучше возьми тот же SafeMysql и перестань мучаться
 

fixxxer

К.О.
Партнер клуба
Простите, если код слишком плох. Попова курсы смотрел, каюсь...Но данный написан по курсам Жур Артура - интернет-магазин. Он тоже прописывает везде $db.
Два чудака - пара. Не стоит учиться у идиотов. Купи книжку.

(Ну, наверное, не совсем идиоты, раз стольким свои так называемые курсы впарили. Но программировать они не умеют от слова совсем).
 

antlantis

Новичок
fixxxer, спасибо большое, почитаю SafeMysql . Курсы их посоветовали "для начала".) Если можно, подскажите,

- $types[] = intval($type);
+ $types[] = "'" . mysql_real_escape_string($type) . "'";

не понял ))заменить нужно одно на другое?
 

antlantis

Новичок
))))Передам горячий привет от phpclub моему товарисчу-советчику)

По коду в итоге получилось вот так

<?php
$result = mysql_query("SELECT * FROM type",$db);
If (mysql_num_rows($result) > 0)
{
$row = mysql_fetch_array($result);
do
{
echo '
<div><input type="checkbox" name="type[]" value="'.$row["id"].'" id="checktype'.$row["id"].'" /><label for="checktype'.$row["id"].'">'.$row["type"].'</label></div>
';
}
while ($row = mysql_fetch_array($result));
}
?>




<?php

if(!empty($_GET['type']))
{
$types = array();
foreach($_GET['type'] as $type)
$types[] = "'".mysql_real_escape_string($type)."'";


$result1 = mysql_query("SELECT * FROM podtype WHERE type IN (".implode(", ", $types).")",$db);
If (mysql_num_rows($result1) > 0)
{
$row1 = mysql_fetch_array($result1);
do
{
echo '
<div><input type="checkbox" name="podtype []" value="'.$row1["id"].'" id="checkpodtype '.$row1["id"].'" /><label
for="checkpodtype '.$row1["id"].'">'.$row1["podtype "].'</label></div>
';
}
while ($row1 = mysql_fetch_array($result1));
}
}
else {echo 'не извлечены из БД подтипы с данными условиями';}
?>



по прежнему пока подтипы во втором input chekbox не выводятся. С других форумов просмотры есть и ни одного комментария
 

antlantis

Новичок
Подскажите пожалуйста, а $result1 = mysql_query("SELECT * FROM `podtype` WHERE `type` IN (" . implode(", ", $types) . ")"); - `podtype` и `type` - кавычки обязательно нужны? Просто раньше не видел, чтобы в кавычки брались название таблицы и параметр условия
 

antlantis

Новичок
А если мне при условии
if(!empty($_GET['type']))
{.........


}
else {echo 'не извлечены из БД подтипы с данными условиями';}

выдает таки заданное сообщение "не извлечены из БД подтипы с данными условиями"

Значит, искомые значения type в глобальном массиве GET не найдены?
 

antlantis

Новичок
Хотя в первом input chekbox выводит чекбоксы всех типов для выбора. Но видимо при выборе чекбоксов (проставлении галки) - они не заносятся в глобальный массив GET
 

fixxxer

К.О.
Партнер клуба
Ну слушай, ты задаешь вопросы, прямые ответы на которые есть в документации и в любом нормальном учебнике.
Давай ты купишь книжку, того же Котерова PHP5, и прочитаешь? ;)
 
Сверху