Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инсталляционный PHP-скрипт, Нетривиальная (на мой взгляд) задачка 
:(
    Опции темы
Dionysius
Дата 21.12.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

Репутация: нет
Всего: 1



Исходные данные: PHP + MySQL

Задача: написать скрипт гостевой книги, который должен быть юзер-френдли, а именно: запускать инсталлятор, который будет указывать пользователю, что нужно нажать. Этот скрипт должен создать базу данных и запомнить настройки подключения к ней. Скрипт БД должен быть единым файлом.

У меня было два варианта, и они оба не прокатили.
1. Инсталлятор предлагает ввести имя хоста, имя СУЩЕСТВУЮЩЕГО пользователя (который имеет права на создание новой БД), его пароль и название создаваемой БД. Создаёт эту БД, а затем генерирует содержимое файла настроек, который пользователь должен будет создать.
2. Скрипт ничего не спрашивает, пользователь читает инструкцию, редактирует переменные прямо в скрипте для подключения к БД и создаёт таблицу в своей БД (или просит администратора).

Вопрос: как можно создать БД и сохранить настройки не генерируя при этом побочных файлов? Тем более что, как правило, никакой нормальный админ не позволит Апачу писать в файлы внутри веб-директорий. Или я не прав?
И как можно средствами скрипта создать БД, если пользователь непривелигированный?

 smile 
PM MAIL WWW   Вверх
Nicholas_S
Дата 21.12.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Dionysius, 
Цитата

как можно создать БД и сохранить настройки не генерируя при этом побочных файлов?

В любом случае, использование визуального юзер-френдли визарда необходимо, ибо это удобнее и понятнее, чем редактирование файла настроек вручную. К тому же, в функции визуального интерфейса входит контроль допущенных при вводе ошибок.
Индивидуальные настройки для каждого пользователя можно хранить либо в отдельной БД, либо в файле настроек, третьего не дано.
Так же подумай, стоит ли создавать отдельную БД (а скорее всего не стоит), может быть можно обойтись отдельной таблицей/таблицами.
Цитата

название создаваемой БД...

В этом случае нужно проверять имя БД и просить ввести новое в случае, если такая БД уже существует.
Лучше этого не делать вовсе (не спрашивать название).
Цитата

...никакой нормальный админ не позволит Апачу писать в файлы внутри веб-директорий. Или я не прав?

Или ты не прав. Все зависит от политики администрирования на хостинге, но, как правило, такое разрешается.
Цитата

И как можно средствами скрипта создать БД, если пользователь непривелигированный?

Если прав нет на создание новой БД, то никак. Обходись отдельными таблицами.


--------------------
...все в мире относительно
PM   Вверх
Mal Hack
Дата 21.12.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Тебе не БД надо создавать, в большинстве случаев на это прав не дадут, а таблицы... Это несколько разные понятия.
Первый вариант 100% верен. Только прибавить к этому надо еще и генерацию конфигурационного файла, куда при удачной инсталляции запишутся введенные настройки.
PM ICQ   Вверх
Dionysius
Дата 21.12.2006, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

Репутация: нет
Всего: 1



Хорошо, нам нужно создать таблицу. Как правило, права на создание таблицы имеются? То есть спрашиваем имя существующей БД, в которой юзер может создавать таблицы, спрашиваем его логин:пароль. А потом записываем эти данные в этот же самый файл скрипта? 
Если прав не достаточно для выполнения какой-то из вышеописанных задач, выдаём информативное сообщение об ошибке... типа "свяжитесь с Вашим администратором" и т. д.
Так?
PM MAIL WWW   Вверх
Mal Hack
Дата 21.12.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Грубо говоря да.
PM ICQ   Вверх
Dionysius
Дата 22.12.2006, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

Репутация: нет
Всего: 1



Мне ещё посоветовали посмотреть исходники Joomla - у неё подобный установочный скрипт.
PM MAIL WWW   Вверх
americanets
Дата 22.12.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



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

самообразование на чужом лучше чем на пустом smile 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Dionysius
Дата 23.12.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

Репутация: нет
Всего: 1



Потестируйте, пожалуйста, скрипт у кого есть возможность. Требуется PHP5. Небольшая дока находится внутри скрипта.
Как оно с точки зрения юзер-френдли?

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  gb.txt 18,52 Kb
PM MAIL WWW   Вверх
Mal Hack
Дата 23.12.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



1. @ в топку. 
2. Обработка ошибок где?
3. Запись в файл делается проще, точнее генерация содержимого.. Тебе не надо ее менять, надо перезаписать.
4. Для вывода кусков гипертекста используй HEREDOC конструкции.
5. register_globals в Off.

Для начала это исправь, потом буду остальное смотреть.
PM ICQ   Вверх
Dionysius
Дата 23.12.2006, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

Репутация: нет
Всего: 1



Цитата

1. @ в топку. 

ОК
Цитата

2. Обработка ошибок где?

До сих пор был уверен, что она есть. Давай с этого места поподробнее.
Цитата

3. Запись в файл делается проще, точнее генерация содержимого.. Тебе не надо ее менять, надо перезаписать.

Тоже не понял, о чём речь. Попробуй быть более информативным, если не трудно.
Цитата

4. Для вывода кусков гипертекста используй HEREDOC конструкции.
5. register_globals в Off.

ОК
PM MAIL WWW   Вверх
Mal Hack
Дата 23.12.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Dionysius @  23.12.2006,  18:11 Найти цитируемый пост)
До сих пор был уверен, что она есть. 

Где? покажи, где у теья проверки, что запросы выполняются?

Цитата(Dionysius @  23.12.2006,  18:11 Найти цитируемый пост)
Тоже не понял, о чём речь. Попробуй быть более информативным, если не трудно.

Как ты создаешь конфигурационный файл? Берешь, читаешь, изменяешь, пишешь... А смысл когда можно сразу записать? HEREDOC - читай в мане
<<<EOF

EOF;

Это сообщение отредактировал(а) Mal Hack - 23.12.2006, 18:43
PM ICQ   Вверх
Dionysius
Дата 24.12.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

Репутация: нет
Всего: 1



Цитата

Где? покажи, где у теья проверки, что запросы выполняются?

А это что?
Код

$link = @mysql_connect($_POST["host"], $_POST["dbuser"], $_POST["dbpass"])
         or die("Невозможно подключиться к серверу БД: ".mysql_error());
@mysql_select_db($_POST["dbname"], $link) or die ('Невозможно выбрать БД '.$_POST["dbname"].' : '.mysql_error());

...
Код

@mysql_query($sql, $link) or die("Ошибка создания таблицы: " . mysql_error());

Цитата

Как ты создаешь конфигурационный файл? Берешь, читаешь, изменяешь, пишешь... А смысл когда можно сразу записать? 

В смысле "сразу"? Ну, знаю я про эту конструкцию:
Код

echo <<<EOT
Здесь тоже обрабатываются как переменные, 
так и управляющие последовательности.
И кроме того, можно вводить символы кавычек
без их экранирования обратным слэшем.
EOT;

Код становится компактнее, но принцип записи в файл от этого ведь не меняется...
PM MAIL WWW   Вверх
Mal Hack
Дата 24.12.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Dionysius @  24.12.2006,  16:44 Найти цитируемый пост)
А это что?

Пользователю должна выводиться ошибка в дизайне, а не голым текстом... Так что if'ами...

Цитата(Dionysius @  24.12.2006,  16:44 Найти цитируемый пост)
Код становится компактнее, но принцип записи в файл от этого ведь не меняется... 

Код

        $str=@file_get_contents($file); 
        $str=str_replace('$host="localhost"','$host="'.$_POST["host"].'"',$str);
        $str=str_replace('dbuser=""','dbuser="'.$_POST["dbuser"].'"',$str);
        $str=str_replace('dbpass=""','dbpass="'.$_POST["dbpass"].'"',$str);
        $str=str_replace('dbname=""','dbname="'.$_POST["dbname"].'"',$str);

На кой черт это???
PM ICQ   Вверх
Dionysius
Дата 26.12.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

Репутация: нет
Всего: 1



Вот, сделал изменения в коде.
Дизайн не трогал, для меня пока на первом плане стоит функциональность.
И ещё я не нашёл приемлемого способа (кроме как установления альтернативного php.ini) для задания в скрипте register_globals=off. Да и потом, данные передаются через $_GET и $_POST, не вижу смысла в этой опции, которая по умолчанию всё равно off.

Это сообщение отредактировал(а) Dionysius - 26.12.2006, 19:22

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  gb.txt 18,63 Kb
PM MAIL WWW   Вверх
Mal Hack
Дата 26.12.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Dionysius @  26.12.2006,  19:22 Найти цитируемый пост)
И ещё я не нашёл приемлемого способа (кроме как установления альтернативного php.ini) для задания в скрипте register_globals=off. Да и потом, данные передаются через $_GET и $_POST, не вижу смысла в этой опции, которая по умолчанию всё равно off.

ini_set?
.htaccess?

Цитата(Mal Hack @  24.12.2006,  16:51 Найти цитируемый пост)
Пользователю должна выводиться ошибка в дизайне, а не голым текстом... Так что if'ами...

Вместо die... Не услышано.

Что касается откаты при не возможности установить chmod...
 А почему бы не сделать эту проверку раньше, чтобы не делать отката? Проще и лучше.
Код
  private function get_maxnum()
    {
        //нахождение номера последней записи
        $sql="SELECT MAX(num) AS maxnum FROM records";
        $res=mysql_query($sql, $this->link);
        $maxnum=mysql_fetch_assoc($res);
        return $maxnum["maxnum"];
    }

Лучше все-таки так:
Код
  private function get_maxnum()
    {
        $res=mysql_query("SELECT MAX(num) AS maxnum FROM records", $this->link);
        return mysql_result($res , 0 ,"maximum");
    }

или вообще в одну строчку.
И тут надо бы сразу в свойство записать.

PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0700 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.