【问题标题】:MariaDB Table not updating from html formMariaDB 表未从 html 表单更新
【发布时间】:2021-07-22 17:31:25
【问题描述】:

我正在向我的索引页面添加一个 HTML 表单,它将用户输入添加到 MariaDB/MySQL 数据库表:mailList。 我正在使用 PHP 将数据写入表中,并使用 JQuery 来确保用户在提交后不会被重定向。

我的问题是数据库没有更新。 如果用户使用的是 Google Chrome/Safari - JQuery 会说它已成功提交,但数据库没有更新。

Firefox 给出正确的错误并指出存在问题。

我的 HTML 和 JQuery 运行良好,但我认为我的问题出在我的 PHP 代码中:

        <?php
    $servername = "servername";
    $username = "username";
    $password = "password";
    $database = "database";

    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $database);

    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    } 

    if(isset($_POST['submit'])){
        $name=$_POST['name'];
        $email=$_POST['email'];
        
        $query = "INSERT INTO mailList (name, email) VALUES ('$name', '$email')";
        
        if (!mysqli_query($conn,$query)) {
            die('An error occured. Your details were not added to out Mailing List.');
        }   
    }

    ?>

注意: 我的 $servername / $username / $password / $database 填充了正确的信息,我刚刚把这些信息拿出来发布在这里。

这也是我的表格

<form name="mailList" id="mailList" method="post" action="/php/mailList_add_record.php" novalidate>
      <div class="control-group form-group">
        <div class="controls">
          <label >Name:</label>
          <input 
                type="text" 
                class="form-control" 
                id="name" 
                required 
                data-validation-required-message="Please enter your name." 
                placeholder="Example: John Doe...">
                
          <p class="help-block"></p>
        </div>
      </div>
      <div class="control-group form-group">
        <div class="controls">
          <label >Email Address:</label>
          <input 
                type="email" 
                class="form-control" 
                id="email" 
                required 
                data-validation-required-message="Please enter your email address." 
                placeholder="Example: jane.doe@email.com">
                
        </div>
      </div>
      <div id="success"></div>
      <button type="submit" 
           class="btn btn-primary" 
           id="submit" 
           name="submit">
           Send Message</button>
    </form>

在我的 JQuery 中,我将每个步骤都写入控制台以确保它正常工作 - 确实如此。我有一个单独的 ser_con.php 文件来建立与我的数据库的连接,并在连接成功时回显 - 这是有的。

我是这方面的新手,所以请温柔一点。谁能发现我的错误?

我正在使用 PHP v7.3 / phpMyAdmin v4.9.1

【问题讨论】:

  • 你提到jQuery,表单是通过jQuery提交的吗?
  • 您的&lt;input&gt; 字段似乎缺少name 属性,这就是未设置$_POST['name']$_POST['email'] 的原因。试试How do I get PHP errors to display?How to get the error message in MySQLi?
  • @brombeer 谢谢你,我完全忘记了 name 属性。不幸的是,它确实奏效了。单击表单的按钮时,我正在触发 jQuery 的 AJAX 功能。即使完全删除了我的 jQuery 代码,仍然没有更新我的数据库
  • 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!
  • 那你需要根据brombeer提供的链接检查错误。

标签: php forms mysqli mariadb jquery-ajax


【解决方案1】:

因此,在看到@Dharman 关于 SQL 注入的评论后 - 我编辑了我的 php 代码以防止注入。在执行此操作时,我注意到 if(isset($_POST['submit'])) 没有必要并将其删除。这是正在运行的更新代码:

<?php
$servername = "servername";
$username = "username";
$password = "password";
$database = "database";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} 

    //Prepared statements
    $stmt = $conn->prepare("INSERT INTO coledon_1.mailList (name, email) VALUES (?, ?)");
    $stmt->bind_param("ss", $name, $email);

    $name=$_POST['name'];
    $email=$_POST['email'];
    $stmt->execute();

    $stmt->close();
    $conn->close();

确实引起我注意的是; Firefox 会抛出错误 - 但仍会更新数据库。即使在清除缓存之后。如果浏览器缓存了旧代码,错误仍然存​​在,但清除缓存后我没有收到任何错误。

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多