Передать значение PHP после HTML Select Change

В моей 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?

i Я точно не заметил. Можно ли объяснить больше

Alihossein shahabi 13.05.2018 19:41

Вы хотите, чтобы ваша форма отправлялась в фоновом режиме, когда вы меняете значение вашего выбора, или вы просто хотите, чтобы она отправлялась сама по себе после того, как вы выбрали значение?

Lou 13.05.2018 19:45

Вам следует использовать Подготовленные заявления вместо того, чтобы вручную экранировать значения и объединять ваши запросы. Кроме того, mysqli_real_escape_string() предназначен для экранирования строк, а не целых чисел.

Magnus Eriksson 13.05.2018 20:16

@Alihosseinshahabi Когда я выбираю вариант, я хочу, чтобы код вводил isset ($ _ POST ['selectclient'], а затем делал все остальное.

Mosarof Hossain 14.05.2018 17:20

@lou Я хочу, чтобы код вводил isset ($ _ POST ['chooseclient'] после того, как я выберу значение. Значение из select также необходимо передать в PHP-коде

Mosarof Hossain 14.05.2018 17:20

@MosarofHossain Я меняю код. пожалуйста, проверьте еще раз.

Alihossein shahabi 14.05.2018 20:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
8 718
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы хотите автоматически отправлять выбранное значение 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? Было бы проще просто опубликовать форму.

Magnus Eriksson 13.05.2018 20:12
Ответ принят как подходящий

Чтобы добиться того, чего вы ожидаете, вам нужно будет написать немного 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?

спасибо за подробное объяснение. Я проверю и сообщу, сработало это или нет.

Mosarof Hossain 14.05.2018 17:23

проблема в том, что код не вводится if (isset ($ _ POST ['client_id'])) {

Mosarof Hossain 14.05.2018 18:47

@MosarofHossain Вы добавили сообщение о методе в код вашей формы? <form id = "my-form" action='a.php' method = "post">

Lou 14.05.2018 19:11

@MosarofHossain Это метод Ajax, упомянутый во второй части. Вероятно, это эхо 12, но в вашем ответе xhr. Я изменил ваш код в ссылке, чтобы использовать метод, отличный от ajax, поскольку вы, кажется, хотите вывести html в свой ответ. Он отлично работает на моем конце, вы можете проверить, работает ли он на вашем?

Lou 14.05.2018 19:19

оно работает . Я только что проверил это, просто используя $ _POST ['client_id'], и значение this.form.submit () передается в php -_-. Печальная жизнь кодирования

Mosarof Hossain 14.05.2018 19:33

Другие вопросы по теме