Textdb - Klasse
Klasse mit der sich beliebe Daten in eine Textdatei speichern lassen
|
Script: |
<?php
if(!defined('ONPAGE')) die("NO CHANCE!");
class phpdb
{
var $sum; //Anzahl der Datensätze @public
var $keysum; //Anzahl der Daten pro Datensatz @public
var $keynames; //Array das die Name der Schlüssel pro Datensatz enthält @public
var $data; //Mehrdimensionales Array das die Daten enthält @public
var $fp; //Dateizeiger @private
var $filename; //Dateiname der Datenbankdatei @private
function phpdb($filename)
{
if(!is_file($filename))
{
$this->error("DB-File existiert nicht!");
}
$this->filename = $filename;
$this->load();
}
function load()
{
unset($this->data, $info); //Daten werden gelöscht, damit sie neu geladen werden können
include $this->filename; //DB-File wird eingefügt
if(!isset($info)) //Wenn in der DB-File das $info Array nicht existiert.
{
$this->data[0]['fehler'] = "KEINE DATEN VORHANDEN";
$this->sum = 1; //Gesamtsumme der Datensätze
$this->keysum = 1; //Summe der einzelnen Daten pro Datensatz
$this->keynames = $this->keynames($this->data['0']); //Enthält die Namen der Schlüssel der Datensätze
}
else
{
$begin = 0;
$this->sum = count($info); //Gesamtsumme der Datensätze
$this->keysum = count($info['1']); //Summe der einzelnen Daten pro Datensatz
$this->keynames = $this->keynames($info['1']); //Enthält die Namen der Schlüssel der Datensätze
for($i=0; $i<$this->sum;$i++)
{
for($n=0;$n <= $this->keysum;$n++)
{
$this->data[$i][$this->keynames[$n]] = stripslashes($info[$i+1][$this->keynames[$n]]);
}
}
$this->data = array_reverse($this->data);
}
}
function keynames($array=false)
{
if(!$array)
{
$no = true;
$array = $this->data['0'];
}
if($no)
{
return $this->keynames = array_keys($array);
}
else
{
return array_keys($array);
}
}
function error($msg)
{
die("<div align=\"center\" style=\"font-weight:bold;font-size:14px;color:#FF3300;\">".$msg."</div>");
}
function open($mode, $lock=false)
{
$this->fp = @fopen($this->filename, $mode);
if($lock != false)
{
@flock($this->fp, $lock);
}
}
function close()
{
if(isset($this->fp) && !empty($this->fp))
{
@flock($this->fp, 3);
@fclose($this->fp);
return true;
}
else
{
return false;
}
}
function insert($entry)
{
if(!is_array($entry))
{
return false;
}
$keysofentry = $this->keynames($entry);
$size = filesize($this->filename);
$this->open("r+",2);
fseek($this->fp, $size-2);
if(!$this->compare($keysofentry, $this->keynames))
{
$this->error("Array stimmen nicht überein! (Formular überprüfen)");
}
foreach($keysofentry as $key)
{
static $first = true;
if($first == true)
{
fputs($this->fp,"$info[++$begin]['$key'] = \"".$this->formatstr($entry[$key])."\";n");
$first = false;
}
else
{
fputs($this->fp,"$info[ $begin]['$key'] = \"".$this->formatstr($entry[$key])."\";n");
}
}
fputs($this->fp,"n?>");
$this->close();
return true;
}
function delete($delete=false)
{
$size = filesize($this->filename);
$this->open("w",2);
fputs($this->fp,"<?n");
#fputs($this->fp,"#$info[++$begin]['name'] = \"isreal\";n#$info[ $begin]['email'] = \"office@is-real.com\";nn#$info[++$begin]['name'] = \"Franz\";n#$info[ $begin]['email'] = \"franz@host.com\";n#usw..rnn");
foreach($this->data as $data)
{
static $n=0;
if(!is_array($delete) || !in_array($n, $delete))
{
for($i=0; $i < $this->keysum;$i++)
{
if(!(($this->keysum+$i)%$this->keysum))
{
static $d=1;
fputs($this->fp,"#".$d." (ID:".($d-1).")n");
fputs($this->fp,"$info[++$begin]['".$this->keynames[$i]."'] = \"".$this->formatstr($data[$this->keynames[$i]])."\";n");
$first = false;
$d++;
}
else
{
fputs($this->fp,"$info[ $begin]['".$this->keynames[$i]."'] = \"".$this->formatstr($data[$this->keynames[$i]])."\";n");
}
if(($i+1)==$this->keysum)
{
fputs($this->fp,"n");
}
}
}
$n++;
}
fputs($this->fp,"n?>");
$this->close();
return true;
}
function compare($array1, $array2)
{
$arraysum1 = count($array1);
$arraysum2 = count($array2);
if($arraysum1 != $arraysum2)
{
return false;
}
foreach($array1 as $value)
{
if(!in_array($value, $array2, true))
{
return false;
}
}
return true;
}
function formatstr($str)
{
return str_replace("$", "\$", addslashes($str));
}
}
?>
<?php
require "phpdb.class.php"; //Als erstes die Klasse includen ;o)
$db = new phpdb("db.php"); //Klasse initialiesieren
if(!empty($_POST['name']) && !empty($_POST['email']))
{
$data = array('name' => $_POST['name'],
'email' => $_POST['email']);
//Der Methode insert übergibt man einfach ein Array mit den Daten die man eintragen möchte.
//Das Array muss dieselben Schlüssel aufweisen wie die in der DB-File schon vorhandenen.
$db->insert($data);
}
if(isset($_POST['del']))
{
//Der Methode delete ein array mit den id's die gelöscht werden sollen
$delete = $_POST['delete'];
$db->delete($delete);
}
//mit load wird das Array aktualisiert.
//Damit die neuen/gelöschten Einträge (nicht) angezeigt werden
$db->load();
echo "Anzahl der Datensätze: <b>".$db->sum."</b><br>\n"; //sum enthält die Summer der Datensätze die in der Datei vorhanden sind.
echo "Anzahl der Daten pro Datensatz: <b>".$db->keysum."</b><br>\n"; //keysum enthält die Summe der einzelnen Einträge pro Datensatz (name+email = 2)
echo "Namen der Daten pro Datensatz: <br>\n";
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" target=\"_self\">\n";
foreach($db->keynames as $keyname) //keynames enthält die Namen der Schlüssel eines Datensatzes. (name, email)
{
echo "<b>".$keyname."</b>: <input type=\"text\" name=\"$keyname\" value=\"\"><br>";
}
echo "<input type=\"submit\" value=\"eintragen\">\n";
echo "</form>\n";
echo "<br><br>";
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\" target=\"_self\">\n";
//data ist ein 2Dim Array das die gesamten Daten enthält;
//$classname->data[0]['name'] = "isreal";
//$classname->data[0]['email'] = "office@is-real.net";
//usw.
foreach($db->data as $user)
{
static $n =0;
echo "<input type=\"checkbox\" name=\"delete[]\" value=\"$n\"><br>\n";
for($i=0; $i < $db->keysum;$i++)
{
echo "<b>".ucfirst($db->keynames[$i])."</b>: ".$user[$db->keynames[$i]]."<br>\n";
}
$n++;
echo "<br>\n";
}
echo "<input type=\"submit\" name=\"del\" value=\"löschen\">\n";
echo "</form>\n";
$db->delete(); //Wenn delete ohne Argument aufgerufen wird formatiert er die DB-File neu. Dabei werden aber keine Änderungen vorgenommen.
?>
|
|