webForumDet fria alternativet

Använda XML eller databas för "sidinställningar"

PHP

4 svar · 411 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Hej,

Har byggt en typ av CMS där jag i nuläget använder en XML-fil för "globala" inställningar i systemet, så som uppgifter om kunden (namn, adress osv.).

Nu börjar det bli ett gäng sajter att underhålla och börjar fundera på om det här är bra eller dåligt. Är det "smartare" att spara sådana här saker i en tabell i databasen?

En fördel med XML är ju att man slipper göra anrop till databasen varje gång man ska hämta en inställning.

Hur skulle ni gjort?

Medlem sedan juni 20034 013 inlägg
#2

Databas är att rekommendera om du behöver plocka ut vissa delar enligt vissa villkor, söka, sortera eller på annat sätt bearbeta resultatet.

För inställningar kan det vara praktiskt om du ska kunna ändra dem genom ett webbgränssnitt. Lite smidigare att köra SQL-queries för att ändra än att pilla i en textfil.

Medlem sedan feb. 20034 441 inlägg
#3

Jo, håller med där. Började fundera över det här nu när en kund har PlusGiro istället för Bankgiro och nu måste jag bygga in båda delarna och sen ska en av dom override'a den andra när fakturor genereras osv.

Kunden ska ju även kunna ändra på de här uppgifterna själv, och det är lättare att bygga ett webbgränsnitt för det (precis som du säger) istället för att läsa in filen, skapa ett formulär och sen skriva en ny config fil.

Blir det något fel i filen när den skrivs kommer ju även hela sajten rasa, typ. Nu gör jag om, och gör rätt.

Tack

Medlem sedan feb. 20034 441 inlägg
#4

Nu har jag gjort om lite, men har stött på problem.
Såhär ser min tabell ut:

config_parent
config_key
config_value
config_type
config_pattern

config_type kan t.ex. innehålla "numeric", "year", "alpha" och är det NULL på en rad innehåller istället config_pattern det mönster som in-datan ska valideras emot.

Såhär ser koden ut:

$keys    = array();
$config  = array(					
				1 => "SYSTEM",
				2 => "ADMIN_SETTINGS",
				3 => "CLIENT_SETTINGS",
				4 => "GROUP_SETTINGS",
				5 => "SCHOOL_NOTIFIES",
				6 => "PAGE_START",
				7 => "PAGE_GALLERY",
				8 => "PAGE_FOOTER"
				);

$query = "SELECT config_parent, config_key, config_value, config_type, config_pattern, config_desc "
		."FROM system_config "
		."ORDER BY config_parent ASC";

$result = mysql_query($query) or die(send_errorreport(basename($_SERVER['PHP_SELF']), __LINE__, mysql_error(), $query));
if(!(mysql_num_rows($result) == false)){
	while($res = mysql_fetch_assoc($result)){
		$keys[$res['config_parent']]['key'][]	  = $res['config_key'];
		$keys[$res['config_parent']]['value'][]   = $res['config_value'];
	}
}
mysql_free_result($result);

$res['config_parent'] är "tillhörighet" i array'en $config. När jag postar formuläret ser koden ut såhär:

	function value_is_ok($value, $type = "", $pattern = ""){
		switch($type){
			case "alpha"   : $pattern = "/^[A-Za-z\s-_]+$/"; break;
			case "numeric" : $pattern = "/^\d+$/"; break;
			case "year"    : $pattern = "/^(19|20)[0-9]{2}$/"; break;
			case "href"    : $pattern = "/^(https?):\/\/((?:[-a-z0-9]+\.)*)([-a-z0-9]+)\.(com|edu|gov|int|mil|net|org|biz|info|name|museum|coop|aero|[a-z]{2})(\/[-a-z0-9_:@&?=+,.!\/~*%$]*)?$/i"; break;
			case "email"   : $pattern = "/^[A-Z0-9._%-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$/i"; break;
		}
		return preg_match($pattern, $value);
	}

	for($i = 0; $i <= sizeof($_POST['parent']) - 1; $i++){
		$parent  = safesql($_POST['parent'][$i]);
		$key	 = safesql($_POST['key'][$i]);
		$value   = safesql($_POST['value'][$i]);

		if(value_is_ok($value, $type, $pattern) == 0)
			$error[] = $key;

		$keys[$_POST['parent'][$i]]['key'][]	 = $key;
		$keys[$_POST['parent'][$i]]['value'][]   = $value;
	}

Problemet är att när jag postar formuläret så lyckas jag inte jämföra $_POST['value'][$i] med "rätt" $keys[$parent]['pattern'][$i].

Kan någon ge mig en spark i rätt riktning? Tack!

Medlem sedan feb. 20034 441 inlägg
#5

Har löst problemet, hade rört ihop det fullständigt i huvudet.

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)