Z SQL přímo do www formuláře - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



PHP

Z SQL přímo do www formuláře

17. ledna 2000, 00.00 | Praktický příklad jednoduchého univerzálního editoru dat v sql.

V jednom z předcházejících článků jsme si ukázali jak použít fci mysql_field_name(). Nyní si předvedeme i použití dalších funkcí pracujících s informacemi o tabulce v sql.
Praktickým příkladem nám bude procedura na vytvoření formuláře dle tabulky. Formulář převezme nejen jména položek, ale i jejich max délku a jiné vlastnosti (blob bude jako textarea a bool jako checkbox). Jde vlastně o takový jednoduchý univerzální editor dat v SQL.


Použité funkce:
mysql_field_type($res,$j) typ buňky (string, int, blob, real, unknown)
mysql_field_name($res,$j) jméno sloupce tabulky
mysql_field_len($res,$j) délka položky (maximální)
mysql_field_flags($res,$j) mezerou oddělené vlastnosti buňky (auto_increment, not_null, primary_key ap.)

Samotná filosofie programu:
Úkolem procedury je vygenerovat forumulář odpovídající zadané tabulce. A to jak velikostí položek tak i přiřazením správného input objektu ve formuláři (textarea, text, checkbox ap.).
Zde nastává malý problém, protože se můžeme domnívat že blob může obsahovat text na několik řádek (nutný textarea) zatímco varchar nemusí (pak stačí text, který je možno rozměrově omezit). Dalším problémem je funkce mysql_field_type, která rozpozná jen omezený počet typů a např. tinyint (==bool) vrací jako neznámý. Pro tento případ je třeba použít trochu heuristiky..
Dále např. nemáme zájem o editaci položek jenž jsou auto_increment ap..
Jak je vidět problémů je hned několik a není záruka, že procedura bude fungovat na všechny tabulky jak bysme si představovali.

Kód:
tabulka:

CREATE TABLE test (
  uid int(11) DEFAULT '0' NOT NULL auto_increment,
  xxx blob,
  string varchar(255) DEFAULT '' NOT NULL,
  cislo int(20) DEFAULT '0' NOT NULL,
  b tinyint(1) DEFAULT '1' NOT NULL,
  PRIMARY KEY (uid)
);
INSERT INTO test VALUES (2,'aaa\nbbb\ncccc','STR\" aha',12334,0);

Php:

\n";

for($i=0; $i<$rows; $i++)
	for($j=0; $j<$cols; $j++)
	{
	$type=mysql_field_type($res,$j);
	$name=mysql_field_name($res,$j);
	$len=mysql_field_len($res,$j);
	$flags=mysql_field_flags($res,$j);

	$data= mysql_result($res,$i,$j);	

	if(strstr($flags,"auto_increment")) continue;

	echo "$name: ";

	switch($type) {
	case "blob":
	$data=htmlspecialchars($data);
	echo "\n";
	break;
	
	case "string":
	$data=htmlspecialchars($data);

	default:
	/* ostatni, co lze editovat jako text
	ale napr. i boolean (v mysql bool (tinyint)) 
	ale v $type jako unknown
	*/
	if($len==1&&($data==0||$data==1))
		{
		/* zrejme jde o booloskou hodnotu */
		if($data) $ch="checked";
		echo "\n";
		}
	else {
		$size=$len<30?$len:30;
		echo "\n";	
	    }
	}

	//echo "$type $name $len $data ($flags)
"; } echo "\n" ?>

Výstup:

xxx:

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: