Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не могу соединиться с сервером базы данных


Автор: ReactOS 6.5.2008, 14:56
Добрый день!
У меня такая проблема:
Код

function connect_to_db()    {

$cnx = @mysql_connect($host, $user, $pass);

if(!$cnx)
    {
    exit("В настоящий момент, сервер базы данных недоступен, поэтому корректное отображение страницы невозможно!");
    }
if(!@mysql_select_db($db, $cnx))
    {
    exit("В настоящий момент, база данных недоступна, поэтому корректное отображение страницы невозможно!");
    }

}
connect_to_db();

Если я из кода уберу "function connect_to_db() {  } connect_to_db();" , то код уже рабочий, и происходит соединение к серверу базы данных.
Не могу понять, почему если я хочу добавить в код "function function_name() { } function_name();" - то перестает работать :(

Вроде переменная $cnx находится в теле функции, да и с code syntax - все нормально :(
Конечно можно и обходиться и без этого, но так неудобно по коду искать, тем более в Notepad++ есть поиск по ф-циям в коде, достаточно кликнуть по нужной функции, и ты будешь перенаправлен на нужную строку

Почему не работает код? В чем ошибка?

Автор: DeamonShan 6.5.2008, 14:59
Внутри функции переменные $host, $user, $pass неопределены....

попробуй так, передать их или возми из global

Код

function connect_to_db()    {

global $host, $user, $pass;

$cnx = @mysql_connect($host, $user, $pass);

if(!$cnx)
    {
    exit("В настоящий момент, сервер базы данных недоступен, поэтому корректное отображение страницы невозможно!");
    }
if(!@mysql_select_db($db, $cnx))
    {
    exit("В настоящий момент, база данных недоступна, поэтому корректное отображение страницы невозможно!");
    }

}
connect_to_db();

Автор: Feldmarschall 6.5.2008, 15:08
Непонятно, зачем эту функцию искать по коду, если она нужна ровно один раз.

Автор: krundetz 6.5.2008, 15:09
через global советую ничего не обьявлять. Ни только в этом случае но и в любом коде.
Лучше сделай так:
Код

function connect_to_db()    {
$host = 'хост';
$user = 'логин';
$pass = 'пароль';
$db = 'базаДанных';
$cnx = @mysql_connect($host, $user, $pass);
if(!$cnx)
    {
    exit("В настоящий момент, сервер базы данных недоступен, поэтому корректное отображение страницы невозможно!");
    }
if(!@mysql_select_db($db, $cnx))
    {
    exit("В настоящий момент, база данных недоступна, поэтому корректное отображение страницы невозможно!");
    }
}
connect_to_db();

в этом случае у тебя все будет в одном месте и соедеинение с базой данных и параметры необходимые для этого.

Автор: Feldmarschall 6.5.2008, 15:12
а зачем параметры держать в одном месте с подключением?
Обычно параметры лежат в файле с настройками.

Автор: DeamonShan 6.5.2008, 15:13
ага, или лучше, если все в конфиг файле хранится, передать через аргументы...

Автор: krundetz 6.5.2008, 15:15
Цитата(Feldmarschall @ 6.5.2008,  15:12)
а зачем параметры держать в одном месте с подключением?
Обычно параметры лежат в файле с настройками.

Боюсь человек пока до конфигурационных файлов не дорос. Но на будущее действительно параметры в конфиг и передача по аргументу.

Автор: ReactOS 6.5.2008, 15:33
Цитата(krundetz @  6.5.2008,  15:09 Найти цитируемый пост)
через global советую ничего не обьявлять. Ни только в этом случае но и в любом коде.

это почему же? smile не объяснишь мне, пожалуйста? чем так global плох?

Добавлено @ 15:38
Цитата(DeamonShan @  6.5.2008,  15:13 Найти цитируемый пост)
ага, или лучше, если все в конфиг файле хранится, передать через аргументы...

чего-то не понял :( это типа, хранение данных в файлах расширения *.cfg , и дальнейшая работа с этими данными? чего-то не пойму, очень интересно стало!


Цитата(krundetz @  6.5.2008,  15:15 Найти цитируемый пост)
Боюсь человек пока до конфигурационных файлов не дорос. Но на будущее действительно параметры в конфиг и передача по аргументу.

ничего, побольше манов и будем расти  smile объясните подробнее про config-files smile а то жуть, как интересно стало smile

Добавлено @ 15:43
Цитата(Feldmarschall @  6.5.2008,  15:12 Найти цитируемый пост)
а зачем параметры держать в одном месте с подключением?Обычно параметры лежат в файле с настройками.

хочешь сказать, что мне нужно разделить мой файл еще на два, что ли?
Т.е. details.php (настройки) и connect.php (подключение)?? это, ты имел в виду?

Автор: krundetz 6.5.2008, 15:55
Цитата

объясните подробнее про config-files smile а то жуть, как интересно стало smile

У тебя будет файл:
config.php - в котором хранится вся информация о настройках системы в том числе и информация о хосте пароле и имени пользователе базы данных. Этот файл нужен для того чтобы тебе не лапатить кучу кода в поисках того какая переменная отвичеет за ту то и туту настройку и где она обьявлена а сразу знать где её искать. Это вопрос из области правильного оформления кода. Далее ты этот файл подключаешь туда где он тебе может понадобиться в данном случае в файл устанавливающий соёдинение с БД. Так как в файле могут содержаться множество неиспользуемых одновременно настроек то подходим к разделению настроек на несколько файлов. Самый простой пример настройки для администраторской части и настройки для пользовательской. Это вопрос уже из области правильного проектирования системы.
Цитата

это почему же? smile не объяснишь мне, пожалуйста? чем так global плох?

Противоречит концепции ООП.

Автор: DeamonShan 6.5.2008, 16:00
необязательно *.cfg можно и по другому назвать файл, например, config.inc или как то по другому, но пусть будет config.cfg

содержимое этого файла для начало будет таковым:

Код

<?
$host = 'хост';
$user = 'логин';
$pass = 'пароль';
$db = 'базаДанных';
?>


и твой скрипт, например, script.php:

Код

<?
include "config.cfg";

function connect_to_db($host,$user,$pass,$db)    {
$cnx = @mysql_connect($host, $user, $pass);
if(!$cnx)
    {
    exit("В настоящий момент, сервер базы данных недоступен, поэтому корректное отображение страницы невозможно!");
    }
if(!@mysql_select_db($db, $cnx))
    {
    exit("В настоящий момент, база данных недоступна, поэтому корректное отображение страницы невозможно!");
    }
}
connect_to_db($host,$user,$pass,$db);
?>


при этом оба файла должны быть в одной директории

еще интереснее когда функции писать тоже в отдельный файл))))

Автор: Feldmarschall 6.5.2008, 16:03
fortrun, лучше про шаблоны почитай.
все, что здесь обсуждается - выеденного яйца не стоит

Автор: ReactOS 6.5.2008, 16:07
Цитата(krundetz @  6.5.2008,  15:55 Найти цитируемый пост)
Противоречит концепции ООП.

лезть в такие подробности пока не буду, но есть вопросы по этому поводу:

А в каких случаях нужно использовать ООП?
Ведь, можно построить достаточно классные по функциональности сайты и без ООП?

К тому же, PHP является интерпретатором, по ходу, чем больше ненужных строк, тем медленее выполняется работа скрипта, хотя возможно это экономия на спичках...

Просто недавно наткнулся на код подключения к серверу баз даных, какой-то навороченный и на ООП как раз, по-моему такой код будет медленнее выполняться, чем просто:
Код

mysql_conneсt('host', 'user', 'pass');
mysql_select_db('db');

ИМХО 2-е строчки, и ни каких проблем smile
Хотя, я може чего-то и не понимаю smile

Добавлено @ 16:09
Цитата(Feldmarschall @  6.5.2008,  16:03 Найти цитируемый пост)
fortrun, лучше про шаблоны почитай.

извините, с CMS ушел как-раз ради обучения, поэтому шаг назад делать не будем smile
только вперед! smile

Добавлено @ 16:12
Цитата(krundetz @  6.5.2008,  15:55 Найти цитируемый пост)
Это вопрос уже из области правильного проектирования системы.

А для чего нужно правильное проектирование? Для заказчика? А разве ему интересно, как система устроена? Разве ему не нужен банально результат? Даже, если код будет корявым или простым?

Автор: DeamonShan 6.5.2008, 16:24
помоему правильное проектирования кода нужно только для тебя самого, чтобы сам не запутался)))))  попробуй написать пару скриптов с облаком переменных... потом узнаешь))) и задумаешься о правильной конструкции скрипта))

Автор: ReactOS 6.5.2008, 16:27
Цитата(DeamonShan @  6.5.2008,  16:24 Найти цитируемый пост)
попробуй написать пару скриптов с облаком переменных... потом узнаешь))) и задумаешься о правильной конструкции скрипта))

 smile 

Автор: DeamonShan 6.5.2008, 16:30
по поводу классов: у тебя стоит MySQL так? ты пишешь скрипт именно под эту БД... и если тебе придется перенести свой сайт на другой сервак, где нет MySQL, а стоит, например, PosgreSQL тебе придется переписать скрипт))))))) 

а классы позволяют этого избежать... просто в соответсвии с БД подключаешь нужныж класс БД....




извеняюсь за свой русский))

Автор: Feldmarschall 6.5.2008, 16:30
Цитата(fortrun @  6.5.2008,  16:07 Найти цитируемый пост)
извините, с CMS ушел как-раз ради обучения, поэтому шаг назад делать не будем

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

Добавлено через 2 минуты и 4 секунды
DeamonShan, опять эти бредни. 
не позволяют классы этого избежать. попробуй, избеги - а потом рассказывай эти сказки.


50% твоих ответов на форуме - о вещах, в которых ты вообще ничего не смыслишь. попробуй писать только о том, что действительно знаешь. 

Автор: ReactOS 6.5.2008, 16:40
Цитата(Feldmarschall @  6.5.2008,  16:30 Найти цитируемый пост)
судя по всему, ты не понимаешь, что такое шаблон

согласен, возможно не пониманию! сейчас немного начал понимать вроде про что ты имел в виду... т.е. создание шаблонов своими руками, ну т.е. как раз правильное проектирование!

Насколько я помню, Shop-Script как раз основан на шаблонах, там как раз много *.inc файлов )

Цитата(Feldmarschall @  6.5.2008,  16:30 Найти цитируемый пост)
поэтому выпорлни мою рекомендацию - почитай, что это такое и зачем нужно

обязательно! т.к. я - обязан это знать ради себя!

Автор: Feldmarschall 6.5.2008, 16:48
в *.inc файлах может быть всё, что угодно.

Шаблон - это способ выводить оформление сайта независимо от выводимой информации.

Сейчас твоя функция коннект выведет сообщение об ошибке либо просто в чистое поле, либо - что скорее всего - в огрызок дизайна, с шапкой, но уже без ноги.

А на нормальном сайте желательно, чтобы сообщение об ошибке вывелось в нормальном оформлении.

Автор: ReactOS 6.5.2008, 16:52
Цитата(Feldmarschall @  6.5.2008,  16:48 Найти цитируемый пост)
Шаблон - это способ выводить оформление сайта независимо от выводимой информации.

+1! Как в математике - четко, коротко и ясно smile
А я все не мог сказать, и наговорил кучу слов smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)