Приведенный ниже код должен проверять, было ли уже введено имя пользователя до отправки формы. Однако после ввода имени на входе элементы div повторяются, и данные не выводятся. Может ли кто-нибудь помочь с этой проблемой с помощью AJAX?
php код:
if (isset($_POST['check_username'])) {
$user_login_name = $_POST['check_username'];
$sql = "SELECT user_login_name FROM users;";
$result = mysqli_query($conn, $sql);
$rows = mysqli_fetch_array($result);
if (!empty($user_login_name)) {
foreach ($rows as $row) {
if (strpos($row, $user_login_name) != false) {
echo $row;
echo "<br>";
}
}
} else {
echo "Database empty!";
}
}
HTML-код:
<div class = "register">
<div class = "band_1">
<div class = "box">
<form action = "../server/register.php" method = "POST">
<div class = "input_table">
<table>
<thead>
<tr>
<th><h1>Register to LIMS</h1></th>
</tr>
</thead>
<tbody>
<tr>
<td><input type = "text" name = "user_first_name" placeholder = "Enter First Name"></td>
</tr>
<tr>
<td><input type = "text" name = "user_last_name" placeholder = "Enter Last Name"></td>
</tr>
<tr>
<td><input type = "text" name = "user_phone" placeholder = "Enter Contact Number"></td>
</tr>
<tr>
<td><input type = "email" name = "user_email" placeholder = "Enter Email"></td>
</tr>
<tr>
<td><input type = "text" name = "user_login_name" placeholder = "Select a Username"><p id = "test"></p></td>
</tr>
<tr>
<td><input type = "password" name = "user_password" placeholder = "Select a Password"></td>
</tr>
<tr>
<td><input type = "password" name = "user_password_2" placeholder = "Repeat Password"></td>
</tr>
</tbody>
</table>
</div>
<button type = "submit" name = "user_register" class = "button_1">Register</button>
<button type = "button" class = "button_3">Cancel</button>
</form>
</div>
</div>
</div>
и AJAX:
$(document).ready(function() {
$("input[name=user_login_name]").keyup(function(){
var user_login_name = $("input[name=user_login_name]").val();
$.post("../server/register.php", {
check_username: user_login_name
}, function(data, status) {
$("#test").html(data);
});
});
});
Я просто изменил это, спасибо, но не решил проблему. Он вставляет все данные тега <html> в идентификатор #test.
Могу я спросить, находятся ли PHP-код и HTML-код в одном файле?
Нет, это не так, я пытаюсь связать разные языки в разных файлах.
Кажется, что код php должен быть внутри своего собственного файла, так как у меня он был в файле с другим кодом php. Может ли кто-нибудь объяснить, почему разделение кода php было решением?






Кажется, просто улучшите php:
1) вам нужно проверить ввод пустоты пользователем, 2) и выбрать только совпавшие, 3) и, наконец, вызвать die:
if (!empty($_POST['check_username'])) {
$user_login_name = $_POST['check_username'];
$sql = "SELECT user_login_name FROM users where user_login_name like '%$user_login_name%';";
$result = mysqli_query($conn, $sql);
$rows = mysqli_fetch_array($result);
if ($rows) {
foreach ($rows as $row) {
echo "$row<br>";
}
} else {
echo "Database empty!";
}
die;
}
ОБНОВИТЬ. Также лучше было бы вызвать: $rows = mysqli_fetch_array($result, MYSQLI_ASSOC); - чтобы предотвратить повторное получение дополнительных данных.
Вы понимаете, что оставляете их открытыми для SQL-инъекции с добавленным предложением WHERE. Вы не слышали об этом и не готовили заявления?
Да, ты прав - про укол просто забыл. Конечно, это необходимо для защиты запросов mysql, спасибо. (php.net/manual/en/mysqli.prepare.php). Моя общая идея заключалась в улучшении «select-query»: не нужно извлекать всех пользователей из базы данных и проверять каждого в цикле.
Вот ваш php-код с лучшим способом проверить, существует ли пользователь в БД. Просто проверьте запрос, есть ли пользователь и номер, вам не нужно проверять его с помощью php.
if (isset($_POST['check_username'])){
$user_login_name=$_POST['check_username'];
$sql = "SELECT user_login_name FROM users WHERE user_login_name='$user_login_name'";
$result=mysqli_query($conn, $sql);
$numRows=mysqli_num_rows($result);
$rows=mysqli_fetch_array($result,MYSQLI_NUM);
var_dump($rows);
if ($numRows>0){ // If exists rows
foreach($rows as $field)
echo $field." => ";
echo "<br>";
}
else
echo "Database empty!";
}
Также для подключения ваших данных вы можете попробовать:
$.ajax({
});
Передавая переменные из php, вы можете решить, показывать ли вы данные со стороны javascript или нет.
Надеюсь, это поможет C:
Это открыто для SQL-инъекций; Вы слышали, что это делает и как это предотвратить?
Есть ли способ, что информация о массиве также не будет отображаться эхом?
Что ж, мы можем поговорить о безопасности sql в другом посте. Думаю, этот вопрос не о sql-инъекции ... Тоже не лучшая практика.
У вас есть, возможно, не связанная с этим ошибка в вашей логике PHP с использованием
strpos(). Вам нужно использовать!==вместо!=, потому что эта функция может возвращать 0 (что является «ложным»), если совпадение строки начинается с первого символа. Подробнее: php.net/manual/en/function.strpos.php