From bc3bb8e3a49a31c216167b4cd536cbc409b8d929 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Mon, 11 Apr 2016 14:48:35 +0200 Subject: [PATCH] Attempt to create database when there is no connection --- CHANGELOG | 1 + README | 2 +- README.md | 2 +- chat.php | 30 +++++++++++++++++++++++++----- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 5fe0a6a..8388116 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ Add language setting to profile Add checks for required extensions Move some more settings to the database Add CSS to limit list of chatters hight +Attempt to create database when there is no connection Version 1.15.3 - Mar. 6, 2016 Allow using html tags in linkfilter without breaking dereferrer or image embed diff --git a/README b/README index 2762d23..c75e5dd 100644 --- a/README +++ b/README @@ -43,7 +43,7 @@ Optionally, you can install: - a memcached server and the memcached extension and change the configuaration to use memcached. This will lessen the database load a bit. - a MySQL or PostgreSQL server to use as an external database instead of SQLite - the openssl extension for encryption of messages and notes in the database -When you have everything installed, you'll have to create a database and a user for the chat in mysql. +When you have everything installed and use MySQL or PostgreSQL, you'll have to create a database and a user for the chat. Then edit the configuration at the bottom of the script to reflect the appropriate database settings and to modify the chat settings the way you like them. Then copy the script to your web-server directory and call the script in your browser with a parameter like this: http://(server)/(script-name).php?action=setup diff --git a/README.md b/README.md index c6fca82..235d0c5 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Optionally, you can install: - a memcached server and the memcached extension and change the configuaration to use memcached. This will lessen the database load a bit. - a MySQL or PostgreSQL server to use as an external database instead of SQLite - the openssl extension for encryption of messages and notes in the database -When you have everything installed, you'll have to create a database and a user for the chat in mysql. +When you have everything installed and use MySQL or PostgreSQL, you'll have to create a database and a user for the chat. Then edit the configuration at the bottom of the script to reflect the appropriate database settings and to modify the chat settings the way you like them. Then copy the script to your web-server directory and call the script in your browser with a parameter like this: http://(server)/(script-name).php?action=setup diff --git a/chat.php b/chat.php index 9604c21..804c623 100644 --- a/chat.php +++ b/chat.php @@ -3240,7 +3240,7 @@ function update_db(){ $memcached->delete(DBNAME . '-' . PREFIX . 'members'); $memcached->delete(DBNAME . '-' . PREFIX . 'ignored'); } - if(DBDRIVER===0){//MySQL + if(DBDRIVER===0){//MySQL - previously had a wrong SQL syntax and the captcha table was not created. $db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . 'captcha (id int(10) unsigned NOT NULL AUTO_INCREMENT, time int(10) unsigned NOT NULL, code char(5) NOT NULL, PRIMARY KEY (id) USING BTREE) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_bin;'); } } @@ -3324,10 +3324,30 @@ function check_db(){ $db=new PDO('sqlite:' . SQLITEDBFILE, NULL, NULL, $options); } }catch(PDOException $e){ - if(isSet($_REQUEST['action']) && $_REQUEST['action']==='setup'){ - die($I['nodbsetup']); - }else{ - die($I['nodb']); + try{ + //Attempt to create database + if(DBDRIVER===0){ + $db=new PDO('mysql:host=' . DBHOST, DBUSER, DBPASS, $options); + if(false!==$db->exec('CREATE DATABASE ' . DBNAME)){ + $db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS, $options); + }else{ + die($I['nodbsetup']); + } + + }elseif(DBDRIVER===1){ + $db=new PDO('pgsql:host=' . DBHOST, DBUSER, DBPASS, $options); + if(false!==$db->exec('CREATE DATABASE ' . DBNAME)){ + $db=new PDO('pgsql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS, $options); + }else{ + die($I['nodbsetup']); + } + } + }catch(PDOException $e){ + if(isSet($_REQUEST['action']) && $_REQUEST['action']==='setup'){ + die($I['nodbsetup']); + }else{ + die($I['nodb']); + } } } if(MEMCACHED){