Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dvprog15 [2019-04-15 09:23]
Daniel Viström
dvprog15 [2020-12-18 10:27]
Daniel Viström
Line 1: Line 1:
 ====== Tips till gästboken: Undvika notice, hantera felmeddelanden, lägga in värden i formulär och lite annat ====== ====== Tips till gästboken: Undvika notice, hantera felmeddelanden, lägga in värden i formulär och lite annat ======
- 
-Om du vill ha en större utmaning och få en bättre kod så försök att klara dig utan att använda \\ error_reporting(E_ALL ^E_NOTICE);   
  
 Här är ett exempel med några tips: Här är ett exempel med några tips:
Line 9: Line 7:
    
 // Ha gärna logiken längst upp och utskrifterna längst ner. // Ha gärna logiken längst upp och utskrifterna längst ner.
 + 
 +// Skapar en tom array för felmeddelanden.
 +$errors = []; 
    
 // Skapar en tom sträng för meddelanden för att inte riskera att få  // Skapar en tom sträng för meddelanden för att inte riskera att få 
Line 16: Line 17:
 // isset() kollar om $_POST['namn'] finns för att inte få // isset() kollar om $_POST['namn'] finns för att inte få
 // felmeddelande och utskrift när sidan laddas första gången. // felmeddelande och utskrift när sidan laddas första gången.
-if (isset($_POST['namn'])) { +if (isset($_POST['namn'], $_POST['alder'])) {
    
-    $ok = true;  // Variabeln håller reda på om något är fel.+  $ok = true;  // Variabeln håller reda på om något är fel.
    
-    if(empty($_POST['namn'])){ // empty() kollar om inget är inmatat. +  if(empty($_POST['namn'])){ // empty() kollar om inget är inmatat. 
- $message = 'Du har inte angett namn.<br>'; +    $errors[] = 'Du har inte angett namn.';  // Lägger till ett felmeddelande. 
- $ok = false;  // Nu har ett fel hittats. +    $ok = false;  // Nu har ett fel hittats. 
-    +  
-    if($_POST['namn'] == 'Daniel'){ +   
- $message = 'Du får inte ange detta namn.<br>'; +  if($_POST['namn'] == 'Daniel'){ 
- $ok = false;  // Nu har ett fel hittats.+    $errors[] = 'Du får inte ange detta namn.'; // Lägger till ett felmeddelande. 
 +    $ok = false;  // Nu har ett fel hittats. 
 +  } 
 +  
 +  if(empty($_POST['alder'])){ // empty() kollar om inget är inmatat. 
 +    $errors[] = 'Du har inte angett ålder.'; // Lägger till ett felmeddelande. 
 +    $ok = false;  // Nu har ett fel hittats. 
 +  } else { 
 +    if(!is_numeric($_POST['alder'])){ // Kollar om inmatningen INTE består av siffror. 
 +      $errors[] = 'Angiven ålder måste bestå av siffror.'; // Lägger till ett felmeddelande. 
 +      $ok = false;  // Nu har ett fel hittats.
     }     }
 +  }
    
-    if ($ok == true){  // Utförs om inga fel hittats. +  if ($ok){  // Utförs om inga fel hittats. Samma som att skriva $ok == true 
-       $message = 'Namnet är ' . $_POST['namn'] . '<br>'; +    $message = 'Namnet är ' . $_POST['namn'] . '<br>'; 
-       if($_POST['namn'] == $_POST['namn2']){ +    if($_POST['namn'] == $_POST['namn2']){ 
-         $message = $message.'SAMMA IGEN <br>'; +      $message = $message.'SAMMA IGEN <br>';
-       }+
     }     }
 +  }
    
 } else { } else {
Line 40: Line 52:
   // $_POST['namn'] skapas om det inte finns för att undvika    // $_POST['namn'] skapas om det inte finns för att undvika 
   // fel i formuläret där det används.   // fel i formuläret där det används.
-  $_POST['namn']='';  +  $_POST['namn'] = ''; 
 } }
    
-include('head.php');+include 'head.php';
 echo $message . '<br>'; // Skriver ut eventuellt meddelande eller tom sträng. echo $message . '<br>'; // Skriver ut eventuellt meddelande eller tom sträng.
 +
 +// Skriver ut felmeddelanden. 
 +$i = 0;
 +while ($i < count($errors)){
 +  echo '<div class="error">' . $errors[$i] . '</div>';
 +  $i++;
 +}
 +/*
 +.error {
 +  border: black 1px solid;
 +  color: red;
 +  padding: 10px;
 +  margin: 10px 0px;
 +}
 +*/
    
 // Skickar med ett "gömt" värde i formuläret för att kunna jämföra // Skickar med ett "gömt" värde i formuläret för att kunna jämföra
Line 51: Line 78:
 <form method="post"> <form method="post">
     <input type="text" placeholder="Namn" name="namn"><br>     <input type="text" placeholder="Namn" name="namn"><br>
 +    <input type="text" placeholder="Ålder" name="alder"><br>
     <input type="hidden" name="namn2" value="' . $_POST['namn'] . '">     <input type="hidden" name="namn2" value="' . $_POST['namn'] . '">
     <input type="submit" name="submit" value="Skicka">     <input type="submit" name="submit" value="Skicka">
Line 56: Line 84:
 ';  // Hela formuläret ligger i en "php-rad". ';  // Hela formuläret ligger i en "php-rad".
    
-include('foot.php');+include 'foot.php'; 
 +</code> 
 + 
 +Alternativt kan man hantera formuläret så här där php startas och stängs mitt i HTML-koden: 
 +<code php> 
 +<?php 
 + 
 +// Alla kontroller här som ovan. 
 + 
 +include('head.php'); 
 + 
 +// Alla utskrifter här som ovan. 
 ?> ?>
 +
 +<form method="post">
 +   <input type="text" placeholder="Namn" name="namn"><br>
 +   <input type="text" placeholder="Ålder" name="alder"><br>
 +   <input type="hidden" name="namn2" value="<?php echo $_POST['namn'] ?>">
 +   <input type="submit" name="submit" value="Skicka">
 +</form>
 +
 +<?php
 +include('foot.php');
 </code> </code>
  
 Kolla upp [[http://www.php.net/manual/en/ref.strings.php|strängfunktionerna]] för att hantera html-taggar i saker som matas in i formulär. Kolla upp [[http://www.php.net/manual/en/ref.strings.php|strängfunktionerna]] för att hantera html-taggar i saker som matas in i formulär.