|
<script type="text/javascript" src="ckeditor/ckeditor.js"></script> |
<?php |
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 = ""; |
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']; |
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æ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"); |
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 />"; } |
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.
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 |
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 |
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 |
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']; |
} // slut POST |
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>"; } |
SELECT af data til drop-down menu, når sådan skal anvendes i "form".
// 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']; |
// 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']; ?> |
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> |
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>'; |
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>'; ?> |
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> |
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> |
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> |
</table> </form> |
Afslutning af $_GET-funktionaliteten.
<?php } else //$_GET { echo "<p>Der problemer med URL-parameter i adresselinien</p>"; } // slut isset GET ?> |