【问题标题】:Access database based on form value基于表单值访问数据库
【发布时间】:2018-04-26 03:28:51
【问题描述】:

所以我创建了一个数组,并使用 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>";

?>

我想知道是否可以通过使用“onchange”来运行 showUser 函数。我尝试使用:

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

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

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

【问题讨论】:

  • 您遇到了什么问题?您是否尝试过运行此代码?我可以在这个社区看到数百个问题,询问非常相似的问题..

标签: php sql loops associative-array


【解决方案1】:

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

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 */
}

【讨论】:

    【解决方案2】:

    当然,你的问题被别人问了很多次,答案也很多。根据您编写代码的方式,我想借此机会帮助您理解一些您似乎遗漏的概念。

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

    mysqli_query 返回结果是一个常见的误解。甚至更多“经验丰富”的程序员有时会使用变量 $res,认为这是一个结果。事实上,它是一个游标,或者是一个指向返回的记录集的指针。因此,在某些文档中,变量 $rs 而不是 $res。 (命名对机器来说并不重要,但它们确实可以帮助您理解数据流。)

    然后你写了这个:

    $lnames=mysqli_fetch_all($result,MYSQLI_ASSOC);
    

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

    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>';
    }
    

    【讨论】:

    • 那行在 OP 的代码中,但不是我的。此外,分配的资源在页面渲染结束时会以任何方式隐式释放。
    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多