Поиск по стране и городу

Автор kak2z, 22 февраля 2012, 19:02:39

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kak2z

В общем поднимал я несколько раз уже эту тему - как организовать на форуме поиск по дополнительным полям (пол, город, страна, интересы, возраст и т.п.) толкового решения так я и не нашел (если вдруг появилось - ткните носом - буду благодарен)
У меня вот какая идея появилась - есть у нас в базе такая табличка  smf_members в ней все пользователи есть. Если добавить в нее нужные поля и из профиля сделать возможность изменять в них данные.
А потом сделать отдельную страничку с возможностью поиска.
Вроде работы не сильно много и не сильно сложно. Единственное что меня волнует (я еще плохо с sql дружу). Если я добавлю поля в таблицу smf_members никаких глюков не вылезет? Я то уже на тестовом форуме добавил - поюзал форум - вроде ничего не съехало и все на месте. Но все равно - вдруг где что то поломается изза добавления полей в существующую таблицу?
В общем: на какие подводные камни я могу наткнутся? 
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

digger®

Цитата: kak2z от 22 февраля 2012, 19:02:39
В общем поднимал я несколько раз уже эту тему - как организовать на форуме поиск по дополнительным полям (пол, город, страна, интересы, возраст и т.п.) толкового решения так я и не нашел (если вдруг появилось - ткните носом - буду благодарен)
Создать штатные дополнительные поля и поставить у них галку "Выдается в поиске"?

kak2z

Не.. надо искать допустим: пользователи от 30-40 из города Астарахань которые любят вышивать крестиком)))  нужны выпадающие списки и в них уже вбитые данные
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

digger®

Цитата: kak2z от 22 февраля 2012, 19:25:58
Не.. надо искать допустим: пользователи от 30-40 из города Астарахань которые любят вышивать крестиком)))  нужны выпадающие списки и в них уже вбитые данные
А думаете что от того что эти данные будут не в дополнительных полях, а в таблице members, то сразу откуда-то появятся выпадающие списки со вбитыми данными? Тут про механизм поиска нужно думать, а не место где данные хранятся.

kak2z

Нет конечно)) Не думаю) Просто если добавить в таблицу smf_members нужные поля - то делать по ним выборку не будет особо сложно. Вот и спрашиваю - если в  таблице будут дополнительные поля - не вылезут ли какие то проблемы.

Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

maestrosite.ru

digger дело говорит. Для формирования данных лучшим вариантом будет штатные расширенные поля. В вашем же случае надо только свою страницу поиска сделать - выпадающие списки формировать и прочие доп.условия проверять. Из моментов изменения базы, максимум - это настройки: формы поиска, отображения, условий проверки.
Если задаются вопросы по вашей проблеме, значит это нужно вам!
---
Обновления форума, разрешение конфликтов, адаптация модов, исправление ошибок - ваши предложения о сотрудничестве направляйте по адресу smf@maestrosite.ru

kak2z

#6
Цитата: transkontrol от 23 февраля 2012, 09:40:57
digger дело говорит. Для формирования данных лучшим вариантом будет штатные расширенные поля. В вашем же случае надо только свою страницу поиска сделать - выпадающие списки формировать и прочие доп.условия проверять. Из моментов изменения базы, максимум - это настройки: формы поиска, отображения, условий проверки.
Да штатные у меня не получилось сходу использовать. Я так понял штатные расширенные поля хранятся в базе как сериализованный массив, более эти данные лежат в другой таблице - а не в той где хранится имя пользователя. В следствии мой нубности мне пока сложно понять как синхронизировать работу сразу с двумя таблицами (понять то можно но кода добавиться).
Кроме этой проблемы еще одна - мне надо допустим делать выборку по городу  и по интересам. То есть если использовать данные из сериализованного массива  придется: каждую запись унсерилизовать - проверить.
А так получается быстрее (я надеюсь) и проще (мне так кажется). Циклом обхожу таблицу в которой лежат текстовые данные (город, страна, интересы) и делаю выборку. Если пользователь удаляется - тогда сразу и удаляются все его данные). В общем это моя первая проба работы с базами данных - думаю потихоньку наберусь опыта.
Так же я хочу прикрутить этот скриптик к выбору города http://address-selector.vfadeev.ru/ - правда придется дополнить другими странами, но в процессе разберусь как это сделать.

Делать анкету решил как отдельную php страницу с ssi. Хотел сначала как ПХП страницу на СиплПортале - но что то у меня там даже имя пользователя не отображалось при попытке его вытянуть.

На данный момент у меня скриптик уже записывает в базу при выборе поля (<select>), читает с нее. В общем как с базой работать более менее разобрался)
Спасибо всем за помощь) По мере продвижения буду в этой теме задавать вопросы) 
Если есть советы буду рад выслушать)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

kak2z

Вопрос в тему) Вроде все что нужно пишется и читается с базы) Сейчас начал делать поиск)
Вопрос по SQL:
1. Есть у меня в базе идентификаторы города и страны (числа INT). Стоит ли им делать индексные таблицы (или как это называется) в phpMyAdmin?
2. И есть у меня три таблицы с странами, регионами, городами. В каждой таблице напротив название города или страны есть номер. Делать ли для этих полей индексные таблицы UNIQUE?

Я то почитал про индексы) Но пока сумбурно понимаю когда их стоит делать а когда не стоит)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

maestrosite.ru

Разумно когда в таблице есть PK - Primary Key - первичный ключ. Если я правильно понял, то три таблицы - это справочники, и номера (идентификаторы) городов и стран для этих таблиц - и есть первичные ключи. А они и так должны быть уникальные.

Цитата: kak2z от 24 февраля 2012, 15:21:54
Я то почитал про индексы) Но пока сумбурно понимаю когда их стоит делать а когда не стоит)

Смотрите EXPLAIN SELECT * для ваших запросов. Как именно база осуществляет выборку ваших записей. По полям, по которым осуществляется выборка или делается пересечение - ключи очень не лишнее.
Если задаются вопросы по вашей проблеме, значит это нужно вам!
---
Обновления форума, разрешение конфликтов, адаптация модов, исправление ошибок - ваши предложения о сотрудничестве направляйте по адресу smf@maestrosite.ru

kak2z

В общем уже и поиск работает) С EXPLAIN пока не разобрался - даже не понял что она делает))
Сделал в пхпМуАдмине для своих полей в таблице индексы. Я так понял что больше ничего не надо) База сама их будет использовать)
Теперь осталось только анкеты пользователей выводить))

Ну и дизайн) Как это не смешно но я в ccs совсем не разбираюсь)) Когда все заработает попробую его в красивый вид привести)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

kak2z

Сегодня весь день занимался изучением вопроса SQL инъекций. Нашел пару вариантов как можно от них защищается. В связи с этим возник вопрос - а не будет ли это дыра в безопасности если я в таблицу smf_members добавляю дополнительные поля и с ними работаю. Может правильнее (безопаснее ) было бы сделать отдельную таблицу?  Или это не критично?
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

maestrosite.ru

Цитата: kak2z от 25 февраля 2012, 16:44:32
Сегодня весь день занимался изучением вопроса SQL инъекций. Нашел пару вариантов как можно от них защищается. В связи с этим возник вопрос - а не будет ли это дыра в безопасности если я в таблицу smf_members добавляю дополнительные поля и с ними работаю. Может правильнее (безопаснее ) было бы сделать отдельную таблицу?  Или это не критично?

Дыра в безопасности, не в том что вы в таблицу поля добавите, а в том будет, если вы данные не фильтрованные в запрос вставлять будете.

Или без дополнительных проверок будете запросы выполнять. На примере SMF - выполняете поиск и отображение сообщений пользователя из города N. И может случиться так, что вы отобразите сообщения/темы из разделов, куда просматривающий пользователь доступа не имеет. Это раскрытие данных, но к SQL-инъекциям это уже мало относится.

По поводу структуры базы, если всего два поля, то можно просто в _members, если больше, или историю целесообразно вынести в отдельную таблицу.
Если задаются вопросы по вашей проблеме, значит это нужно вам!
---
Обновления форума, разрешение конфликтов, адаптация модов, исправление ошибок - ваши предложения о сотрудничестве направляйте по адресу smf@maestrosite.ru

kak2z

В общем сделал) Все оказалось очень просто)
1. добавил в таблицу _members такие поля:
1. страна - текстовое поле с названием страны
2. регион - текстовое поле с названием региона
3. город - текстовое поле с названием города
4. ид_страны  - номер (идентификатор) страны
5. ид_региона  - номер (идентификатор) региона
6. ид_города  - номер (идентификатор) города
7. пол - цифровое поле (int) 1 мужчина 2 женщина
8. интересы - тоже цифровое (например 1-люблю водку, 2-люблю пиво)

2. сделал страничку с заполнением этих анкетных данных. Выбор страны, региона и города из списка, без ajaxa, тупо обновлении страницы и подгрузка следующей формы. Вот тут подмотрел как сделано. И где то в другом месте взял базу стран и городов.

3. Ну и дальше самое простое - формирую sql запрос и делаю выборку по нужным полям.

В общем оказалось все просто. В процессе всего этого еще разобрался с основным рекомендациями как защищаться от sql инъекций)
Спасибо Всем за помощь и подсказки.
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Stern

Цитата: kak2z от 28 февраля 2012, 23:44:13
В общем сделал) Все оказалось очень просто)
1. добавил в таблицу _members такие поля:
1. страна - текстовое поле с названием страны
2. регион - текстовое поле с названием региона
3. город - текстовое поле с названием города
4. ид_страны  - номер (идентификатор) страны
5. ид_региона  - номер (идентификатор) региона
6. ид_города  - номер (идентификатор) города
7. пол - цифровое поле (int) 1 мужчина 2 женщина
8. интересы - тоже цифровое (например 1-люблю водку, 2-люблю пиво)

2. сделал страничку с заполнением этих анкетных данных. Выбор страны, региона и города из списка, без ajaxa, тупо обновлении страницы и подгрузка следующей формы. Вот тут подмотрел как сделано. И где то в другом месте взял базу стран и городов.

3. Ну и дальше самое простое - формирую sql запрос и делаю выборку по нужным полям.

В общем оказалось все просто. В процессе всего этого еще разобрался с основным рекомендациями как защищаться от sql инъекций)
Спасибо Всем за помощь и подсказки.

конкуренцию мамбе собираетесь составить, kak2z?))
где можно посмотреть на всё это великолепие и как в дальнейшем использовать, если вдруг глянется?
МышЫ плакали, кололись, но продолжали жрать кактус...

kak2z

Цитата: Stern от 13 марта 2012, 11:21:28
конкуренцию мамбе собираетесь составить, kak2z?))
где можно посмотреть на всё это великолепие и как в дальнейшем использовать, если вдруг глянется?
да просто пользователи просили давно)) скину в личку сейчас адрес)
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)