[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Глупый вопрос по SELECT вкупе с WHERE
AntonMMF
Итак, есть простенький код, в комментариях не нуждающийся

$login = $_REQUEST['login'];
$password = $_REQUEST['password'];
$login = preg_replace('/[^0-9a-z]/i', '', $login);
$password = preg_replace('/[^0-9a-z]/i', '', $password);
$password = md5($password);
$r = mysql_query("SELECT * FROM users");
while ($row = mysql_fetch_array($r)) {
$databaseLogin = $row['login'];
$databasePassword = $row['password'];
echo $login."<br />".$password."<br />".$databaseLogin."<br />".$databasePassword."<br />";
if ($login === $databaseLogin) {echo "всё верно";}
}


В базе данных в таблице users 1 строка, все переменные по запросу echo отображаются, в том числе строка "всё верно", но стоит добавить в строку запроса к БД условие, как в ответ выходит белая страница без ничего

$login = $_REQUEST['login'];
$password = $_REQUEST['password'];
$login = preg_replace('/[^0-9a-z]/i', '', $login);
$password = preg_replace('/[^0-9a-z]/i', '', $password);
$password = md5($password);
$r = mysql_query("SELECT * FROM users WHERE login=$login");
while ($row = mysql_fetch_array($r)) {
$databaseLogin = $row['login'];
$databasePassword = $row['password'];
echo $login."<br />".$password."<br />".$databaseLogin."<br />".$databasePassword."<br />";
if ($login === $databaseLogin) {echo "всё верно";}
}


WTF? Кодировка страницы с кодом UTF-8, БД тоже в UTF-8.



Спустя 15 минут, 51 секунда (5.05.2011 - 01:08) inpost написал(а):
8 месяцев на форуме, пора бы уже некоторые основы выучить.
А теперь по существу:
- Строковые данные при запросе в БД обрамляются кавычками (попускается только для числовых!
- Имена ячеек и таблиц обрамляются опострафами `table` WHERE `login` = '".$login."'
- Если неверный пароль или имя, то лучше проверку делать preg_match и возвращать результат о том, что ввели неверно, а не вырежать символы.
- mysql_query() or die(mysql_error()); - показывает ошибку запроса, тут ответ, что пошло не так, как тебе хотелось!
- При выборке сначала надо убедиться, что были записи: mysql_num_rows, а после делать mysql_fetch_assoc(), а не array!
- В добавок лучше строго указывать, пришли ли данные как $_POST, или все же как $_GET.

Спустя 14 минут, 8 секунд (5.05.2011 - 01:22) waldicom написал(а):
Цитата (inpost @ 4.05.2011 - 23:08)
- Имена ячеек и таблиц обрамляются опострафами

чушь
Цитата (inpost @ 4.05.2011 - 23:08)
- При выборке сначала надо убедиться, что были записи: mysql_num_rows, а после делать mysql_fetch_assoc(), а не array!

чушь два раза

Спустя 8 часов, 8 минут, 7 секунд (5.05.2011 - 09:30) Michael написал(а):
т.е. подытожу:
$r = mysql_query("SELECT * FROM users WHERE login='$login'");

Спустя 1 час, 28 минут, 52 секунды (5.05.2011 - 10:59) Renden написал(а):
inpost
Цитата
- Имена ячеек и таблиц обрамляются опострафами

Я ниразу не обрамлял, и вот только недавно узнал что на клаве есть такая кавычка `, тк буквой ё вообще не пользовался никогда в жизни)))
И mysql пофигу насамом деле, их обрамлять нужно если только в названии таблиц или ячеек совпадают с зарезервированными именами ну например group,user,order и тп, и то нефакт что он ругнется..

Спустя 22 минуты, 7 секунд (5.05.2011 - 11:21) linker написал(а):
Renden
Ругнётся и это факт. Лучше обрамлять апострофами и не парить себе мозг поиском ошибок.

Спустя 35 минут, 24 секунды (5.05.2011 - 11:56) maximka787 написал(а):
Michael и другие правы, кавычки нужны всегда. и проверка на всех шагах.

а лучше выведи echo $result; и посмотри просто как выглядит запрос. Можешь его вставить в поле ввода запроса и увидеть ошибку.

Спустя 49 минут, 59 секунд (5.05.2011 - 12:46) Renden написал(а):
maximka787
Цитата
Michael и другие правы, кавычки нужны всегда. и проверка на всех шагах.

Не согласен что кавычки нужны всегда, я даю вменяемые названия таблицам и ячейкам, например user_group, user_id, user_name, cat_order и тп. И что самое важное я составляю сложный запрос не в PHP коде, а в отдельной программе для работы с базой, например в Navicat Mysql и проверяю на работоспособность и вижу результат того что этот запрос выводит.

Я не вижу смысла тыкать эти ковычки везде, лишее действие, например:

SELECT users.`firstname`,users.`id`,departments.`name` FROM `users` LEFT JOIN `departments` ON users.`ugroup`=departments.`id`

задолбаешься эти кавычки вбивать, ошибешься- вот тебе и ерор..
Гораздо проще написать так и этот запрос будет без ошибок:

SELECT u.firstname,u.id,d.name FROM users u LEFT JOIN departments d ON u.ugroup=d.id

Все зарезервированные имена подсвечиваются так что видно кому нужно дать кавычки, остальным в топку.. ИМХО

Спустя 15 минут, 45 секунд (5.05.2011 - 13:02) sharki написал(а):
Renden
Такое отношение к делу - ни к чему хорошему не приведет.

Это что, все правила программирования и многие предосторожности пустота? бреед...

Спустя 4 минуты, 49 секунд (5.05.2011 - 13:07) linker написал(а):
Это хорошо ты, а кто другой воспользуется твоими наработками.

Спустя 14 минут, 40 секунд (5.05.2011 - 13:22) inpost написал(а):
Renden
Даже подсветка на форуме показала тебе, что первый вариант с кавычками красивее смотрится, чем второй =)
А самое главное, ты даёшь совет именно новичку, а у него имена таблиц и ячеек обычно: DATE, NEW, DESC и т.д.

Спустя 38 минут, 17 секунд (5.05.2011 - 14:00) Renden написал(а):
sharki
Цитата
Это что, все правила программирования и многие предосторожности пустота? бреед...

Причем тут это?, создатели mysql тоже не дураки, раз они допускают возможность использования кода без ковычек (php например не допускает строку писать без кавычек), значит этим можно пользоватся и ничего уголовного в этом нет. И мое мнение писать их тогда когда они нужны.

linker, сомневаюсь что мои наработки будут использоватся smile.gif Ну а даже если так, ты например не сможешь чтоль прочитать данный запрос, или дописать в него что-то свое, с кавычками или без? Сомневаюсь)

inpost
Форум подсвечивает, а вот PHP код нет, тк запрос это строка, смысл? Да и форум подсвечивает фиговато smile.gif
Неее.. советов я не даю, каждый делает так как ему нравится, я просто был удивлен критичностью замечания "кавычки нужны всегда, кровь из носа если их небудет" smile.gif


Спустя 7 минут, 39 секунд (5.05.2011 - 14:08) linker написал(а):
Renden
Я-то могу, а вот придёт новичок на твоё место и привет. С апострофами я не ограничен в именовании таблиц, полей. Хочу Group назвать и называю.

Спустя 2 минуты, 46 секунд (5.05.2011 - 14:10) Renden написал(а):
linker
Ну я тоже могу поставить конкретно в этом месте кавычки и назвать Group, вопрос в том зачем в остальных местах ставить? Для симметричности чтоль?))

Помоему это также глупо как

if ($a==$b)
{
echo 'ок';
}
else
{
echo "го лесом";
}

Спустя 7 минут, 13 секунд (5.05.2011 - 14:18) linker написал(а):
Renden
Вовсе не глупо, '' и "" используются в разных целях. Ты лучше попробуй без кавычек echo написать.

Спустя 7 минут, 13 секунд (5.05.2011 - 14:25) Renden написал(а):
linker
Вообщето я имел другое ввиду:

if ($a==$b)
{
echo 'ок';
}
else
{
echo "го лесом";
}
//VS
if ($a==$b)
echo 'ок';
else
echo "го лесом";

Тут скобки не обязательны, нафиг их ставить, вот в sql я думаю такая-же идея с кавычками..

Ладно не буду спорить к Экспертом :) Но помоему чем продвинутее програмист, тем он ленивее вплане делания необязательных действий.

Спустя 5 минут, 49 секунд (5.05.2011 - 14:31) inpost написал(а):
Renden
Вообще-то у одинарных и двойных кавычках разные места использования, как сказал Линкер, и по разному работают.
А теперь зачем всегда ставить кавычки?! А вот типичный пример, попробуй решить без кавычек: http://phpforum.su/index.php?showtopic=43730&st=0 . И на данном этапе это МАЛЕНЬКИЙ конкурс, а что говорить про крупные фреймворки?
А теперь реальный вопрос, можешь ли ты вот так схожу, если я тебе скажу перечень слов, без справочника определить, являются ли данные слова зарезервированными, или нет?

Дополнение к скобкам, заставь интерпретатор думать правильно в такой схеме:
if()
if()
if()
else()
else()

Спустя 3 минуты, 32 секунды (5.05.2011 - 14:34) linker написал(а):
Ну собственно, дело твоё. Да только кабы народ умел расставлять апострофы как положено разумом, а не мужским органом на это дело, то подобных ошибок и тем в форуме было бы меньше.

Спустя 11 минут, 14 секунд (5.05.2011 - 14:45) Renden написал(а):
inpost
Нехочу до конца дня флудить в этой теме, но всеж скажу:
Цитата

А теперь реальный вопрос, можешь ли ты вот так схожу, если я тебе скажу перечень слов, без справочника определить, являются ли данные слова зарезервированными, или нет?

А ты можешь сходу назвать функции которые будут использованы в скрипте по загрузке файлов? Большинство - Да, нетакли? Это ответ на твой вопрос)
У меня такое чувство что все читают между строк, я же не пишу что я никогда не буду использовать. Я пишу о том что:
Если скобки, кавычки, не обязательны и не мешают выполнению запроса, скрипта, и они не помогают визуальному воспиниманию кода,запроса, то зачем их использовать всегда, их нужно использовать тогда когда они нужны и все.

linker
Ну и тогда чем нам было-бы занятся в будний день когда работать не особо хочется? wink.gif

Спустя 9 минут, 36 секунд (5.05.2011 - 14:55) inpost написал(а):
Renden
Вопрос на засыпку, как часто приходится мне отвечать на форуме, что ошибка в том, что кто-то "Благодаря господину П." ставит имена ячеек DESC и не обрамляет их в кавычки? Если раз и навсегда все новички ставили кавычки в нужных местах, то проблем бы не было, и вопросы на форуме были бы более продуктивного характера. Вот и получается, из-за такого образования, как у тебя, будучи ты преподавателем, на нашем форуме больше и больше тем появлялось о том, что ячейки с именем DESC не обрамленная кавычками не работает! Новичкам не надо забивать голову про исключения из правил, им легче показать простой пример работы, а вот про характер целевого использования, нужно или нет, и почему тот же PMA не ставит кавычки - вопрос из раздела "PHP для знатоков".

Ты слишком часто повторяешь: вот Я, Я, Я. Речь не про тебя, используй так, как тебе хочется, в данной теме мы пытаемся навести на путь истинный ТС, исправить на данном этапе его развития - ошибки.

Спустя 11 минут, 14 секунд (5.05.2011 - 15:06) Michael написал(а):
Цитата (maximka787 @ 5.05.2011 - 10:56)
Michael и другие правы, кавычки нужны всегда. и проверка на всех шагах.

Заметь, я про необходимость обратной кавычки ничего не говорил. Я - за чистоту SQL, т.е. правильное именование объектов БД.
Посмотрите на англоязычных форумах по mysql(и в книгах) - используют они обратную кавычку? А мы ведь тоже латиницей создаем имена таблиц, столбцов. Это у нас как то повелось с этой кавычкой... Наверное для предосторожности новичков, которые sql плохо понимают.
В друпале например ни о каких кавычках в тексте запросов речи не идет, предполагается, что запросы под разные базы будут работать, а в других базах эта кавычка не катит.

p.s. от этих кавычек в глазах ребит, то ли запрос то ли елка новогодняя smile.gif

Спустя 13 секунд (5.05.2011 - 15:06) Renden написал(а):
inpost
Ну ты прав конечно, но в процессе "наведения на пусть истинный ТС" проскочили 2 фразы:
- Имена ячеек и таблиц обрамляются опострафами
- Michael и другие правы, кавычки нужны всегда.

После которых я и высказал свое мнение на эту тему, дабы не сложилось впечатление у ТС что "опера гавно" - "фаерфокс - все", мне пришлось убеждать себя, тебя, и ТС в том что данные утверждения верны частично smile.gif

ЗЫ что-то ты как-то резко мне ответил, я задел тебя чтоль, извеняй если вдруг что-то нето сказал..

Michael Ну хоть кто-то меня поддержал, УРЯ!! =))

Спустя 11 минут, 51 секунда (5.05.2011 - 15:18) inpost написал(а):
Renden
Совсем нет, просто веду беседу, в моих словах лишь доброта, никапельки ненависти не проскочило, просто, может быть, такая манера общения моя, так что ты извиняй меня тоже.

Michael
PMA не использует кавычек, на офф.сайте мануала по мускулу тоже без этих же кавычек, понятное дело, нет в ней необходимости, просто убеждать новичков в их использовании приходится, иначе постоянно одно и тоже.
В целом да, из-за новичков, чтобы сделать наиболее удобное для них программирование с минимальным количеством ошибок.


_____________
Работаю на репутацию (не только на карму, которая в профиле).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.