ihr wollt eine eigene CMS oder Bildergallerie anfangen und wisst nicht wie?
Kein Problem: mit diesem Installationsscript habt ihr das wichtigste (nämlich die Datenbank anlegen+Administratoraccount) schon vorab getan.
Als erstes beginnen wir mit der .htaccess. Sie schützt die darin aufgelisteten Dateien
PHP Code:
<Files "config.php">
Order allow,deny
Deny from all
</Files>
<Files "common.php">
Order allow,deny
Deny from all
</Files>
Als zweites erstellen wir die index.php.
PHP Code:
<?php
$filename = 'config.php';
if (file_exists($filename)) {
header("Location: sites.php");
}
else {
echo "Sie müssen erst die Installation durchführen. <a href='install.php'>Zur Installation</a>.";
}
?>
Die sites.php enthält den Inhalt, den Sie für die index.php geplant hatten. Also das, was der Internetuser sieht, wenn er auf Ihre Seite stößt und Sie die Installation durchgeführt haben.
Die dritte Datei, die wir erstellen ist die install.php
PHP Code:
<?php
header("Location: install/index.php");
?>
Dazu erstellen wir als nächstes den Ordner install/
In diesen Ordner erstellen wir dann den Ordner mysql/
Im Ordner mysql werden zwei Dateien erstellt.
1. tables.php (hier ein Beispiel)
PHP Code:
<?php
$create[user] = "CREATE TABLE $user (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) collate latin1_general_ci NOT NULL default '',
`password` varchar(255) collate latin1_general_ci NOT NULL default '',
`email` varchar(255) collate latin1_general_ci NOT NULL default '',
`level` int(11) NOT NULL default '0',
`autologin` int(1) NOT NULL default '0',
`location` varchar(30) collate latin1_general_ci NOT NULL default '',
`interests` varchar(100) collate latin1_general_ci NOT NULL default '',
`icq_nr` varchar(12) NOT NULL default '0',
`job` varchar(30) collate latin1_general_ci NOT NULL default '',
`ban` int(1) NOT NULL default '0',
`session_time` varchar(25) collate latin1_general_ci NOT NULL,
`time` varchar(5) collate latin1_general_ci NOT NULL,
`active` char(1) collate latin1_general_ci NOT NULL default '',
`act_key` varchar(255) collate latin1_general_ci NOT NULL default '',
`ice` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1";
$create[sessions] = "CREATE TABLE $sessions (
`id` int(11) NOT NULL auto_increment,
`session_time` varchar(30) collate latin1_general_ci NOT NULL,
`session_ip` varchar(30) collate latin1_general_ci NOT NULL,
`time` varchar(30) collate latin1_general_ci NOT NULL,
`name` varchar(14) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1";
$create[config] = "CREATE TABLE $config (
`menu_title` varchar(20) collate latin1_general_ci NOT NULL default '',
`default_style` varchar(35) collate latin1_general_ci NOT NULL default '',
`default_language` varchar(28) collate latin1_general_ci NOT NULL default '',
`footer_title` varchar(255) collate latin1_general_ci NOT NULL default '',
`path` varchar(55) collate latin1_general_ci NOT NULL default '',
`domain_name` varchar(255) collate latin1_general_ci NOT NULL default '',
`website_name` varchar(90) collate latin1_general_ci NOT NULL default '',
`logo_url` varchar(255) collate latin1_general_ci NOT NULL default '',
`email` varchar(255) collate latin1_general_ci NOT NULL default '',
`gb_entries_per_site` int(11) NOT NULL,
`comments_per_site` int(11) NOT NULL,
`frontpage` varchar(31) collate latin1_general_ci NOT NULL default '',
`gb_wait` int(11) NOT NULL,
`gb_on` int(11) NOT NULL,
`contact_form_on` int(1) NOT NULL,
`change_of_name` int(1) NOT NULL,
`wio_on` int(1) NOT NULL,
`max_pms` int(11) NOT NULL,
`disable` int(1) NOT NULL,
`editor_on` int(1) NOT NULL,
`website_title` varchar(56) collate latin1_general_ci NOT NULL,
`v_ai` int(1) NOT NULL,
`v_hpi` int(1) NOT NULL,
`v_so` int(1) NOT NULL,
`v_ans` int(1) NOT NULL,
`v_co` int(1) NOT NULL,
`v_anc` int(1) NOT NULL,
`v_mo` int(1) NOT NULL,
`v_anm` int(1) NOT NULL,
`v_cc` int(1) NOT NULL,
`v_cot` int(1) NOT NULL,
`v_cu` int(1) NOT NULL,
`v_trash` int(1) NOT NULL,
`comments` int(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci";
?>
Die zweite Datei nennen wir mal data.php (auch ein Beispiel)
PHP Code:
<?php
$insert[user] = "INSERT INTO $user VALUES (1, '$username', '$md5_pass', '$admin_email', '1', '0', '', '', '', '', '0', '0', '0', '1', '-1', '0')";
$insert[sessions] = "INSERT INTO $sessions VALUES (1, '0', '0', '0', '$username')";
?>
So, damit wäre bis auf den Installationsscript alles gesagt. Die Grundlagen sind euch hoffentlich klar.
Der Installationsscript liegt im Ordner install/ und heißt index.php
Ich habe versucht ihn einfach und selbsterklärend zubauen.
index.php
PHP Code:
<?php
$step = $_GET['step'];
$host = $_SERVER['HTTP_HOST'];
@include "../config.php";
$path = substr(str_replace("/install/index.php", "", $_SERVER['SCRIPT_NAME']), '1');
// Connect to the database
$connection = @mysql_connect($server, $dbusername, $dbpassword);
// Select the database
@mysql_select_db($dbname);
$mode = $_GET['mode'];
// MySQL tables und datas
include "mysql/tables.php";
include "mysql/data.php";
// Start installation-assistent
if (!isset($step)) {
echo "<div><b>Willkommen zur Installation</b></div>";
echo "<div>";
echo "Vielen Dank, dass Sie sich zur Installation von MatzeCMS entschieden hast. Um MatzeCMS zu installieren, klicken Sie bitte auf weiter. Wenn Sie MatzeCMS vergebens installiert haben, löschen sie die config.php und starten diesen Installationsassistenten erneut.";
echo "<a href='index.php?step=1'>Weiter</a></div>";
echo "</div>";
}
// Step 1: MySQL-Data
if ($step == '1') {
echo "<div><b>Installation - MySQL-Zugangsdaten</b></div>";
echo "<div>";
echo "Geben Sie hier bitte ihre MySQL-Zugangsdaten ein.";
echo "<br>";
echo "<form action='index.php?step=2' method='post'>";
echo "<table width='100%'>";
echo "<tr><td width='17%'>Server:</font></td><td> <input class='input' type='text' name='server' value='localhost' /></td></tr>";
echo "<tr><td width='17%'>Username:</font></td><td> <input class='input' type='text' name='mysql_username' /></td></tr>";
echo "<tr><td width='17%'>Passwort:</font></td><td> <input class='input' type='password' name='mysql_password' /></td></tr>";
echo "<tr><td width='17%'>Datenbank:</font></td><td> <input class='input' type='text' name='mysql_db' /></td></tr>";
echo "<tr><td width='17%'>Tabellen-Prefix:</font></td><td> <input class='input' type='text' name='mysql_prefix' value='Matze Community CMS' /></td></tr>";
echo "</table>";
echo "<br>";
if (!($handle = @fopen("../config.php", w))) {
echo "<font color='red'><b>Deine config.php ist nicht beschreibbar!</b></font>";
} else {
echo "<font color='green'><b>Deine config.php ist beschreibbar.</b></font>";
}
echo "<br>";
$_SESSION['prefix'] = $_POST['mysql_prefix'];
echo "<input class='button' type='submit' value='Weiter'>";
echo "</form></div>";
}
// Step 2: Check Connection
if ($step == '2') {
$server = $_POST['server'];
$mysql_username = $_POST['mysql_username'];
$mysql_password = $_POST['mysql_password'];
$mysql_db = $_POST['mysql_db'];
$mysql_prefix = $_POST['mysql_prefix'];
// error MySQL-Username
if (empty($mysql_username)) {
echo "<div><b>Fehlende Angaben</b></div>";
echo "<div>";
echo "Sie haben vergessen einen MySQL-Usernamen anzugeben. Korrigiere Sie bitte ihre Angaben.";
echo "<br>";
echo "<a href='index.php?step=1' style='text-decoration: none'>Zurück</a>";
echo "</div>";
exit();
}
// error MySQL-Database
if (empty($mysql_db)) {
echo "<div><b>Fehlende Angaben</b></div>";
echo "<div id='content'>";
echo "Sie haben vergessen eine MySQL-Datenbank anzugeben. Korrigieren Sie bitte ihre Angaben.";
echo "<br>";
echo "<a href='index.php?step=1' style='text-decoration: none'>Zurück</a>";
echo "</div>";
exit();
}
// error config.php
if (!($handle = @fopen("../config.php", w))) {
echo "<div><b>Fehler</b></div>";
echo "<div>";
echo "Ihre <b>config.php</b> ist leider nicht beschreibbar. Sie müssen die Rechte der Datei auf <b>0777</b> setzen.";
echo "<br>";
echo "<a href='index.php?step=1' style='text-decoration: none'>Zurück</a></div>";
} else {
//
// Let's go and write the config.php
//
$write_config = "<?php\n\n";
$write_config .= "\$server = \"$server\";\n";
$write_config .= "\$dbname = \"$mysql_db\";\n";
$write_config .= "\$dbusername = \"$mysql_username\";\n";
$write_config .= "\$dbpassword = \"$mysql_password\";\n";
$write_config .= "\$dbprefix = \"$mysql_prefix\";\n\n";
$write_config .= "\n\n?>";
fwrite($handle, $write_config);
fclose($handle);
echo "<div><b>MySQL-Konfiguration abgeschlossen.</b></div>";
echo "<div id='content'>";
echo "Glückwunsch, das Erste haben Sie geschafft. Die config.php wurde erstellt. Jetzt muss nur noch der Administrator eingerichtet werden.";
echo "<br>";
echo "<a href='index.php?step=3' style='text-decoration: none'>Weiter</a></div>";
}
}
// Step 3: Configurate the Administrator
if ($step == '3') {
if ($connection == false) {
echo "<div><b>Falsche Zugangsdaten</b></div>";
echo "<div>";
echo "Die eingegebenen Zugangsdaten für Ihre Datenbank waren falsch. Bitte versuchen Sie es erneut.";
echo "<br>";
echo "<a href='index.php' style='text-decoration: none'>Zurück</a>";
echo "</div>";
@unlink("../config.php");
exit();
}
echo "<div><b>Installation - Abschluss</b></div>";
echo "<div>";
echo "Bitte geben Sie hier noch die letzten Daten zur Konfiguration ihrer Homepage ein.";
echo "<br><br>";
echo "<b>Allgemeine Konfigurationsdaten</b>";
echo "<br><br>";
echo "<form action='index.php?step=4' method='post'>";
echo "<table width='100%'>";
echo "<tr><td width='20%'>Domainname:</font></td><td> <input class='input' type='text' name='domain_name' size='32' value='$host' /></td></tr>";
echo "<tr><td width='20%'>Websitename:</font></td><td> <input class='input' type='text' name='website_name' size='32' /></td></tr>";
echo "<tr><td width='20%'>Pfad:</font></td><td> <input class='input' type='text' name='path_name' size='32' value='$path' /></td></tr>";
echo "<tr><td width='20%'>E-Mail-Adresse:</font></td><td> <input class='input' type='text' name='email' size='32' /></td></tr>";
echo "<tr><td width='20%'>Footer-Titel:</font></td><td> <input class='input' type='text' name='footer_name' size='32' /></td></tr>";
echo "</table>";
echo "<br>";
echo "<b>Zugangsdaten für den Administrator:</b>";
echo "<br /><br />";
echo "<table width='100%'>";
echo "<tr><td width='20%'>Username:</font></td><td> <input class='input' type='text' name='username' /></td></tr>";
echo "<tr><td width='20%'>Passwort:</font></td><td> <input class='input' type='password' name='password' /></td></tr>";
echo "<tr><td width='20%'>E-Mail-Adresse:</font></td><td> <input class='input' type='text' name='admin_email' /></td></tr>";
echo "</table>";
echo "<br />";
echo "<input class='button' type='submit' value='Weiter'/>";
echo "</form></div>";
}
// Step 4: create and fill in mysql-tables
if ($step == '4') {
if (empty($dn) OR empty($email) OR empty($username) OR empty($md5_pass) OR empty($admin_email)) {
echo "<div><b>Fehlende Angaben</b></div>";
echo "<div>";
echo "Sie haben vergessen, ein oder mehrere Felder auszufüllen. Bitte korregieren sie ihre Angaben.";
echo "<br>";
echo "<a href='index.php?step=3' style='text-decoration: none'>Zurück</a>";
echo "</div>";
exit();
}
mysql_query($create[abq]);
mysql_query($insert[categories]);
echo "<div><b>Installation erfolgreich!</b></div>";
echo "<div>";
echo "Vielen Dank, dass Sie sich für MatzeCMS entschieden haben. Die Installation war erfolgreich. Bitte löschen Sie unbedingt den Ordner <b>install/</b>!";
echo "<br><br>";
echo "<a href='../index.php' style='text-decoration: none'>Zur Startseite</a>";
echo "</div>";
}
// fertig
?>
Ich gebe zu, dass der Script nicht außergewönlich oder großartig ist. Jedoch zum Einstieg gut nachvollziehbar.
Die Sicherheit ist schon top. Über das Design kann man sich streiten. Braucht ein Installationsscript ein Design?
Wenn ja kann man beispielsweise eine .css einbinden, den Text, Links und Divs formatieren. Dann vielleicht noch ein Header-Logo, gescheide Weiter Buttons und Hintergrundbild.
Mein Tipp:
1. eine .css-Datei erstellen
2. in die <div>-Befehle die einzelnen Elemente aus der css mit id=example einbauen.
Wer eine CMS baut, sollte vielleicht noch ein License-Agreement vor der Datenbankkonfiguration einbauen und sich statt einen Header, ein Logo überlegen. Dann unten noch eine Copyright-Zeile und das ganze passt.
Ich werde vielleicht selber nochmal einen neueren Script mit Design und License-Agreement posten.
Aber zum rumbasteln reichts.
Liebe Grüße
FreeZoNe.