Avatar billede lsskaarup Nybegynder
18. maj 2005 - 16:08 Der er 1 løsning

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å.
Avatar billede lsskaarup Nybegynder
19. maj 2005 - 09:15 #1
Bare glem det, da jeg har løst det på en anden måde. Idet jeg nu tjekker ved udregningen af disse felter, om en checkboks er sat eller ej. Brugeren skal så aktivt fra vælge denne checkboks, hvis de vil have en ny udregning af felterne.

Så slipper ejg for at skulle styre hvilke felter der gemmes i databasen, da felterne har deres rigtige værdi.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester