В моей html-форме есть опция «Выбрать». Запрос Mysql запускается после того, как я «Изменить данные из параметра» и «Отправить данные». Я хочу, чтобы после выбора данных из select они перезагрузились и передали значение в php-код.
Вот HTML
<form action='a.php?'>
<SELECT name = "client_id" ID = "mySelect">
<OPTION value = "artes>'">artes</OPTION>
<OPTION value = "ingles">inglés</OPTION>
</SELECT>
<input type = "submit" name = "chooseclient" value = "Select">
</form>
Вот php, который запускается после отправки
if (isset($_POST['chooseclient'])){
$clientid = mysqli_real_escape_string($mysqli, $_POST['client_id']);
MYSQL query here
}
Я пробовал this.form.submit (), но он не отправляет данные. Я понимаю, что мне нужен Ajax. Есть ли способ onChange перезагрузить форму и передать данные на php?
Вы хотите, чтобы ваша форма отправлялась в фоновом режиме, когда вы меняете значение вашего выбора, или вы просто хотите, чтобы она отправлялась сама по себе после того, как вы выбрали значение?
Вам следует использовать Подготовленные заявления вместо того, чтобы вручную экранировать значения и объединять ваши запросы. Кроме того, mysqli_real_escape_string() предназначен для экранирования строк, а не целых чисел.
@Alihosseinshahabi Когда я выбираю вариант, я хочу, чтобы код вводил isset ($ _ POST ['selectclient'], а затем делал все остальное.
@lou Я хочу, чтобы код вводил isset ($ _ POST ['chooseclient'] после того, как я выберу значение. Значение из select также необходимо передать в PHP-коде
@MosarofHossain Я меняю код. пожалуйста, проверьте еще раз.






Если вы хотите автоматически отправлять выбранное значение Ajax в a.php при изменении значения поля, вы можете использовать следующий код:
<!doctype html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport"
content = "width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv = "X-UA-Compatible" content = "ie=edge">
<title>Document</title>
<script src = "https://code.jquery.com/jquery-2.2.4.min.js"></script>
</head>
<body>
<form action='a.php?'>
<SELECT name = "client_id" ID = "mySelect">
<option value = "A1>'">A1</option>
<option value = "A2">A2</option>
<option value = "A3">A3</option>
</SELECT>
</form>
<script type = "text/javascript">
$(document).ready(function() {
$("#mySelect").change(function(){
var value =$("#mySelect").val();
alert(value);
$.ajax({
url: 'a.php',
type: "POST",
data: ({chooseclient: value}),
success: function(){
location.reload();
}
});
});
});
</script>
</body>
Если вы не хотите, чтобы страница перезагружалась после отправки информации и сохранения в базу, прокомментируйте location.reload();
a.php:
<?php
if (isset($_POST['chooseclient'])){
$clientid = mysqli_real_escape_string($mysqli, $_POST['chooseclient']);
#MYSQL query here
# do something
}
Если вы собираетесь перезагрузить страницу после вызова ajax, зачем вообще использовать Ajax? Было бы проще просто опубликовать форму.
Чтобы добиться того, чего вы ожидаете, вам нужно будет написать немного JavaScript. Насколько я понимаю, вам не нужно отправлять запрос ajax, поскольку вы просили перезагрузить форму при ее отправке. Но я дам вам оба подхода.
Нет AJAX
Сначала мы добавим идентификатор в вашу форму. В моем примере это будет «моя форма». И событие onchange для вашего выбора, которое вызовет myFunction () ;. Мы также должны указать вашей форме, что нужно опубликовать данные для работы вашего текущего PHP-скрипта, иначе он отправит их как получить
<form id = "my-form" action='a.php?' method = "post">
<SELECT onchange = "myFunction()" name = "client_id" ID = "mySelect">
<OPTION value = "artes>'">artes</OPTION>
<OPTION value = "ingles">inglés</OPTION>
</SELECT>
<input type = "submit" name = "chooseclient" value = "Select">
</form>
Теперь в файле javascript или между тегом сценария добавьте свою функцию:
<script>
function myFunction(){
document.getElementById("my-form").submit();
}
</script>
Теперь ваша форма должна отправить себя, когда вы измените значение вашего выбора. НО у вас будет другая проблема.
if (isset($_POST['chooseclient'])){
$clientid = mysqli_real_escape_string($mysqli, $_POST['client_id']);
//MYSQL query here
}
Когда вы отправляете форму через javascript, ваша кнопка отправки не будет отправлена вместе с остальными данными. так что if (isset($_POST['chooseclient'])) никогда не будет правдой. Чтобы решить эту проблему, у вас есть несколько вариантов, я дам вам два:
Вы можете изменить свой PHP, чтобы вместо этого проверять client_id (если вы сделаете это, вы можете полностью удалить свою кнопку отправки):
if (isset($_POST['client_id'])){
$clientid = mysqli_real_escape_string($mysqli, $_POST['client_id']);
//MYSQL query here
}
Или измените кнопку отправки на скрытое поле:
<form id = "my-form" action='a.php'>
<SELECT onchange = "myFunction()" name = "client_id" ID = "mySelect">
<OPTION value = "artes>'">artes</OPTION>
<OPTION value = "ingles">inglés</OPTION>
</SELECT>
<input type = "hidden" name = "chooseclient" value = "Select">
</form>
Аякс
Как и в первом методе, мы добавим идентификатор в вашу форму и событие onchange для вашего выбора, вы также должны удалить свою кнопку отправки или изменить ее для скрытого поля, в этом примере я удалю ее:
<form id = "my-form" action='a.php'>
<SELECT onchange = "myFunction()" name = "client_id" ID = "mySelect">
<OPTION value = "artes>'">artes</OPTION>
<OPTION value = "ingles">inglés</OPTION>
</SELECT>
</form>
И сценарий, который будет сильно отличаться от первого:
<script>
function myFunction(){
var form = document.getElementById("my-form");
var action = form.getAttribute("action");
var data = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.open("POST", action);
xhr.send(data);
}
</script>
Опять же, вам придется исправить свой PHP, чтобы он не зависел от selectclient (если вы не сделали его скрытым полем):
if (isset($_POST['client_id'])){
$clientid = mysqli_real_escape_string($mysqli, $_POST['client_id']);
//MYSQL query here
}
Если вы выберете метод ajax, вы, возможно, захотите что-то сделать с ответом, в stackoverflow есть много потоков по этому поводу, вот один: Как получить ответ XMLHttpRequest?
спасибо за подробное объяснение. Я проверю и сообщу, сработало это или нет.
проблема в том, что код не вводится if (isset ($ _ POST ['client_id'])) {
@MosarofHossain Вы добавили сообщение о методе в код вашей формы? <form id = "my-form" action='a.php' method = "post">
@MosarofHossain Это метод Ajax, упомянутый во второй части. Вероятно, это эхо 12, но в вашем ответе xhr. Я изменил ваш код в ссылке, чтобы использовать метод, отличный от ajax, поскольку вы, кажется, хотите вывести html в свой ответ. Он отлично работает на моем конце, вы можете проверить, работает ли он на вашем?
оно работает . Я только что проверил это, просто используя $ _POST ['client_id'], и значение this.form.submit () передается в php -_-. Печальная жизнь кодирования
i Я точно не заметил. Можно ли объяснить больше