Geschrieben von robinsons am 16.06.2005, 17:45

Benötigte vorkenntnisse:
Ein ganz klein wenig MySql und PHP!

Kleine Einführung zu PHP in Verbindung mit SQLite

SQLite ist eine kleine, textbasierende datenbank! Seit der Version PHP 5 ist sie automatisch mit PHP entahlten!, Im gegensatz zu mysql wird also schonmla kein eigener datenbankserver benötigt!

Unterschiede/Vorteile/Nachteile zu MySql

- SQLite ist nicht so leistungsstark wie MySql, da jedesmla die SqLitedatenbankdatei (diese haben entweder gar keine endung, oder *.sqlite), wenn auf die datenbank zugegriffenwird, die datei geöffnet, ausgelesen und geschlossen werden muss!
- SQLite ist typenlos, hat also keine tabellentypen wie MySql, außer natürlich INTEGEGER PRIMARY KEY!

Anlegen unsererersten datenbank:

Eine SQLitedatenbank wird durch den gleichen befehl geöffnet, mit dem sie auch erstellt wird:
sqlite_open('datenbankname.sqlite');

Ist die datenbank mit dem angegebenen namen nicht vorhanden, kann also nicht geöffnet werden, also wird sie automatisch erstellt!

Die verbindung zur datenbank wird, fast wie bei MySql mit sqlite_close($db) geschlossen (die variable $db ist dann natürlich der code fürs öffnen/anlegen der datenbank (sqlite_open('datenbankname.sqlite');).

Tabellen werden, ebenfalls wie in MySql mit dem CREATE – befehl angelegt, und sqlite funktionen werden ebefalls mit sqli-te_query ausgeführt!

Wenn man nun eine tabelle anlegen will, muss man folgendes schreiben:

sqlite_query($db, "CREATE TABLE tabellenname (id INTEGER PRIMARY KEY)");

die variabel $db dürfte ja geklärt sein...

hier wird dann gleich eine datenbank mit dem einzigen (mir bekannten) typen erstellt, mit dem namen tabellenname!
Also nochmla ins detail erklärt:

Sqlite_query ist wie bei MySql die datenbankfunktion! In den klammern erfolgen dann die aweisungen!
$db ist der befhle der zu öffnenden datenbank (sqlite_open('datenbankname.sqlite')), und der CREATE TABLE – befehl erzeugt eine tabelle, dessen name dann folgt!
In den nun folgenden klammern werden nun die jeweiligen spalten angelegt, gettrennt durch kommas.

Hat mna z.b. eine kleine tabelle mit z.b den namen hoster und wertung erstellt, kann man nun auf folgende weise daten einfügen:


sqlite_query($db, "INSERT INTO tabellenname (hoster, wertung) VALUES ('1&1', 'ganz gut')");
sqlite_query($db, "INSERT INTO tabellenname (hoster, wertung) VALUES ('galaxy', 'sehr gute leistung')");
sqlite_query($db, "INSERT INTO tabellenname (hoster, wertung) VALUES ('lima-city', 'spitzenmäßig')");

die daten werden mit dem INSERT INTO – befehl eingefügt; dann folgt der tabellenname, dann die spaltennamen in klammern!

Da jedoch auf diese weise unnötig viele SQLiteabfragen gestartet werden, kann man diese auch mit [/I]BEGINN[/I] UND COMMIT auf einmla eingefügt werden:

Dazu definiert man jeweils vor und nach dem einfügen einen eigenen query:


sqlite_query($db, "BEGIN");
sqlite_query($db, "INSERT INTO tabellenname (hoster, wertung) VALUES ('1&1', 'ganz gut')");
sqlite_query($db, "INSERT INTO tabellenname (hoster, wertung) VALUES ('galaxy', 'sehr gute leistung')");
sqlite_query($db, "INSERT INTO tabellenname (hoster, wertung) VALUES ('lima-city', 'spitzenmäßig')");
sqlite_query($db, "COMMIT");

nun will ich mla an einem kleinem Beispiel zeigen, wie mna ein keines telefonbuch mit sqlite erstellen, dessen einträge mit einem formular hinzugefügt werden!
Dabei werde ich weiter die funktionen von sqlite erklären!
Zuerst kann man eine phpdatei mit zb dem namen ersteller.php erstellen, in der folgendes steht:


<?php
error_reporting(0);
$sqliteschitt = "eine fehlermeldung!";
$db = sqlite_open('telefonbuch.sqlite');
if ($_GET['erstellen']=='true')
{
$db1 = sqlite_open('telefonbuch.sqlite', 0666, $sqliteerror);
sqlite_query($db, "CREATE TABLE telefonbuch (id INTEGER PRIMARY KEY, Vorname, Nachname, Telefonnummer, ICQ, Website, Mail&#8220;);
sqlite_close($db);
$schritt1 = false;
echo "<h1>Erstellen der SQLite - Datenbank :-)</h1>";
if (sqlite_open('telefonbuch.sqlite', '0666', $sqliteschitt))
{
$schritt1 = true;
echo "Na bitte! Die Datenbank wurde erfolgreich eingerichtet :-)";
}
else
{
echo "<br \><br \>Datenbank konnte leider <b>nicht</b> erfolgreich eingerichtet werden :'-(<br>Existiert sie vielleicht nicht schon ^.~";
}
}
if (!($_GET['erstellen']=='true')
{
echo "<a href='" .$PHP_SELF. "?erstellen=true'>Datenbank erstellen!</a>";
}
?>

erklärung:
das error_reporting in zeile 2 sorgt nur dafür, dass es keine fehlermeldungen gibt, da es immer eine gibt, wenn die datenbank nicht erfolgreich eingerichtet wurde, und man will ja nur seine eigenen fehlermeldung (zeile 20) ausgeben!
In zeile 3 die variabel $sqliteschitt ist nur eine fehlermeldung, die von php aus ausgegeben werden kann, fals ein fehler mit der daten-bank vorhanden ist!
In zeile 7 wird die sqlite_openvariabel zum öffnen der datenbank erstellt!
In zeile 8 wird dann die tabelle telefonbuch mit den spalten id, Vorname, Nachname, Telefonnummer, ICQ, Website, und Mail angelegt!
In zeile 10 wird die datenbank nun wieder geschlossen!
Der rest sollte ja selbsterklärend sein!

Nun kommt die datei mit namen index.php für das eintragen und auslesen der datenbank:


<?php
function AuthUser() {
global $PHP_AUTH_USER;
global $PHP_AUTH_PW;
global $AdminLogin;
global $AdminPasswd;
if ((!isset($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW)) || ($PHP_AUTH_USER!=$AdminLogin) || ($PHP_AUTH_PW!=$AdminPasswd)){
header('WWW-Authenticate: Basic realm="Davids Adressbuch Administration"');
header('HTTP/1.0 401 Unauthorized');
echo '<html><head></head><body>haha! versager!<br><br>';
echo '<noscript><a href="javascript:history.back();">Zurück zu meinem Sonstwasverzeichnis</a></noscript><br></body></html>';
exit;
}
}
if ($GET['aktion']=='login'
{
AuthUser();
}
$AdminLogin="admin";
$AdminPasswt="passwort";
if ($_GET['submit']=='eintragen')
{
echo "<h2><center>Danke für deinen Eintrag :-)</center></h2>";
}
echo "<center><h1>Mein Sonstwasverzeichnis :-)</h1></center>";

if (!($_GET['aktion']=='neu'))
{
echo "<h3><a href='" .$PHP_SELF. "?aktion=neu'>Neuen Eintrag verfassen</a></h3>";
}
if ($_GET['aktion']=='neu')
{
echo "<a href='index.php'>Zurück zur Ansicht</a>";
}
if ($_GET['aktion']=='neu')
{
echo "
<form aktion='index.php' method='get'>
<table border='0' cellpadding='0' cellspacing='0'>
<tr><tdVorname:</td><td><input type='text' size='20' name='Vorname'></td></tr>
<tr><td>Nachnametd><td><input type='text' size='20' name='Nachname'></td></tr>
<tr><td>Telefonnummer:</td><td><input type='text' size='20' name='Telefonnummer'></td></tr>
<tr><td>ICQ:</td><td><input type='text' size='20' name='ICQ'></td></tr>
<tr><td>Website:</td><td><input type='text' size='20' name='Website'></td></tr>
<tr><td>E - Mail:</td><td><input type='text' size='20' name='Mail'></td></tr>
<tr><td></td><td><input type = 'submit' name = 'absenden' value='eintragen'></td></tr>
</table>
</form>";
}
if (!($db=sqlite_open('telefonbuch.sqlite', '0666')))
{
echo "eine fehlerausgabe, wenn die verbindung mit der datenbank fehlgeschlagen ist, oder etwas mit dieser nicht stimmt!&#8220;;
}
if ($Vorname!='')
{
sqlite_query($db, "INSERT INTO telefonbuch (Vorname,Nachname,Telefonnummer,ICQ,Website,Mail,) VA-LUES('$Vorname','$Nachname','$Telefonnummer','$ICQ', '$Website','$Mail')");
}
if($aktion=="del")
{
sqlite_query($db, "DELETE FROM telefonbuch WHERE id=$id;");
}
$ergebnis=sqlite_query($db, " SELECT id,Vorname,Nachname,Telefonnummer,ICQ,Website,Mail FROM telefonbuch ORDER BY id;");
if (!($_GET['aktion']=='neu'))
//{
while($teil=sqlite_fetch_array($ergebnis))
{

echo "
<center>
<table border='0' cellspacing='0' cellpadding='1'>
<tr>
<td>Eintrag Nr. &#8221; .$teil['id']. &#8221;</td>
<td>&#8220; .$teil['Vorname']. &#8220;</td>
<td>&#8220; .$teil['Nachname']. &#8220;</td>
<td>&#8220; .$teil['Telefonnummer']. &#8220;</td>
<td>&#8220; .$teil['ICQ']. &#8220;</td>
<td>&#8220; .$teil['Website']. &#8220;</td>
<td>&#8220; .$teil['Mail']. &#8220;</td>
</tr>
</table>
</center>
";
if((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW)) && ($PHP_AUTH_USER==$AdminLogin) && ($PHP_AUTH_PW==$AdminPasswt))
{
echo "<center><td>Administration:<a href=index.php?aktion=del&id=" .$teil['id']. ">löschen</a></td></center>";
}
}
sqlite_close($db);
if (!($_GET['aktion']=='neu'))
{
echo "<h3><a href='" .$PHP_SELF. "?aktion=neu'>Neuen Eintrag verfassen</a></h3>";
}
if ($_GET['aktion']=='neu')
{
echo "<a href='index.php'>Zurück zur Ansicht</a>";
}
if((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW)) && ($PHP_AUTH_USER==$AdminLogin) && ($PHP_AUTH_PW==$AdminPasswt))
{
echo "Adminstatus:&#160eingeloggt";
}
else
{
echo "<hr width='96%'>";
echo "Adminstatus:&#160<a href='index.php?aktion=login'>ausgeloggt</a>";
}

ja, dieser code wird wahrscheinlich den leuten, die etwas mehr von php verstehen als ich, etwas merkwürdig vorkommen, aber da dieser code nunmla eben von mir ist, und ich noch etwas beschränkt in php bin, sind wahrscheinlich einige sachen etwas komplizier-ter als nötig dargestellt ;-)

nun zur erklärung (dies ist jetzt etwas kurz dargestellt, da es hier ja nicht um die phpfunktionen geht, sondern um das auslesen und erstellen von datenbank[-tabellen]!)

das formular sendet die einträge an sich selber, daher ist immer wichtig, dass die action immer an die selbe datei geht!

Die dateien werden nur angezeigt, sofern die übermittelte variabel $Vorname nicht leer ist (diese kann natürlich noch mit or ergäntzt, oder ganz weggelassen werden!)
Neu sind hier nun folgende funktionen:

- DELETE FROM dbname
- SELECT
- ORDER BY

Der erste befehl löscht eine spalte in der angegebenen datenbank, und zwar mit WHERE diejenige spalte mit der jeweiligen id!
SELECT heißt einfach das auslesen der jeweils angegebenen spalte, die mit ORDER BY (hier id) geordnet werden!

Mit einer whileschleife wird nun das ganze in eine tabelle ausgegeben...
Wenn man eingeloggt ist, gibt es ja eben schon beschriebene löschfunktion!

Natürlich kann man noch solche 'ausschmückungen wie eine kontrolle der eingegebenen daten hinzufügen, und natürlich auch ein ordentliches design, aber hier ging es ja nur, wie schon gesagt, nur um das eigentliche grundprinzip von SQLite J

Ich hoffe, das war jetzt einigermaßen verständlich *puh*

Bei fragen einfach ne pn!

Bewertung Anzahl
6
100,0 %
7 Bewertungen