Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2010, 16:21   #1
kutt
Пользователь
 
Регистрация: 24.05.2008
Сообщений: 31
По умолчанию Необходимо создать условие поиска кода города по номеру телефона по mysql на php

Всем доброго времени суток!
Помогите плиз со следующей задачей:
Существует база данных MYSQL, написан скрипт поиска по этой базе.
В базе содержатся следующие поля таблицы tarif:

Code name price
7495 Москва 0.63

Code - телефонный код города
name - Название города
price - цена

необходимо чтобы пользователь ввел в поиске через php скрипт номер телефона например 74951234567, и получил следующее:

Код направление цена
7495 Россия Москва 0.63000

т.е. необходимо отсекать все что стоит после 7495 но с таким условием, чтобы если например в базе существует код 74951 то выводил именно 74951 и так далее.
Сейчас реализованно следующее:

/* $nmag - берется из формы */
$query = "SELECT * FROM tarif WHERE code='$nmag'";

выводится только то что есть в базе, то чего нет не выводится
вводиш 7495 выводит 7495 если ввести 74951234567 ничего не выводит.

помогите составить формулу!

Последний раз редактировалось kutt; 01.12.2010 в 16:04.
kutt вне форума Ответить с цитированием
Старый 30.11.2010, 16:39   #2
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию

При заполнении поля телефона для поиска сделайте не одно поле, а например два. +7 пишется само перед формой - поле для кода города - поле для номера телефона. А уже информацию обрабатывать можно простыми регулярками, самый простой способ решения вашей проблемы.
Код:
+7<input type='text' name='code' size='5'/> - <input type='text' name='phone_number' size='10' />
nec117 вне форума Ответить с цитированием
Старый 30.11.2010, 16:41   #3
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию

Еще как вариант жёсткая форма заполнения телефона видом +7-код города- номер телефона. Перед отправкой проверять регулярными выражениями, если устраивает то посылать, если нет то просить перебить номер. Разрезать так же регулярками.
nec117 вне форума Ответить с цитированием
Старый 30.11.2010, 16:44   #4
kutt
Пользователь
 
Регистрация: 24.05.2008
Сообщений: 31
По умолчанию

nec117, спасибо огромное, но это несовсем понятно, немогли бы вы написать именно
формулу поиска, т.е. само выражение, я пока не могу сообразить как отсекать не нужные цифры.

Дело еще в том что, код города может быть и 93 например афганистан, т.е. в базе кодов куча. вот если человек вводит 93123456789 то как отсеч все что до 93?
kutt вне форума Ответить с цитированием
Старый 30.11.2010, 16:51   #5
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию

Повторяю. Нужно сделать жёсткую форму заполнения телефона. Не свободную как хочешь, так и вводи, а жёстко структурировать. 8-123-12345. и резать то что нужно регулярными выражениями по дефису. Или же сделать как я предлагал в первый раз несколько форм для ввобда одного номера. Форма кода и форма номера. Таким образом уже при вводе номер разбит.
nec117 вне форума Ответить с цитированием
Старый 30.11.2010, 17:05   #6
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Еще как вариант жёсткая форма заполнения телефона видом +7-код города- номер телефона. Перед отправкой проверять регулярными выражениями, если устраивает то посылать, если нет то просить перебить номер. Разрезать так же регулярками.
Чиним микросхемы топором...
Решение:
Код:
$query = "SELECT * FROM `tarif` WHERE `code` LIKE '{$nmag}%' LIMIT 1";
Виталий Желтяков вне форума Ответить с цитированием
Старый 30.11.2010, 17:39   #7
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию

Виталий Желтяков, эм... По моему ваш код будет постоянно возвращать NULL ибо чтобы он хоть что то возвратил, то нужно писать так:
Код:
"SELECT  * FROM  `tarif` WHERE  '{$nmag}' LIKE CONCAT(  `code` ,  '%' );"
У вас же он в коде ищет номер.
nec117 вне форума Ответить с цитированием
Старый 30.11.2010, 20:00   #8
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Сообщение от nec117 Посмотреть сообщение
Виталий Желтяков, эм... По моему ваш код будет постоянно возвращать NULL ибо чтобы он хоть что то возвратил, то нужно писать так:
Код:
"SELECT  * FROM  `tarif` WHERE  '{$nmag}' LIKE CONCAT(  `code` ,  '%' );"
У вас же он в коде ищет номер.
Да, точно. Спасибо, что подправили.
Виталий Желтяков вне форума Ответить с цитированием
Старый 01.12.2010, 11:25   #9
kutt
Пользователь
 
Регистрация: 24.05.2008
Сообщений: 31
По умолчанию

Спасибо огромное, Сделал вот так вот:
$query = "SELECT * FROM tarif WHERE '{$nmag}' LIKE CONCAT( `code` , '%' )";
это почти то что нужно, но есть некая проблема:
Ввожу номер телефона 73432234567, выводит мне код 73432, как и нужно, но далее выводит 7343, 7. Т.е. необходимо выводить именно 73432 в нашем случае а остальное не выводить, если например пользователь ввел 73431234567, то должно вывести 7343 т.к. в базе нету кода 73431.
Помогите плиз.
kutt вне форума Ответить с цитированием
Старый 01.12.2010, 12:31   #10
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию

Добавьте LIMIT 1 в запрос
nec117 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
есть адреси в mysql нужно поиска с AJAX for mysql orter PHP 1 24.09.2010 10:24
как создать раскрывающийся список с условием _Set_ Microsoft Office Excel 2 20.01.2010 17:50
Необходимо дописать простой скрипт на PHP+Mysql kutt Фриланс 8 08.10.2009 13:09
Как создать RSS с помощью PHP, MySQl. Revival001 PHP 6 12.07.2009 19:49
Создать выражение для запроса с условием smoky Microsoft Office Access 3 13.05.2008 21:39