Возврат значения с сервера в html для манипуляции - PullRequest
0 голосов
/ 05 октября 2018

Я хочу манипулировать значением, которое хранится в этой переменной $result[].В частности, я хочу вернуть это значение из файла PHP в мой файл HTML.Что я должен делать?Можете ли вы дать мне некоторый ссылочный код, когда я хочу вернуть вещи со стороны сервера на сторону клиента для дальнейшей манипуляции?

Мой php-файл:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("127.0.0.1", "root", "", "mysql3");
// Check connection
if($link === false) {
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

$user_id =$_POST['user_id'];
$book_id =$_POST['book_id'];
$game_id =$_POST['game_id'];
$site_id =$_POST['site_id'];

//Attempt insert query execution
$query = "SELECT site_id FROM components WHERE user_id='$user_id' && book_id='$book_id' && game_id='$game_id' ORDER BY site_id DESC LIMIT 1";
$res = mysqli_query($link,$query);
$result = array();
$res = mysqli_query($link,$query) or die(mysqli_error($link));
while($row = mysqli_fetch_assoc($res)){
  $result[]=$row['site_id'];
}

// Close connection
mysqli_close($link);
?>

Мой html-файл:

    <html>

    <head>
      <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
      <script>
        function load3() {
          var flag1 = true;
          do{
            var selection = window.prompt("Give the User Id:", "Type a number!");
                if ( /^[0-9]+$/.test(selection)) {
                flag1=false;
                }
            }while(flag1!=false);
        $("#user_id").val(selection)
          //$("#user_id").val(prompt("Give the User Id:"))

          var flag2 = true;
          do{
            var selection2 = window.prompt("Give the Book Id:", "Type a number!");
            if ( /^[0-9]+$/.test(selection2)) {
                flag2=false;
                }
            }while(flag2!=false);
        $("#book_id").val(selection2)
          //$("#book_id").val(prompt("Give the Book Id:"))

          var flag3= true;
          do{
            var selection3 = window.prompt("Give the Game Id:", "Type a number!");
            if ( /^[0-9]+$/.test(selection3)) {
                flag3=false;
                }
            }while(flag3!=false);
        $("#game_id").val(selection3)
          //$("#game_id").val(prompt("Give the Game Id:"))
       }    
var fieldNameElement = document.getElementById('outPut');
 if (fieldNameElement == 4)
 {
 window.alert("bingo!");
 }
      </script>

    </head>

    <body>
                      <form name="LoadGame" id="LoadGame" method="post" action="http://127.0.0.1/PHP/mine1.php" enctype="multipart/form-data">
                        <input type="submit" value="Load" id="load" onclick="load3()" class="button12" />
                        <input type="hidden" name="user_id" id="user_id">
                        <input type="hidden" name="book_id" id="book_id">
                        <input type="hidden" name="game_id" id="game_id">
                        <input type="hidden" name="site_id" id="site_id">
                      </form>     
    </body>
    </html>

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Обратите внимание, что в этом ответе используется нотация jQuery, поэтому вам необходимо включить библиотеку jQuery в ваше приложение, чтобы этот пример работал:

<script src="/js/jquery.min.js" type="text/javascript"></script>

Поскольку у вас есть HTML и PHP в отдельных файлах, вы можете использовать AJAX для вывода HTML в элементе, который вы так желаете на своей HTML-странице.

Пример jQuery AJAX:

<script>
function submitMyForm() {
    $.ajax({
        type: 'POST',
        url: '/your_page.php',
        data: $('#yourFormId').serialize(),
        success: function (html) {
            //do something on success?
            $('#outPut').html(html);

            var bingoValue=4;
            if( $('#outPut').text().indexOf(''+bingoValue) > 0){
                alert('bingo!');
            }
            else {
                alert('No!');
            }
        }
    });
}
</script>

Обратите внимание, что я инкапсулировал функцию AJAX в другую функцию, которую можно выбрать для вызова, например, onclick для кнопки.

<button id="mySubmitButton" onclick="submitMyForm();">Submit form!</button>


Пошаговая инструкция:

То, что мы делаем в нашей функции AJAX, - это то, что мы объявляем наш тип данных, как вы это делаете с элементом формы.В вашем PHP-файле я заметил, что вы использовали метод POST, поэтому я включил его и в функцию AJAX.

Далее мы объявляем наш URL-адрес, по которому будут отправляться данные.Это та же страница, на которую ваша текущая форма отправляет данные, и это ваша страница PHP.

Затем мы объявляем наши данные.Теперь есть разные способы сделать это.Я предполагаю, что вы в настоящее время используете форму для POST ваших данных на вашей странице PHP, поэтому я подумал, что мы могли бы также использовать эту форму сейчас, когда она у вас есть.Что мы делаем, так это то, что мы сериализуем данные внутри вашей формы как наши POST значения, как вы делаете это при обычной отправке формы.Другой способ сделать это - объявить отдельные переменные в качестве POST переменных.

Пример отдельных переменных:

$.ajax({
    type: 'POST',
    url: '/your_page.php',
    data: {
        myVariable : data,
        anotherVariable : moreData
        //etc.
    },
    success: function (html) {
        //do something on success?
        $('#outPut').html(html);
    }
});

Буквальный пример переменной для разбора: myVariable : $('input#bookId').val().

Оператор : в нашей функции AJAX в этом случае в основном равен =, поэтому мы устанавливаем нашу переменную равной тому, что мы хотим.В буквальном примере myVariable будет содержать значение поля ввода с id bookId .Вы можете сделать таргетинг любым селектором, который захотите, и можете посмотреть это.Я просто использовал это в качестве примера.

В функции успеха функции AJAX вы можете сделать что-то в случае успеха.Здесь вы можете вставить HTML-код, который вы хотите вывести со своей PHP-страницы, в другой элемент (например, в div).В моем примере AJAX я выводю html со страницы PHP в элемент, который содержит id outPut .

Мы также записываем условие в нашем success функция (на основе комментариев к этому ответу), где мы проверяем конкретное значение подстроки в элементе div.Это значение подстроки определяется через переменную bingoValue .В моем примере я установил это значение равным 4, поэтому всякий раз, когда "4" существует внутри элемента div, он входит в условие.

Пример:

<div id="outPut"></div>

Если вы воспользуетесь этим примером, то любой элемент HTML, который вы структурируете в своем файле PHP, используя значения PHP в своем файле PHP, будет вставлен в элемент div.

<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("127.0.0.1", "root", "", "mysql3");
// Check connection
if($link === false) {
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

$user_id =$_POST['user_id'];
$book_id =$_POST['book_id'];
$game_id =$_POST['game_id'];
$site_id =$_POST['site_id'];

//Attempt insert query execution
$query = "SELECT site_id FROM components WHERE user_id='$user_id' && book_id='$book_id' && game_id='$game_id' ORDER BY site_id DESC LIMIT 1";
$res = mysqli_query($link,$query);
$result = array();
$res = mysqli_query($link,$query) or die(mysqli_error($link));
while($row = mysqli_fetch_assoc($res)){
  $result=$row['site_id'];

  echo $result.' ';
}

// Close connection
mysqli_close($link);
?>

Ваша форма также больше не нуждается в действии , определенном как все, что теперь выполняется с помощью функции AJAX.

Итак, измените:

<form name="LoadGame" id="LoadGame" method="post" action="http://127.0.0.1/PHP/mine1.php" enctype="multipart/form-data">

to:

<form name="LoadGame" id="LoadGame" method="post" enctype="multipart/form-data">

И убедитесь, что ваша кнопка: <button id="mySubmitButton" onclick="submitMyForm();">Submit form!</button> находится за пределами тега формы, поскольку кнопки без определенного атрибута type будут иметь type = "submit" по умолчанию внутри тега формы.

Если вам нужно что-то доработать, дайте мне знать.:)

0 голосов
/ 05 октября 2018

Прежде всего: удалите скрипт скрипт из вашего php.Во-вторых: почему вы выполняете оператор sql два раза?

На ваш вопрос: Вы должны отправить запрос к вашему PHP-скрипту через AJAX: (Поместите это в теги <script> и убедитесь, что вы правильно включили jquery)

$(() => {

  $('form').on('submit', () => {

    event.preventDefault()

    $.ajax({
      type: 'POST',
      url: '<your-php-file>', // Modify to your requirements
      dataType: 'json', 
      data: $('form').serialize() // Modify to your requirements
    }).done(function(response){

      console.log(response)

    }).fail(function(){

      console.log('ERROR')

    })

  })

})

Ваш PHP-скрипт, который должен возвращать JSON:

$query = "SELECT site_id FROM components WHERE user_id='$user_id' && book_id='$book_id' && game_id='$game_id' ORDER BY site_id DESC LIMIT 1";

// Execute Query
$res = mysqli_query($link,$query) or die(mysqli_error($link));

// Get Rows
while($row = mysqli_fetch_assoc($res)){
  $result[] = $row['site_id'];
}    

// Return JSON to AJAX
echo json_encode($result);

Посмотрите на консоль разработчика.

Не проверял его.

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