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
Next revision Both sides next revision
dvprog15 [2019-04-15 09:23]
Daniel Viström
dvprog15 [2020-12-18 10:17]
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: 
 +<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.