[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с Инсталлятором плиз!
LionKing
Здравствуйте, уменя возникла проблема с написанием инсталлятора sad.gif

Я не давно начал изучать PHP и не совсем представляю что должен влючать в себя процесс установки.

Я по пробывал разбить инсталлятор на 3 этапа:
1) ввод данных БД (хост,юзер,пароль,имяБД);
2) создание БД и таблиц (таблицы заранее импортированны в текстовый файл), а также ввод данных для админки.
3) занесение данных для админки в БД и сохранение настроек подключения в отдельный файл.

На втором шаге мне удалось только создать пустую базу данных, и дальше никак. Не могу понять в ччем ошибка unsure.gif
З.Ы.
Может инсталлятор должен включать что-то ищё?

Вот код:
PHP
if (isset ($_POST['userdb'])) {$userdb $_POST['userdb'];} 
if(
$userdb == '') {unset($userdb); exit("Имя пользователя базы данных не указано!");} else {$userdb trim($userdb);}
if (isset (
$_POST['passdb'])) {$passdb $_POST['passdb'];} 
if(
$passdb == '') {unset($passdb); exit("Пароль не указано!");} else {$passdb trim($passdb);}
if (isset (
$_POST['datadb'])) {$namedb $_POST['datadb'];} 
if(
$namedb == '') {unset($namedb); exit("Имя базы данных не указано!");} else {$namedb trim($namedb);}
if (isset (
$_POST['hostdb'])) {$hostdb $_POST['hostdb'];} 
if(
$hostdb == '') {unset($hostdb); exit("Хост не указано!");} else {$hostdb trim($hostdb);}
$db mysql_connect ($hostdb,$userdb,$passdb);
$sql mysql_select_db ($namedb$db);
if (
$sql != 'true')
{
$sql mysql_query("CREATE DATABASE `$namedb`",$db);
}
mysql_select_db ($namedb$db);
$filename 'install.txt';
if (
is_readable($filename)) 
{
$file fopen($filename"r");
$x fread($file,filesize($filename));
fclose($file);

else 
{
echo 
'Файл баз данных не доступный!!';
}
$sql mysql_db_query($namedb,$x,$db);
if (
$sql != 'true'
{
echo 
"<font color='#FF0000'>Возникла ошибка - ".mysql_error()."<br>"
echo 
$sql."</font>";
}

Ошибка:
Возникла ошибка - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; INSERT INTO `articles` VALUES (1, 'Інформаційні технології в освіті сьогодні і з' at line 12
P.S.S.
если из файла install.txt скопировать все содержание и вставить как sql запрос через phpmyadmin, то таблицы добавляются



Спустя 1 час, 1 минута, 57 секунд (14.06.2009 - 00:21) twin написал(а):
Вот в таких случаях нужно выводить запрос на экран. Примерно так:
PHP
//$sql = mysql_db_query
print($namedb,$x,$db);
тогда будет легче понять, что пыхпыхадмин придуман не просто так. Так бы все и совали файлы в запрос и ждали чуда. Нельзя одним запросом сделать таблицу и сразу же в неё что то написать.

Спустя 12 минут, 47 секунд (14.06.2009 - 00:34) LionKing написал(а):
twin
Подскажите пожалуста, тогда как перенести таблицы? huh.gif


Спустя 8 минут, 30 секунд (14.06.2009 - 00:42) twin написал(а):
Читать файл, разбирать на запросы и делать их по очереди. Или на каждый запрос свой файл, если их не много.

Спустя 11 минут, 24 секунды (14.06.2009 - 00:54) LionKing написал(а):
twin спасибо буду пробовать...
Можете подсказать 2 вопроса ёще:
1. (как данные по БД перенести в файл connect.php (который подключается на все страницы сайта где есть обращение к Базе), так что бы значения переменных $hostdb,$userdb,$passdb$namedb, там остались?)
2. И как Читать файл и разбирать на запросы в пхп ?
unsure.gif

Спустя 14 минут, 15 секунд (14.06.2009 - 01:08) twin написал(а):
Вообще инсталлятор обычно не только делает базу данных, но и формирует конфигурационный файл. В него можно прописать все статические настройки приложения. К ним и относятся эти данные.
Разбирать можно кучей методов. Самый простой на мой взгляд - читать файл в строку ( лучше для этого file_get_contents()) и делить по точке с запятой. Кстати, в php при формировании запроса она совсем не нужна и все портит. А дальше дело фантазии.

Спустя 10 минут, 13 секунд (14.06.2009 - 01:18) LionKing написал(а):
twin
а если в поле таблицы встретится точка с запятой (например где-то в тексте статьи) функция file_get_contents()) примет её за разделитель?

Спустя 18 минут, 26 секунд (14.06.2009 - 01:37) twin написал(а):
нет, не примет. она вообще ничего не делит. она просто читает файл в строку. А делить уже надо исходя из условий. Если такая вероятность есть, то выбирать более другой способ. Я написал что это самый простой.

Спустя 6 минут, 43 секунды (14.06.2009 - 01:43) LionKing написал(а):
Объясните пожалуйста подробнее про конфигурационный файл (что туда должно входить и где его размещать?)

Спустя 10 минут, 33 секунды (14.06.2009 - 01:54) twin написал(а):
Обычно это config.php и размещается в корне либо в директории cofig. Туда можно прописать данные коннекта, кодировку, коли есть возможность выбора, дефолтный язык, если их несколько, скин по умолчанию, если есть выбор, настройки сайта как то:
максимальный размер загружаемых файлов
количество блоков при постраничном выводе
иногда (часто) пароль администратора
ну и вообще все то, что настраивается один раз.
Тогда при инсталляции юзер сможет выбрать нужную конфигурацию и забыть про это.

Спустя 39 минут, 28 секунд (14.06.2009 - 02:33) LionKing написал(а):
twin
Скажите а из файла XML можно сформировать и вывести запросы поочерёдно?

Спустя 5 часов, 54 минуты, 45 секунд (14.06.2009 - 08:28) twin написал(а):
Можно, но это не очень хорошее решение. Для этого нужна соответствующая библиотека, а вот в очень популярном денвере по моему её нет. Это значит что твой скрипт будет недоступен огромному количеству народа, которые не смогут установить его дома и посмотреть. А лить на сервак непроверенный софт вряд ли кто станет в здравом уме и рассудке.
Либо писать парсер xml, что дело тоже довольно неблагодарное и муторное.
Я бы посоветовал разнести запросы по файлам. В один файл спихать все запросы, которые устанавливают пустую базу. В другой файл вынести наполнение. Причем запросы писать построчно, по одному в строку. Тогда можно прочитать файл функцией file() в массив и прокрутить его, подставляя запросы по очереди.
Что это дает.
1. Довольно простая схема
2. Возможность выбора конфигурации
2. Возможность последующего дополнения бд

Спустя 5 часов, 11 минут, 32 секунды (14.06.2009 - 13:40) LionKing написал(а):
twin
У меня в базе есть полные тексты статей, там 1 поле занимает несколько строк типа:
текст \r\n
текст


написать запросы по 1 в одну строчку не получится.
Если попробовать в файле перед каждым запросом добавить метки например, (@createDB@, или @insertDB@) и считывать все что есть между ними?

Спустя 16 минут, 22 секунды (14.06.2009 - 13:56) twin написал(а):
Функция file() не обратит внимание на \r\n, если они заключены в апострофы. Для того в запросах так и делается. Так что все будет за -ши... хорошо.

Спустя 16 минут, 20 секунд (14.06.2009 - 14:12) LionKing написал(а):
twin
Огромное спасибо за помощь!

Буду пробывать...
Быстрый ответ:

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