0

私はこのプロジェクトに取り組んでおり、ほぼ完成しています。これは、ユーザーが無効なデータを送信したかどうかを検証するフォームですが、何らかの理由でデータがテーブルに保存されないため、画面にポストされません。 1時間以上見てきたので、どこが間違っているのか誰かが見つけられるかどうか疑問に思っています. どうもありがとう。

以下は私のコードです:

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 (name@website.something 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>
4

1 に答える 1

0

問題は だと思います$_POST['id']。どこにも定義されていないため、次のコード ブロックが原因で挿入する機会がありません。

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

$_GET['id']代わりに使用してみてください:

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

于 2013-02-06T18:28:55.643 に答える