根据表单值访问数据库

时间:2018-04-26 03:28:52

标签: php sql loops associative-array

所以我创建了一个数组,并使用foreach(在代码底部)将数组值放入一个表单中。

<html>
<script>
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","gethint.php?q="+str,true);
        xmlhttp.send();
    }
}
</script>
<body>

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

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

//place Last Name in array
$sql="SELECT Lname FROM Customers";
$result=mysqli_query($conn,$sql);

$lnames=mysqli_fetch_all($result,MYSQLI_ASSOC);
mysqli_free_result($result);

foreach($lnames as $x) {
    $a[] = $x['Lname'];
}

echo 
"<select>";
foreach($a as $val => $option) 
{
    echo '<option value="'.$val.'">'.$option.'</option>'; 
}
"</select>";

?>

我想知道是否可以通过使用&#34; onchange&#34;来运行showUser函数。我尝试使用:

echo 
"<select onchange="showUser(this.value)">";

foreach($a as $val => $option) 
{
    echo '<option value="'.$val.'">'.$option.'</option>'; 
}
"</select>";

但它表示有关于意外的showUser,语法错误,缺失的错误;要么 ,。我想允许用户选择一个选项,并加载相应的数据条目,但这不允许。

2 个答案:

答案 0 :(得分:0)

在当前代码中尝试以下更正

mysqli_free_result($result); /* don't use `$lnames` here */

foreach($lnames as $x) { /* $x is row, can have multiple columns */
    echo $x['Lname'],'<br/>'; /* use column name */
}

答案 1 :(得分:0)

当然,其他人多次询问您的问题,并且有很多答案。根据您编写代码的方式,我想借此机会帮助您了解一些您似乎缺少的概念。

$sql="SELECT Lname FROM Customers";
$result=mysqli_query($conn,$sql);

mysqli_query返回结果是一种常见的误解。更有经验的程序员有时会使用变量$ res,认为这是一个结果。实际上它是返回的记录集的游标指针。因此,在某些文档中,变量$ rs而不是$ res。 (命名对机器无关紧要,但它们确实有助于您理解数据流。)

然后你写了这个:

$lnames=mysqli_fetch_all($result,MYSQLI_ASSOC);

此时,$ lnames包含结果的所有行。将它命名为$ record更好。您可以查看此变量的值:

echo '<pre>'; print_r($records); echo '</pre>';

如果要打印出每条记录的姓氏,请使用此循环:

foreach ($records as $record){
    echo $record['Lname'].'<br>';
}

请注意大写的L,就像它在查询中的方式一样。

fetch_all也仅适用于mysqlnd包。你可能想要养成循环记录集的习惯:

while ($myrow=mysqli_fetch_assoc($rs)){
  echo $myrow['Lname'].'<br>';
}