【问题标题】:Populate input with database while using select option in php在 php 中使用 select 选项时使用数据库填充输入
【发布时间】:2020-04-06 11:52:40
【问题描述】:

我有选择选项,其中包含客户名称。我想将从数据库中获取的电话和电子邮件填充到这两个输入字段中。我是用javacript来实现的,跟着@mr J回答提到HERE。我尝试alert(user); 我得到了选定的值,但没有其他任何反应。

addlead.php

 <div class="form-group row">
              <label for="inputEmail3" class="col-sm-4 col-form-label">Phone</label>
                <div class="col-sm-10">
                  <input type="text" class="form-control form-control-sm" id="phone" name="phone" placeholder="Enter Phone no.">
                </div>
            </div>

<div class="form-group row">
             <label for="inputEmail3" class="col-sm-4 col-form-label">Email</label>
                <div class="col-sm-10">
                  <input type="email" class="form-control form-control-sm" id="email" name="email" placeholder="Enter Email" onkeyup="checkemail();" required="">
                </div>
            </div>
<script type="text/javascript">
$(document).ready(function(){
$('#customer_name').on('change',function(){
    var user = $(this).val();
    alert(user);
    $.ajax({
        url : "search2.php",
        dataType: 'json',
        type: 'POST',
        async : false,
        data : { user : user},
        success : function(data) {
            userData = json.parse(data);
            $('#phone').val(userData.phone);
            $('#email').val(userData.email);
        }
    }); 
    });
    });
    </script>

search2.php

 $con = mysqli_connect("localhost", "user_crm", "pass", "kaem_crm");
if (mysqli_connect_errno()){
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$user = $_REQUEST['user'];    
$sql = mysqli_query($con, "SELECT phone,email FROM customer WHERE Cust_name = '".$user."' ");
$row = mysqli_fetch_array($sql);

json_encode($row);die;

【问题讨论】:

  • 请注意,您的代码容易受到 SQL 注入的影响。请阅读stackoverflow.com/questions/332365/…
  • 当您打开浏览器的开发者工具栏时,您是否在控制台中看到任何错误?您是否检查了工具栏中的网络选项卡以查看您的 PHP 脚本返回的内容?避免将alert 作为调试手段,如果您改为使用console.log,您可以获得更多信息并以更简洁、更有用的方式。
  • 另外,放弃async : false,你不需要它,你想要在这种情况下异步。当您指定dataType: 'json' 时,您不需要userData = json.parse(data);
  • 如果我删除userData = json.parse(data);,那么我将如何获得$('#phone').val(userData.phone);的价值
  • 因为您在 AJAX 请求中设置的 dataType: 'json' 选项告诉它它将接收 JSON 作为响应,然后它会自动将其转换为对象。

标签: javascript php jquery


【解决方案1】:

你没有返回结果,试试这个

<?php
$con = mysqli_connect("localhost", "user_crm", "pass", "kaem_crm");
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$user = $_REQUEST['user'];    
$sql = mysqli_query($con, "SELECT phone,email FROM customer WHERE Cust_name = 
'".mysqli_escape_string($con, $user)."' ");
$row = mysqli_fetch_array($sql);

header('Content-Type: application/json'); //set the content type for browser
echo json_encode($row); //return result to browser
mysqli_close($con); //close mysql connection

在表单页面上

  <div class="form-group row">
          <label for="inputEmail3" class="col-sm-4 col-form-label">Name</label>
            <div class="col-sm-10">
              <select class="form-control form-control-sm" id="customer_name" name="name" placeholder="Select Name.">
             <option value="some value">some value</option>
           </select>
            </div>
        </div>
  <div class="form-group row">
  <label for="inputEmail3" class="col-sm-4 col-form-label">Phone</label>
            <div class="col-sm-10">
              <input type="text" class="form-control form-control-sm" id="phone" name="phone" placeholder="Enter Phone no.">
            </div>
        </div>

<div class="form-group row">
         <label for="inputEmail3" class="col-sm-4 col-form-label">Email</label>
            <div class="col-sm-10">
              <input type="email" class="form-control form-control-sm" id="email" name="email" placeholder="Enter Email" onkeyup="checkemail();" required="">
            </div>
        </div>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
 $(document).ready(function(){
 $('#customer_name').on('change',function(){
 var user = $(this).val();
 $.ajax({
    url : "search2.php",
    dataType: 'json',
    type: 'POST',
    async : true,
    data : { user : user},
    success : function(data) {    
        $('#phone').val(data.phone);
        $('#email').val(data.email);
    }
}); 
});
});
</script>

【讨论】:

  • 复制一堆未更改的代码会掩盖您所做的更改。我建议您在返回之前删除所有代码,以使您的更改更清晰。
  • 您不需要该标头,AJAX 已经在期待 JSON,因为已设置 dataType: 'json'
  • @mark 您是否检查了查询是否返回任何结果? search2.php 文件是否与您的 addlead.php 文件处于同一级别?
  • 是的,这两个文件是同一级别的。如何检查查询是否返回任何结果。表有值
  • @mark 这是一个彻底的tutorial 调试数据库相关问题。
猜你喜欢
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 2019-08-22
  • 2017-02-01
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多