Вложенная функция ajax, не дающая результата при использовании POST и isset в скрипте PHP - PullRequest
0 голосов
/ 15 января 2019

Я написал функцию, которая содержала вложенную функцию ajax, которая будет запускаться после отправки формы. Функция выполняет отправку данных формы, перезагружает вновь добавленную информацию базы данных в таблицу и, наконец, проверяет, все ли результаты были введены в таблицу.

На этом этапе после нажатия кнопки отправки ничего не происходит, однако, как только я удаляю if (isset($_POST['submit'])) в файле PHP, код работает, хотя он дает пару неопределенных ошибок индекса. Независимо от использования isset, последняя часть кода ajax, которая проверяет, все ли введенные результаты работают, работает постоянно.

Почему Ajax не позволяет (isset($_POST['submit'])) общаться с url: "../server/insert_tests.php?submit",? Есть ли возможное решение этой проблемы?

Это функция Ajax, которая будет вызываться после отправки формы:

function formSubmit() {
  $.ajax({
    type: "POST",
    url: "../server/insert_tests.php?submit",
    data: $('#frmBox').serialize(),
    success: function(message){
      $('#success').html(message).fadeIn('fast').delay(3000).fadeOut('slow');

      var sample_id = $("#sample_id").val();
      var url = "../server/insert_tests.php?query=";

      $.ajax({
        type: "GET", 
        url: url + sample_id,                 
        success: function(results) {
          $("#tests").html(results);

          var order_id = $("#order_id").val();
          var url2 = "../server/insert_tests.php?button_message=";

          $.ajax({
            type: "GET", 
            url: url2 + order_id,             
            success: function(button) {
              $("#button_message").html(button);
            }
          }); 
        }
      }); 
    }
  });  
  var form = document.getElementById('frmBox').reset();
  return false;
}

Вот форма:

<div class="result_input">
  <form id="frmBox" onsubmit="return formSubmit();">                   
    <table id="tests">
    </table>
    <input type="submit" id="submit" value="Submit Result" style="width: 50%;border-radius: 5px; background-color: white; border: 2px solid green;color: green;"> 
  </form>         
</div>

И PHP:

session_start();

//Current time as "hour:min:seconds" for all time stamps
$time = date("H:i:s");
//Current date as "year-month-day" for all date stamps
$date = date("Y-m-d");

$output = '';
$analyst = '';
$order_id = '';


require 'dbh.php';


$analyst = $_SESSION['logged_in_id'];

if (isset($_POST['submit'])) {
    $n = test_input(count($_POST['result_id']));
    for($i = 0; $i<$n; ++$i) {
        $result_id =test_input($_POST['result_id'][$i]);
        $order_id = test_input($_POST['order_id'][$i]);
        $sample_id = test_input($_POST['sample_id'][$i]);
        $detected = test_input($_POST['detected'][$i]);
        $result = test_input($_POST['result'][$i]);
        $m_analysis_id = test_input($_POST['m_analysis_id'][$i]);



        if ($result_id == '') {

            $sql = "INSERT INTO results_database (order_id, sample_id, detected, result, m_analysis_id, analyst) VALUES ('$order_id', '$sample_id', '$detected', '$result', '$m_analysis_id', '$analyst');";
            mysqli_query($conn, $sql);

        } else {

            $sql = "UPDATE results_database SET order_id='$order_id', sample_id='$sample_id', detected='$detected', result='$result', m_analysis_id='$m_analysis_id', analyst='$analyst' WHERE id='$result_id';";
            mysqli_query($conn, $sql);
        }

    }

    $order_id1 = test_input($_POST['order_id'][0]);
    $sample_id1 = test_input($_POST['sample_id'][0]);

    $sql1 = "UPDATE samples_database SET s_status='Analysis Started', s_time1='$time', s_date1='$date' WHERE id='$sample_id1';";
    $sql1 .= "UPDATE order_database SET order_status='Analysis Started' WHERE id='$order_id1';";

    mysqli_multi_query($conn, $sql1);

    $output1 = '';
    $output1 .= '<h3 style="text-align:center;color:green;">Result was successfully added!</h3>';

    echo $output1;

    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
}


if (isset($_GET['query'])) {
    require 'dbh.php';

    $id = $_GET['query'];
    $query = "SELECT * FROM samples_database WHERE sample_id=$id;";
    $result = mysqli_query($conn, $query);
    $input = mysqli_fetch_array($result);
    $input1 = $input['micro_analysis'];
    $env_sam_id = $input['env_sam_id'];
    $c_sam_id = $input['c_sam_id'];
    $order_id = $input['order_id'];
    $rows = explode(',', $input1);

    if (count($rows) > 0 ) {
        $output .= '
        <thead>
        <tr>
        <th colspan="1"></th>
        <th>Tests ('.$env_sam_id.' <i>'.$c_sam_id.'</i>)</th>
        <th>Detected</th>
        <th>Result</th>
        </tr>
        </thead>
        <tbody>';
        foreach ($rows as $row) {
            $query2 = "SELECT * FROM microbiology_analysis_database WHERE id=$row"; 
            $result2 = mysqli_query($conn, $query2);
            $input2 = mysqli_fetch_array($result2);
            $analysis = $input2['m_analysis'];


            $query3 = "SELECT * FROM results_database WHERE m_analysis_id=$row AND order_id=$order_id AND sample_id=$id;"; 
            $result3 = mysqli_query($conn, $query3);
            $input3 = mysqli_fetch_array($result3);
            $result_id = $input3['id'];
            $result = $input3['result'];
            $detected = $input3['detected'];

            $output .= 
            '<tr>
            <td>
            <input class="hidden" name="result_id[]" id="result_id" value="'.$result_id.'" readonly>
            <input class="hidden" name="m_analysis_id[]" id="m_analysis_id" value="'.$row.'" readonly>
            <input class="hidden" name="order_id[]" id="order_id" value="'.$order_id.'" readonly>
            <input class="hidden" name="sample_id[]" id="sample_id" value="'.$id.'" readonly></td>


            <td>'.$analysis.'</td>
            <td><input name="detected[]" class="result_input" type="text" id="detected" value="'.$detected.'"></td>
            <td><input name="result[]" class="result_input" type="text" id="result" value="'.$result.'"></td>
            </tr>';
        }
        $output .= '</tbody> ';
    }
    echo $output;
}



if (isset($_GET['button_message'])) {
    require 'dbh.php';

    $order_id = $_GET['button_message'];

    $sql = "SELECT * FROM samples_database WHERE order_id = $order_id AND micro_analysis !='';";

    $end_result = 0;
    $count_query = mysqli_query($conn, $sql);
    while($row = mysqli_fetch_assoc($count_query)) {
        $end_result += substr_count($row['micro_analysis'], ",") + 1;
    }

    $sql2 = "SELECT * FROM results_database WHERE order_id = $order_id AND m_analysis_id !='' AND detected !='';";

    $count_query2 = mysqli_query($conn, $sql2);
    $end_result2 = mysqli_num_rows($count_query2);

    $output2 = '';

    if ($end_result !== $end_result2) { 

        $output2 .= '<h3 style="color: darkred;text-align: center;">Analysis not yet completed for report submission! Total analyses: '.$end_result.' Results entered: '.$end_result2.'</h3>';

    } else { 

        $output2 .= '<a type="button" style="text-decoration:none;color:white;" href="../server/server.php?complete_m_results='.$order_id.'"><button style="width: 50%;border-radius: 5px; background-color: white; border: 2px solid green;color: green;" type="button" class="button">Complete Order</button></a>';

    }

    echo $output2;

}

1 Ответ

0 голосов
/ 15 января 2019

Параметры, представленные как часть URL, например, ?submit, должны быть доступны через $_GET, а не $_POST.Из руководства для $_GET:

Ассоциативный массив переменных, переданных в текущий скрипт через параметры URL (он же строка запроса). Обратите внимание, что массив заполняется не только для запросов GET, но и для всех запросов со строкой запроса.

Так что в вашем коде вы должны изменить:

if (isset($_POST['submit'])) {

до

if (isset($_GET['submit'])) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...