За последние 24 часа нас посетили 59279 программистов и 1842 робота. Сейчас ищут 898 программистов ...

Правильный запрос к БД

Тема в разделе "PHP для новичков", создана пользователем dembi, 15 окт 2008.

  1. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Добрый день, Всем!

    Есть вопрос:
    У меня есть база номеров.
    Для поиска нужного номера я использую несколько полей с помощью формы:
    Поле номер телефона, город, страна и т.д.

    То есть допустим, меня интересуют все номера телефонов какого-то города

    После ввода города, методом POST я все передаю на обработку.

    Как правильно теперь сделать запрос к БД, чтобы учитывались пустые поля?

    То есть, у меня остались пустые поля, страна, номер телефона.
    Если я буду писать следующий запрос:

    $res = mysql_query (“SELECT tel, country, city
    FROM my_db
    WHERE tel = ‘$tel’ and country = ‘$country’ and city = ‘$city’
    ”,$db)

    Я получу пустой результат.

    Подскажите, пожалуйста, как правильно учитывать пустые значения и в запросе их как-то упускать?

    Заранее спасибо Всем!
     
  2. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Наверное, правильней было бы спросить:
    Как правильно проверять присвоено ли значение всем переменным данной формы, и как на основание этого построить потом запрос к БД?
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Если поле не заполнено, в массиве $_POST его не будет. Обычно проверяют так:
    PHP:
    1. if(isset($_POST['поле'])) {
    2.  ...
    И если поле пришло, дописывай что-нибудь в строку запроса.
     
  5. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Но тут есть одно, но в таком запросе,
    Если я укажу, например какой-то номер, он все равно мне выведет весь список, так как используется логическое или.
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    тогда делай как [vs] сказал
     
  7. dembi

    dembi Активный пользователь

    С нами с:
    21 июл 2008
    Сообщения:
    78
    Симпатии:
    0
    Спасибо всем.

    Да действительно эта конструкция в данном случае самая оптимальная.
    Но мне пришлось использовать ее вот таким образом:

    Присваиваю обычной переменой запрос к БД.

    $res = "SELECT tel, country, city
    FROM my_db”;


    А дальше идет проверка, если был ли введен номер телефона:

    if (isset($tel) && $tel<>"none") {
    ($res = "$res and tel like '$tel'");
    }

    Была ли выбрана страна:

    if (isset($country) && $country<>"none") {
    ($res = "$res and op.country like '$country'");

    Что самое интересное, без этого условия работать не будет «&& $хххх<>"none"», так как переменная $tel или $country существуют и при проверки isset всегда принимают значение 1.

    Спасибо за помощь.
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?