Ребята! Нужна помощь, три дня форум читаю, много чего интересного нашел, но мои знания в этой области нечего не дали. Вот код, все работает, но не так как хотелось бы, он выводит значение поля из таблицы и формируется ссылка. Код (Text): <?php /* Соединяемся, выбираем базу данных */ $link = mysql_connect("localhost", "dbname", "pass") or die("Could not connect : " . mysql_error()); mysql_select_db("dbname") or die("Could not select database"); /* Выполняем SQL-запрос */ $query ="SELECT DISTINCT(name) FROM mdup_directories WHERE `name`<> 'NULL' ORDER BY ID LIMIT 40"; $result = mysql_query($query) or die("Query failed : " . mysql_error()); /* Выводим результаты в html */ echo "<div id=\"button\"><ul>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { foreach ($line as $col_value) { print "\t\t<li><a class=\"tm1\" href=\"$col_value\">$col_value</a>"; } echo "</li>"; } print "\t</ul></div>\n"; /* Освобождаем память от результата */ mysql_free_result($result); /* Закрываем соединение */ mysql_close($link); ?> Так вот вопрос. Нужно сделать так, чтоб этот список появлялся только по запросу пользователем ( обыкновенная форма ) Код (Text): <form action="/search.php" name="form"> <input name="name" type='text' class="input" size="30" value=""> <input name="submit" type='submit' class='button' value='Искать'> </form> При этом сам запрос должен сохраняться в поле Код (Text): <input name="name" type='text' class="input" size="30" value=""> для когото это полный пустяк, но мне проблемотично решить этот вопрос P.S. хелпов начитался, просьба помоч, а не пинать в поиск и хэлпы.
ещё раз, только внятно. Есть форма HTML: <form action="/search.php" name="form"> <input name="name" type='text' class="input" size="30" value=""> <input name="submit" type='submit' class='button' value='Искать'> </form> есть запрос [sql]SELECT DISTINCT(name) FROM mdup_directories WHERE `name`<> 'NULL' ORDER BY ID LIMIT 40[/sql] есть вывод PHP: <?php echo "<div id=\"button\"><ul>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { foreach ($line as $col_value) { print "\t\t<li><a class=\"tm1\" href=\"$col_value\">$col_value</a>"; } echo "</li>"; } print "\t</ul></div>\n"; ?> а сделать надо…
да все иманно так, но вывод данных происходит автоматический, тоесть открываешь страницу, а там уже все есть и поиск не работает, а нужно что список формировался только по запросу через форму.
PHP: <?php if(isset($_GET['name']) && !empty($_GET['name'])){ // тут запрос на основе $_GET['name'] } else{ // что-нить ещё } ?>
PHP: isset($_GET['name'] && !empty($_GET['name'])) кстати вот этого будет достаточно PHP: !empty($_GET['name']) ну это я так, к слову.
Да нет что-то не так, неработает В данном случае наверно все зависит от этой строки. [sql]SELECT DISTINCT(name) FROM mdup_directories WHERE `name`<> 'NULL' ORDER BY ID LIMIT 40[/sql]
от неё зависит только то, что должно быть выбрано из базы. А то, при каких условиях показывать результат — от конструкции if-else
Вот мой файл Код (Text): <? $link = mysql_connect("localhost", "dbname", "pass") or die("Could not connect : " . mysql_error()); mysql_select_db("catalog") or die("Could not select database"); /* Выполняем SQL-запрос */ $query ="SELECT DISTINCT(name) FROM madeup_directories WHERE `name`<> 'NULL' ORDER BY ID LIMIT 40"; $result = mysql_query($query) or die("Query failed : " . mysql_error()); /* Выводим результаты в html */ //начало таблицы ?> <table class=main width=800 border=0 align=center cellpadding=0 cellspacing=0 <tr><td colspan=3 valign="top"> <table width="100%" cellpadding="0" cellspacing="2"> <tr> <td class="search"> <form action="/search.php" name="form" method="get"> <div align="right"> <table border="0" cellpadding="0" cellspacing="0" class="search"> <tr class="formcolor"> <td class="lse">Поиск:</td> <td class="center_se" width="100%"><input name="name" type='text' class="input" size="30" value=""></td> <td class="rse"><input name="submit" type='submit' class='button' value='Искать'></td> </tr> </table> </div> </form></td> </tr></table> </td></tr> <tr> <td class=leftmenu valign=top width=175> <? //left print "<table width=100% border=0 cellpadding=0 cellspacing=0 style=\"margin-bottom:3px;\">\n"; echo "<tr>\n"; echo "<td>\n"; echo "<div id=\"button\"><ul>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { foreach ($line as $col_value) { print "\t\t<li><a class=\"tm1\" href=\"index.php?q=$col_value\">$col_value</a>"; } echo "</li>"; } print "\t</ul></div></td>\n"; print "\t</tr>\n"; print "</table>\n"; print "<td valign=top width=434> </td>\n"; print "<td valign=top width=175></td>\n"; print "</tr></table></table>\n"; //конец таблицы /* Освобождаем память от результата */ mysql_free_result($result); /* Закрываем соединение */ mysql_close($link); ?> подскажи что писать в файле search.php ?? или добавить в этот p.s. я извиняюсь за километры кодов но иначе вопрос не решить!
разбираться лень. PHP: <?php include 'db.php'; if(!empty($_GET['name'])) { $query ="SELECT DISTINCT(name) FROM madeup_directories WHERE `name`<> 'NULL' ORDER BY ID LIMIT 40"; $result = mysql_query($query) or die("Query failed : " . mysql_error()); $str = "<table width=100% border=0 cellpadding=0 cellspacing=0 style=\"margin-bottom:3px;\">\n"; $str .= "<tr>\n"; $str .= "<td>\n"; $str .= "<div id=\"button\"><ul>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { foreach ($line as $col_value) { $str .= "\t\t<li><a class=\"tm1\" href=\"index.php?q=$col_value\">$col_value</a>"; } $str .= "</li>"; } $str .= "\t</ul></div></td>\n"; $str .= "\t</tr>\n"; $str .= "</table>\n"; $str .= "<td valign=top width=434> </td>\n"; $str .= "<td valign=top width=175></td>\n"; $str .= "</tr></table></table>\n"; //конец таблицы /* Освобождаем память от результата */ mysql_free_result($result); } else { $str = '<form name="form"> <input name="name" type="text" class="input" size="30" value=""> <input name="submit" type="submit" class="button" value="Искать"> </form>'; } echo $str; ?> а какой смысл в форме, если от того, что в ней будет послано, запрос не изменится?
Поиск по БД не работает, зделал так и все ровно не работает. PHP: if(isset($_GET['name']) && !empty($_GET['name'])) { $query ="SELECT DISTINCT(name) FROM madeup_directories WHERE `name`<> 'NULL' ORDER BY ID LIMIT 40"; $result = mysql_query($query) or die("Query failed : " . mysql_error());
я обычно дописываю к файлу че нить типа ?act=add а далее проверка условия если act==add, то делать что-то. ну и также как написано выше проверка isset
Вроде как поиск сделал, но только по одному слову, если вписать словосочетание, то результат 0. [sql] $query ="SELECT DISTINCT(name) FROM bd_directories WHERE name like '%$q%'";[/sql] вот еще назрел вопрос, как передать нажатие ссылки в переменную value="" , при этом чтоб сработал поиск, а значение переданное переменной, сохранилось в строке поиска. Также ссылку нужно перевести из кириллицы в "%EA%E8%F0%E8%EB%EB%E8%F6%E0"
Неужели некому помочь?? или может задача сложная? или может, я неверно вопрос задаю? кто-нибудь ответьте хот что-нибудь. Или тему закройте, если считаете что тут больше незачем говорить, так хоть буду знать что есть кто живой на форуме.
на JS document.GetElementById('id_элемента').value='значение'; если ты про это надо наоборот при приёме в кириллицу преобразовывать rawurldecode() так может закрыть?
Возможно я ошибаюсь и гуру меня подправят, но мне кажется надо пересмотреть условие проверки на "ненулевое" значение. То есть запрос должен быть такого вида: $query ="SELECT DISTINCT(name) FROM madeup_directories WHERE name NOT NULL ORDER BY ID LIMIT 40"; Проверить на машине не могу, только предполагаю.
Crypto первый вариант работает, второй нет! [sql] $query ="SELECT DISTINCT(name) FROM madeup_directories WHERE name like '%$search%' LIMIT 40"; $query ="SELECT DISTINCT(name) FROM madeup_directories WHERE name NOT NULL ORDER BY ID LIMIT 40";[/sql] тольк вот работает очень четко, если находит одну запись то её и выводит, хотелось бы чтоб немного упускал и в любом случае выводил 40 позиций! Luge с этим разобрался. а с этим никак нмогу понять как это сделать, может кто примерчик подкинет?
Немного ошибся значит в синтаксисе. Если есть время и хочется попробовать, то сделай такой запрос: [sql]$query ="SELECT DISTINCT(name) FROM madeup_directories WHERE name IS NOT NULL ORDER BY ID LIMIT 40";[/sql]
Crypto в твоём запросе выведутся 40 первых not null строк, а надо с учётом того, что содержится в $search поиск рулит http://php.ru/forum/viewtopic.php?t=6716 http://php.ru/forum/viewtopic.php?t=1635
Luge спасибо, но как бы это все дело прикрутить к данным на выходе из базы? или как ты писал на входе, даже незнаю что делать. ошибся я неработет это дело. ты выдел как я ссылу делаю? PHP: <? while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { foreach ($line as $col_value) { $str .= "\t\t<li><a href=\"$col_value\" "(Илиже можно просто слэш)">$col_value</a>"; } $str .= "</li>"; ?> вот эти значения которые из базы лезут, и есть ссылка, которою просто, при нажатие нужно поместить в форму поиска и зделать перезагрузку страницы с новыми данными из базы.
так кое что получилось, PHP: $url=urlencode($col_value); //$url = "http://" . $HTTP_SERVER_VARS['HTTP_HOST'] . $col_value; print "<li><a id=\"form\" href=\"$url\">$col_value</a>"; } echo "</li>"; ребята как отсеять лишнии пробелы, я незнаю почему но в конце каждой ссылки (++%0D) вот несколько прмеров /%F1%E0%E4%EE%E2%E0%FF+%EF%E5%F7%FC++%0D /%EF%E5%F7%E8+%EA%E0%EC%E8%ED%FB++%0D /%EF%E5%F7%E8+%E1%F3%F2%E0%EA%EE%E2++%0D а вопрос с переадрисацией сслки в форму поска остаеться открытым.