Из формы методом пост я передаю информацию в файл-обработчик. Все бы ничего,но у меня есть пункт Не важно в форме. В итоге я придумал такой алгоритм:
$category = $_POST['category'];
$country = $_POST['srcountry'];
$city = $_POST['srcity'];
$raion = $_POST['raion'];
$names = $_POST['names'];
$telephone = $_POST['telephone'];
$result1 = mysql_query ("SELECT * FROM country WHERE country='$country' and city=''",$db);
$myrow1= mysql_fetch_array($result1);
$countryid = $myrow1['ID'];
$result2 = mysql_query ("SELECT * FROM country WHERE city='$city'",$db);
$myrow2 = mysql_fetch_array($result2);
$cityid = $myrow2['ID'];
if ($cityid!='') {
$SL_city=" and city='$cityid'";
}
else { $SL_city=""; }
if ($category!='null') {
$SL_category=" and category='$category'";
} else { $SL_category=""; }
$result4 = mysql_query ("SELECT * FROM profiles WHERE country='$countryid' $SL_city $SL_category ",$db);
$myrow4 = mysql_fetch_array($result4);
Просто быстро и работает ВРОДЕ БЫ. То есть echo ("SELECT * FROM profiles WHERE country='$countryid' $SL_city $SL_category "); отлично выводит все как надо, но вот в функции mysql_query это вся система не работает.
Почитав в интернете, я понял, что функция будет выполнятся толькое если она resorce, в моем же случае там, увы, не получается resource и вся эта система не работает. Может кто подскажет как выйти из этой ситуации?
Спустя 4 минуты, 18 секунд (9.11.2011 - 22:16) johniek_comp написал(а):
Цитата |
я придумал |
с интернета взял вообщем....здесь же куча ошибок!
И по какой книге ты учился? Попов?
а вопроса я не понял, можешь пожалуйста ещё раз для меня?
Спустя 4 минуты, 59 секунд (9.11.2011 - 22:21) johniek_comp написал(а):
и как бы echo ("SELECT * FROM profiles WHERE country='$countryid' $SL_city $SL_category "); сделать нельзя...ух!
Спустя 7 минут, 36 секунд (9.11.2011 - 22:28) neopk написал(а):
А почему так сразу в интеренете?
В интернете я нашел только варианты с бесконечными условными конструкциями, предлагающими просчитать все возможные варианты, но если много критериев - это становиться очень громоздко. Весь этот код я придумал собственноручно. Я не исключаю, что в интернете был такой вариант, конечно же.
Этот алгорит увы не работает. Функция, как я понял, должна иметь тип (или это не тип) resource, что бы выполнится. Если я вношу значения явно - все выпоолняется без проблем и она остается resource. Но если я часть функции заменяю переменными, она меняет тип на boolean, и уже не выполняется. Хотя возмонжно я не прав, может не работает не из-за этого.
Вопрос состоит в том, можно ли это "починить", если да - то как? Если нет - может у кого есть идеи получше просчета всех возможных вариантов?
В интернете я нашел только варианты с бесконечными условными конструкциями, предлагающими просчитать все возможные варианты, но если много критериев - это становиться очень громоздко. Весь этот код я придумал собственноручно. Я не исключаю, что в интернете был такой вариант, конечно же.
Этот алгорит увы не работает. Функция, как я понял, должна иметь тип (или это не тип) resource, что бы выполнится. Если я вношу значения явно - все выпоолняется без проблем и она остается resource. Но если я часть функции заменяю переменными, она меняет тип на boolean, и уже не выполняется. Хотя возмонжно я не прав, может не работает не из-за этого.
Вопрос состоит в том, можно ли это "починить", если да - то как? Если нет - может у кого есть идеи получше просчета всех возможных вариантов?
Спустя 27 секунд (9.11.2011 - 22:29) dadli написал(а):
neopk
а я особенно етот част не понял, что ето?
а я особенно етот част не понял, что ето?
Цитата |
WHERE country='$countryid' $SL_city $SL_category |
Спустя 39 секунд (9.11.2011 - 22:30) neopk написал(а):
Исходники кинуть для теста? Все отлично выполняется.
Спустя 4 минуты, 2 секунды (9.11.2011 - 22:34) johniek_comp написал(а):
ну нужно брать примеры с интернета копировать в примеры в надежде что эти примеры будут работать!
mysql_fetch_array меняй на mysql_fetch_accos
("SELECT * FROM `profiles` WHERE country='$countryid' $SL_city $SL_category ");
название категорий должно быть в обратных кавычках
только книги, интернет не научит...ты же не понимаешь почему сейчас я тебе говорю про обратные кавычки, в инете написали ты скопировал...а в книге все описано!
mysql_fetch_array меняй на mysql_fetch_accos
("SELECT * FROM `profiles` WHERE country='$countryid' $SL_city $SL_category ");
название категорий должно быть в обратных кавычках
только книги, интернет не научит...ты же не понимаешь почему сейчас я тебе говорю про обратные кавычки, в инете написали ты скопировал...а в книге все описано!
Спустя 21 секунда (9.11.2011 - 22:34) imbalance_hero написал(а):
neopk
Ты лучше объясни, вот есть у тебя БД с заполненными параметрами, что именно тебе достать надо?
Ты лучше объясни, вот есть у тебя БД с заполненными параметрами, что именно тебе достать надо?
Спустя 21 секунда (9.11.2011 - 22:34) neopk написал(а):
Цитата (dadli @ 9.11.2011 - 19:29) | ||
neopk а я особенно етот част не понял, что ето?
|
Выборка по полю country полюбому должны происходить, поэтомуей присвоенна переменная. А вот по остальным полям это не обязательно. По этому $SL_city может быть пустым значением,и выборка пройдет без него, а если оно не null - то оно будет критерием выборки, принимая значение and city='$cityid'
Спустя 1 минута, 58 секунд (9.11.2011 - 22:36) imbalance_hero написал(а):
neopk
Тебе только город с таким условием ,или абсолютно всё, включая телефон?
Тебе только город с таким условием ,или абсолютно всё, включая телефон?
Спустя 2 минуты, 14 секунд (9.11.2011 - 22:39) neopk написал(а):
Цитата (johniek_comp @ 9.11.2011 - 19:34) |
ну нужно брать примеры с интернета копировать в примеры в надежде что эти примеры будут работать! mysql_fetch_array меняй на mysql_fetch_accos ("SELECT * FROM `profiles` WHERE country='$countryid' $SL_city $SL_category "); название категорий должно быть в обратных кавычках только книги, интернет не научит...ты же не понимаешь почему сейчас я тебе говорю про обратные кавычки, в инете написали ты скопировал...а в книге все описано! |
Спасибо за совет! Сейчас буду пробовать.
З.Ы. Книги я читаю, точнее книгу,да, пока только одна. Я с нее начинал - интернет пошел позже. Книга называется "PHP 5/6 MYSQL 5/6 и Dreamweaver CS4 - Раработка интерактивных веб-сайтов. Владимир Дронов."
Спустя 47 секунд (9.11.2011 - 22:39) imbalance_hero написал(а):
$search = array();
if(!empty($_POST['city']))
$search[] = "`city` = '".mysql_real_escape_string($_POST['city'])."'";
if(!empty($_POST['phone']))
$search[] = "`phone` = '".mysql_real_escape_string($_POST['phone'])."'";
$res = mysql_query("
SELECT *
FROM `country`
WHERE `country` = '".mysql_real_escape_string($_POST['country'])."'
".(count($search) ? ' AND '.implode(' AND ',$search) : '')."
") or die(mysql_error());
Спустя 1 минута, 2 секунды (9.11.2011 - 22:40) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 19:36) |
neopk Тебе только город с таким условием ,или абсолютно всё, включая телефон? |
Параметров в БД очень много. и все они должны учавствовать в выборке. Это не все параметры, просто я для теста пока взял парочку.
Спустя 37 секунд (9.11.2011 - 22:41) johniek_comp написал(а):
neopk
Котеров Д. его почитай, там от клиент-серверных отношений.... не знаю как назвать, и до более глубокого как ООП
Котеров Д. его почитай, там от клиент-серверных отношений.... не знаю как назвать, и до более глубокого как ООП
Спустя 1 минута, 20 секунд (9.11.2011 - 22:42) imbalance_hero написал(а):
Ну а если их вообще много, то тут немного с массивом поработать лучше:
$search = array();
$variables = array('city','phone'); // сюда дописываем имена лишь
foreach($variables as $k=>$v)
if(!empty($_POST[$k]))
$search[] = "`".$k."` = '".mysql_real_escape_string($_POST[$k])."'";
$res = mysql_query("
SELECT *
FROM `country`
WHERE `country` = '".mysql_real_escape_string($_POST['country'])."'
".(count($search) ? ' AND '.implode(' AND ',$search) : '')."
") or die(mysql_error());
Спустя 51 секунда (9.11.2011 - 22:43) johniek_comp написал(а):
neopk
вот видишь человек книги почитал и что творит!!! :blink:
вот видишь человек книги почитал и что творит!!! :blink:
Свернутый текст
$search = array();
if(!empty($_POST['city']))
$search[] = "`city` = '".mysql_real_escape_string($_POST['city'])."'";
if(!empty($_POST['phone']))
$search[] = "`phone` = '".mysql_real_escape_string($_POST['phone'])."'";
$res = mysql_query("
SELECT *
FROM `country`
WHERE `country` = '".mysql_real_escape_string($_POST['country'])."'
".(count($search) ? ' AND '.implode(' AND ',$search) : '')."
") or die(mysql_error());
Спустя 3 минуты, 3 секунды (9.11.2011 - 22:46) neopk написал(а):
johniek_comp Вариант с mysql_fetch_assoc и обратным кавычками так же не работает)
Спустя 1 минута (9.11.2011 - 22:47) imbalance_hero написал(а):
neopk
Ты видел, что я тебе написал?!
Ты видел, что я тебе написал?!
Спустя 1 минута, 59 секунд (9.11.2011 - 22:49) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 19:47) |
neopk Ты видел, что я тебе написал?! |
Да-да. У вас тут все так быстро, ухх, отвлечься не успел - уже столько ответов.
Сейчас буду тестить. Спасибо!
Спустя 14 минут, 17 секунд (9.11.2011 - 23:03) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 19:47) |
neopk Ты видел, что я тебе написал?! |
Ваш вариант не работает) Т.к. $_POST['country'] не будет изначально совпадть с полем country , ее надо преобразовать как я делал тут:
$result1 = mysql_query ("SELECT * FROM country WHERE country='$country' and city=''",$db);
$myrow1= mysql_fetch_array($result1);
$countryid = $myrow1['ID'];
То есть в другой таблице есть соотношение номеров и назывний стран/городов. И поле ID из этой таблицы должно совпадать с полем country в таблице profiles. Такие запарки будут тольуо с 2-мя переменными, страна и город.
Спустя 2 минуты, 56 секунд (9.11.2011 - 23:06) imbalance_hero написал(а):
neopk
Тут скорее неправильно ты пытаешься делать, а не использовать.
Что не будет совпадать? Можешь нормально объяснить?
Тут скорее неправильно ты пытаешься делать, а не использовать.
Что не будет совпадать? Можешь нормально объяснить?
Спустя 7 минут, 52 секунды (9.11.2011 - 23:14) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 20:06) |
neopk Тут скорее неправильно ты пытаешься делать, а не использовать. Что не будет совпадать? Можешь нормально объяснить? |
Из формы я получаю название города и страны, но они не будут совпадать с полями country и city из таблицы profiles, т.к. в них хранится номер города и страны. Есть таблица country, в ней указано соотношение названий городов и их номеров. Из нее я вытягиваю номер города и сравниваю его номерами в табл. profiles.В вашем коде, как я понимаю, расчитанно на то, что поля будут совпадать изначально.
Спустя 7 минут, 57 секунд (9.11.2011 - 23:22) PandoraBox2007 написал(а):
Города, Регионы, Страны = http://classifiers.ru/clas/info/1
Спустя 12 минут, 41 секунда (9.11.2011 - 23:35) PandoraBox2007 написал(а):
Телефонные коды городов = http://classifiers.ru/clas/info/20
Спустя 38 минут, 33 секунды (10.11.2011 - 00:13) imbalance_hero написал(а):
neopk
Если тебе надо и оттуда и оттуда получить данные, то делай связь через left join при запросе.
Если тебе из одной лишь таблицы, в в форме пиши вместо
<option name="country" value="Ukraine">
<option name="country" value="52"> - сразу код!
Если тебе надо и оттуда и оттуда получить данные, то делай связь через left join при запросе.
Если тебе из одной лишь таблицы, в в форме пиши вместо
<option name="country" value="Ukraine">
<option name="country" value="52"> - сразу код!
Спустя 9 часов, 21 минута, 18 секунд (10.11.2011 - 09:35) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 21:13) |
neopk Если тебе надо и оттуда и оттуда получить данные, то делай связь через left join при запросе. Если тебе из одной лишь таблицы, в в форме пиши вместо <option name="country" value="Ukraine"> <option name="country" value="52"> - сразу код! |
Ну если б так можно было бы делать... там городов под сотню, вставляется туда все через цикл из таблицы.
Спустя 42 минуты, 36 секунд (10.11.2011 - 10:17) neopk написал(а):
Цитата (imbalance_hero @ 9.11.2011 - 20:06) |
neopk Тут скорее неправильно ты пытаешься делать, а не использовать. Что не будет совпадать? Можешь нормально объяснить? |
Сделал по первому предложенному вами варианту - вроде работает, осталось дотестировать. Спасибо за помощь, я 2 дня тупил над этой проблемой.
З.Ы. А почему сразу нельзя было просто сказать о существовании функции mysql_real_escape_string ?)
Спустя 3 часа, 44 минуты, 26 секунд (10.11.2011 - 14:02) johniek_comp написал(а):
neopk
так вопрос о другом стоял, всегда пожалуйста - заходи!
так вопрос о другом стоял, всегда пожалуйста - заходи!
Спустя 6 часов, 31 минута, 20 секунд (10.11.2011 - 20:33) neopk написал(а):
Цитата (johniek_comp @ 10.11.2011 - 11:02) |
neopk так вопрос о другом стоял, всегда пожалуйста - заходи! |
Цитата |
Почитав в интернете, я понял, что функция будет выполнятся только если она resorce, в моем же случае там, увы, не получается resource и вся эта система не работает. Может кто подскажет как выйти из этой ситуации? |
Я думаю тут вопрос стоял об этом). Буду заходить часто.