У меня есть таблица в базе данных с множеством столбцов:id,имя пользователя,его логин,дата рождения (соответственно три числовых значения),фотки его,пол,пароль и т.д. Хочу:создать для админки поиск по различным категориям-ввёл имя,логин и пол и получил список пользователей с похожими параметрами,ввёл только пароль,дату рождения-получил другой список с вновь введёнными параметрами... Вот до чего дошёл: 1.приводить здесь код html не стану-тут всё элементарно. 2. PHP: $query="SELECT * FROM table WHERE name LIKE '".mysql_real_escape_string($_GET['name'])."%'"; 3.Получая значение name,я выбираю все возможные варианты с этой переменной и потом начинаю проверять остальные введённе админом данные...а вот тут и сама проблема-ведь если админ не заполнил какое из полей,то оно пустое и его нужно уничтожить,а если ввёл значение,то сравнить с имеющимися (причём их много может быть,а тут в цикле нужно действовать...) Короче,помогите разрулить,натолкните на мысль или я вообще не в том направлении!? П.С.Заранее спасибо!
ну а почему бы вам не сделать одну форму с данной, если вводить ид то выводит ид, если логин, то выводит логин? к примеру если ввели логин пользователя для поиска то он вам выводит всю строку, с его идом, именем, датой и тд и тп
Составляй WHERE-часть запроса в зависимости от введённых параметров: PHP: <?php // ... $sqlWhere = array(); if(isset($_GET['name']) and !empty($_GET['name'])) $sqlWhere[] = "`name` LIKE '" . mysql_real_escape_string($_GET['name']) . "%'"; if(isset($_GET['birthdate'])) $sqlWhere[] = "`birthdate` = '" . mysql_real_escape_string($_GET['birthdate']) . "'"; // и т.д. $sqlWhere = (count($sqlWhere) > 0) ? (' WHERE ' . implode(' AND ', $sqlWhere)) : ''; $sql = "SELECT * FROM `table`{$sqlWhere}"; //... ?>
Ну,вот есть у меня зарегеный пользователь и на его страницу(если войти от другого пользователя) высветятся только данные об имени,возрасте и городе-но ведь если в поиске админки я вобью только эти данные,то таких ребяток у меня может появиться и с десяток...а вдруг я удалить хочу этого пользователя или заблочить? Нужен поиск реализованы по категориям:вот ввёл я имя-вывело мне сотню пользователей,ввёл возраст-осталось пятьдесят,ввёл город-осталось тридцать,потом добавил пол-стало десять,я на фотки этих десяти посмотрел-выбрал негодяя и заблочил его ip. Или я не правильно придумал-можно проще что сделать?
хм ну а почему бы на профиле пользователя не вывести кнопку бана и других функций которую видет только пользователь принадлежащий категории администрации? по-моему так будет проще сделать чем посмотреть на профиль пользователя а потом пытаться найти его в поиске чтоб произвести какое то действие
Вот это: Код (Text): $sqlWhere = (count($sqlWhere) > 0) ? (' WHERE ' . implode(' AND ', $sqlWhere)) : ''; Аналогично PHP: <?php // ... if(count($sqlWhere) > 0) $sqlWhere = ' WHERE ' . implode(' AND ', $sqlWhere); else $sqlWhere = ''; // ... ?> Ну а это: Код (Text): $sql = "SELECT * FROM `table`{$sqlWhere}"; Аналогично PHP: <?php // ... $sql = "SELECT * FROM `table`" . $sqlWhere; // ... ?>
implode() объединяет массив в строку, используя заданный соединитель. Например есть массив: PHP: <?php $arr = array( 'first_element', 'second_element', 'third_element' ); ?> Можно его превратить в строку: PHP: <?php $str = implode(' and ', $arr); ?> Теперь в переменной $str содержится строка: Код (Text): "first_element and second_element and third_element"
Извините,а зачем именно строка?Так легче php проверять?Разве н не будет так это делать на много дольше?...или я опять не понял что-то...не встречал писание подобных оборотов в учебниках! Возможно,но у меня админка будет выполнять много функций с сайтом,а если оставить её в виде обычного сайта,но с кнопками-тогда она станет огромной+если мне другой пользователь жалобу напишет-как я буду искать нарушителя?
Panich Потому, что (в моём примере): 1. Собираем входящие параметры в массив. Каждый элемент массива является готовым SQL-кодом для WHERE (т.е. кусочком запроса, задающим нужное условие для получение данных из б.д.). Мы добавляем в массив только те данные, которые были заполнены. 2. Поскольку SQL-запрос к б.д. - это строка текста, нужно преобразовать полученный массив с условиями в строку и подставить полученную строку условий в запрос. Например, если было введено только имя (Oleg) получим такой запрос на выходе: [sql]SELECT * FROM `table` WHERE `name` LIKE 'Oleg%';[/sql] Если были введены имя (Oleg) и дата (1985-01-01), то получим: [sql]SELECT * FROM `table` WHERE `name` LIKE 'Oleg%' AND `birthdate` = '1985-01-01';[/sql] Если не было введено ничего - получим все данные из б.д. [sql]SELECT * FROM `table`;[/sql] У меня там есть недоделка в коде (поспешил). Вместо Код (Text): if(isset($_GET['birthdate'])) Должно быть Код (Text): if(isset($_GET['birthdate']) and !empty($_GET['birthdate'])) Т.е. добавляем в массив условие на дату только в том случае, если оно было заполнено.
Так,вроде начал въезжать! Только вот ещё вопрос:это если пользователь вообще ничего не ввёл,то мне высветятся все все все...!?
Panich можно сделать одну кнопку, которая будет выводить красивое всплывающее окно в котором админ произведёт какое-либо действие над пользователем. повысить/понизить, забанить/разбанить и тд и тп. а отдельно в поиске в админке можно сделать по принципу собачника. по поводу высветится всё-всё-всё... если пользователь оставил поле пустое то можно присвоить значение: PHP: <?php if($_POST['name']='') {exit ('поле поиска осталось пустым.');} ?>
В том примере, который я написал выше - да, выберутся все. Это можно изменить при желании на какое-то другое действие, которое тебе нужно. Понять, что ничего не заполнено в скрипте можно, например, по значению переменной $sqlWhere из примера. Если она пустая - значит ничего не заполнено. Т.е.: PHP: <?php // ... if(empty($sqlWhere)) { // Выполняем нужные действия }
Мы сначала вносим в массив значение имени: и т.д. потом переводим массив в строковое значение... Потом вносим в массив значения дня рождения: и т.д. и опять превращаем его в строковое значение... А не проще превращать в строковое значение один раз в самом конце,когда внесём туда все переменные?
В предыдущем вопросе разобрался-неправильно понял,а значит неправильно спросил (хочется всё узнать пока Вам не надоел!) Тут двоеточие в самом конце означает: PHP: else $sqlWhere = ''; ???
О-о-о-о-о!Всё-теперь мне стыдно!)))Я разобрался-альтернативный синтаксис!Про него не читал ещё!!! Спасибо большое-буду разбираться и пользоваться Вашими подсказками...!!!
А может высвечивать пользователю на страницу id в уголке где-нибудь и не париться потом!? Ввёл в поисковике этот номерок,нашёл нарушителя и кошмарь его как хочешь...))) П.С.А как вот админы в социальных сетях находят пользователя-их же там миллионы!? Могу ли я в url,например,пользователю дописывать его id!?Он не знает,а мне всё понятно...или это со стороны безопасности чревато?
На страничке пользователя можно добавить кнопку "Пожаловаться", при нажатии на которую другой пользователь может написать какой-то текст (в чём заключается его жалоба) и отправить жалобу. Жалобы могут заноситься в б.д. (например, просто поля id жалобы, id пользователя, который пожаловался, id пользователя, на которого пожаловались, текст жалобы). В админке можно сделать скрипт, который будет отображать тебе все жалобы. Id пользователей (кто и на кого пожаловался) - можно сделать ссылками, при нажатии на которую сразу попадаешь на страничку управления тем или иным пользователем.
Идея нормальная,но если я злостный админ и хочу удалить пользователя,который мне не понравился...или он на форуме матерился-вот как его тогда определить(найти в базе данных) быстро?
Вот тут на форуме - видишь под твоим постом есть кнопка "Профиль"? Нажимаешь на неё и попадаешь на страничку пользователя. На страничке пользователя может быть кнопка "Пожаловаться" о которой я писал выше. Это для других пользователей. Также там может быть кнопка (ссылка) для перехода в админку, сразу на страничку управления этим пользователем, которая (кнопка/ссылка) отображается только для админов. Админ может нажать на неё и делать что хочет с этим пользователем. Другой пользователь может нажать на "Пожаловаться", жалоба добавилась в б.д., потом админ в админке просмотрит жалобы и примет решение, как поступить с тем или иным пользователем, на которого поступила жалоба.
Тоже вариант...Ох,сайт делаю уже четыре месяца,учусь программированию почти два года (один язык отдельно учить невозможно и приходится всё читать сразу),но основная работа не позволяет всё сделать в срок как задумал... П.С.Это было отступление... А по теме:спасибо ещё раз!Если бы не такие как Вы,то затянулись бы мои труды,а так-вместе,и дело спорится веселее!)))