Forum Webscript.Ru
Программирование => PHP => Тема начата: vespen от 25 Февраля 2004, 18:13:17
-
Этот кусок функции инклюдится в скрипт авторизации
пользователя.
if(!($link=mysql_connect($hostname, $db_user, $db_pass,
$db_name))) {
//если неправильное имя пользователя или пароль,
переадресация на страницу авторизации
if (mysql_errno()=="1045") {
header
("Location:http://".$hostname."/admin/auth.html");
exit();
}
========
Пишет ошибку:
Warning: mysql_connect(): Access denied for user:
\'ODBC@localhost\' (Using password: NO) in C:\\path\\conf.php
on line 16
Warning: Cannot modify header information - headers
already sent by (output started at C:\\path\\conf.php:16)
in C:\\path\\conf.php on line 19
==============
проверил оба скрипта - нигде перед командой отправки
заголовка нет никакого вывода в броузер. mysql_errno() -
может быть тому причиной?
-
vespen:
mysql_errno() -
может быть тому причиной?
гы гы гы!
а оно выводится не в браузер?
а куда?
-
у тебя коннекта к mysql нет. Проверь параметры доступа к mysql (и что там за ODBC ?)
А хедер не шлется потому, что первая ошибка выводится (она и является выводом в броузер).
-
э, орел!
ты что делаешь-то?
если не аналог пхпмайадмина, то глупость.
зачем тебе к базе коннектиться введенными пользователем логином и паролем?
-
гы гы гы!
а оно выводится не в браузер?
а куда?
в моем примере оно в браузер не выводится. Вызов mysql_errno(), насколько я знаю сам по себе в браузер не выводиться (или я ошибаюсь?)
зачем тебе к базе коннектиться введенными пользователем логином и паролем?
Это примитивная админка для редактирования таблиц mysql. Она будет располагаться на продакшн-сервере вместе с файлами сайта. Как по-твоему я могу ограничить к ней доступ не запрашивая имя и пароль?
==========
Идея была следующая:
получить код ошибки mysql и обработать ситуацию связанную с этой ошибкой отправив юзера на другую страницу с помошью header ("Location:
-
а "Warning: mysql_connect(): Access denied for user: " куда выводится? :-)
а если другая ошибка, не 1045 - это, типа, все нормально?
Как по-твоему я могу ограничить к ней доступ не запрашивая имя и пароль?
А зачем запрашивать имя и пароль от базы? Почему бы не запросить другие?
Ну, хочешь запрашивать - проверяй без коннекта, они же у тебя в скрипте прописаны.
Это примитивная админка для редактирования таблиц mysql.
А чем тебя не устраивает готовая примитивная админка - phpmyadmin?
-
А чем тебя не устраивает готовая примитивная админка - phpmyadmin?
хрен его знает :о)
-
vespen
так понимаю хочешь cms сделать для сайта. Это не так делается, но вопрос не в этом.
error_reporting(0);
ini_set(\'display_errors\', 0);
те отключаешь вывод ошибок в браузер и все работает.
-
Diesel это очень глупый совет.
-
AliMamed каков вопрос таков и ответ.
И вообще. Если кто то говорит "это глупый совет" почему бы сразу не ткнуть пальцем в глупость?
-
Diesel
отключение вывода ошибок != исправление ошибок
-
Тыкаю
Diesel:
error_reporting(0);
ini_set(\'display_errors\', 0);
vespen:
хрен его знает
А может сперва определиться?
-
Макс согласен 100% но это никак не касается моего ответа и самого вопроса. Я не сказал что отключай вывод ошибок и не о чем не беспокойся.
-
Diesel вывод ошибок отключают не для того чтобы "они не мешали работать скрипту", а для того, чтобы их посторонний не увидел.
ошибки должны выводится, когда идет работа над кодом. и должны они выводится для того, чтобы их можно было отладить
-
Diesel:
те отключаешь вывод ошибок в браузер и все работает.
Diesel:
Я не сказал что отключай вывод ошибок и не о чем не беспокойся.
а что ты тогда сказал?
-
AliMamed Есть код. В этом коде однозначно видно что авторизация происходит по введенным пользователем данным (иначе зачем отсылать на страницу авторизации если параметры соединения прописаны в скрипте?). Если пользователь ввел неправильные параметры то будет выведена ошибка и никакогой header отправлен не будет. Это и ежу понятно! Поэтому вывод в браузер нужно запретить и вместо этого выдавать сообщение уже после отправки заголовка на странице авторизации например так
if (isset($_GET[\'err\']))
{
print \'Ошибка соединения с базой\';
}
Но если в приведенном коде не отключать вывод ошибок то хоть в процессе разработки хоть в процессе реальной работы этот код не будет работать как задуманно.
Вывод: задуманно неправильно. Поэтому повторяю. Каков вопрос, таков и ответ.
-
для этого не обязательно error_reporting(0);
-
Diesel
есть куча спсособов, как обойти эту проблему. Начиная с написания чистого кода (который ничего не выводит перед хедером) и заканчивая включением буферизации.
И новичков насильно надо заставлять писать чистый код - меньше будет ошибок и лучше разберутся с языком.
А error_reporting(0) - наиболее вредный совет (хотя, честно говоря, сам по глупости раньше им пользовался ). Потому что эта строка запрещает вывод ошибок в том числе и в лог-файл (по умолчанию на работчем сайте ошибки надо писать в логи).
Чтобы ошибки не выводились в броузер достаточно
ini_set("display_errors", "Off");
ошибки на экран выводится не будут, а в логи писаться будут (если не отключишь) и на header или сессии это влиять никак не будет
-
у меня такое чувство что автору этот топик уже не интересен.
-
Макс вот это наконец по существу. error_reporting(0) както по энерции написал. каюсь.
То что заставлять хороший код писать - правильно. но тогда нужно чуть ли не каждого направлять по ссылке на стандарты кодирования PEAR и каждому объяснять что двойные кавычки есть смысл использовать только внутри двойных. Это полезно но это не по теме.
-
Diesel
если в этот топик будут писать недалекие люди вроде тебя, то он станет неинтересен кому угодно.
Запомни.
В этом форуме не даются идиотские ответы "чего хотел того и получил".
Если автор вопроса хочет ошибочного, то ему ошибка разъясняется, а не дается ответ в лоб.
Дай мне знать, что понял.
Тебе для информации.
Праграмма в штатном режиме не должна порождать сообщений об ошибках.
Сообщения об ошибках - это сигналы о том, что программа работает некорректно.
поэтомы при корректной работе сообщений быть не должно.
поэтому если сообщение выдается, надо программцу переписать.
А не прятать голову в песок.
-
RomikChef согласен что в этом оспекте я не прав. Но заметь я сразу сказал что это делается не так, в расчете на то что автор спросит все же, а как это делается. Автору по барабану, а мы тут такую дискусию развели.