Веб-сайт, соединяющийся с базой данных при загрузке (должен при отправке)

#php #mysql

#php #mysql

Вопрос:

Я хочу, чтобы мой веб-сайт подключался к базе данных mysql после заполнения формы. Однако соединение установлено, и форма отправляется после загрузки страницы.

     if($_SERVER["REQUEST_METHOD"] == "POST") {
    if(empty($_POST["username"])){
        $usernameError = "Username is required";
        $foundErrors = true;
        }
           else{
                $username = clearUserInputs($_POST["username"]);
            }
        }    

function clearUserInputs($data){
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
if($foundErrors == false) {
        $servername = "localhost";
        $dbusername = "root";
        $dbpassword = "";
        $databasename = "cmetmarketplace"; 
    // PHP code to save form data to the MySQL database

try {
    $conn = new PDO("mysql:host=$servername;dbname=$databasename",
                      $dbusername, $dbpassword);

   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected succesfully <br>";

    $stmt = $conn->prepare("INSERT INTO users (username, PASSWORD, email, title, gender, dob) 
VALUES (:username, :PASSWORD, :email, :title, :gender, :dob)");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':PASSWORD', $password);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':title', $title);
$stmt->bindParam(':gender', $gender);
$stmt->bindParam(':dob', $dob);
$stmt->execute();

 echo "New account $username $password $email created successfully";
     }  
     catch(PDOException $e)
     {
         $errorkey = "Integrity constraint violation: 1062 Duplicate 
 entry";
        if(strpos($e->getMessage(), $errorkey) > 0) {
            $usernameError = "Username already exists";
        }
        else {
        echo "Connection failed: " . $e->getMessage();
        }
    }
$conn = null;
}   
?>

<table class="registration-table">
          <th>Signup Form</th>
        <form method="POST" onsubmit="validate(this)" action="<?php echo 
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
             <tr>
 <td>Username</td>
              <td><input type="text" maxlength="32" name="username" 
 value="<?php echo $username; ?>"></td>
                <td><span class="error"> <?php echo $usernameError; ?> 
 </span></td> 
            </tr>
 

Таким образом, он должен подключаться только после заполнения формы, но загружается при загрузке страницы.
Также прошу прощения за форматирование, впервые использую этот новый редактор

Комментарии:

1. ПРЕДУПРЕЖДЕНИЕ : написать свой собственный уровень контроля доступа непросто, и есть много возможностей сделать это неправильно. Пожалуйста, не пишите свою собственную систему аутентификации, когда любая современная платформа разработки , такая как Laravel , поставляется со встроенной надежной системой аутентификации . По крайней мере, следуйте рекомендуемым рекомендациям по безопасности и никогда не храните пароли в виде обычного текста или слабого хэша, такого как SHA1 или MD5 .

2. вы if($_SERVER["REQUEST_METHOD"] == "POST") { должны обернуть весь верхний блок php, вы скоро его закончите

3. if($foundErrors == false) { ничто никогда не устанавливает значение $foundErrors false , оно либо true, либо unset , множество переменных, используемых в этом коде, никогда не существует $username , $password .. должно быть $_POST['usernname']

4. Обратите внимание, что если бы вы потратили время на исправление форматирования, было бы гораздо более очевидно, где ваше управление потоком было неправильным.

5. @tim Я переместил } в конец PHP, и это, казалось, исправило это, но теперь, когда я пытаюсь ввести данные, я получаю «Ошибка: вызов неопределенной функции clearUserInputs() в C:wamp64wwwCMETMarketplaceregistration.php » Функция clearUserInputs была отредактирована в коде (первоначально не включалась в приведенный выше код для экономии места, должен был включить его)