#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 была отредактирована в коде (первоначально не включалась в приведенный выше код для экономии места, должен был включить его)