选择更改时自动填充输入

时间:2018-11-27 10:21:37

标签: php html5 mysqli

我有一个名为客户的mysql表,我在其中的行中使用它来填充选择的选项。

我想做的是,在选择其中一个选项时,用客户信息自动填充2个输入。

要实现这一点,我正在使用链接到php页面的JavaScript,该php页面向数据库发出请求并填写输入表单,但是我必须有一些我无法弄清的错误。

我对PHP有点陌生,所以我很难理解我的代码有什么问题。

这是表格

    <form action="insert/insertReport.php" id="newReport" method="get">
       <div id="txtHint" class="form-group"> </div>
       <div class="form-group">
         <label for="namefat">Cliente</label>
         <br>
         <select class="selectpicker" data-live-search="true" class="form-control" name="client" id="client" onchange="showUser(this.value)">

         <?php
          while ($row = mysqli_fetch_array($query))
            { echo ' 
               <option>'.$row['namefat'].'</option>';

            }?>

          </select>
       </div>
</form>

此表单当前位于名为newreports.php的页面上,这是我用来填写选项的查询。

<?php
$db_host = 'localhost';
$db_user = 'user';
$db_pass = 'pass';
$db_name = 'name';

$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
    die ('Error: ' . mysqli_connect_error());   
}

$sql = 'SELECT * 
        FROM clients';

$query = mysqli_query($conn, $sql);

if (!$query) {
    die ('SQL Error: ' . mysqli_error($conn));
}
?>

因此,就像我之前说过的那样,我使用JavaScript发出更改请求。这是JS。

function showUser(str) {
        if (str == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        } else { 
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("txtHint").innerHTML = this.responseText;
                }
            };
            xmlhttp.open("GET","getclient.php?namefat="+str,true);
            xmlhttp.send();
        }
    }

这是处理请求的php页面。

    <?php
    $q = intval($_GET['namefat']);

    $db_host = 'localhost';
        $db_user = 'user';
        $db_pass = 'pass';
        $db_name = 'name';

        $con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
        if (!$conn) {
            die ('Error: ' . mysqli_connect_error());   
        }

    mysqli_select_db($con,"ajax_demo");
    $sql="SELECT * FROM clients WHERE namefat = '".$q."'";
    $result = mysqli_query($con,$sql);

while($row = mysqli_fetch_array($result)) {
    echo "<input type="text" name="region" class="form-control" id="region" value=".$row['region']">";
    echo "<input type="text" name="client_type" class="form-control" id="client_type" value=".$row['client_type']">";
}
mysqli_close($con);
?>

由于某些原因,输入不会自动填充。 我留下了db表结构的印记。

DB TABLE STRUCTURE

有人能理解我在做什么吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

实际上,问题在于您没有正确地将$ row ['region']连接为输入框的值。

尝试在while循环中替换这些代码行

echo "<input type="text" name="region" class="form-control" id="region" value=".$row['region']">";
echo "<input type="text" name="client_type" class="form-control" id="client_type" value=".$row['client_type']">";   

通过

echo '<input type="text" name="region" class="form-control" id="region" value="'.$row['region'].'">';
echo '<input type="text" name="client_type" class="form-control" id="client_type" value="'.$row['client_type'].'">';

此外,您的代码已针对SQL Injection打开。建议不要使用Prepared statement而不是将值直接传递到查询中,而是在查询中传递用户输入值时处理这种情况。