我有一个名为客户的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表结构的印记。
有人能理解我在做什么吗?
谢谢。
答案 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而不是将值直接传递到查询中,而是在查询中传递用户输入值时处理这种情况。