Ошибка отправки значений флажков в php через ajax при вызове результатов в php

#php #jquery #ajax

#php #jquery #ajax

Вопрос:

Я пытаюсь отправить значения 7 флажков jquery в php через ajax. Я пытаюсь поместить значения в массив и сериализовать массив в ajax. В конечном счете, я хотел бы использовать значения установленных флажков в качестве условий — это предложение MySQL WHERE. Мой код завершается ошибкой, когда я пытаюсь использовать результат в php, и таблица на этой странице не отображается. Однако, если я закомментирую строку $ _POST на этой странице php, отобразится моя таблица. При проверке кода в браузере я получаю 500 (внутренняя ошибка сервера), где должна отображаться таблица. У меня также был ajax, отображающий результат ошибки, который выглядел следующим образом:

[объект Object]

код:

Мой HTML-код:

    <label for="prestage_select">Prestage</label>
   <input type="checkbox" name="revenue_checkboxes[]" id="prestage_select" value="Prestage">


   <label for="validation_select">Validation</label>
   <input type="checkbox" name="revenue_checkboxes[]" id="validation_select" value="Validation"> 


   <label for="scheduling_select">Scheduling</label>
   <input type="checkbox" name="revenue_checkboxes[]" id="scheduling_select" value="Scheduling">


    <label for="production_select">Production</label>
    <input type="checkbox" name="revenue_checkboxes[]" id="production_select" value="Production">


    <label for="needsBOL_select">Needs BOL</label>
    <input type="checkbox" name="revenue_checkboxes[]" id="needsBOL_select" value="Needs BOL">


    <label for="shpAcct2Close_select">Shipped: Account to Close</label>
    <input type="checkbox" name="revenue_checkboxes[]" id="shpAcct2Close_select" value="Shipped: Acctg. To Close Out">


    <label for="movedToComplete_select">Moved to Complete for Selected Period</label>
    <input type="checkbox" name="revenue_checkboxes[]" id="movedToComplete_select" value="Complete">
  

Мой код Ajax:

     j("#create_submit").click(function(){

          //Send Revenue Status Values to php using ajax.     
              j.ajax({
                  method: 'POST',
                  url: 'revenue_report.php',
                  data: j('[name="revenue_checkboxes[]"]').serialize(),
                  success: function( response ) {
                          j('#fieldset_ReportDiv').html(response);
                          }
                   });


        //send Revenue Date values to php using ajax.
                  var revenuefrom = j('#revenuefrom').val();
                  var revenueto = j('#revenueto').val();
                  j.ajax ({
                      method: 'POST',
                      url: "revenue_report.php",
                      data: { revenuefromtext: revenuefrom, revenuetotext: revenueto },
                      success: function( response ) {
                          j('#fieldset_ReportDiv').html(response);
                          }
                  });
  

Мой PHP-код:

     <?php

    include('inc.php');


    //Get date range.

    $revenuefromajax=$_POST['revenuefromtext'];
    $revenuetoajax=$_POST['revenuetotext'];

    $revenuefromstring = strtotime($revenuefromajax);
    $revenuetostring = strtotime($revenuetoajax);

    $revenuefrom=date("Y-m-d", $revenuefromstring);
    $revenueto=date("Y-m-d", $revenuetostring);


    //Get selected Status Values.

    $revenuecheckboxes=$_POST('revenue_checkboxes'); //the page loads properly when this line is commented out. As soon as I remove the comment, it breaks.





    //connect  to the database 
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if(mysqli_connect_errno() ) {
      printf('Could not connect: ' . mysqli_connect_error());
      exit();
    }

   //echo 'MySQL Connected successfully.'."<BR>";


   $conn->select_db("some database name");  /////Database name has been changed for security reasons/////////

   if(! $conn->select_db('some database name') ) {

        echo 'Could not select database. '."<BR>";
    }

    // echo 'Successfully selected database. '."<BR>";

    //Select Data and Display it in a table.


    $sql = "SELECT invoices.id, invoices.orderdate, invoices.stagestatus, FORMAT(TRIM(LEADING '$' FROM invoices.totalprice), 2) AS totalprice, clients.company, lineitems.invoiceid, FORMAT((lineitems.width * lineitems.height) /144, 2 ) AS sqft, lineitems.quantity AS qty, FORMAT((invoices.totalprice / ((lineitems.width * lineitems.height) /144)), 2) as avgsqftrevenue, FORMAT((TRIM(LEADING '$' FROM invoices.totalprice) / lineitems.quantity), 2) AS avgunitrevenue
    FROM clients
    INNER JOIN invoices ON clients.id = invoices.clientid
    INNER JOIN lineitems ON invoices.id = lineitems.invoiceid
    WHERE invoices.orderdate BETWEEN '".$revenuefrom."' AND '".$revenueto."'
    ORDER BY invoices.id DESC";


    $result = $conn->query($sql);


    echo "<table id='revenueReportA' align='center' class='report_DT'>
    <tr>

    <th>Customer</th>
    <th>SG</th>
    <th>Revenue</th>
    <th>SQ FT</th>
    <th>AVG Revenue Per SQ FT</th>
    <th>Number of Units</th>
    <th>AVG Revenue Per Unit</th>
    </tr>";


     if ($result = $conn->query($sql)) {

        // fetch associative array 
      while ($row = $result->fetch_assoc()) {


         echo "<tr>";
         echo "<td>" . $row['company'] . "</td>";
         echo "<td>" . $row['id'] . "</td>";
         echo "<td>" ."$". $row['totalprice'] . "</td>";
         echo "<td>" . $row['sqft'] ."amp;nbsp;amp;nbsp;". "ft<sup>2</sup>". "</td>";
         echo "<td>" ."$". $row['avgsqftrevenue'] . "</td>";
         echo "<td>" . $row['qty'] . "</td>";
         echo "<td>" ."$". $row['avgunitrevenue'] . "</td>";
         echo "</tr>";
         } 

          echo "</table>";

      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



     //Free the result variable. 
     $result->free();

     }


     //Close the Database connection.
     $conn->close(); 


     ?>
  

Я пробовал несколько разных предложений по отправке значений в php, но ajax продолжает сбоить.

Примечание: я включил другой вызов ajax для revenueto и revenuefrom date. Этот вызов выполнен успешно, и моя таблица отображается правильно на основе этих дат, пока данные для флажков ajax закомментированы.

Примечание 2: извиняюсь, поскольку я новичок в ajax.

Спасибо!

Ответ №1:

Это $_POST неверно. Сериализуется имя / значение входных данных. Имя [] in во входном имени автоматически будет выбрано $_POST как массив для ключа revenue_checkboxes

попробуйте

 $revenuecheckboxes = $_POST['revenue_checkboxes'];// should be an array of the checked checkboxes
  

Комментарии:

1. Есть ли у кого-нибудь другие предложения по коду ajax?

2. предложения по чему конкретно?

3. Чтобы узнать, есть ли лучший способ отправить информацию или посмотреть, заключается ли проблема в попытке создать начальный массив?

4. В чем сейчас конкретная проблема? Если код не работает, вам нужно будет войти в него и выполнить некоторую базовую отладку. Проверьте свои журналы ошибок, если у вас 500 ошибок, или узнайте, как отображать ошибки. Узнайте, как проверять данные в javascript, используя встроенные инструменты разработчика браузера

Ответ №2:

ваш способ получения массива $revenuecheckboxes=$_POST('[name="revenue_checkboxes[]"]'); недействителен (не используйте здесь javascript; D) он должен быть следующим $revenuecheckboxes=$_POST['revenue_checkboxes'];

php автоматически обнаружит, что это массив, и инициализирует ‘revenuecheckboxes’ в массив с его значениями

Комментарии:

1. Я попытался изменить этот раздел кода, но я все еще сталкиваюсь с той же проблемой. Когда я пытаюсь просмотреть ответ в браузере, он сообщает, что не может просмотреть ответ, и когда я проверяю URL-адрес, страница не работает. Я думаю, что либо проблема с самим вызовом ajax, либо проблема с попыткой правильно расставить флажки. Однако я недостаточно знаю об этом.

2. что вы возвращаете в своем ответе, здесь неясно… возможно, проблема в чем-то позже в вашем коде .. продолжайте и отредактируйте свой вопрос с помощью вашего php-кода…