Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 6th, 2012  |  syntax: PHP  |  size: 3.89 KB  |  hits: 19  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2.  
  3. // Připojení k databázi a definice vlastních funkcí.
  4. require('common.php');
  5.  
  6. // Tisk HTML hlavičky.
  7. hlavicka('Vložení osoby');
  8.  
  9. // try-catch blok pro zachycení chyb v SQL dotazech
  10. try {
  11.  
  12. /* Jestli byl odeslaný formulář zjistíme podle toho, jestli je v POST datech prvek tlačítka */
  13. if (isset($_POST['insert'])) {
  14.         // Byl odeslaný formulář, zkontrolujeme zadání
  15.         if (empty($_POST['jmeno']) ||
  16.                 empty($_POST['prijmeni']) ||
  17.                 empty($_POST['prezdivka'])) {
  18.                 /* Není zadáno jmeno, prijmeni nebo prezdivka, což jsou povinná pole (to je dané v databázi)
  19.                         kdybychom chtěli větší uživatelskou přívětivost, bylo byt nutné testovat každou proměnou
  20.                         ve vlastní podmínce a zobrazit přesné chybové hlášení (co konkrétně bylo špatně vyplněno)
  21.                 */
  22.                 echo "Špatně vyplněno";
  23.         } else {
  24.                 /* Formulář je přibližně správně vyplněn (ještě bychom měli zkontrolovat jestli je výška a
  25.                         datum ve správném formátu). Výšku převedeme pomocí funkce intval() při vkládání (což
  26.                         není příliš správné, ale je to účinné. Datum je složitější a bude ošetřeno v nějaké
  27.                         další verzi - chyba zadání se projeví prostě tím, že se osobu nepodaří vložit. */
  28.  
  29.                 /* Sestavíme SQL dotaz s parametry.
  30.                 */
  31.                 $stmt = $db->prepare("INSERT INTO osoby
  32.                                 (prezdivka,jmeno, prijmeni,vyska,datum_narozeni,id_adresy) VALUES
  33.                                 (:prezdivka, :jmeno, :prijmeni, :vyska, :datum_narozeni, :id_adresy)");
  34.  
  35.                 $stmt->bindValue(':datum_narozeni', $_POST['datum_narozeni'], PDO::PARAM_STR);
  36.                 $stmt->bindValue(':prezdivka', $_POST['prezdivka'], PDO::PARAM_STR);
  37.                 $stmt->bindValue(':jmeno', $_POST['jmeno'], PDO::PARAM_STR);
  38.                 $stmt->bindValue(':prijmeni', $_POST['prijmeni'], PDO::PARAM_STR);
  39.  
  40.                 // Výška nemusí být zadaná
  41.                 if (empty($_POST['vyska'])) {
  42.                         /* Nastavíme hodnotu na null - tak zajistíme, že i v SQL dotazu bude vložena
  43.                                 hodnota NULL (bez hodnoty), pokud bychom to neudělali, tak by se do dotazu
  44.                                 vložil prázdný řetězec, který nelze v databázi uložit do sloupce typu integer
  45.                         */
  46.                         $_POST['vyska'] = null;
  47.                 } else {
  48.                         /* Převedeme výšku na celé číslo (tento převod je velmi agresivní, takže například
  49.                                 z '42 banánů' udělá hodnotu 42) */
  50.                         $_POST['vyska'] = intval($_POST['vyska']);
  51.                 }
  52.                 // výška a id adresy jsou v DB uložené jako číslo, proto vynutíme datový typ INT
  53.                 $stmt->bindValue(':vyska', $_POST['vyska'], PDO::PARAM_INT);
  54.                 $stmt->bindValue(':id_adresy', null, PDO::PARAM_INT);
  55.  
  56.                 // Pro kontrolu vypíšeme dotaz na obrazovku
  57.                 $stmt->debugDumpParams();
  58.  
  59.                 // Spustíme SQL dotaz
  60.                 $stmt->execute();
  61.  
  62.                 /* Pokud adresa není úspěšně vložena, bude vytvořena výjimka a následující řádek
  63.                         se neprovede.
  64.                 */
  65.                 echo "<p>Osoba byla vložena.</p>";
  66.         }
  67. }
  68.  
  69. } catch (PDOException $e) { // došlo k chybě při zpracovávání SQL dotazů
  70.         /* Tato situace může nastat pokud se pokusíme vložit již existující záznam, nebo pokud
  71.                 nejsou vstupní parametry dobře ošetřeny. */
  72.         echo "<p>Došlo k chybě: ".$e->getMessage()."</p>\n";
  73. }
  74.  
  75. /* Výpis formuláře - vzhledem k tomu, že budeme formulář později upravovat, tak je výhodné
  76.         rovnou ho generovat dynamicky jako text vypsaný pomocí příkazu echo
  77. */
  78. echo "
  79. <form method='post'>
  80.         <table>
  81.                 <tr>
  82.                         <td>Jméno:</td>
  83.                         <td><input type='text' name='jmeno' /></td>
  84.                 </tr><tr>
  85.                         <td>Příjmení:</td>
  86.                         <td><input type='text' name='prijmeni' /></td>
  87.                 </tr><tr>
  88.                         <td>Přezdívka:</td>
  89.                         <td><input type='text' name='prezdivka' /></td>
  90.                 </tr><tr>
  91.                         <td>Datum narození:</td>
  92.                         <td><input type='text' name='datum_narozeni' /></td>
  93.                 </tr><tr>
  94.                         <td>Výška:</td>
  95.                         <td><input type='text' name='vyska' /></td>
  96.                 </tr><tr>
  97.                         <td colspan='2'><input type='submit'
  98.                          name='insert' value='Vložit osobu' /></td>
  99.                 </tr>
  100.         </table>
  101. </form>
  102. </body>
  103. </html>";