簡體   English   中英

AJAX 調用后的 PHP POST 表單

[英]PHP POST form after AJAX call

問題:我的 php 表單沒有提交。
這是我的頁面:

在此處輸入圖片說明

它有一個 php 渲染的顏色列表:

<div class="table-container">
   <div>
      <table class="myTable" id="myTable">
         <tr class="header">
           <th>Variants</th>
           <th>Size</th>
           <th>Price (€)</th>
         </tr>

              <?php                             
                $current_name = $_GET['prod-name'];
                $get_product_det = "SELECT * FROM product_details WHERE product_name='$current_name' ORDER BY position";
                $run_product_det = mysqli_query($con, $get_product_det);
                while ($row_product_det = mysqli_fetch_array($run_product_det)){
                $id = $row_product_det['id'];
                $product_variant = $row_product_det['product_variant'];
                $product_size = $row_product_det['size'];
                $product_price = $row_product_det['price'];
                $position = $row_product_det['position'];

                echo "<tr data-index='$id' data-position='$position'>
                      <td><a id='$id'>$product_variant</a></td>
                      <td>$product_size</td>
                      <td>$product_price</td>
                      </tr>";
                };  
              ?>
      </table>
   </div>

每種顏色都有唯一的 ID。 單擊顏色會觸發工作正常的 AJAX 腳本:

<div class='product-det-div' id='product_details'>
            <script>
              var links = document.getElementsByTagName('a');
              for (var i = 0, il = links.length; i < il; i++) {
                links[i].onclick = function() {
                  var id = this.id;
                  var product_details = document.getElementById('product_details');
                  var request = new XMLHttpRequest();

                  request.open('POST', 'product_details.php?variant_id=' + id, true);

                  request.onreadystatechange = function() {
                    if (request.readyState === 4 & request.status === 200) {
                      product_details.innerHTML = request.responseText;
                    } else {
                      product_details.innerHTML = 'An error occurred during your request: ' + request.status + ' ' + request.statusText;
                    }
                  };

                  request.send();
                };
              };
            </script>
     </div>

在此處輸入圖片說明

當ajax調用發生時,頁面的URL會發生什么? 我正在通過 URL 傳遞顏色的 ID,但是當嘗試使用 PHP 獲取它時,它似乎沒有找到它。 這是頁面的代碼:

$current_id = $_REQUEST['variant_id'];

$get_product_det = "SELECT * FROM product_details WHERE id=$current_id";
$run_product_det = mysqli_query($con, $get_product_det);

while ($row_product_det = mysqli_fetch_array($run_product_det)){
$product_variant = $row_product_det['product_variant'];
$product_size = $row_product_det['size'];
$product_price = $row_product_det['price'];


    echo "
      <form action='' method='post'>
      <h2 style='margin-bottom: 20px;'>$product_variant</h2>
      <div><label>Nome Prodotto</label><input value='$product_variant'></div>
      <div><label>Dimensione</label><input value='$product_size' type='number' name='product_size'></div>
      <div><label>Prezzo (€)</label><input value='$product_price' id='product_price' name='product_price'></div>
      <button type='submit' name='edit_variant_btn'>Send</button>
      </form>
    ";

  if(isset($_POST['edit_variant_btn'])) {
      $variant = $_POST['product_size'];    
      $current_id = $_REQUEST['variant_id'];

      $update_size = "UPDATE product_details SET size = '$variant' WHERE id = '$current_id'"; 
      $run_update = mysqli_query($con, $update_size);

      if($run_update) {
  echo "<script>window.open('variable_product.php?prod-name=Polycolor', '_self');</script>";
  }
  }     


};

?>

感謝您的時間,任何幫助表示贊賞。

編輯:我嘗試了你們建議的所有更改,也嘗試了 $_REQUEST["variant_id"] 正如 Banujan Balendrakumar 所說,但仍然沒有結果。 我發現使其工作的唯一方法是從這里更改表單操作:

 <form action='' method='post'>

 <form action='product_details.php?variant_id=$current_id' method='post'>

這樣做是因為在單擊按鈕時,它會打開該頁面並從那里獲取 ID 值,但這只是解決問題的一種方法......還有其他想法嗎?

將$ _GET [“ variant_id”]替換為$ _REQUEST [“ variant_id”]

在此處輸入圖片說明

對我有用...

<div class="table-container">
   <div>
      <table class="myTable" id="myTable">
         <tr class="header">
           <th>Variants</th>
           <th>Size</th>
           <th>Price (€)</th>
         </tr>

              <?php                  
                $con = new mysqli('localhost','root','','check');
                $get_product_det = "SELECT * FROM product_details ORDER BY position";
                $run_product_det = mysqli_query($con, $get_product_det);
                while ($row_product_det = mysqli_fetch_array($run_product_det)){
                $id = $row_product_det['id'];
                $product_variant = $row_product_det['product_variant'];
                $product_size = $row_product_det['size'];
                $product_price = $row_product_det['price'];
                $position = $row_product_det['position'];

                echo "<tr data-index='$id' data-position='$position'>
                      <td><a id='$id'>$product_variant</a></td>
                      <td>$product_size</td>
                      <td>$product_price</td>
                      </tr>";
                };  
              ?>
      </table>
   </div>
   <div class='product-det-div' id='product_details'>
            <script>
              var links = document.getElementsByTagName('a');
              for (var i = 0, il = links.length; i < il; i++) {
                links[i].onclick = function() {
                  var id = this.id;
                  var product_details = document.getElementById('product_details');
                  var request = new XMLHttpRequest();

                  request.open('POST', 'product_details.php?variant_id=' + id, true);

                  request.onreadystatechange = function() {
                    if (request.readyState === 4 & request.status === 200) {
                      product_details.innerHTML = request.responseText;
                    } else {
                      product_details.innerHTML = 'An error occurred during your request: ' + request.status + ' ' + request.statusText;
                    }
                  };

                  request.send();
                };
              };
            </script>
     </div>

產品詳情

<?php

$current_id = $_REQUEST['variant_id'];
$con = new mysqli('localhost','root','','check');
$get_product_det = "SELECT * FROM product_details WHERE id=$current_id";
$run_product_det = mysqli_query($con, $get_product_det);

while ($row_product_det = mysqli_fetch_array($run_product_det)){
$product_variant = $row_product_det['product_variant'];
$product_size = $row_product_det['size'];
$product_price = $row_product_det['price'];


    echo "
      <form action='' method='post'>
      <h2 style='margin-bottom: 20px;'>$product_variant</h2>
      <div><label>Nome Prodotto</label><input value='$product_variant'></div>
      <div><label>Dimensione</label><input value='$product_size' type='number' name='product_size'></div>
      <div><label>Prezzo (€)</label><input value='$product_price' id='product_price' name='product_price'></div>
      <button type='submit' name='edit_variant_btn'>Send</button>
      </form>
    ";

  if(isset($_POST['edit_variant_btn'])) {
      $variant = $_POST['product_size'];    
      $current_id = $_REQUEST['variant_id'];

      $update_size = "UPDATE product_details SET size = '$variant' WHERE id = '$current_id'"; 
      $run_update = mysqli_query($con, $update_size);

      if($run_update) {
  echo "<script>window.open('variable_product.php?prod-name=Polycolor', '_self');</script>";
  }
  }     


};

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM