Enkelte felter skal ikke gemmes i database
Ja, dette bliver nok en af de sværere opgaver, det synes jeg i hvert fald.Jeg har nogle felter som ikke skal kunne bliver overskrevet før brugeren aktivt, har givet lov. Jeg regnede med at brugeren skulle have en checkboks, som default er slået til (felter låst). Fjerner de fluebenet skal felterne kunne overskrives.
Det tror jeg ikke vil blive det største problem, tilgengæld kommer det når jeg skal gemme værdierne af felterne i databasen. Som koden er nu, bliver ingen felter gemt hvis f.eks. en ordre er afsluttet. Det bliver gjort via den readonly som der tjekkes for nedenunder.
if (!isset($_POST['readonly'])) {
// Init tilbud
$keys = array_keys($_POST);
$keygroup = array();
$keygroup[0] = array(); // Field 1-99
$keygroup[1] = array(); // Field 100-199
$keygroup[2] = array(); // Field 200-299
$keygroup[3] = array(); // Field 300-399
$keygroup[4] = array(); // Field 400-499
$keygroup[5] = array(); // Field 500-599
for ($i=0; $i<count($keys); $i++) {
if (eregi("([R]?)([0-9]{1,3})([A-Z]?)", $keys[$i], $regs)) {
$index = sprintf('%03d', $regs[2]);
$keygroup[substr($index,0,1)][] = $keys[$i];
} else {
$keygroup[0][] = $keys[$i];
}
}
for ($i=0; $i<=5; $i++) {
if (sizeof($keygroup[$i])) {
// Check for existing fields
$dbfields = mysql_query('SHOW COLUMNS FROM `ordre'.$i.'`');
$dbcols = mysql_num_rows($dbfields);
$dbc = array();
for ($j=0; $j<$dbcols; $j++) {
$row = mysql_fetch_assoc($dbfields);
$dbc[$j] = $row['Field'];
}
$query = array();
for ($j=0; $j<count($keygroup[$i]); $j++) {
if (!in_array($keygroup[$i][$j], $dbc)) {
mysql_query('ALTER TABLE `ordre'.$i.'` ADD `'.$keygroup[$i][$j].'` TINYTEXT') or die('Fix table '.mysql_error());
}
$_POST[$keygroup[$i][$j]] = strtr($_POST[$keygroup[$i][$j]], ',', '.');
$query[] = '`'.$keygroup[$i][$j].'` = \''.addslashes($_POST[$keygroup[$i][$j]]).'\'';
}
//echo implode(', ', $query);
// Update values to database
mysql_query('UPDATE `ordre'.$i.'` SET '.implode(', ', $query).' WHERE tilbudsnummer=\''.$tilbudsnummer.'\'') or die(mysql_error());
}
}
}
Er readonly ikke sat (felterne kan overskrives), blvier alle værdier gemt i databasen. Mit problem er nu, at jeg skal have indført endnu et tjek, på de tidligere omtalte specifikke felter. Men hvordan kan jeg udvide ovenstående kode, så alle felter minus de valgt bliver gemt i databasen.
Peudo-kode:
if (!isset($_POST['readonly'])) {
if (!isset($_POST['readonly2'])) {//readonly for de specifikke felter
hent alle felter, minus dem under readonly2;
gem de hentede felters værdi i databasen;
}
}
Håber det er til at forstå.
