2016-04-25 6 views
0

Ich bin immer noch grün mit PHP und lerne immer noch die Syntax. Ist es eine schlechte Idee, die Validierung zu konsolidieren? Momentan überprüfe ich jedes einzelne Feld, während es abgerufen wird. Wie so;PHP Konsolidierung Validierung

Grundsätzlich lohnt es sich, diese drei Argumente in einem zu konsolidieren? Wenn ja, wie würde ich darüber gehen?

Bearbeiten: Aktualisierte Frage, um vollständigen Code und seine Variablen zu geben.

Wäre so etwas plausibel? Ich kenne das Grundkonzept, nach dem ich bin, aber ich bin mir nicht sicher, welcher Weg dorthin am besten ist.

PHP - Mit Änderungen wie von @nerdlyist vorgeschlagen.

<?php 

// session start. 
    session_start(); 

// set post data as array. 
    $_SESSION['post-data'] = $_POST; 

// post data array. (for note purposes to give an idea of what is in the array.) 
// $_SESSION['post-data']['fname']; 
// $_SESSION['post-data']['lname']; 
// $_SESSION['post-data']['com']; 
// $_SESSION['post-data']['ttl']; 
// $_SESSION['post-data']['ema']; 
// $_SESSION['post-data']['add1']; 
// $_SESSION['post-data']['add2']; 
// $_SESSION['post-data']['cou']; 
// $_SESSION['post-data']['tel']; 
// $_SESSION['post-data']['day']; 
// $_SESSION['post-data']['act']; 
// $_SESSION['post-data']['chk']; // << these are checkboxes. 
// $_SESSION['post-data']['rdo']; // << these are radios. 

// subject & account. 
    $emailSub = 'Drupa 2016 - Booking Form Actioned'; 
    $emailAcc = '[email protected]'; 

// data validation. 
    if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    $names = array(
    "fname" => $_POST['fname'], // first name field. 
    "lname" => $_POST['lname'], // last name field. 
    "com" => $_POST['com'], // company name field. 
    "ttl" => $_POST['ttl'], // title field. 
    "ema" => $_POST['ema'], // email field. 
    "add1" => $_POST['add1'], // address line 1 field. 
    "add2" => $_POST['add2'], // address line 2 field. 
    "cou" => $_POST['cou'], // country field. 
    "tel" => $_POST['tel'] // tel field. 
); 

    $errors = array(); 

    foreach($names as $name => $value){ 
     if (empty($value)) { 
     $errors[] = $name."_blank"; 
     } else { 
      // fetch data from cleaner. 
      $fnameField = test_input($_POST["fname"]); 
      $lnameField = test_input($_POST["lname"]); 
      $comField = test_input($_POST["com"]); 
      $ttlField = test_input($_POST["ttl"]); 
      $couField = test_input($_POST["cou"]); 
      // check if name only contains letters and whitespace 
      if (!preg_match("/^[a-zA-Z ]*$/",$value)) { 
       //you can only have one or the other. 
       $errors[] = $name."_clean"; 
      } 
     } 
    } 

    // determining what submit or re-display. 
    if(empty($errors)){ 
     echo "Clean form to submit"; 
    } else { 
     echo "Rebuild the form and parse errors: "; 
     print_r($errors); 
    } 
} 

// for cleaning the data. 
    function test_input($data) { 

    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 

    return $data; 
    } 

    // checkbox array. 
    $selectedProjects = 'None'; 
    if(isset($_POST['chk']) && is_array($_POST['chk']) && count($_POST['chk']) > 0){ 
     $selectedProjects = implode(', ', $_POST['chk']); 
    } 

    // radio array. 
    $selectedTime = 'Afternoon'; 
    if(isset($_POST['rdo']) && is_array($_POST['rdo']) && count($_POST['rdo']) > 0){ 
     $selectedTime = implode(', ', $_POST['rdo']); 
    } 

    // mail body. 
    $body = <<<EOD 
<h3>Booking Request/$date</h3> 
<hr><br> 
Last Name: $lnameField <br> 
First Name: $fnameField <br> 
Company: $companyField <br> 
Title: $titleField <br> 
Email: $emailField <br> 
Acitivity: $actField <br> 
<br> 
<h3>Contact Info</h3> 
<hr><br> 
Add Line 1: $add1Field <br> 
Add Line 2: $add2Field <br> 
Country: $countryField <br> 
Telephone: $telField <br> 
<br> 
Requested Booking day: $daySelect <br> 
Requested Booking Time: $selectedTime <br> 
<br> 
Interested in: $selectedProjects <br> 
submitted: <b>$date</b> at <b>$time</b>. 
EOD; 

// form submission check. 
    if isset($_POST['btn-sub'])) { 

    // code executed on submit 
     $headers = "MIME-Version: 1.0\n" ; 
     $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n"; 
     $headers .= "X-Priority: 1 (Highest)\n"; 
     $headers .= "X-MSMail-Priority: High\n"; 
     $headers .= "Importance: High\n"; 
     $headers = "From: $emailField\r\n"; 

     $success = mail($emailAcc, $emailSub, $body, $headers); 

    } else { 
    // code executed on first request 

    // set date & time. 
     $date = date ("l, F jS, Y"); 
     $time = date ("h:i A"); 

    // define variables and set to empty values. 
     $err = ""; 
     $fnameField = $lnameField = $companyField = $titleField = $emailField = $add1Field = $add2Field = $countryField = $telField = $daySelect = $actSelect = $chk = $rdo= ""; 
    } 

    // redirect & exit. 
    header('Location: prox.php'); 
    exit(); 

?> 
+1

Es würde mit dem DRY-Prinzip bleiben, um dies zu einer Funktion zu machen und dann geben Sie nur den Namen, den Sie validieren. Sie müssten zwar die Fehlermeldung herausfinden, aber das sollte trivial sein. – nerdlyist

+0

Meinst du wie Daten in ein Array übergeben und das Argument das Array anstelle eines einzelnen Ziels übergeben? – Beaniie

+0

Es wird dringend empfohlen, POO zu verwenden, um den Code nicht wie in diesem Fall zu wiederholen. –

Antwort

1

Hier ist etwas, um loszulegen. Es wird einen Fehler zu Fehlern hinzufügen. Nicht sicher, wie Sie das Formular erstellen, aber die Fehler Schleife und wenn der Fehler ist _blank das Feld erforderlich ist, wenn es _clean ist, gibt es Zeichen, die Sie nicht mögen.

$names = array(
    "fname" => $_POST['fname'], 
    "lname" => $_POST['lname'], 
    "company" => $_POST['company'] 
); 

$errors = array(); 
$inc = 0; //Not sure what this was for. 
foreach($names as $name => $value){ 
    if (empty($value)) { 
    $errors[] = $name."_blank"; 
    ++$inc; 
    } else { 
     //Not sure what this does 
     //$fnameField = test_input($_POST["fname"]); 
     // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$value)) { 
      //you can only have one or the other. 
      $errors[] = $name."_clean"; 
      ++$inc; 
     } 
    } 
} 

//This is where you can determine to submit or re-display. 
if(empty($errors)){ 
    echo "Clean form to submit"; 
} else { 
    echo "Rebuild the form and parse errors: "; 
    print_r($errors); 
} 
+0

Ich habe Ihre Frage aktualisiert, damit Sie verstehen, was '++ $ inc' und' test_input() 'waren. Außerdem finden Sie in der aktualisierten Frage die vollständige Codeübersicht und einen Versuch, Ihre Antwort zu implementieren. – Beaniie