php - 使用 AJAX 和 PHP 更新表单字段

标签 php jquery mysql ajax forms

问题:在触发 select input 的 onchange 事件后,如何根据 MySQL 查询更新表单的 select input 值和文本输入字段?

我尝试过的: 我尝试将 AJAX 与 post 和 get 数据类型结合使用,调用运行查询并回显结果的 php 文件。什么也没有显示。我在此过程中遇到的任何错误通常都是小问题,会导致服务器 500 错误。我已将 console.log 语句放置在运行 JQuery AJAX 请求的函数中。检测到更改事件,调用 ajax 成功。我还尝试使用 .load()、GET 和 POST,但也没有成功。我还有其他实现 AJAX 的功能,我尝试修改它们以适应这种情况,但没有成功。

我还尝试仅使用选择输入,更改后将使用 AJAX 请求和 .load 函数来显示其他输入,这些输入将在 php 端格式化并回显到包含所选内容和反射(reflect)数据库结果的值的页面。

我想要什么: 我想要一个简单的表单示例,其中包含三个选项的选择输入、文本类型输入和提交按钮。该表单是一个客户端后端表单,用于将更新发送到 MySQL 数据库。每个输入代表数据库中的一个字段。这个想法是,当用户更改选择输入所选值时,将完成一个查询,该查询使用所选值仅返回一个结果。数据库中该记录值的每个字段现在都应该反射(reflect)在表单中。首先,告诉我这是否是解决此问题的正确方法,如果不是,请告诉我您会如何做。

示例index.php:

    <form action="editForm.php" method="POST" enctype="multipart/form-data">
        <select id="contact_name" name="contact_name" placeholder="Select Contact" required>
            <option value="John Smith">John Smith</option>
            <option value="Jane Doe">Jane Doe</option>
            <option value="George Washington"></option>
        </select>    
        <input type="text" name="age" placeholder="Age" required>
        <input type="text" name="race" placeholder="Select Race" required>
        <select id="veteran_status" name="veteran_status" placeholder="Select Veteran Status" required>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </select>
    </form>

当 #contact_name 的更改事件被触发时,我需要使用数据库具有的值更新字段。

您将如何实现这一点?提前致谢。

更新:这里要求的是我的 JQuery 代码,但我知道我的示例不使用相同的名称。

    <script type="text/javascript">
  $(document).ready(function(){
    $('#currency_select').on('change', function (e) {
      $.ajax({
        type: 'post',
        url: 'getCurrentValues.php',
        data: {currency: 'EUR'},
        success: function () {
          console.log('ajax was submitted');
        }
      });
    });
  });
</script>

这是我对如何执行此操作的理解:

首先,检测事件并通过ajax传递数据以供查询检索记录。这是在文档就绪函数中,以确保 DOM 已就绪。

     $("#contact_name).on("change", function(e){
       $.ajax({
        type: 'post',
        url: 'editForm.php',
        data: {name: this.value},
        success: function () {
          console.log('ajax was submitted');
        }
      });
    };

editForm.php:

    include 'includes/db.php';
    $name = $_POST['contact_name'];
    $sql = "SELECT * FROM contacts;";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        $lastValues = array();
        while($row = mysqli_fetch_assoc($result)) {
          $age = $row['age'];
        }

        <input type="text" name="age" value="<?php echo $age; ?>">


        <?php
        }
        ?>

最佳答案

您的索引:

<select id="contact_name" placeholder="Select Contact" required>
            <option value="John Smith">John Smith</option>
            <option value="Jane Doe">Jane Doe</option>
            <option value="George Washington"></option>
</select>  

<form action="editForm.php" id="form" method="POST" enctype="multipart/form-data">  
<select name="contact_name" id="contact_form" placeholder="Select Contact" required>
            <option value="John Smith">John Smith</option>
            <option value="Jane Doe">Jane Doe</option>
            <option value="George Washington"></option>
</select> 
        <input type="text" id="age" name="age" placeholder="Age" required>
        <input type="text" id="race" name="race" placeholder="Select Race" required>
        <select id="veteran_status" name="veteran_status" placeholder="Select Veteran Status" required>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </select>
    </form>

    $("#contact_name").on("change", function() {
        var selected = $(this).val();
        $("#form").load("formdata.php?contact="+selected); //normaly you do that with an id as value

        OR

        $.ajax({
           type:"POST",
           url:"formdata.php",
           data: {user: selected},
           dataType: "json",
           success: function(response){
              if(response.status == "success") {
                 $("#age").val(response.age);
                 $("#race").val(response.race); 
                 $("#veteran_status").val(response.status);
              } else {
                 alert("No data found for this user!");
           }
        });
    });

并在您的 formdata.php 文件中

//make your db-query
then either make the actual input fields which will be displayed if you use load

OR make something like if you use the ajax version

if($result) {
   echo json_encode(array("status" => "success",age" => $result["age"], "race" => $result["race"], "status" => $result["status"]));
} else {
   echo json_encode(array("status" => "failed"));
}

您还可以删除表单中的操作、方法和 enctype,因为这将在 ajax 函数中设置;)

我建议您使用用户 ID 作为选择字段中的值,并且您还需要在表单中填写 contact_name 或创建一个隐藏输入字段,以便您可以提交表单并知道谁的数据这是..

关于php - 使用 AJAX 和 PHP 更新表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51415593/

相关文章:

mysql - SQL 查询连接(创建来自不同表的组合总和的 View )

php - $_SESSION 已创建但 $_SERVER ['HTTP_COOKIE' 中没有 PHPSESSID]

php - 在 PHP 中一段时间​​后删除文件

javascript - Ajax Onchange 替换 div 不起作用

php - 传递给的参数 1 必须是 int 的实例,整数给定

php - 如何使用 php 和 jquery 验证向导表单?

javascript - 扩展 jQuery 插件/小部件对象以添加方法

javascript - 防止函数因大量点击而运行

javascript - 在YouTube iframe上禁用滚动

mysql - 如何使对 MySQL View 的查询运行得更快?