Location: PHPKode > projects > PuszForum > puszforum/php/puszbaza.php
<?
/*
PuszBaza wersja 1.2.2

Autor - Michal "Puszkin" Marszalik udostepnia ten program jako freeware. Mozna go kopiowac, uzywac
na potrzeby prywatne, czy komercyjne, (ale nie mozna go sprzedawac). Autor nie ponosi zadnej odpowiedzialnosci
za efekty uzytkowania programu, jak i za jego sprawnosc. Korzystajac z PuszBazy robisz to na wlasna odpowiedzalnosc
Wszelkie pytania kierowac do hide@address.com  Najnowsze wersje znajdziesz na strone www.puszkin.polbox.pl

PuszBaza version 1.2.2
The author, Michael Marszalik, grants you PuszBaza (pronounced push-b^s^ [where ^ stands for short a as in much]) as a freeware. You can copy and use
it for private or commercial websites, but you can't charge for PuszBaza. The author may not be held
responsible for any undesirable results of using the script and he can not guarantee that PuszBaza
would suit your particular needs: using PushBaza is entirely at your own risk. You have been warned
-----------------------------------------------------------------------------------------------------------------------------------------------
*/


//--------------------------------------------------------------- CONNECT (wymagana przez update_pb i delete_pb)--------------------------------------------------
//--------------------------------------------------------------- CONNECT (required to update_pb i delete_pb)--------------------------------------------------
function connect_pb ($nazwap)
{
	$plik =file($nazwap);
	$tytuly = split(";",$plik[0]);

	for($i = 1; $i< (count($plik)) ;$i++)
		{
		$wiersz = split(";",$plik[$i]);
		for ($ii=0; $ii<(count($wiersz)-1); $ii++) 
			{
			$tyt = $tytuly[$ii];
			$tabela[$tyt][$i-1] = $wiersz[$ii]; 
			}
		}

	return $tabela;
}

//----------------------------------------------------Funkcje filtrujace potrzebne selectowi i updatowi------------
//---------------------------------------------------- Filter functions required to select_pb and delete_pb-------
function funkcja($var,$func)
	{
	eval("\$wyn = $func ;");
	return ($wyn);
	}

function array_filter_it($array, $callback,$func) 
{ 
$farray = array (); 
while(list($key,$val) = each($array)) 
if ($callback($val,$func))  $farray[$key] = $val; 
return $farray; 
}

function advfiltr($tabela,$kolumny,$warunki)
{
$warunki = split(" AND ", $warunki); 
$kolumny = split(" AND ", $kolumny);
$ile = count($kolumny);
for($i=0; $i < $ile; $i++)
	{
	$wynik = array_filter_it($tabela[$kolumny[$i]],"funkcja", $warunki[$i] );
	if($i>0) $wyn = array_intersect($wyn,array_keys($wynik));
	else $wyn=array_keys($wynik);
	}
$wyn=array_flip($wyn);
return $wyn;
}
//---------------------------------------------------------------SELECT--------------------------------------------------------------

function select_pb ($tabela, $kolumna,$func,$sort = "0",$jak="0" )
{
if(count_pb($tabela) == 0 ) return(0);
If ($sort == "0" ) $sort= $kolumna;
If ($jak == "0" ) $jak= "ASC";
$jak=strtoupper($jak);

$func = eregi_replace("x","\$var",$func);

if(!eregi(" AND ",$kolumna)) $wynik = array_filter_it($tabela[$kolumna],"funkcja", $func );
else $wynik = advfiltr($tabela,$kolumna,$func);

$klucze_wynik = array_keys($wynik);
$tytuly = array_keys($tabela);

$ile_wyn = count($wynik);
$ile_tyt = count($tabela);

$toco ="\$zwrot[$sort],SORT_$jak,";

for($i = 0; $i < $ile_tyt; $i++ )
	{
	$ind = $tytuly[$i];
	if($ind != $sort)	$toco = "$toco \$zwrot[$ind],";
	for ($ii = 0; $ii < $ile_wyn; $ii++)
		{
		$indw = $klucze_wynik[$ii];
		$zwrot[$ind][$ii] = $tabela[$ind][$indw];
		}
	}

$toco = "$toco SORT_ASC"; 
if(($ile_wyn)>0) eval("array_multisort ($toco);");

return $zwrot;
}

//--------------------------------------Licz wiersze (wykorzystywany przez Delete Update Select) ------------------------------
//--------------------------------------Count rows (required to delete_pb update_pb and select_pb ---------------------
function count_pb ($wynik)
{
if($wynik!=0) $klucze_wynik = array_keys($wynik);

$klucz = $klucze_wynik[0];
$ile = count($wynik[$klucz]);
return ($ile);
}

//--------------------------------------------------------INSERT---------------------------------------------------------------
function insert_pb ($plik,$string)
{
$file = fopen ($plik,"a");
$string = ereg_replace("(\r)|(\n)","",$string);
fputs ($file,"\r\n$string",(strlen($string)+2));
fclose($file);
}

//--------------------------------------------------Operacje plikowe potrzebne Update i Delete---------------
//--------------------------------------------------File operations required to update_pb and delete_pb--------
function zapiszplik($plik,$tabela)
{
$tytuly = array_keys($tabela);
$ile_tyt = count($tytuly);
$ile_wsz = count($tabela[$tytuly[0]]);

$file = fopen ($plik,"w");

for($ii=$ile_tyt-1;$ii>=0;$ii--)
	{
	$ind = $tytuly[$ii];
	$wart = $ind;
	$toco = "$wart;$toco";
	}
$toco = ereg_replace("(\r)|(\n)","",$toco);
fputs ($file,$toco,(strlen($toco)));

for($i=0;$i < $ile_wsz; $i++)
	{
	$toco ="";
	for($ii=$ile_tyt-1;$ii>= 0;$ii--)
		{
		$ind = $tytuly[$ii];
		$wart = $tabela[$ind][$i];
		$toco = "$wart;$toco";
		}
	$toco = ereg_replace("(\r)|(\n)","",$toco);
	$toco ="\r\n$toco"; 
	fputs ($file,$toco,(strlen($toco)));
	}
fclose($file);
}

//---------------------------------------------------------UPDATE-------------------------------------------------------------

function update_pb ($pliczek,$kolumna,$func, $klucz, $wartosc)
{
$tabela = connect_pb($pliczek);
if(count_pb($tabela) == 0 ) return(0);

$func = eregi_replace("x","\$var",$func);

if(!eregi(" AND ",$kolumna)) $wynik = array_filter_it($tabela[$kolumna],"funkcja", $func );
else $wynik = advfiltr($tabela,$kolumna,$func);

$klucze_wynik = array_keys($wynik);
$ile_wyn = count($wynik);

for ($ii = 0; $ii < $ile_wyn;$ii++)
	{
	$indw = $klucze_wynik[$ii];
	$tabela[$klucz][$indw]=$wartosc; 
	}
zapiszplik($pliczek,$tabela);
}

//------------------------------------------------------------DELETE------------------------------------------------------------
function delete_pb ($pliczek,$kolumna,$func)
{
$tabela = connect_pb($pliczek);
if(count_pb($tabela) == 0 ) return(0);

$func = eregi_replace("x","\$var",$func);

if(!eregi(" AND ",$kolumna)) $wynik = array_filter_it($tabela[$kolumna],"funkcja", $func );
else $wynik = advfiltr($tabela,$kolumna,$func);

$wyn = array_keys($wynik);
$tab = array_keys($tabela[$kolumna]);
$wynik = array_diff($tab,$wyn);
$wynik = array_flip($wynik);
$wynik = array_flip($wynik);

$klucze_wynik = array_keys($wynik);
$tytuly = array_keys($tabela);

$ile_tyt = count($tytuly);
$ile_wyn = count($wynik);

if($ile_wyn != 0)
	{
	for($i = 0; $i < $ile_tyt; $i++ )
		{
		$ind = $tytuly[$i];
		for ($ii = 0; $ii < $ile_wyn; $ii++)
			{
			$indw = $klucze_wynik[$ii];
			$zwrot[$ind][$ii] = $tabela[$ind][$indw];
			}
		}
	zapiszplik($pliczek,$zwrot);
	}	
else
	{
	$file = file($pliczek); 
	for($i = 0; $i < count($tytuly); $i++) $string .= $tytuly[$i].";";
	$f = fopen($pliczek,"w");
	fwrite($f, $string);
	}
}


?>
Return current item: PuszForum