2013-02-06 57 views
0

我正在處理這個項目,它幾乎完成了,它是一種驗證用戶提交無效數據的表單,但由於某種原因,數據不會存儲在桌子,因此不會回到屏幕上,我只是想知道是否有人能夠發現我要去哪裏錯誤,因爲我已經看了一個多小時。非常感謝。表單驗證但不會將數據提交到數據庫表

下面是我的代碼:

的index.php

<!Doctype html public> 
<body> 
<table cellpadding="5"> 
<td> 
<h1> Games Club Website</h1> 
<form action="process.php" method = "post"> 

<tr> 
        <td class="label"> 
         <label for="firstName"> 
          First name 
         </label> 
        </td> 
        <td> 
         <input type="text" 
           name="firstName" 
           id="firstName" 
           value="<?php 
             if (isset($validator)) 
              echo $validator->getValue('firstName'); 
             ?>" 
         /> 
         <span class="error"> 
          <?php 
          if (isset($validator)) 
           echo $validator->getError('firstName'); 
          ?> 
         </span> 
        </td> 
       </tr> 






       <tr> 
        <td class="label"> 
         <label for="lastName"> 
          Surname 
         </label> 
        </td> 
        <td> 
         <input type="text" 
           name="lastName" 
           id="lastName" 
           value="<?php 
             if (isset($validator)) 
              echo $validator->getValue('lastName'); 
             ?>" 
         /> 
         <span class="error"> 
          <?php 
          if (isset($validator)) 
           echo $validator->getError('lastName'); 
          ?> 
         </span> 
        </td> 
       </tr> 







        <tr> 
        <td class="label"> 
         <label for="email"> 
          Email Address 
         </label> 
        </td> 
        <td> 
         <input type="text" 
           name="email" 
           id="email" 
           value="<?php 
             if (isset($validator)) 
              echo $validator->getValue('email'); 
             ?>" 
         /> 
         <span class="error"> 
          <?php 
          if (isset($validator)) 
           echo $validator->getError('email'); 
          ?> 
         </span> 
        </td> 
       </tr> 







        <tr> 
        <td class="label"> 
         <label for="age"> 
          Age 
         </label> 
        </td> 
        <td> 
         <input type="text" 
           name="age" 
           id="age" 
           value="<?php 
             if (isset($validator)) 
              echo $validator->getValue('age'); 
             ?>" 
         /> 
         <span class="error"> 
          <?php 
          if (isset($validator)) 
           echo $validator->getError('age'); 
          ?> 
         </span> 
        </td> 
       </tr> 



<tr> 
        <td class="label"> 
         <label> 
          Gender 
         </label> 
        </td> 
        <td> 
         <label for="genderMale">Male</label> 
         <input type="radio" 
           name="gender" 
           id="genderMale" 
           value="Male" 
           <?php 
           if (isset($validator)) 
            echo $validator->isChecked("gender", "Male"); 
           ?> 
         /> 

         <label for="genderFemale">Female?</label> 
         <input type="radio" 
           name="gender" 
           id="genderFemale" 
           value="Female" 
           <?php 
           if (isset($validator)) 
            echo $validator->isChecked("gender", "Female"); 
           ?> 
         /> 
         <span class="error"> 
          <?php 
          if (isset($validator)) 
           echo $validator->getError('gender'); 
          ?> 
         </span> 
        </td> 
       </tr> 







       <tr> 
        <td class="label"> 
         <label> 
          What is your preferred gaming platform? 
         </label> 
        </td> 
        <td> 
         <label for="consoleXbox">Xbox 360</label> 
         <input type="radio" 
           name="console" 
           id="consoleXbox" 
           value="Xbox 360" 
           <?php 
           if (isset($validator)) 
            echo $validator->isChecked("console", "Xbox 360"); 
           ?> 
         /> 

          <label for="consolePs3">Playstation 3</label> 
          <input type="radio" 
           name="console" 
           id="consolePs3" 
           value="PS3" 
           <?php 
           if (isset($validator)) 
            echo $validator->isChecked("console", "PS3"); 
           ?> 

         <label for="consoleWii">Nintendo Wii</label> 
         <input type="radio" 
           name="Console" 
           id="consoleWii" 
           value="Wii" 
           <?php 
           if (isset($validator)) 
            echo $validator->isChecked("console", "Wii"); 
           ?> 
         /> 
         <span class="error"> 
          <?php 
          if (isset($validator)) 
           echo $validator->getError('console'); 
          ?> 
         </span> 
        </td> 
       </tr> 



       <tr> 
        <td class="label"> 
         <label for="password1"> 
          Enter a password: 
         </label> 
        </td> 
        <td> 
         <input type="password" 
           name="p1" 
           id="p1" 
           value="<?php 
             if (isset($validator)) 
              echo $validator->getValue('p1'); 
             ?>" 
         /> 
         <span class="error"> 
          <?php 
          if (isset($validator)) 
           echo $validator->getError('p1'); 
          ?> 
         </span> 
        </td> 
       </tr> 




       <tr> 
        <td class="label"> 
         <label for="p2"> 
          Confirm password: 
         </label> 
        </td> 
        <td> 
         <input type="password" 
           name="p2" 
           id="p2" 
           value="<?php 
             if (isset($validator)) 
              echo $validator->getValue('p2'); 
             ?>" 
         /> 
         <span class="error"> 
          <?php 
          if (isset($validator)) 
           echo $validator->getError('p2'); 
          ?> 
         </span> 
        </td> 
       </tr> 

       <tr> 
        <td></td> 
        <td> 
         <input type="submit" 
           name="submitButton" 
           id="submitButton" 
           value="Confirm Registration" /> 

         <input type="reset" 
           name="resetButton" 
           id="resetButton" 
           value="Clear Data" 
           style="margin-right: 20px;" /> 
        </td> 
       </tr> 




</form> 


</td> 
</table> 

</body> 

</html> 

Process.php

<?php 

require_once "FormValidator.php"; 

$validator = new FormValidator(); 

if ($validator->validate($_POST)) { 
    require 'dao.php'; 
} 
else { 
    require 'index.php'; 
} 


?> 

FormValidator.php

<?php 
class FormValidator { 
    private $valid; 
    private $errors; 
    private $data; 

    public function __construct() { 
     $this->valid = TRUE; 
     $this->errors = array(); 
     $this->data = NULL; 
    } 

    public function validate($data) { 
     $this->data = $data; 

     if (empty($data['firstName'])) { 
      $this->valid = FALSE; 
      $this->errors['firstName'] = 'A <u>First Name</u> is required<br/>'; 
     } 
     if (empty($data['lastName'])) { 
      $this->valid = FALSE; 
      $this->errors['lastName'] = 'A <u>Surname</u> is required.<br/>'; 
     } 
     if (empty($data['p1'])) { 
      $this->valid = FALSE; 
      $this->errors['p1'] = 'A <u>Password</u> is required.<br/>'; 
     } 
     if (empty($data['console'])) { 
      $this->valid = FALSE; 
      $this->errors['console'] = 'Please choose a <u>Console</u>.<br/>'; 
      } 
     if (empty($data['p2'])) { 
      $this->valid = FALSE; 
      $this->errors['p2'] = 'Please <u>Confirm</u> password.<br/>'; 
     } 
     if (empty($data['age'])) { 
      $this->valid = FALSE; 
      $this->errors['age'] = 'Please enter your <u>Age</u>.<br/>'; 
     } 
     else if (!$this->isValidIntegerInRange($data['age'], 18, 100)) { 
      $this->valid = FALSE; 
      $this->errors['age'] = 'Invalid age. You also need to be at least 18 to sign up.<br/>';    
     } 
     if (empty($data['email'])) { 
      $this->valid = FALSE; 
      $this->errors['email'] = 'Please enter a valid <u>email address</u>.<br/>'; 
     } 
     else if (!$this->isValidEmail($data['email'])) { 
      $this->valid = FALSE; 
      $this->errors['email'] = 'Incorrect format ([email protected] is required)<br/>';    
     } 
     if (empty($data['p2'])) { 
      $this->valid = FALSE; 
      $this->errors['p2'] = 'Please <u>Confirm</u> password.<br/>'; 
     } 
     if (!empty($data['p1']) 
       && !empty($data['p2']) 
       && $data['p1'] !== $data['p2']) { 
      $this->valid = FALSE; 
      $this->errors['p2'] = 'Error, passwords <u>do not match</u> .<br/>'; 
     } 
     if (empty($data['gender'])) { 
      $this->valid = FALSE; 
      $this->errors['gender'] = '<u>Please select a Gender.<u>'; 
     } 

     return $this->valid; 
    } 

    public function getError($key) { 
     $error = ""; 
     if (isset($this->errors[$key])) { 
      $error = $this->errors[$key]; 
     } 
     return $error; 
    } 

    public function getValue($key) { 
     $value = ""; 
     if (isset($this->data[$key])) { 
      $value = $this->data[$key]; 
     } 
     return $value; 
    } 

    public function isChecked($key, $value) { 
     $checked = ""; 
     if (isset($this->data[$key]) && $this->data[$key] === $value) { 
      $checked = ' checked="checked"'; 
     } 
     return $checked; 
    } 

    public function isSelected($key, $value) { 
     $selected = ""; 
     if (isset($this->data[$key]) && $this->data[$key] === $value) { 
      $selected = ' selected="selected"'; 
     } 
     return $selected; 
    } 

    private function isValidEmail($email) { 
     return (filter_var($email, FILTER_VALIDATE_EMAIL) !== FALSE); 
    } 

    protected function isValidIntegerInRange($integer, $min, $max) { 
     $options = array(
      'options' => array(
       'min_range' => $min, 
       'max_range' => $max, 
      ) 
     ); 
     return (filter_var($integer, FILTER_VALIDATE_INT, $options) !== FALSE); 
    } 

} 
?> 

dao.php

<html> 
<body> 
<?php 

//Make connection to the database 
$host = "localhost"; 
$username = "root"; 
$password = ""; 
$database = "my_db"; 
$dsn = "mysql:host=$host;dbname=$database"; 


TRY { 
$conn = new PDO($dsn, $username, $password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


if (isset($_POST['submit'])) { 
    $firstName = $_POST['firstName']; 
    $lastName = $_POST['lastName']; 
    $email = $_POST['email']; 
    $age = $_POST['age']; 
    $gender = $_POST['gender']; 
    $console = $_POST['console']; 
    $p1 = $_POST['p1']; 
    $p2 = $_POST['p2']; 


    if (isset($_POST['id'])) { 
     //Updates the record 
     $id = $_POST['id']; 

     $sql = "UPDATE userprofile2 SET" 
      . "firstName=".$conn->quote($fname) 
      . "lastName=".$conn->quote($lastName) 
      . "email=".$conn->quote($email) 
      . "age=".$conn->quote($age) 
      . "gender=".$conn->quote($gender) 
      . "console=".$conn->quote($console) 
      . "p1=".$conn->quote($p1) 
      . "p2=".$conn->quote($p2) 
      . "WHERE id = ".$conn->quote($id); 
     $userprofile2 = $conn->query($sql); 
    } else { 

     // Inserts new values into table 
     $sql = "INSERT INTO userprofile2(firstName, lastName, email, age, gender, console, p1, p2" 
      . ") VALUES (" 
      . $conn->quote($firstName)."," 
      . $conn->quote($lastName)."," 
      . $conn->quote($email)."," 
      . $conn->quote($age)."," 
      . $conn->quote($gender)."," 
      . $conn->quote($console)."," 
      . $conn->quote($p1)."," 
      . $conn->quote($p2) . ")"; 
     $userprofile2 = $conn->query($sql); 
    } 
} elseif (isset($_GET['ID'])) { 

    // edit mode, allows user to change a selected parameter in the table (Not working) 
    $userEditDataRows = $conn->query('SELECT * FROM userprofile2 WHERE ID ='.$conn->quote($_GET['ID'])); 
    if (sizeof($userEditDataRows)>0) { 
     // $row = $userEditDataRows[0]; 
     $firstName = $row['firstName']; 
     $lastName = $row['lastName']; 
     $email = $row['email']; 
     $age = $row['age']; 
     $gender = $row['gender']; 
     $console = $row['console']; 
     $console = $row['p1']; 
     $console = $row['p2']; 
     $ID = $_GET['ID']; 
    } 

} else { 
    //Set the empty values for fields that haven't been filled in 
    $firstName = ''; 
    $lastName = ''; 
    $email = ''; 
    $age = ''; 
    $gender = ''; 
    $console = ''; 
    $p1 = ''; 
    $p2 = ''; 
    $ID = false; 
} 
    //construct the table 
    $sql = "SELECT * FROM userprofile2"; 
    $userprofile2 = $conn->query($sql); 
    $table = '<table>'; 
    $table .= '<tr>'; 
    $table .= '<th> ID </th> 
       <th> First Name </th> 
       <th> Last Name </th> 
       <th> Email Address </th> 
       <th> Age </th> 
       <th> Gender </th> 
       <th> Console </th> 
       <th> Password </th> 
       <th> Password (Confirmed) </th>'; 

    $table .= '</tr>'; 
    foreach ($userprofile2 as $userprofile2) { 

     $table .= ' <tr>'; 
     $table .= ' <td>' . $userprofile2['id'] ." ". '</td>'; 
     $table .= ' <td>' . $userprofile2['firstName'] . '</td>'; 
     $table .= ' <td>' . $userprofile2['lastName'] . '</td>'; 
     $table .= ' <td>' . $userprofile2['email'] . '</td>'; 
     $table .= ' <td>' . $userprofile2['age'] . '</td>'; 
     $table .= ' <td>' . $userprofile2['gender'] . '</td>'; 
     $table .= ' <td>' . $userprofile2['console'] . '</td>'; 
     $table .= ' <td>' . $userprofile2['p1'] . '</td>'; 
     $table .= ' <td>' . $userprofile2['p2'] . '</td>'; 
     $table .= ' </tr> '; 
    } 

    $table .= '</table>'; 

} catch (PDOException $e) { 
    exit("Connection failed: " . $e->getMessage()); 
    //catches errors and prints them to screen 
} 
?> 

<h2>Thank you <?php echo $_POST["firstName"]; // confirmation of a successful 
//entry ?>, your details have been stored!<br /></h2> 
<u><h1>Here are the contents of your database:</h1></u> 
<?php echo $table ?> 

</br> 

<a href="index.php">Click Here</a> to go back to the form. </br> 

<html> 
<body> 

回答

0

我覺得問題是$_POST['id']

if (isset($_POST['id'])) {

嘗試使用$_GET['id']代替:

if (isset($_GET['id'])) {

它,所以它沒有得到,因爲下面的代碼塊中插入的機會不會在任何位置定義