SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.03.2011 08:59:13

I_CaR
Участник
Зарегистрирован: 22.03.2011
Сообщений: 4

Двойная выборка по одной БД

Доброго всем времени суток.
Реализую следующую ситуацию:
Есть две формы селекта.
1-ая марка
2-ая модель
(И есть одна таблица)
Действие:
Делаю первый запрос - получаю список марок в селект:

<? PHP

// первый запрос для первого селекта (марки):

$result2 = mysql_query ("SELECT DISTINCT marka FROM select_baga", $db2);
$num2 = mysql_num_rows($result2);
$marka_auto = mysql_result($result2,1,0);
?>
<select id="select-1" style="width:280px" name="slct2">
  <option value="0">выбирите марку...</option>
  <?
    for ($i =1; $i < $num2; $i++) // сколько оригинальных строк, столько делаем и пунктов в селекте
    {

        $marka_auto = mysql_result ($result2,$i,0); //присваиваем значение (марок) переменной
        echo "<option value=$marka_auto>$marka_auto</option>"; // вводим в пункты селекта название марок
       
    }
       
    ?>
</select>

<input type="submit" name="btn" value='Ok...'> // отсылаем программе значение 1-го селекта (т.е. название марки)

<?php
$p2 = @$_POST['slct2']; //получаем $p2 (наименование марки, НО оно почему-то только до пробела! если "МАРКА-X2", то переменная нормальная, а если "МАРКА Х2", то $_POST возвращает "МАРКА". Почему так, не разобрался, но суть не в этом.)

// Делаем второй запрос для второго селекта (модели):

$result3 = mysql_query ("SELECT DISTINCT model, marka FROM select_baga WHERE marka LIKE '$p2%'", $db);
// почему сделал $p2%? Потому-что
$num3 = mysql_num_rows($result3);
?>
<form name="data_input_2" method="post">

  <select id="select-2" style="width:280px" name="slct3">
    <option value="0">Выберите модель...</option>
    <?
   
   
    for ($i2 =0; $i2 < $num3; $i2++) // сколько оригинальных строк, столько делаем и пунктов в селекте
    {
        $model_auto = mysql_result ($result3,$i2,0); //присваиваем значение (модели) переменной
        echo "<option value=$model_auto>$model_auto</option>"; // вводим в пункты селекта название моделей
    }

    ?>
  </select>

<input type="submit" name="btn2" value='Ok...'> // отсылаем программе значение 2-го селекта (т.е. название модели)



<?PHP

// Это ТРЕТИЙ запрос (вывод таблицы) !!!!!!!!!!


    $p3 = @$_POST['slct3']; //получаем $p3 из 2-го селекта, ситуация с пробелом, такая же как и с $p2
   

$result4 = mysql_query ("SELECT * FROM select_baga WHERE model = '$p3'", $db);
// а хотелось бы так ("SELECT * FROM select_baga WHERE model = '$p3' AND marka=$p2", $db);
// ВОТ В ЭТОМ И ГЛАВНЫЙ КАМЕНЬ ПРЕТКНОВЕНИЯ! (см. после кода.)

$num4 = mysql_num_rows($result4);
$column = mysql_num_fields($result4);

    ?>
    <font face="Trebuchet MS" size="2">
    <br><br>
    корректный вывод данных:
    <br>
    <table border="1" cellpadding="5" cellspacing="0" bordercolor="#999999">
    <tr>
    <th>марка</th>
    <th>модель</th>
    <th>...и так далее...</th>
    <th>...и так далее...</th>

    </tr>
    <?


    for ($i3 =0; $i3 < $num4; $i3++)
    {
        $pole_00 = mysql_result ($result4,$i3,0);    //марка
        $pole_01 = mysql_result ($result4,$i3,1);    //модель
        $pole_02 = mysql_result ($result4,$i3,2);    //...и так далее...
        $pole_03 = mysql_result ($result4,$i3,3);    //...и так далее...
   
        echo "    <tr align='center'>
                <td>$pole_00</td>
                <td>$pole_01</td>
                <td>$pole_02</td>
                <td>$pole_03</td>

                </tr>"
;        
    }
    ?>
    </table>

Дело в том, что после нажатия второго buttona значение $p2 обнуляеться, так как при вызове SUBMIT страница перегружается и php и sql делают всё повторно, как можно сохранить переменную $p2?
Или как реализовать это
("SELECT * FROM select_baga WHERE model = '$p3' AND marka='$p2'", $db)

в моей ситуации?

Буду благодарен за помошь!
С Уважением I.CaR®

Неактивен

 

#2 22.03.2011 11:45:59

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Двойная выборка по одной БД

Ну, как минимум Вам стоит вместо

echo "<option value=$marka_auto>$marka_auto</option>";

писать
echo "<option value=\"".$marka_auto."\">$marka_auto</option>";


и вместо
echo "<option value=$model_auto>$model_auto</option>";
// вводим в пункты селекта название моделей
напишите
echo "<option value=\"".$model_auto."\">$model_auto</option>";
// вводим в пункты селекта название моделей

Тогда должна исчезнуть проблема

I_CaR написал:

$p2 = @$_POST['slct2']; //получаем $p2 (наименование марки, НО оно почему-то только до пробела! если "МАРКА-X2", то переменная нормальная, а если "МАРКА Х2", то $_POST возвращает "МАРКА". Почему так, не разобрался, но суть не в этом.)

По Вашему коду не совсем понятно, где у вас закрывается форма и сколько у Вас всего форм. Откровенно смущает то, что первый select и
<input type="submit" name="btn" value='Ok...'> // отсылаем программе значение 1-го селекта (т.е. название марки)
вообще не находятся в форме, в этом случае, конечно, сервер не должен получить их значений.

I_CaR написал:

Дело в том, что после нажатия второго buttona значение $p2 обнуляеться, так как при вызове SUBMIT страница перегружается и php и sql делают всё повторно, как можно сохранить переменную $p2?

Для диагностики вставьте вначале скрипта строку
print "<pre>"; print_r($_POST); print "</pre>";
Это вывод массива $_POST, и смотрите каждый раз, что в нём присутствует.

Для того, чтобы в массиве $_POST оказалось значение $_POST['slct2'], которое Вы (по-дороге зачем-то подавляя ошибку) заносите в переменную $p2 нужно, чтобы перед этим на сервер была отправлена форма, в которой находился бы элемент с именем 'slct2'. Судя по Вашему коду этот элемент не находится в форме вовсе, отсюда, я так думаю, и проблема.
Ни один <select> или <input> не должен находится вне формы.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 24.03.2011 06:33:13

I_CaR
Участник
Зарегистрирован: 22.03.2011
Сообщений: 4

Re: Двойная выборка по одной БД

deadka написал:

Ну, как минимум Вам стоит вместо

echo "<option value=$marka_auto>$marka_auto</option>";

писать
echo "<option value=\"".$marka_auto."\">$marka_auto</option>";


и вместо
echo "<option value=$model_auto>$model_auto</option>";
// вводим в пункты селекта название моделей
напишите
echo "<option value=\"".$model_auto."\">$model_auto</option>";
// вводим в пункты селекта название моделей

Большое Вам спасибо все элементы селект и баттон находятся в формах из две, проблему потели пробелов как раз решил путём заключения переменной value в кавычки

echo "<option value='$marka_auto'>$marka_auto</option>";

Большое Вам спасибо за отклик!
Модуль работает, вот ссылка на него.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson