Автозаполнение входов при изменении выбора - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть таблица mysql с именами клиентов, которую я использую в одной из строк, чтобы заполнить опции выбора.

Я пытаюсь выполнить автоматическое заполнение 2 входных данных информацией о клиенте.когда выбран один из вариантов.

Для этого я использую 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

Кто-нибудь может понять, что я делаю неправильно?

Заранее спасибо.

1 Ответ

0 голосов
/ 27 ноября 2018

На самом деле проблема в том, что вы неправильно соединяете $ 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-инъекций .вместо прямой передачи значений в ваш запрос, Подготовленный оператор - рекомендуемый способ работы, когда пользовательский ввод значений передает ваш запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...