Здравствуйте, уважаемые форумчане. После запроса к mysql, выводятся данные не так, как надо;помогите, пожалуйста, исправить ошибку. Есть массив с данными foreach($forms as $keyss => $val) { while(list($ku,$mmk)=each ($val)) { после обработки которого пишу $keyss="and $ku='$mmk' "; что означает $pm1="and этаж=2"; $pm2="and район=Centralnii"; после чего формируется запрос к базе $result = mysql_query("SELECT район,комнаты,этаж FROM form_danniye where id >0 ".$keyss." ",$db); В итоге, данные выводятся не по двум условиям, а по каждому из условий по отдельности(то есть, по первому and и по второму and и выводятся вместе) Помогите исправить ошибку.
есть форма, в зависимости от выбранных элементов формируется массив forms- тут все правильно;дальше по тексту.В переменную keyss записывается, например, "and этаж=2" и все правильно выводится.А вот, при передаче нескольких условий("and этаж=2" и "and район=Centralnii"), выводится так: район комнаты этаж Kovpakovskii 1 2 Kovpakovskii 2 2 Kovpakovskii 3 2 Centralnii 3 2 Centralinii 2 1 Centralinii 4 9 а должно при данных условиях так: район комнаты этаж Centralnii 3 2
Мы не знаем, как выглядит форма и какие данные ты от неё получаешь и в каком виде. Перед строкой Код (PHP): foreach($forms as $keyss => $val) напиши Код (PHP): echo('<pre>'); print_r($forms); echo('</pre>'); и выложи сюда.
Код (Text): SELECT * FROM table WHERE этаж='2' AND район = 'CENTRALNII' Так правильно и должно выводится то что надо, но у тебя получается создается другой запрос. Попробуй распечатать его, например так: Код (Text): echo $sql = "SELECT район,комнаты,этаж FROM form_danniye where ".$keyss." $result = mysql_query($sql,$db); Что напишет?
не хотел просто лишний код писать-там все вроде правильно. $result = mysql_query("SELECT ids,name,types,relation,value FROM form_names ",$db); while($row = mysql_fetch_array($result)) { echo'<tr><td><input type= '.$row['types'].' name=forms[tmp'.$row['ids'].']['.$row['name'].'] value= '.$row['value'].'></td><td>'.$row['value'].'</td></tr>'; } echo'</table>'; echo'<INPUT TYPE=submit name=search VALUE="Применить" ></form>'; ?> <?php $forms=$_GET[forms]; $search=$_GET[search]; if(isset($_GET[search])) { и далее по тексту. Добавлено спустя 14 минут 7 секунд: sobachnik,вот что выводит на echo('<pre>'); print_r($forms); echo('</pre>'); Array ( [tmp4] => Array ( [этаж] => 2 ) [tmp0] => Array ( [район] => Centralnii ) )
У тебя на каждой итерации внешнего цикла (foreach) значение переменной $keyss сбрасывается. Ей присваиваются значения tmp4, tmp0, ... Так можешь сделать: Код (PHP): $params = array(); foreach($forms as $keyss => $val) { while(list($ku, $mmk) = each($val)) $params[] = "`{$ku}` = '{$mmk}'"; } $keyss = ' AND ' . implode(' AND ', $params); $result = mysql_query("SELECT район, комнаты, этаж FROM form_danniye WHERE id > 0 " . $keyss, $db); Зачем там id > 0? Возможно наличие записей с отрицательным id? Или это просто из-за того, что значение переменной $keyss начинается с AND? Если второе, то можно избавиться от ненужного условия так: Код (PHP): $params = array(); foreach($forms as $keyss => $val) { while(list($ku, $mmk) = each($val)) $params[] = "`{$ku}` = '{$mmk}'"; } $keyss = ' WHERE ' . implode(' AND ', $params); $result = mysql_query("SELECT район, комнаты, этаж FROM form_danniye" . $keyss, $db); Добавлено спустя 2 минуты 57 секунд: P.S. И ещё почитай про SQL-инъекции. Сейчас можно взломать твой скрипт и сделать с базой данных всё что угодно.
1) на счет кода- спасибо;завтра проверю,отпишусь. 2) WHERE id > 0 специально, чтобы and было) но вместо WHERE id > 0 ,будет другое условие. 3) иньекции тут тоже предусматриваются);просто я решил сначала, сделать чтобы скрипт заработал как надо,а потом его доработаю.