The last two posts on web installer did not include any code. I wanted to dump all code into one post – this is it. Please note that this is what I did – you don’t have to copy my code as it is. Just look at the code and modify it according to your needs.
Getting Database Details
The Form/Frontend
<form action="" method="post">
<h1>Installation : Step 1</h1>
Please provide the database connection details...
<fieldset>
<legend>Database Details</legend>
<label for='host'>Database Host</label><input type='text' name='host' value='localhost' /><br />
<label for='db_user'>Database User</label><input type='text' name='db_user' value='root' /><br />
<label for='password'>Database Password</label><input type='text' name='password' /><br />
<label for='database'>Database</label><input type='text' name='database' value='nexty' /><br />
</fieldset>
<input type="hidden" name="step" value="2" /><br />
<input type="submit" name="action" value="Continue >>" /><br />
</form>
Backend
Make sure that the given database details are correct.
// The First step is Setting up Database connection
// (the '2' is NOT a typo)
if($_REQUEST['step'] == 2) {
//Save the data to the Session
if(isset($_REQUEST['host'])) $_SESSION['host'] = $_REQUEST['host'];
if(isset($_REQUEST['db_user'])) $_SESSION['db_user'] = $_REQUEST['db_user'];
if(isset($_REQUEST['password'])) $_SESSION['password'] = $_REQUEST['password'];
if(isset($_REQUEST['database'])) $_SESSION['database'] = $_REQUEST['database'];
if(isset($_REQUEST['url'])) $_SESSION['url'] = $_REQUEST['url'];
if(mysql_connect($_SESSION['host'],$_SESSION['db_user'],$_SESSION['password'])) { //Try to connect to the DB.
$QUERY['success'][] = 'Connection to Database server successful';
if(mysql_select_db($_SESSION['database'])) {//Select the provided database.
$QUERY['success'][] = "Database '$_SESSION[database]' selected";
} else {
$QUERY['error'][] = 'The given database('.$_SESSION['database'].') does not exist. Please povide a valid database.';
$_REQUEST['step'] = 1;
}
} else {
$QUERY['error'][] = 'Unable to connect to the database. Make sure that the entered details are correct';
$_REQUEST['step'] = 1;
}
}
Notice the over use of $_SESSION? That will come in use if I decide to add a Back button that enables the users to modify the data entered previously.
Database Creation
//Create the database only if it does not exist
//See if the database exists
$tables_sql = mysql_query("SHOW TABLES") or die(mysql_error());
$necessary_tables = array('Context','Project','Reminder','Setting','Task','TaskContext','User');
while($table = mysql_fetch_row($tables_sql)) {
$necessary_tables = array_diff($necessary_tables,array($table[0])); //Remove the table from the array if it exists
}
//If there are no tables in the array that means that the all the necessary tables are present in the Database
//If some tables are missing, that means we have to create those tables...
if($necessary_tables) {
$quries = <<<END
-- Insert all the SQL to create the necessary tables here...
END;
//Execute all the queries
$all_quires = explode(";",$quries);
$query_count = 0;
foreach($all_quires as $query) {
$query = trim($query);
if($query) {
@mysql_query($query);
$query_count++;
}
}
$QUERY['success'][] = "Database Populated.";
} else {
$QUERY['error'][] = "Tables already in Database - I did not overwrite it. If you want to remove the old data, please delete the tables and run the installer script agian.";
}
Saving the Database connection details
//I don't know how to escape the $ charector in heredocs - so I did this...
$config = '$config';//Heh, Heh ;-)
$system_installed = '$system_installed';
$configuration = <<<END
<?php
//Configuration file for Nexty
$system_installed = true;
$config = array(
'db_host' => '$_SESSION[host]',
'db_user' => '$_SESSION[db_user]',
'db_password' => '$_SESSION[password]',
'db_database' => '$_SESSION[database]',
'url' => '$_SESSION[url]',
'absolute_path' => '$abs'
);
END;
if(is_writable('../configuration.php')) {
// ...Write the $config text into the configuration.php file...
$QUERY['success'][] = 'Saved the configuration file. <a href="'.$_REQUEST['url'].'">Go to Nexty</a>';
} else {
$QUERY['error'][] = 'Configuration file (configuration.php) is not writable. Please copy the configuration code and enter it into the "configuration.php" file. Then press continue.';
}
See the install folder for Nexty in the Subversion server.