【问题标题】:My sql insert query works with no errors but does not insert anything into database我的 sql 插入查询没有错误,但没有向数据库中插入任何内容
【发布时间】:2019-08-28 20:04:57
【问题描述】:

我正在制作一个相对简单的登录和注册表格来练习我的网络技能,但我在网站的 PHP/SQL 部分遇到问题我有一个非常简单的表格,其中包含电子邮件密码用户名和全名选项,但无论何时我填写表格并单击提交,查询将与发布的数据一起发送,但不会添加到数据库中。

例如,如果我有我的if(isset($POST["submitbutton"])),那有什么用

我在isset 前面放了一个!,数据将毫无错误地发送到数据库中,所以这让我相信我的 POST 或提交按钮有问题

P.S:我也尝试过使用print_rvar_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 说的那样。您必须添加到您的&lt;button class="registerbutton"&gt; 属性name="registerbutton"。还要从您的Insert 中删除User-id。如果它具有自动增量并且您正在传递NULL,则不必要。
  • 也开始学习使用 try-catch 块 - 实现起来非常简单,并且可以节省捕获错误的时间
  • 您应该使用准备好的语句,并删除那些转义。

标签: php html mysql


【解决方案1】:

在以下 Html 代码中将类更改为名称:

<button type="submit" value="Submit form" class="registerbutton">

应该是

<button type="submit" value="Submit form" name="registerbutton">

【讨论】:

    【解决方案2】:

    您的代码中有一个小错误。 你期待isset($_POST["registerbutton"],那应该是按钮的name。 不过,在您的代码中,我读到:

    <button type="submit" value="Submit form" class="registerbutton">
    

    所以只要改变:

    class="registerbutton"
    

    name="registerbutton"
    

    应该这样做。

    【讨论】:

    • 此外,请注意class 主要用于样式元素,而不是用于逻辑。
    • @Quasister 您如何在评论中突出显示文本类?
    • 将其更改为 registerbutton 但数据仍未发布,请参阅上面的评论以获得进一步说明。
    • 可能有一些 JavaScript 或 CSS 使用类 registerbutton。最好只添加name 属性,然后离开课程。
    • @Quasistar 您也可以将该类用于逻辑。您可以在 JavaScript/jQuery 中使用类选择器来获取多个元素。
    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多