Boostrap Form с PHP, MySQL не отправляет данные в базу данных
Я пытался отлаживать это целую вечность и не понимаю, почему он не отправляет данные в мою базу данных. Также в качестве указания я использую Boostrap, и эта форма внутри модальной. Может кто-нибудь помочь мне, пожалуйста. Я включу мой HTML-фрагмент, а также PHP-код.
HTML-код
<form class="form-horizontal" role="form" action="register.php" method="POST">
<div class="input-group margin-bottom-sm"><span class="input-group-addon"><i class="glyphicon glyphicon-user" aria-hidden="true"></i></span> <input class="form-control" type="text" name="fname" id="FirstName" placeholder="First Name" required>
</div></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-user" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="lname" id="LastName" placeholder="Last Name" required>
</div></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-calendar" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="dob" id="dob" placeholder="Date of Birth" required>
</div><br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-book" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="school" id="SchoolName" placeholder="School" required>
</div></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-user" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="username" id="Username" placeholder="Username" required>
</div></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-lock" aria-hidden="true"></i></span>
<input class="form-control" type="password" name="pass" data-minlenght= "6" id="Pass" placeholder="Password" required>
</div><div class="help-block">Minimum of 6 characters</div></br></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-lock" aria-hidden="true"></i></span>
<input class="form-control" type="password" id="inputPasswordConfirm" data-match="#inputPassword"
data-match-error="Whoops, these don't match" placeholder="Confirm" required>
</div></br>
<div class="form-group">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary" id="register">Sing Up</button>
</div>
</form>
PHP
<?php
$conn=mysqli_connect("localhost","mydatabase","mypassword")
or die("Could not connect:".mysqli_error($conn));
mysqli_select_db($conn , 'mydatabase') or die ('Database will not open');
if(isset($_POST['register'])){
$fname = ($_POST['FirstName']);
$lname = ($_POST['LastName']);
$dob = ($_POST['dob']);
$school = ($_POST['SchoolName']);
$username = ($_POST['Username']);
$pass = ($_POST['Pass']);
$query = "INSERT INTO users (FirstName,LastName,dob,SchoolName,Username,Pass)VALUES('$FirstName','$LastName','$Username','$dob', '$SchoolName','$Pass',)";
$result = mysqli_query($conn,$query);
}
?>
4 ответа
Итак, давайте проясним это несколько...
Во-первых, ваш порядок запросов совершенно неверный (обратите внимание на: FirstName,LastName,dob
) это означает, что первые 3 значения должны быть $fname,$lname,$dob
но вместо этого вы добавили в $username
по какой-то причине..
ПРИМЕЧАНИЕ. Вы добавляете несуществующие переменные, такие как $FirstName
когда фактически назначенная переменная действительно: $fname
,
Ваш запрос (обратите внимание на последнюю переменную $Pass,
) потому что это последняя переменная запись, вы не добавляете запятую, посмотрите:
$query = "INSERT INTO users (FirstName,LastName,dob,SchoolName,Username,Pass)VALUES('$FirstName','$LastName','$Username','$dob', '$SchoolName','$Pass',)";
должно быть:
$query = "INSERT INTO users (`FirstName`,`LastName`,`dob`,`SchoolName`,`Username`,`Pass`)VALUES('$fname','$lname','$dob','$school','$username','$pass')";
Более того, вы можете связать параметры, чтобы предотвратить SQL-инъекцию, как показано ниже:
$query = "INSERT INTO users (`FirstName`,`LastName`,`dob`,`SchoolName`,`Username`,`Pass`)VALUES(?,?,?,?,?,?)";
$query->bind_param("ssssss", $fname, $lname, $dob, $school, $username, $pass);
Следующий..
Ты звонишь if(isset($_POST['register'])){
Все же ваш <button type="submit" class="btn btn-primary" id="register">Sing Up</button>
не имеет name="register">
Поэтому должно быть: <button type="submit" class="btn btn-primary" id="register" name="register">Sing Up</button>
Кроме того, вы никогда не должны сохранять пароль в виде простого текста в базе данных. Ты должен бежать password_hash($pass, PASSWORD_DEFAULT);
это зашифрует пароли, отправленные в базу данных. Перед этим я рекомендую вам ознакомиться с документацией.
Все ваши переменные $_POST не определены. Вы должны использовать атрибут name из вашей формы, чтобы назначать значения $_POST, а не ID
от входов
<form class="form-horizontal" role="form" action="register.php" method="POST">
<div class="input-group margin-bottom-sm"><span class="input-group-addon"><i class="glyphicon glyphicon-user" aria-hidden="true"></i></span> <input class="form-control" type="text" name="fname" id="FirstName" placeholder="First Name" required>
</div></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-user" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="lname" id="LastName" placeholder="Last Name" required>
</div></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-calendar" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="dob" id="dob" placeholder="Date of Birth" required>
</div><br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-book" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="school" id="SchoolName" placeholder="School" required>
</div></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-user" aria-hidden="true"></i></span>
<input class="form-control" type="text" name="username" id="Username" placeholder="Username" required>
</div></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-lock" aria-hidden="true"></i></span>
<input class="form-control" type="password" name="pass" data-minlenght= "6" id="Pass" placeholder="Password" required>
</div><div class="help-block">Minimum of 6 characters</div></br></br>
<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-lock" aria-hidden="true"></i></span>
<input class="form-control" type="password" id="inputPasswordConfirm" data-match="#inputPassword"
data-match-error="Whoops, these don't match" placeholder="Confirm" required>
</div></br>
<div class="form-group">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary" id="register" name="register">Sing Up</button>
</div>
</form>
Затем вы должны использовать подготовленные операторы для сохранения данных в вашей базе данных, даже если вы работаете на localhost, также не храните простой текстовый пароль в базе данных, так как никогда не храните пароли, просто сохраняйте хеш-значение пароля, используя password_hash()
а также password_verify()
if(isset($_POST['register'])){
//validate these
$fname = ($_POST['fname']);
$lname = ($_POST['lname']);
$dob = ($_POST['dob']);
$school = ($_POST['school']);
$username = ($_POST['username']);
$pass = ($_POST['pass']);
$hash = Password_hash($pass,PASSWORD_DEFAULT); //hash password
$query = $conn->prepare("INSERT INTO users (FirstName,LastName,dob,SchoolName,Username,Pass) VALUES(?,?,?,?,?,?)");
$query->bind_param("ssssss",$fname,$lname,$dob,$school,$username,$hash);
if($query->execute()){
echo "data inserted success";
}
}
?>
Примечание. Если мы хотим вставить какие-либо данные из внешних источников (например, пользовательский ввод), очень важно, чтобы данные были обработаны и проверены.
затем password_verify();
будет работать на вашей странице входа, что в основном он сравнивает пароль, введенный пользователем с хешем, хранящимся в базе данных.
больше о password_hash()
а также password_verify();
посмотрите в руководстве:
http://php.net/manual/en/function.password-hash.php
http://php.net/manual/en/function.password-verify.php
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php подготовленные заявления.
Кажется, ты не отправил $_POST['register']
на ваш register.php
, Итак if (isset($_POST['register']))
будет оценивать как ложное и абсолютно ничего не произойдет. То же самое касается других полей, у вас будут только значения в $_POST
если вы дадите свои поля ввода name
приписывать.
+ Изменить
<button type="submit" class="btn btn-primary" id="register">Sing Up</button>
к
<button type="submit" class="btn btn-primary" id="register" name="register">Sing Up</button>
Кроме того, со всеми другими переменными $_POST вам необходимо использовать name
поле, а не id
поле.
Ваш SQL-запрос также имеет запятую. Измените это на
$query = "INSERT INTO users (FirstName,LastName,dob,SchoolName,Username,Pass)VALUES('$FirstName','$LastName','$Username','$dob', '$SchoolName','$Pass')";