Forum Webscript.Ru

Программирование => PHP => Тема начата: vespen от 25 Февраля 2004, 18:13:17

Название: Не могу отправить заголовок!
Отправлено: 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() -

может быть тому причиной?
Название: Не могу отправить заголовок!
Отправлено: Меняздесьдавнонет от 25 Февраля 2004, 18:23:53
Цитировать
vespen:
mysql_errno() -
может быть тому причиной?

гы гы гы!
а оно выводится не в браузер?
а куда?
Название: Не могу отправить заголовок!
Отправлено: Макс от 25 Февраля 2004, 18:26:26
у тебя коннекта к mysql нет. Проверь параметры доступа к mysql (и что там за ODBC ?)
А хедер не шлется потому, что первая ошибка выводится (она и является выводом в броузер).
Название: Не могу отправить заголовок!
Отправлено: Меняздесьдавнонет от 25 Февраля 2004, 18:29:49
э, орел!
ты что делаешь-то?
если не аналог пхпмайадмина, то глупость.

зачем тебе к базе коннектиться введенными пользователем логином и паролем?
Название: Не могу отправить заголовок!
Отправлено: vespen от 26 Февраля 2004, 12:13:58
Цитировать
гы гы гы!
а оно выводится не в браузер?
а куда?


в моем примере оно в браузер не выводится. Вызов mysql_errno(), насколько я знаю сам по себе в браузер не выводиться (или я ошибаюсь?)

Цитировать
зачем тебе к базе коннектиться введенными пользователем логином и паролем?


Это примитивная админка для редактирования таблиц mysql. Она будет располагаться на продакшн-сервере вместе с файлами сайта. Как по-твоему я могу ограничить к ней доступ не запрашивая имя и пароль?

==========
Идея была следующая:

получить код ошибки mysql и обработать ситуацию связанную с этой ошибкой отправив юзера на другую страницу с помошью header ("Location:
Название: Не могу отправить заголовок!
Отправлено: Меняздесьдавнонет от 26 Февраля 2004, 12:32:53
а "Warning: mysql_connect(): Access denied for user: " куда выводится? :-)

а если другая ошибка, не 1045 - это, типа, все нормально?

Цитировать
Как по-твоему я могу ограничить к ней доступ не запрашивая имя и пароль?

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

Это примитивная админка для редактирования таблиц mysql.

А чем тебя не устраивает готовая примитивная админка - phpmyadmin?
Название: Не могу отправить заголовок!
Отправлено: vespen от 26 Февраля 2004, 14:22:57
Цитировать
А чем тебя не устраивает готовая примитивная админка - phpmyadmin?


хрен его знает :о)
Название: Не могу отправить заголовок!
Отправлено: Diesel от 26 Февраля 2004, 15:36:00
vespen
так понимаю хочешь cms сделать для сайта. Это не так делается, но вопрос не в этом.

error_reporting(0);
ini_set(\'display_errors\', 0);

 
те отключаешь вывод ошибок в браузер и все работает.
Название: Не могу отправить заголовок!
Отправлено: AliMamed от 26 Февраля 2004, 15:38:11
Diesel это очень глупый совет.
Название: Не могу отправить заголовок!
Отправлено: Diesel от 26 Февраля 2004, 15:46:50
AliMamed каков вопрос таков и ответ.
И вообще. Если кто то говорит "это глупый совет" почему бы сразу не ткнуть пальцем в глупость?
Название: Не могу отправить заголовок!
Отправлено: Макс от 26 Февраля 2004, 15:49:42
Diesel
отключение вывода ошибок  != исправление ошибок
Название: Не могу отправить заголовок!
Отправлено: ThE0ReTiC от 26 Февраля 2004, 15:53:08
Тыкаю
Цитировать
Diesel:
error_reporting(0);
ini_set(\'display_errors\', 0);

Цитировать
vespen:
хрен его знает

А может сперва определиться?
Название: Не могу отправить заголовок!
Отправлено: Diesel от 26 Февраля 2004, 16:02:45
Макс согласен 100% но это никак не касается моего ответа и самого вопроса. Я не сказал что отключай вывод ошибок и не о чем не беспокойся.
Название: Не могу отправить заголовок!
Отправлено: AliMamed от 26 Февраля 2004, 16:03:35
Diesel вывод ошибок отключают не для того чтобы "они не мешали работать скрипту", а для того, чтобы их посторонний не увидел.
ошибки должны выводится, когда идет работа над кодом. и должны они выводится для того, чтобы их можно было отладить
Название: Не могу отправить заголовок!
Отправлено: AliMamed от 26 Февраля 2004, 16:06:44
Цитировать
Diesel:
те отключаешь вывод ошибок в браузер и все работает.

Цитировать
Diesel:
Я не сказал что отключай вывод ошибок и не о чем не беспокойся.

а что ты тогда сказал?
Название: Не могу отправить заголовок!
Отправлено: Diesel от 26 Февраля 2004, 16:41:37
AliMamed Есть код. В этом коде однозначно видно что авторизация происходит по введенным пользователем данным (иначе зачем отсылать на страницу авторизации если параметры соединения прописаны в скрипте?). Если пользователь ввел неправильные параметры то будет выведена ошибка и никакогой header отправлен не будет. Это и ежу понятно! Поэтому вывод в браузер нужно запретить и вместо этого выдавать сообщение уже после отправки заголовка на странице авторизации например так

if (isset($_GET[\'err\']))
{
    print \'Ошибка соединения с базой\';
}

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

Вывод: задуманно неправильно. Поэтому повторяю. Каков вопрос, таков и ответ.
Название: Не могу отправить заголовок!
Отправлено: AliMamed от 26 Февраля 2004, 16:48:12
для этого не обязательно error_reporting(0);
Название: Не могу отправить заголовок!
Отправлено: Макс от 26 Февраля 2004, 17:02:13
Diesel
есть куча спсособов, как обойти эту проблему. Начиная с написания чистого кода (который ничего не выводит перед хедером) и заканчивая включением буферизации.
И новичков насильно надо заставлять писать чистый код - меньше будет ошибок и лучше разберутся с языком.

А error_reporting(0) - наиболее вредный совет (хотя, честно говоря, сам по глупости раньше им пользовался ). Потому что эта строка запрещает вывод ошибок в том числе и в лог-файл (по умолчанию на работчем сайте ошибки надо писать в логи).
Чтобы ошибки не выводились в броузер достаточно
ini_set("display_errors", "Off");
ошибки на экран выводится не будут, а в логи писаться будут (если не отключишь) и на header или сессии это влиять никак не будет
Название: Не могу отправить заголовок!
Отправлено: Diesel от 26 Февраля 2004, 17:03:38
у меня такое чувство что автору этот топик уже не интересен.
Название: Не могу отправить заголовок!
Отправлено: Diesel от 26 Февраля 2004, 17:10:39
Макс вот это наконец по существу. error_reporting(0) както по энерции написал. каюсь.
То что заставлять хороший код писать - правильно. но тогда нужно чуть ли не каждого направлять по ссылке на стандарты кодирования PEAR и каждому объяснять что двойные кавычки есть смысл использовать только внутри двойных. Это полезно но это не по теме.
Название: Не могу отправить заголовок!
Отправлено: Меняздесьдавнонет от 26 Февраля 2004, 18:19:46
Diesel
если в этот топик будут писать недалекие люди вроде тебя, то он станет неинтересен кому угодно.
Запомни.
В этом форуме не даются идиотские ответы "чего хотел того и получил".
Если автор вопроса хочет ошибочного, то ему ошибка разъясняется, а не дается ответ в лоб.

Дай мне знать, что понял.

Тебе для информации.
Праграмма в штатном режиме не должна порождать сообщений об ошибках.
Сообщения об ошибках - это сигналы о том, что программа работает некорректно.
поэтомы при корректной работе сообщений быть не должно.
поэтому если сообщение выдается, надо программцу переписать.
А не прятать голову в песок.
Название: Не могу отправить заголовок!
Отправлено: Diesel от 27 Февраля 2004, 08:31:28
RomikChef согласен что в этом оспекте я не прав. Но заметь я сразу сказал что это делается не так, в расчете на то что автор спросит все же, а как это делается. Автору по барабану, а мы тут такую дискусию развели.