PHP、MySQL 的 Bootstrap 表单不向数据库发送数据
Boostrap Form with PHP, MySQL not sending data to database
多年来我一直在尝试调试它,但不明白为什么它不向我的数据库发送数据。另外作为一个指示,我正在使用 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);
}
?>
您似乎没有将 $_POST['register']
发送到您的 register.php
,因此 if (isset($_POST['register']))
将评估为 false,绝对不会发生任何事情。
其他字段也是如此,如果你给你的输入字段一个 name
属性,你只会在 $_POST
中有值。
改变
<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')";
所以让我们稍微澄清一下..
首先,您的查询顺序完全不正确(请注意:FirstName,LastName,dob
),这意味着前 3 个值应该是 $fname,$lname,$dob
,但您为某些值添加了 $username
原因..
注意: 当实际分配的变量实际上是 $fname
.[=24= 时,您添加了不存在的变量,例如 $FirstName
]
您的查询(记下最后一个变量 $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 值,而不是 inputs
中的 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>
那么你应该使用准备好的语句将数据保存在你的数据库中,即使你在本地主机上工作,也不要在数据库中存储纯文本密码事实上永远不要存储密码,只存储密码的哈希值使用 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";
}
}
?>
Note: If we want to insert any data from external sources (like user input), it is very important that the data is sanitized and
validated.
然后 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 准备好的语句。
多年来我一直在尝试调试它,但不明白为什么它不向我的数据库发送数据。另外作为一个指示,我正在使用 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);
}
?>
您似乎没有将 $_POST['register']
发送到您的 register.php
,因此 if (isset($_POST['register']))
将评估为 false,绝对不会发生任何事情。
其他字段也是如此,如果你给你的输入字段一个 name
属性,你只会在 $_POST
中有值。
改变
<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')";
所以让我们稍微澄清一下..
首先,您的查询顺序完全不正确(请注意:FirstName,LastName,dob
),这意味着前 3 个值应该是 $fname,$lname,$dob
,但您为某些值添加了 $username
原因..
注意: 当实际分配的变量实际上是 $fname
.[=24= 时,您添加了不存在的变量,例如 $FirstName
]
您的查询(记下最后一个变量 $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 值,而不是 inputs
中的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>
那么你应该使用准备好的语句将数据保存在你的数据库中,即使你在本地主机上工作,也不要在数据库中存储纯文本密码事实上永远不要存储密码,只存储密码的哈希值使用 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";
}
}
?>
Note: If we want to insert any data from external sources (like user input), it is very important that the data is sanitized and validated.
然后 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 准备好的语句。