【发布时间】:2019-08-28 20:04:57
【问题描述】:
我正在制作一个相对简单的登录和注册表格来练习我的网络技能,但我在网站的 PHP/SQL 部分遇到问题我有一个非常简单的表格,其中包含电子邮件密码用户名和全名选项,但无论何时我填写表格并单击提交,查询将与发布的数据一起发送,但不会添加到数据库中。
例如,如果我有我的if(isset($POST["submitbutton"])),那有什么用
我在isset 前面放了一个!,数据将毫无错误地发送到数据库中,所以这让我相信我的 POST 或提交按钮有问题
P.S:我也尝试过使用print_r 和var_dump。如果我把var_dump放在if(isset)之前,两者都给了我这样的结果,array(4) { ["reg_username"]=> string(3) "www" ["reg_password"]=> string(3) "waw" ["reg_email"]=> string(16) "test@hotmail.com" ["reg_fullname"]=> string(3) "hhh" }
如果我把它放在 POST 之后,将不再显示任何内容
这是我的数据库连接文件
<?php
$host ="localhost";
$user = "root";
$password ="";
$dbname="registerlogin";
$conn = mysqli_connect($host,$user,$password,$dbname) or die ($conn -> error);
$sql = "SELECT * FROM `users`";
$sqlQuery = mysqli_query($conn,$sql);
$query = array();
while($row = mysqli_fetch_assoc($sqlQuery)){
$query = $row;
}
?>
这是注册PHP文件
<?php
include_once("db.php");
if(isset($_POST["registerbutton"])){
$username = mysqli_real_escape_string($conn,$_POST["reg_username"]);
$hasedpassword = password_hash($_POST["reg_password"],PASSWORD_BCRYPT);
$email = mysqli_real_escape_string($conn,$_POST["reg_email"]);
$fullname = mysqli_real_escape_string($conn,$_POST["reg_fullname"]);
$sqlInsert = "INSERT INTO `users` (`User-id`,`Username`,`Password`,`Email`,`Fullname`) VALUES (NULL,'$username','$hasedpassword','$email','$fullname')";
if(!$conn){
die("Error: ".mysql_error());
}
if (count($_POST) > 0){
mysqli_query($conn,$sqlInsert) or die($conn-> error);
$message = "Successfully registerd";
} else{
$message = "Something went wrong";
}
}
还有HTML文件
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" id="register-form" class="text-left">
<div class="login-form-main-message"></div>
<div class="main-login-form">
<div class="login-group">
<div class="form-group">
<label for="reg_username" class="sr-only">Email address</label>
<input type="text" class="form-control" id="reg_username" name="reg_username" placeholder="username">
</div>
<div class="form-group">
<label for="reg_password" class="sr-only">Password</label>
<input type="password" class="form-control" id="reg_password" name="reg_password" placeholder="password">
</div>
<div class="form-group">
<label for="reg_email" class="sr-only">Email</label>
<input type="text" class="form-control" id="reg_email" name="reg_email" placeholder="email">
</div>
<div class="form-group">
<label for="reg_fullname" class="sr-only">Full Name</label>
<input type="text" class="form-control" id="reg_fullname" name="reg_fullname" placeholder="full name">
</div>
</div>
<button type="submit" value="Submit form" name="registerbutton"><i class="fa fa-chevron-right"></i></button>
</div>
<div class="etc-login-form">
<p>already have an account? <a href="#">login here</a></p>
</div>
</form>
【问题讨论】:
-
isset($_POST["registerbutton"])似乎会失败,因为您没有具有该名称的输入/按钮。所以很有可能,您的插入根本没有运行。 -
“我的 sql 插入查询没有错误,但没有向数据库中插入任何内容” 我建议您阅读 Showing all errors and warnings,因为我在我假设的代码中没有看到这一点PHP 不会在您的服务器上显示它们..
-
就像@Jonnix 说的那样。您必须添加到您的
<button class="registerbutton">属性name="registerbutton"。还要从您的Insert中删除User-id。如果它具有自动增量并且您正在传递NULL,则不必要。 -
也开始学习使用 try-catch 块 - 实现起来非常简单,并且可以节省捕获错误的时间
-
您应该使用准备好的语句,并删除那些转义。