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

Форум MySQL

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

 

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

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

тема: мультизапрос в MySQL через форму HTML
 
 автор: ARIRAN   (07.07.2006 в 16:46)   письмо автору
 
 

всем привет. это снова я. вопрос такой:


<select name="direction" multiple size="10" class="multiple">
         <option value="Север">Север</option>
         <option value="Северо-Восток">Северо-восток</option>
         <option value="Восток">Восток</option>
         <option value="Юго-Восток">Юго-восток</option>
         <option value="Юг">Юг</option>
         <option value="Юго-Запад">Юго-запад</option>
         <option value="Запад">Запад</option>
         <option value="Северо-Запад">Северо-запад</option>
         </select>

имеется вот такая форма в которой можно выбрать несколько условий для поиска одновременно. собственно сам вопрос как передать в запрос к базе WHERE direction=''$FORM{'direction'}" сразу двух запросов например на Юг и на Север если определяющее поле для обоих запросов одинаковое direction?

   
 
 автор: Artemy   (07.07.2006 в 17:18)   письмо автору
 
   для: ARIRAN   (07.07.2006 в 16:46)
 

Данные будут в массиве, $HTTP_POST_VARS['direction']. Далле используя не хитрый код
<?PHP
  $query 
implode("','",$HTTP_POST_VARS['direction']);
  
$result = @mysql_query("SELECT * FROM table WHERE direction IN ('".$query."')");
?>

Вы получите результат запроса.

   
 
 автор: ARIRAN   (10.07.2006 в 10:33)   письмо автору
 
   для: Artemy   (07.07.2006 в 17:18)
 

да только с формы то еще идут данные... то есть у меня будет массив с запросом и в этом массиве одно из значений будет вложенный массив direction?

   
 
 автор: valenok   (10.07.2006 в 10:56)   письмо автору
 
   для: Artemy   (07.07.2006 в 17:18)
 

Данные будут в массиве $_POST

   
 
 автор: ARIRAN   (10.07.2006 в 11:05)   письмо автору
 
   для: valenok   (10.07.2006 в 10:56)
 

не получается их вычленить. чето я недопонимаю в этой сказке...


Как передать параметры из формы с множественным значением (select multiple, значение checkbox'ов и т.д)? 
Для checkbox'a: 
<input type="checkbox" name="id[]" value="0"/> 
<input type="checkbox" name="id[]" value="1"/>
 
для multiple: 
<select name="id[]" multiple="multiple"> 
<option value="0">0</option> 
<option value="1">1</option> 
</select> 
данные из формы придут, как массив $id со значениями value. 


нашел вот такое в инете. к форме в первом посте добавил еще один селект


<select name="kontrakt[2]" multiple size="10" class="multiple" >
                 <option value="Аренда">Аренда</option>
                 <option value="ППА">ППА</option>
                 </select>


забил для проверки строку print "$FORM{$name}";

и делаю запрос


my $sth = $dbh->prepare("SELECT * FROM realty WHERE kontrakt='$FORM{'kontrakt[0]'}' AND WHERE kontrakt='$FORM{'kontrakt[1]'}'");


в результате он мне пишет СеверВостокЮгАрендаППА (то есть $FORM{$name} он получет весь а вот в результатах запроса пусто. видимо я чето не понял в конструкции WHERE kontrakt='$FORM{'kontrakt[0]'}' AND WHERE kontrakt='$FORM{'kontrakt[1]'}'"

   
 
 автор: valenok   (10.07.2006 в 11:28)   письмо автору
 
   для: ARIRAN   (10.07.2006 в 11:05)
 


<form method='post'>
<input type='checkbox' name='type[]' value=0>Контракт<BR>
<input type='checkbox' name='type[]' value=1>ППА<BR>
<select name="direction[]" multiple size="10" class="multiple"> 
        <option value="Север">Север</option> 
        <option value="Северо-Восток">Северо-восток</option> 
        <option value="Восток">Восток</option> 
        <option value="Юго-Восток">Юго-восток</option> 
        <option value="Юг">Юг</option> 
        <option value="Юго-Запад">Юго-запад</option> 
        <option value="Запад">Запад</option> 
        <option value="Северо-Запад">Северо-запад</option> 
        </select><input type=submit><BR><BR
<?
if(!isset($_POST['direction'][0]) AND !isset($_POST['type'][0]))
    {echo 
'1'mysql_query("SELECT * FROM table"); die();}
elseif(!isset(
$_POST['direction'][0]) AND isset($_POST['type'][1]))
    {echo 
'2'mysql_query("SELECT * FROM table WHERE type='ppa' OR type='contrakt'"); die();}
elseif(!isset(
$_POST['direction'][0]) AND isset($_POST['type'][0]))
    {echo 
'3'mysql_query("SELECT * FROM table WHERE type='ppa' OR type='contrakt'"); die();}
elseif(isset(
$_POST['direction'][0]) AND isset($_POST['type'][0]))
    {
mysql_query("SELECT * FROM table WHERE direction IS NOT NULL"); die();};

if(isset(
$_POST['type'][1])){$query="SELECT * FROM table WHERE (type='ppa' OR type='contract) AND (";}
else{
$query="SELECT * FROM table WHERE type='contract AND (";}

$c=count($_POST['direction']);$c--; 
for (
$i=0;$i<=$c;$i++){ 
if(
$i!=$c){$query.="dir=".$_POST['direction'][$i]." OR ";}
else{
$query.="dir=".$_POST['direction'][$i];}
}
$query.=')';
echo 
$query;

   
 
 автор: ARIRAN   (10.07.2006 в 11:55)   письмо автору
 
   для: valenok   (10.07.2006 в 11:28)
 

о. спасибо :) теперь будем разбирать как это будет в Perl :)

   
 
 автор: valenok   (10.07.2006 в 11:01)   письмо автору
 
   для: ARIRAN   (07.07.2006 в 16:46)
 

name="direction[]"
Таким образом если выберем несколько значений - получим такое:
Array (

[direction] => Array
(
[0] => Юго-Восток
[1] => Юг
[2] => Юго-Запад
[3] => Запад
)

)

   
 
 автор: valenok   (10.07.2006 в 11:11)   письмо автору
 
   для: valenok   (10.07.2006 в 11:01)
 

А потом

<?
if(!isset($_POST['direction'][0])){die();}
$query="SELECT * FROM table WHERE ";

$c=count($_POST['direction']);$c--; 
for (
$i=0;$i<=$c;$i++){ 
if(
$i!=$c){$query.="dir=".$_POST['direction'][$i]." OR ";}
else{
$query.="dir=".$_POST['direction'][$i];}
}
echo 
$query;

   
 
 автор: ARIRAN   (12.07.2006 в 12:31)   письмо автору
 
   для: valenok   (10.07.2006 в 11:11)
 

блин чего-то у меня не выходит ничерта :( народ, напишите полностью как это будет-то?
форма полная такая:

<form action="/realtor1/realty.php" method=GET>
<table><tr valign="top">
<td><select name="direction[]" multiple size="10" class="multiple">
         <option value="Север">Север</option>
         <option value="Северо-Восток">Северо-восток</option>
         <option value="Восток">Восток</option>
         <option value="Юго-Восток">Юго-восток</option>
         <option value="Юг">Юг</option>
         <option value="Юго-Запад">Юго-запад</option>
         <option value="Запад">Запад</option>
         <option value="Северо-Запад">Северо-запад</option>
         </select>
    </td>
    <td>
    <select name="kontrakt[]" multiple size="10" class="multiple" >
         <option value="Аренда">Аренда</option>
         <option value="Продажа">Продажа</option>
         </select>
    
    </td></tr>
    <tr><td>Площадь от <input size="4" name="minsquare"> до <input size="4" name="maxsquare"></td></tr>
    <tr><td>Цена от <input size="4" name="minprice"> до <input size="4" name="maxprice"></td></tr>
    <tr><td><INPUT TYPE="Submit" VALUE="Искать" style="font-size: 8pt">
<input type="reset" value="Сброс" style="font-size: 8pt"></td></tr>
    </table>
</form>

чет я не врубаюсь совсем :(

   
 
 автор: Trianon   (12.07.2006 в 12:33)   письмо автору
 
   для: ARIRAN   (12.07.2006 в 12:31)
 

Вы бы дамп структуры таблиц привели чтоли....

   
 
 автор: ARIRAN   (12.07.2006 в 16:05)   письмо автору
 
   для: Trianon   (12.07.2006 в 12:33)
 

если я правильно понял что такое дамп то вот он такой:
все в одну строку:

lotnumber(номер лота типа ID) | purpose (назначение здания: склад, офис)| typeofbuilding (тип помещения: склад, офис)| kontrakt (вид договора: аренда, продажа)| priceform (цена за 1 кв.м площади)| priceforminsquare (цена за минимальную площадь тут возможны скидки поэтому оно нужно потому что перемножением цены на площадь сумма может не получаться)| minsquare(минимальная площадь которая сдается или продается) maxsquare (максимальная площадь которая сдается или продается)| direction (направление по району Север Юг Запад Восток С-Ю С-З и т.д.)| street (улица номер дома)| information (общая информация что входит в аренду и пр.)

нужно чтобы при заходе на страницу отображалась вся база по 10 строений на листе и форма запроса в которой пользователь может задавать поиск в базе по полям которые в этой форме:

<form action="/realtor1/realty.php" method=GET> 
<table><tr valign="top"> 
<td><select name="direction[]" multiple size="10" class="multiple"> 
        <option value="Север">Север</option> 
        <option value="Северо-Восток">Северо-восток</option> 
        <option value="Восток">Восток</option> 
        <option value="Юго-Восток">Юго-восток</option> 
        <option value="Юг">Юг</option> 
        <option value="Юго-Запад">Юго-запад</option> 
        <option value="Запад">Запад</option> 
        <option value="Северо-Запад">Северо-запад</option> 
        </select> 
    </td> 
    <td> 
    <select name="kontrakt[]" multiple size="10" class="multiple" > 
        <option value="Аренда">Аренда</option> 
        <option value="Продажа">Продажа</option> 
        </select> 
     
    </td></tr> 
    <tr><td>Площадь от <input size="4" name="minsquare"> до <input size="4" name="maxsquare"></td></tr> 
    <tr><td>Цена от <input size="4" name="minprice"> до <input size="4" name="maxprice"></td></tr> 
    <tr><td><INPUT TYPE="Submit" VALUE="Искать" style="font-size: 8pt"> 
<input type="reset" value="Сброс" style="font-size: 8pt"></td></tr> 
    </table> 
</form>


street (улица номер дома)| information (общая информация что входит в аренду и пр.) эти два поля в выборках не участвуют а просто отображаются.

   
 
 автор: Trianon   (12.07.2006 в 16:45)   письмо автору
 
   для: ARIRAN   (12.07.2006 в 16:05)
 

Дамп, это то, что phpMyAdmin выдает с закладки Export

   
 
 автор: ARIRAN   (12.07.2006 в 17:20)   письмо автору
 
   для: Trianon   (12.07.2006 в 16:45)
 

-- Дамп данных таблицы 'realty'
--

INSERT INTO 'realty' VALUES ('lotnumber', 'purpose', 'typeofbuilding', 'kontrakt', 'priceform', 'priceforminsquare', 'minsquare', 'maxsquare', 'direction', 'information');
INSERT INTO 'realty' VALUES ('1018017206', 'офис', 'офис-скл', 'Аренда', '1296.0', '30240.0', '280.0', '280.0', 'Восток Первомайская', 'подвал, идет ремонт; под офис, склад, торговлю, сферу обслуживания, возм. аренда');
INSERT INTO 'realty' VALUES ('301060239', 'склад', 'склад', '', '1503.0', '45841.5', '366.0', '366.0', 'Центр Кудринская пл.', 'оборудованный склад, отапл., пандус, 2 холод. камеры, охрана, без комиссии');
INSERT INTO 'realty' VALUES ('1018012352', 'склад', 'склад', 'ППА', '300.0', '12500.0', '500.0', '500.0', 'Северо-Восто Будайская', 'подвал под общежитием, ремонт не закончен; под 4 сауны, физк.-озд. центр; возм. перепрофилирование под склад, офисы; ППА до 2028 лет, возм. СА');
INSERT INTO 'realty' VALUES ('1018012642', 'склад', 'склад', '', '200.0', '16666.67', '1000.0', '1000.0', 'Северо-Восто г. Сергиев Посад', 'уч. 1 Га в аренде на 49 л., ж/б. панели, холодный, коммуникации по границе, еврофура');
INSERT INTO 'realty' VALUES ('1018016674', 'склад', 'склад', '', '996.0', '154380.0', '1860.0', '1860.0', 'Юго-Восток г. Люберцы', 'на огорож. терр., 3 хол. склада с воротами, высота- 4 м, 430 кв. м - склад и 630 кв. м - админ. зд. - недострой, 40 кВа, все коммуникации, еврофура, ж/д ветка');
INSERT INTO 'realty' VALUES ('1039010135', 'склад', 'склад', 'ППА', '56.0', '1003.33', '215.0', '215.0', 'Северо-Запад Народного Ополчения', 'отапл., ППА до 2011 года, аренда - 81 $ кв/м/год');
INSERT INTO 'realty' VALUES ('1057008844', 'склад', 'склад', '', '358.0', '191828.33', '6430.0', '6430.0', 'Восток г. Орехово-Зуево', '2 ОСЗ: 510 и 5920 кв.м, отапл., еврофура, участок в бессрочном пользование, без комиссии');

   
 
 автор: Trianon   (12.07.2006 в 17:28)   письмо автору
 
   для: ARIRAN   (12.07.2006 в 17:20)
 

Это дамп данных.
А нужен дамп структуры.
Кстати, Вас удивляет, что Северо-Восток не ищется?
Я его тоже не вижу. )

   
 
 автор: ARIRAN   (12.07.2006 в 17:31)   письмо автору
 
   для: Trianon   (12.07.2006 в 17:28)
 

северо восток не ищется меня не удивляет совсем :) я знаю что там пропущена К :) меня удивляет как бы это сказать то что я не понял как при одновременно запросе Юг и Восток отделить запрос Юг от Востока :)

--
-- Структура таблицы 'realty'
--

CREATE TABLE 'realty' (
'lotnumber' text NOT NULL,
'purpose' text NOT NULL,
'typeofbuilding' text NOT NULL,
'kontrakt' text NOT NULL,
'priceform' text NOT NULL,
'priceforminsquare' text NOT NULL,
'minsquare' text NOT NULL,
'maxsquare' text NOT NULL,
'direction' text NOT NULL,
'information' text NOT NULL
) TYPE=MyISAM;

оно?

   
 
 автор: Trianon   (12.07.2006 в 17:39)   письмо автору
 
   для: ARIRAN   (12.07.2006 в 17:31)
 

оно. А теперь поставьте пожалуйста обе галочки (и структура и данные) - сформируйте общий дамп. И прикрепите его аттачем. А то форум в текстах реплик обратные кавычки искажает, и дамп портится.

   
 
 автор: ARIRAN   (12.07.2006 в 17:42)   письмо автору
1.3 Кб
 
   для: Trianon   (12.07.2006 в 17:39)
 

вот вроде бы так. я просто первый раз вообще сталкиваюсь с mysql поэтому туплю по страшному :)

   
 
 автор: Trianon   (12.07.2006 в 17:41)   письмо автору
 
   для: ARIRAN   (12.07.2006 в 17:31)
 

Я бы на Вашем месте перенумеровал направления и хранил бы в таблице номер от 1 до 8
А центр отсчета - в отдельной колонке.

   
 
 автор: ARIRAN   (12.07.2006 в 17:53)   письмо автору
 
   для: Trianon   (12.07.2006 в 17:41)
 

пардон но ничего не понял :( то есть сделать еще один столбик в таблице в который записывать к примеру если Север то 1 если Восток то 2 и делать выборки из таблицы используя в запросе

<option value="1">Север</option>
<option value="2">Восток</option>


так?

   
 
 автор: Trianon   (12.07.2006 в 18:03)   письмо автору
 
   для: ARIRAN   (12.07.2006 в 17:53)
 

именно так.

   
 
 автор: ARIRAN   (12.07.2006 в 18:13)   письмо автору
 
   для: Trianon   (12.07.2006 в 18:03)
 

это я так думаю для ускорения поиска по таблице... только я один фиг не могу сделать что с цифрами что со словами :) плюс к этому я ж данные завожу скриптом тем скачанным это илбо его модифицировать либо новый писать :(

   
 
 автор: Trianon   (12.07.2006 в 19:10)   письмо автору
 
   для: ARIRAN   (12.07.2006 в 18:13)
 

Так что ж, Вы теперь из-за этим скриптом по рукам и ногам связаны?
Нет, я не спорю, скорее всего можно написать поиск и по имеющейся структуре таблицы.
Только делать это ...кхм... уж очень на любителя.

   
 
 автор: ARIRAN   (13.07.2006 в 10:38)   письмо автору
 
   для: Trianon   (12.07.2006 в 19:10)
 

дык я просто не могу написать скрипт который бы конвертил екселевскую таюлицу в мускул с добавлением новых полей :)

   
 
 автор: Trianon (из кабака)   (13.07.2006 в 10:51)
 
   для: ARIRAN   (13.07.2006 в 10:38)
 

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

   
 
 автор: ARIRAN   (13.07.2006 в 11:38)   письмо автору
 
   для: Trianon (из кабака)   (13.07.2006 в 10:51)
 

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

поправка. видимо будет два столбца :( в екселе оказывается больше 7 условия в одну ячейку нельзя вбивать, а у меня их 9.

   
 
 автор: ARIRAN   (14.07.2006 в 18:17)   письмо автору
 
   для: ARIRAN   (07.07.2006 в 16:46)
 

это опять я. надумал пойти от простого к сложному. сделал табличку в которой фигурируют Имя, возраст и животное. типа у Маши (15 лет) собака, а у Васи (12 лет) кошка.

и тут вычитал что есть такая штука

Основная ошибка начинающих - это отсутствие индексов на нужных полях или создание оных на ненужных полях. Если вы делаете простую выборку наподобие: 
SELECT * FROM table WHERE field1 = 123 
То вам нужно проставить индекс на поле field1, если вы используете в выборке условие по двум полям: 
SELECT * FROM table WHERE field1 = 123 AND field2 = 234 
То вам нужно создать составной индекс на поля field1, field2.



собственно вопрос - правда ли это и че это вообще такое?

   
 
 автор: cheops   (14.07.2006 в 18:41)   письмо автору
 
   для: ARIRAN   (14.07.2006 в 18:17)
 

Это индексация полей для ускорения работы таблиц, подробнее об индексах можно почитать в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=419

PS Под новые вопросы лучше заводить новые темы.

   
 
 автор: ARIRAN   (14.07.2006 в 18:52)   письмо автору
 
   для: cheops   (14.07.2006 в 18:41)
 

спасибо. дык тема у меня вроде бы одна :( как написать скрипт а все остальное оно типа к этому же вопросу :(

   
 
 автор: ARIRAN   (25.07.2006 в 17:27)   письмо автору
 
   для: ARIRAN   (14.07.2006 в 18:52)
 

пиплы это опять я. я туплю.

<?php

print "<form name='realtyform' action='realty.php' method=get>";
print 
"<select size=9 name=direction[] multiple>";
print 
"  <option value=Север>Север</option>  ";
print 
"  <option value=Северо-Восток>Северо-Восток</option>";
print 
"  <option value=Восток>Восток</option>";
print 
"  <option value='Юго-Восток'>Юго-Восток</option>";
print 
"  <option value='Юг'>Юг</option>";
print 
"  <option value=Юго-Запад>Юго-Запад</option>";
print 
"  <option value=Запад>Запад</option>";
print 
"  <option value=Северо-Запад>Северо-Запад</option>";
print 
"  <option value=Центр>Центр</option>";
print 
"  <option value='' cheked type='hidden'>&nbsp;</option>";
print 
"</select>";

print 
"<INPUT TYPE=Submit VALUE=Искать style=font-size: 8pt>" ;
print 
"<input type=reset value=Сброс style=font-size: 8pt>";
print 
"</form>";




for (
$i 0$i <= 9$i++) {

print 
"$_GET(['direction'][$i]) ";
    echo 
"<br />";

вот такой код. запускаю его и он мне выдает:

Array(['direction'][0]) 
Array(['direction'][1]) 
Array(['direction'][2]) 
Array(['direction'][3]) 
Array(['direction'][4]) 
Array(['direction'][5]) 
Array(['direction'][6]) 
Array(['direction'][7]) 
Array(['direction'][8]) 
Array(['direction'][9]) 



подскажите как черт его подери вызвать список отмеченных полей в результат чтоб вместо Array(['direction'][0]) было Север?
вот прямо на моем этом примере. я чето не догоняю совсем.

   
 
 автор: ARIRAN   (26.07.2006 в 15:49)   письмо автору
 
   для: ARIRAN   (25.07.2006 в 17:27)
 

для таких же балбесов как я, которые зададутся таким вопросом разъсняю:


$direction_values=$HTTP_GET_VARS['direction'];
$kontrakt_values=$HTTP_GET_VARS['kontrakt'];
$minsquare_values=$HTTP_GET_VARS['minsquare'];
$maxsquare_values=$HTTP_GET_VARS['maxsquare'];
$minprice_values=$HTTP_GET_VARS['minprice'];
$maxprice_values=$HTTP_GET_VARS['maxprice'];

print "Выбранные направления:";
for ($i = 0; $i <= 9; $i++) {

print "$direction_values[$i]&nbsp;";
}


тогда все направления выводятся :)

   
Rambler's Top100
вверх

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