2016-08-01 19 views
-2

Ich habe diese einfache Programmierung Übung und ich versuche es in PHP zu tun: Bestimmen Sie, ob ein Schüler den Kurs bestehen oder nicht. Der Schüler wird den Kurs bestehen, wenn sein Durchschnitt von drei Noten größer oder gleich 15 ist. Zeigen Sie eine Nachricht, ob der Schüler besteht oder nicht, und bestätigen Sie die drei Noten, bevor Sie den Durchschnitt berechnen. Zeigen Sie eine Fehlermeldung an, wenn eine Note falsch ist.Wie kann ich Felder in PHP genau validieren?

Ich habe es sowohl in Pseudo-Code und pseint, so ist es einfach zu validieren, weil ich eine Do-While-Schleife verwenden und jedes Mal, wenn es mich fragt nach einer Nummer und ich mache es falsch, überprüft es die Noten:

Algorithm Exercise14 
Define grade1, grade2, grade3, prom as Real; 
Repeat 
    print "Type the first grade: "; 
    read grade1; 
    if (grade1<0 | grade1>20) 
     print "Error! Invalid grade, type a valid grade."; 
    endif 
Until (grade1>=0 & grade2<=20); 
Repeat 
    print "Type the second grade: "; 
    read grade2; 
    if (grade2<0 | grade2>20) 
     print "Error! Invalid grade, type a valid grade."; 
    endif 
Until (grade2>=0 & grade2<=20); 
Repeat 
    print "Type the third grade: "; 
    read grade3; 
    if (grade3<0 | grade3>20) 
     print "Error! Invalid grade, type a valid grade."; 
    endif 
Until (grade3>=0 & grade3<=20); 
prom = (grade1+grade2+grade3)/3; 
if (prom>=15) 
    print "The student passed the course!"; 
    print "The average is: " prom; 
else 
    print "The student did not pass the course."; 
    print "The average is: " prom; 
endif 
endAlgorithm 

Jetzt möchte ich das aber in PHP tun. Mein Problem ist, dass ich auf diese Weise nicht validieren kann, denn wenn ich es tue, braucht der Browser nur viel Zeit, um zu reagieren, und es tut nichts, also habe ich im Internet gesucht und ich brauche eine Funktion, um zu bestätigen, aber ich bin es nicht sicher. Ich lerne PHP, entschuldige mich, wenn das eine wiederholte Frage ist oder es zu leicht ist, aber ich möchte es wissen, weil ich lerne.

Die letzte Frage ist, wie kann ich diese Felder validieren, wenn ich es mit PHP und natürlich HTML5 mache?

PHP-Code:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Exercise 14</title> 
    <meta charset="utf-8"> 
</head> 
<body> 
    <h2>PHP Exercises</h2> 
    <h3>Exercise 14</h3> 
    <form action="#" method="post" id="constant" name="constant"> 
     <div> 
      <label for="text">Grade 1: </label> 
    <input type="text" name="grade1" placeholder="Type grade1"> 
     </div> 
     <div> 
      <label for="text">Grade 2: </label> 
     <input type="text" name="grade2" placeholder="Type grade 2"> 
     </div> 
     <div> 
      <label for="text">Grade 3: </label> 
     <input type="text" name="grade3" placeholder="Type grade 3"> 
     </div> 
     <div> 
     <input type="submit" name="button" id="sending" value="Send"> 
     </div> 
    </form> 
    <?php 
     if(isset($_POST['button'])){ 
      $grade1 = $_POST['grade1']; 
      $grade2 = $_POST['grade2']; 
      $grade3 = $_POST['grade3']; 

      while($grade1<0){ 
        echo "Error!"; 
      } 

      do{ 
       if ($grade2<0 | $grade2>20) { 
        echo "Error!"; 
       } 

      }while($grade2>=0 && $grade2<=20); 

      do{ 
       if ($grade3<0 | $grade3>20) { 
        echo "Error!"; 
       } 

      }while($grade3>=0 && $grade3<=20); 

      $prom = ($grade1+$grade2+$grade3/3); 

      if ($prom>=15) { 
       echo "The averages is: " . $prom; 
       echo "The student passed the course!"; 
      }else{ 
       echo "The averages is: " . $prom; 
       echo "The student did not pass the course."; 
      } 
     } 

    ?> 
</body> 
</html> 
+2

Ohne Code zu sehen, ist es unmöglich zu wissen, welches Problem Sie haben, aber wenn Sie zwischen den Zeilen lesen, klingt es so, als hätten Sie ein falsches Verständnis für die Programmierung eines Webclients. Weitere Informationen finden Sie unter [Was ist der Unterschied zwischen clientseitiger und serverseitiger Programmierung?] (Http://stackoverflow.com/q/13840429/476). – deceze

+0

Ich habe eine Online-Datei in Google Drive veröffentlicht, nicht wahr? Siehst du, kannst du? –

+0

Bereit, habe ich den Beitrag bearbeitet. Jetzt können Sie sehen, wovon ich rede. Kannst du mir sagen, wie ich diese Felder mit PHP validieren kann? Ich weiß, es ist sehr anders als pseint und #C oder C++. –

Antwort

0
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Exercise 14</title> 
    <meta charset="utf-8"> 
</head> 
<body> 
    <h2>PHP Exercises</h2> 
    <h3>Exercise 14</h3> 
    <form name="exer14" action="#" method="post" id="constant" name="constant"> 
     <div> 
      <label for="text">Grade 1: </label> 
      <input type="number" name="grade1" placeholder="Type grade 1" required> 
     </div> 
     <div> 
      <label for="text">Grade 2: </label> 
      <input type="number" name="grade2" placeholder="Type grade 2" required> 
     </div> 
     <div> 
      <label for="text">Grade 3: </label> 
      <input type="number" name="grade3" placeholder="Type grade 3" required> 
     </div> 
     <div> 
      <input type="submit" name="button" id="sending" value="Send"> 
     </div> 
    </form> 
    <?php 

    if(isset($_POST['button'])){ 
     $grade1 = $_POST['grade1']; 
     $grade2 = $_POST['grade2']; 
     $grade3 = $_POST['grade3']; 
     $count = 0; 
     $errors = array("Error1" => "Error! The grade $grade1 is invalid. Type a grade between 0 and 20.", 
         "Error2" => "Error! The grade $grade2 is invalid. Type a grade between 0 and 20.", 
         "Error3" => "Error! The grade $grade3 is invalid. Type a grade between 0 and 20."); 

     if (empty($_POST['grade1']) || empty($_POST['grade2']) || empty($_POST['grade3'])) { 
      echo "Complete all inputs."; 

     }elseif (is_numeric($grade1)==false || is_numeric($grade2)==false || is_numeric($grade3)==false) { 

      if (is_numeric($grade1)==false) { 
       echo "Error! Invalid grade: '$grade1' contains letters. Type a grade between 0 and 20." . "<br>";     
      } 
      if (is_numeric($grade2)==false) { 
       echo "Error! Invalid grade: '$grade2' contains letters. Type a grade between 0 and 20." . "<br>";     
      } 
      if (is_numeric($grade3)==false) { 
       echo "Error! Invalid grade: '$grade3' contains letters. Type a grade between 0 and 20." . "<br>";     
      } 

     }elseif ($grade1<0 || $grade1>20 || $grade2<0 || $grade2>20 || $grade3<0 || $grade3>20) { 

      if ($grade1<0 || $grade1>20){ 
       echo $errors["Error1"] . "<br>"; 
      } 
      if ($grade2<0 || $grade2>20){ 
       echo $errors["Error2"] . "<br>"; 
      } 
      if ($grade3<0 || $grade3>20){ 
       echo $errors["Error3"] . "<br>"; 
      } 
       //print_r($errors); 
     }elseif (($grade1>=0 || $grade1<=20) && ($grade2>=0 || $grade2<=20) && ($grade3>=0 || $grade3<=20)) { 

      $prom = ($grade1+$grade2+$grade3)/3; 

      if ($prom>=15) { 
       echo "The student average is " . $prom . "<br>"; 
       echo "The student passed the course!"; 
      }else{ 
       echo "The student average is " . $prom . "<br>"; 
       echo "The student failed the course."; 
      } 
     }else{ 
      echo "Enter the right grades."; 
     } 
    } 
    ?> 
</body> 

Ich habe die Übung auf diese Weise gelöst. Ich könnte diese Eingaben mit mehreren Fällen, Buchstaben und Nummernkreisen validieren. Diese Übung ist wirklich einfach, aber ich habe es in Pseint und C++ gemacht, also sind diese sehr verschieden von PHP. Ich verstehe jetzt, worum es beim Server-Client geht.

0

PHP kann über eine Eingabeaufforderung oder anderen sofort erfrischenden Eingang nicht interaktiv lesen. Das Modell des Schreibens von serverseitigem Code für Webclients ist immer, dass der Webclient (Browser, HTML) eine HTTP-Anfrage sendet, die Daten enthält, der Server wertet diese Daten aus und sendet dann eine Antwort. Die Daten werden nicht aktualisiert, bis eine weitere HTTP-Anforderung erfolgt. Daher macht es keinen Sinn, einen $_POST Wert zu durchlaufen, bis der richtige Wert erreicht ist. Der Wert ändert sich während einer Ausführung des Codes nicht. Ihre Logik muss sein:

  1. Bewerten Sie jeden Eingang einmal.
  2. Wenn eine Eingabe ungültig ist, lehnen Sie die gesamte Anfrage ab.
  3. Nur wenn alle Eingaben gültig sind, tun Sie, was Sie wollen.
  4. Geben Sie eine HTML-Antwort zurück, die angibt, was falsch oder was erfolgreich ist.

exempli gratia:

<?php 

    $errors = []; 

    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     if ($_POST['grade1'] < 0) { 
      $errors['grade1'] = 'Too low'; 
     } 

     ... 

     if (!$errors) { 
      // validation successful, do something 
     } 
    } 

?> 

<form method="post"> 
    <input name="grade1" value="<?= htmlspecialchars($_POST['grade1'] ?? null); ?>"> 
    <?php if (isset($errors['grade1'])) : ?> 
     <span class="error"><?= $errors['grade1']; ?></span> 
    <?php endif; ?> 
    ... 
</form> 
+0

Vielen Dank @deceze Ich werde es lösen und es hier, also könnte das gelöst werden! Ist es notwendig, diese Funktion htmlspecialchars zu verwenden? Muss ich in diesem Teil HTML mit PHP mischen, nur weil? Oder kann ich meine PHP-Dinge in einem anderen Teil als HTML machen? –