Доступ к базе данных на основе значения формы - PullRequest
0 голосов
/ 26 апреля 2018

Итак, я создал массив и поместил значения массива в форму, используя 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>";

?>

Я хочу знать, возможно ли запустить функцию showUser впутем использования "onchange".Я попытался использовать:

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

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

Но говорится, что есть ошибка, связанная с неожиданным showUser, синтаксическая ошибка, отсутствует;или же ,.Я хочу позволить пользователю выбрать опцию и загрузить соответствующую запись данных, но это не позволит.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Конечно, ваш вопрос много раз задавался другими, и существует множество ответов.Я хотел бы воспользоваться этой возможностью, чтобы помочь вам понять некоторые концепции, которые, по-видимому, отсутствуют, основанные на том, как вы написали свой код.

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

Распространено неправильное представление о том, что mysqli_query возвращает результат.Даже более «опытные» программисты иногда используют переменную $ res, думая, что это результат.Фактически это курсор или указатель на набор записей, который возвращается.Следовательно, в некоторых документах переменная $ rs вместо $ res.(Именование не имеет значения для машин, но они помогают вам понять поток данных.)

Затем вы написали следующее:

$lnames=mysqli_fetch_all($result,MYSQLI_ASSOC);

На этом этапе ваши $ lnames содержат всестроки результата.Лучше назвать это $ records.Вы можете просмотреть значения этой переменной:

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

Если вы хотите распечатать фамилию каждой записи, используйте этот цикл:

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

Обратите внимание на заглавную букву L, как в вашем запросе.

Также fetch_all доступна только с пакетом mysqlnd.Возможно, вы захотите войти в привычку проходить через набор записей:

while ($myrow=mysqli_fetch_assoc($rs)){
  echo $myrow['Lname'].'<br>';
}
0 голосов
/ 26 апреля 2018

Попробуйте следующие исправления в вашем текущем коде

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