logo   PHP - UPDATE template.




Nedenfor vises (i kasserne) koden for et anvendt program. Teksterne er sat ind for at lave naturlige opdelinger og forklaringer undervejs.


Evt. link til CKeditor

Link til det installerede CKEditor-program når CKE skal anvendes i aktuelt program.

<script type="text/javascript" src="ckeditor/ckeditor.js"></script>


PHP start.

<?php


Variabler

Definition af variabler for alle input-felter, der anvendes i "form"-en, samt visse andre generelle variabler. Glemmes definitionen af en variabel vil der forekomme en php-fejl. "Lokale" variabler i programforløbet kan defineres undervejs i koden efterhånden som der bliver brug for dem.

$fejlbeskeder = "";
$fk_prodgr_id = "";
$fk_prod_id = "";
$vare_navn = "";
$vare_pris = "";
$vare_tilbpris = "";
$vare_tilbakt = "";
$vare_tilbfra = "";
$vare_tilbtil = "";
$vare_besk = "";


$_GET start

Et UPDATE program skal vide, hvilken record i databasen der skal vedligeholdes. Identen for den pågældende record - og til tider en eller flere yderlige oplysninger - tilføres normalt som URL-parametre fra det program, hvorfra beslutningen om ændring foretages (ofte et SELECT-program).
URL-parametre læses med "$_GET".


Til $_GET knyttes en if-sætning, der omringer hele UPDATE-programmet og af sluttes nederst med en "else".

if (isset ($_GET['vare_id'])) // start GET
   {
    $fk_prodgr_id = $_GET['fk_prodgr_id'];
    $fk_prod_id = $_GET['fk_prod_id'];
    $vare_id = $_GET['vare_id'];


$_POST start.

Undersøger om $_POST-array med det anførte navn findes.
Ved 'nej' (hvilket vil være tilfældet ved programmets start) springes til "Hent fra database".
Ved 'ja' fortsættes - når ingen fejl - ned igennem programmet til "exit". Ved fejl skiftes til "vis fejl".

    if (isset ($_POST['submit'])) //start POST
       {


Indlæs fra form

Indlæser de data, der er sendt fra "form"-en. Der kan samtidig foretages visse modifikationer af dataene. Andre end de viste kan forekomme.
Koden kan kopieres på tværs fra INSERT.

       $fk_prodgr_id = htmlentities (trim ($_POST['fk_prodgr_id']),ENT_QUOTES, "utf-8");
       $fk_prod_id = htmlentities (trim ($_POST['fk_prod_id']),ENT_QUOTES, "utf-8");
       $vare_navn = htmlentities (trim ($_POST['vare_navn']),ENT_QUOTES, "utf-8");
       $vare_pris = htmlentities (trim ($_POST['vare_pris']),ENT_QUOTES, "utf-8");
       $vare_tilbpris = htmlentities (trim ($_POST['vare_tilbpris']),ENT_QUOTES, "utf-8");
       if(isset($_POST['vare_tilbakt']))
          {$vare_tilbakt = 1;}
       $vare_tilbpris = htmlentities (trim ($_POST['vare_tilbpris']),ENT_QUOTES, "utf-8");
       $vare_tilbfra = htmlentities (trim ($_POST['vare_tilbfra']),ENT_QUOTES, "utf-8");
       $vare_tilbtil = htmlentities (trim ($_POST['vare_tilbtil']),ENT_QUOTES, "utf-8");
       $vare_besk = htmlentities (trim ($_POST['vare_besk']),ENT_QUOTES, "utf-8");


Valideringer

Der foretages alle de logiske valideringer, det er muligt at foretage. Udgangspunktet er, at alle udefrakommende data så vidt praktisk muligt skal valideres for at sikre databasens integritet. Validering bør foretages selvom html har foretaget en måske korrekt "pre-validering" ved indtastning.
Koden kan kopieres på tværs fra INSERT.

       if ($fk_prodgr_id == 0)
          {
          $fejlbeskeder .= "Navn på Prod. gruppe mangler<br />";
          }

       if ($fk_prod_id == 0)
          {
          $fejlbeskeder .= "Navn på mærke mangler<br />";
          }

       if ($vare_navn == "")
          {
          $fejlbeskeder .= "Navn på varen mangler<br />";
          }

       if ($vare_pris == "")
          {
          $fejlbeskeder .= "Varens pris mangler<br />";
          }
          else
          {
          if (!is_numeric($vare_pris)) {
             $fejlbeskeder .= "Prisen er ikke numerisk<br />";
             }
          }

       if ($vare_tilbpris != "")
          {
          if (!is_numeric($vare_tilbpris)) {
             $fejlbeskeder .= "Tilbudsprisen er ikke numerisk<br />";
             }
          }

       if ($vare_tilbakt == 1)
          {
          if (!is_numeric($vare_tilbpris)) {
             $fejlbeskeder .= "Tilbudsprisen er ikke numerisk<br />";
             }
          if ($vare_tilbfra == "") {
             $fejlbeskeder .= "Fradato mangler<br />";
             }
          if ($vare_tilbtil == "") {
             $fejlbeskeder .= "Fradato mangler<br />";
             }
          } // tilbakt slut

       if ($vare_besk == "")
          {
          $fejlbeskeder .= "Beskrivelse mangler<br />";
          }


Opdater database

Opdatering af databasen når ingen fejl.
Benyt den ønskede af de 3 kodemåder.
Der skiftes til næste program med "header".

Ved forekomst af fejl foretages ingen opdatering af databasen, men der skiftes til visning af fejlliste og "form", der nu viser de sidst indtastede data.




Procedure

       if ($fejlbeskeder == "") // fejlbeskeder
          {
          $query = "
          UPDATE varestam SET
             fk_prod_id   = '$fk_prod_id',
             vare_navn   = '$vare_navn',
             vare_pris     = '$vare_pris',
             vare_tilbpris = '$vare_tilbpris',
             vare_tilbakt = '$vare_tilbakt',
             vare_tilbfra = '$vare_tilbfra',
             vare_tilbtil   = '$vare_tilbtil',
             vare_besk   = '$vare_besk'
          WHERE vare_id = $vare_id
          ";
          $result = mysqli_query ($db_link, $query) or die (mysqli_error ($db_link));
          header ("Location: varestam_select.php");
          exit;
          } // fejlbeskeder




"Mysqli_real_escape_string"

       if ($fejlbeskeder == "") // fejlbeskeder
          {
          $fk_prod_id_a   = mysqli_real_escape_string($db_link, $fk_prod_id);
          $vare_navn_a   = mysqli_real_escape_string($db_link, $vare_navn);
          $vare_pris_a     = mysqli_real_escape_string($db_link, $vare_pris);
          $vare_tilbpris_a = mysqli_real_escape_string($db_link, $vare_tilbpris);
          $vare_tilbakt_a = mysqli_real_escape_string($db_link, $vare_tilbakt);
          $vare_tilbfra_a  = mysqli_real_escape_string($db_link, $vare_tilbfra);
          $vare_tilbtil_a   = mysqli_real_escape_string($db_link, $vare_tilbtil);
          $vare_besk_a   = mysqli_real_escape_string($db_link, $vare_besk);

          $query = "
          UPDATE varestam SET
             fk_prod_id   = '$fk_prod_id_a',
             vare_navn   = '$vare_navn_a',
             vare_pris      = '$vare_pris_a',
             vare_tilbpris = '$vare_tilbpris_a',
             vare_tilbakt = '$vare_tilbakt_a',
             vare_tilbfra  = '$vare_tilbfra_a',
             vare_tilbtil   = '$vare_tilbtil_a',
             vare_besk   = '$vare_besk_a'
          WHERE vare_id = $vare_id
          ";
          $result = mysqli_query ($db_link, $query) or die (mysqli_error ($db_link));
          header ("Location: varestam_select.php");
          exit;
          } // fejlbeskeder




Prepared

if ($fejlbeskeder == "") // fejlbeskeder
    {
    $sql = "UPDATE vare SET fk_prod_id=?, vare_navn=?, vare_pris=?, vare_tilbpris=?, vare_tilbakt=?, vare_tilbfra=?, vare_tilbtil=?, vare_besk=? WHERE vare_id=?";
    $query = $db_link->prepare($sql);
    $query->bind_param('isiiiiisi', $fk_prod_id, $vare_navn, $vare_pris, $vare_tilbakt, $vare_tilbakt, $vare_tilbfra, $vare_tilbtil, $vare_besk);
       $fk_prod_id    = $fk_prod_id;
       $vare_navn    = $vare_navn;
       $vare_pris      = $vare_pris;
       $vare_tilbpris = $vare_tilbpris;
       $vare_tilbakt = $vare_tilbakt;
       $vare_tilbra   = $vare_tilbfra;
       $vare_tilbtil   = $vare_tilbtil;
       $vare_besk   = $vare_beskr;
    $query->execute();
    $query->close();

    header ("Location: datablad_select.php?dok_id=$dok_id");
    exit;
    } // fejlbeskeder




Hent fra database

Henter data for den relevante record fra databasen ved programmets start.
Der kan frit vælges mellem "MySQLi"- og "Prepared"-motoderne.

       }
       else // POST
       {

       $query = "SELECT * FROM varestam WHERE vare_id = $vare_id";
       $result = mysqli_query ($db_link, $query) or die (mysqli_error ($db_link));
       $row = mysqli_fetch_assoc ($result);
       $fk_prod_id    = $row['fk_prod_id'];
       $vare_navn    = $row['vare_navn'];
       $vare_pris      = $row['vare_pris'];
       $vare_tilbpris = $row['vare_tilbpris'];
       $vare_tilbakt = $row['vare_tilbakt'];
       $vare_tilbfra  = $row['vare_tilbfra'];
       $vare_tilbtil   = $row['vare_tilbtil'];
       $vare_besk   = $row['vare_besk'];


$_POST slut

        } // slut POST


Vis fejl

Viser fejl, når sådanne er registreret under validering.

    if (isset ($fejlbeskeder) && $fejlbeskeder != "")
       {
       $fejlbeskeder .= "varestam_update.php";
       echo "<fieldset class='red'>";
       echo "<legend>Fejltekster</legend>";
       echo $fejlbeskeder;
       echo "</fieldset>";
       }


Dataudtræk til drop-down menuer

SELECT af data til drop-down menu, når sådan skal anvendes i "form".


Dataudtræk til drop-down menu 1

   // DROP DOWN produktgruppe
   // Data til drop-down menu
   $sek_query = "SELECT * FROM prodgrupper ORDER BY prodgr_navn asc";
   $sek_result = mysqli_query($db_link, $sek_query) or die(mysqli_error($db_link));
   $sek_antal = mysqli_num_rows ($sek_result);

   // Data til tekst i "input"-taggen
   $sek2_query = "SELECT * FROM prodgrupper WHERE prodgr_id = $fk_prodgr_id";
   $sek2_result = mysqli_query($db_link, $sek2_query) or die(mysqli_error($db_link));
   $sek2_row = mysqli_fetch_assoc ($sek2_result);
   $SEK2_TXT = $sek2_row['prodgr_navn'];


Dataudtræk til drop-down menu 2

   // DROP DOWN produkter
   $sek_query_2 = "SELECT * FROM produkter ORDER BY prod_navn asc";
   $sek_result_2 = mysqli_query($db_link, $sek_query_2) or die(mysqli_error($db_link));
   $sek_antal_2 = mysqli_num_rows ($sek_result_2);

   // Data til tekst i "input"-taggen
   $sek2_query_2 = "SELECT * FROM produkter WHERE prod_id = $fk_prod_id";
   $sek2_result_2 = mysqli_query($db_link, $sek2_query_2) or die(mysqli_error($db_link));
   $sek2_row_2 = mysqli_fetch_assoc ($sek2_result_2);
   $SEK2_TXT_2 = $sek2_row_2['prod_navn'];
   ?>


Form start

Start-tag for "form"-en. Som hovedregel er det nok at indsætte parameteren "method='post' ".


Data til formens felterne hentes ved programstart fra "Hent fra database" og ved fejl fra "Indlæs fra form".

   <form method='post'>
   <table>


Drop-down menu 1

Kode til indsættelse og afvikling af drop-down menu i "form"-en.
Koden kan IKKE kopieres på tværs fra INSERT.

    <?php
    // Kategori
    //Input linie
    echo '<tr><td>Prod.gruppe</td><td>*</td><td>';
    echo '<select name="fk_prodgr_id">';
    echo '<option value=" '. $sek2_row['prodgr_id'] . ' " > '. $SEK2_TXT . ' </option> ' ;

    // drop-down menu
    while ($sek_row = mysqli_fetch_assoc ($sek_result))
    {
    echo '<option value=" '. $sek_row ['prodgr_id'] .' "> '. $sek_row['prodgr_navn'] .' </option>';
    }
    echo '</select></td></tr>';


Drop-down menu 2

Kode til indsættelse og afvikling af drop-down menu i "form"-en.
Koden kan IKKE kopieres på tværs fra INSERT.

    // Mærker
    //Input linie
    echo '<tr><td>Mærke</td><td>*</td><td>';
    echo '<select name="fk_prod_id">';
    echo '<option value=" '. $sek2_row_2['prod_id'] . ' " > '. $SEK2_TXT_2 . ' </option> ' ;

    // drop-down menu
    while ($sek_row_2 = mysqli_fetch_assoc ($sek_result_2))
    {
    echo '<option value=" '. $sek_row_2['prod_id'] .' "> '. $sek_row_2['prod_navn'] .' </option>';
    }
    echo '</select></td></tr>';
    ?>


Alm. input felter

Kode til de almindelige input-felter, der skal indgå i formen. (Her incl. en checkbox).
Koden kan kopieres på tværs fra INSERT.

    <tr><td>Varenavn</td><td>*</td><td><input type='text' name='vare_navn' value="<?php echo $vare_navn; ?>" /></td></tr>
    <tr><td>Pris</td><td>*</td><td><input type='numeric' name='vare_pris' value="<?php echo $vare_pris; ?>" /></td></tr>
    <tr><td>Tilbudspris</td><td></td><td><input type='numeric' name='vare_tilbpris' value="<?php echo $vare_tilbpris; ?>" /></td></tr>
    <?php
    if ($vare_tilbakt == 1)
    {
    ?>
    <tr><td>Tilbud aktivt</td><td></td><td><input type='checkbox' checked name='vare_tilbakt' value="<?php echo $vare_tilbakt; ?>" /></td></tr>
    <?php
    }
    else {
    ?>
    <tr><td>Tilbud aktivt</td><td></td><td><input type='checkbox' name='vare_tilbakt' value="<?php echo $vare_tilbakt; ?>" /></td></tr>
    <?php
    }
    ?>
    <tr><td>Tilbud fra dato</td><td></td><td><input type='date' name='vare_tilbfra' value="<?php echo $vare_tilbfra; ?>" /></td></tr>
    <tr><td>Tilbud til dato</td><td></td><td><input type='date' name='vare_tilbtil' value="<?php echo $vare_tilbtil; ?>" /></td></tr>


Texrarea med CKeditor

Kode til indsættelse og brug af CKEditor.
Koden kan kopieres på tværs fra INSERT.

    <tr><td>Beskrivelse</td><td>*</td><td><textarea name="vare_besk" id="cke" cols="30" rows="5"><?php echo $vare_besk ?></textarea></td></tr>
    <script type="text/javascript">
    CKEDITOR.replace('cke');
    </script>


Submit

Knap til at sende "form"-en til $_POST start. Det er at foretrække altid at bruge "name='submit' " fremfor situationstilpassede navne. Knappen kan placeres hvorsomhelst indenfor "form"-ens område, men det er sjældent at se andre placeringer end til sidst.
Koden kan (med ændring af "value") kopieres på tværs fra INSERT.

    <tr><td><input type='submit' name='submit' value='Ret varestamdata' /></td><td></td><td></td></tr>


Form slut

   </table>
   </form>


$_GET slut.

Afslutning af $_GET-funktionaliteten.

<?php
   }
   else    //$_GET
   {
    echo "<p>Der problemer med URL-parameter i adresselinien</p>";
   } // slut isset GET
?>




















x
x