Table of Contents
1. Analysis of common misunderstandings and problems
2. Dynamic request processing based on AJAX
2.1 HTML Structure Optimization
2.2 JavaScript implements AJAX requests
2.3 PHP backend processing logic
3. Style optimization and complete examples
4. Summary and precautions
Home Web Front-end HTML Tutorial PHP table data processing: Avoid directly defining $_POST, and use AJAX to optimize interaction

PHP table data processing: Avoid directly defining $_POST, and use AJAX to optimize interaction

Sep 01, 2025 pm 03:21 PM

PHP table data processing: Avoid directly defining $_POST, and use AJAX to optimize interaction

This article aims to solve the problem of incorrectly trying to define the $_POST variable in client PHP code when processing row-level operations in PHP tables. We will dig deep into the limitations of this approach and provide a modern and efficient solution: leverage JavaScript's AJAX (fetch API) technology to enable dynamic data submission and processing without page refresh, thereby optimizing the user experience and ensuring the correctness of data transmission.

1. Analysis of common misunderstandings and problems

In web development, especially when dealing with dynamically generated tabular data, developers sometimes try to generate action buttons for each row of data in a loop and try to pass row IDs or other related parameters by assigning directly to $_POST in PHP code. For example, in the following code snippet:

 <?php for ($j = 0; $j < count($requests); $j): ?>
    <tr id="'" echo>' class="table-row">
       <form method="POST" action="../assets/php/accept-requests.inc.php">
          <?php $_POST[&#39;request_id&#39;] = $requests[$j][&#39;request_id&#39;];?> // Error practice<td> <button id="acceptReq" name="acceptReq" value="req_accepted" type="submit" class="btn btn-success">Accept</button> </td>
          <td> <button id="denyReq" name="denyReq" value="req_denied" type="submit" class="btn btn-danger">Deny</button> </td>
       </form>
    </tr>
<?php endfor; ?>

The core problem with this approach is that $_POST is a hyperglobal variable that is populated by the server only when an HTTP POST request reaches the server. When PHP generates HTML pages, code like this will be executed when the page is loaded, but its assignment results will not be retained and automatically submitted to the server with the form. When a user clicks the button to submit a form, the value of the form field (such as name="acceptReq" or name="denyReq") will only be included in the $_POST, and will not contain the request_id that was manually set on the server side.

To correctly pass the row ID and user actions (accept or reject) to the server, we need to adopt a more appropriate mechanism, usually using hidden fields or more modern AJAX technology.

2. Dynamic request processing based on AJAX

In order to achieve refresh-free and efficient row-level operations, it is recommended to use AJAX technology. Listen to the button click event through JavaScript, get the relevant data, and then send the request to the server asynchronously.

2.1 HTML Structure Optimization

First, we need to optimize the HTML structure, remove unnecessary

tags (because we will use AJAX instead of traditional form submissions), and use HTML5's data-* attribute to store the button's operation type. The row ID is directly stored in the id attribute of the element.
 <?php for ($j = 0; $j < count($requests); $j): ?>
    <tr id="'<?php" echo htmlspecialchars>' class="table-row">
        <?php $request_type = ($requests[$j][&#39;request_type&#39;] == &#39;1&#39;) ? &#39;candidate&#39; : &#39;voter&#39;;
        ?>
        <td class="school">= htmlspecialchars($request_type) ?></td>
        <td class="name">= htmlspecialchars($requests[$j]['first_name']) ?></td>
        <td class="candidates">= htmlspecialchars($requests[$j]['last_name']) ?></td>
        <td>
            <button data-type="'accept'" name="acceptReq" value="req_accepted" type="button" class="btn btn-success">Accept</button>
        </td>
        <td>
            <button data-type="'deny'" name="denyReq" value="req_denied" type="button" class="btn btn-danger">Deny</button>
        </td>
    </tr>
<?php endfor; ?>

Key changes:

  • Removed the tag outside each action button.
  • The type property of the button is changed to "button" to prevent the default form submission behavior.
  • Added data-type attribute (e.g. data-type='accept') to the button to distinguish operation types.
  • The id attribute of the element directly contains request_id, which is convenient for JavaScript to obtain.
  • The output data is escaped using htmlspecialchars to prevent XSS attacks.
  • 2.2 JavaScript implements AJAX requests

    Next, we use JavaScript's fetch API to handle button click events and send AJAX requests.

     <script>
        // Create a FormData object to build a POST request body let fd = new FormData();
    
        // traverse all buttons with name="acceptReq" or name="denyReq" document.querySelectorAll(&#39;button[name="acceptReq"], button[name="denyReq"]&#39;).forEach(bttn => {
            bttn.addEventListener(&#39;click&#39;, function(e) {
                // Block the default behavior of the button (if the type is not a button, there may be a default commit)
                e.preventDefault(); 
    
                // Find the nearest parent element upwards and get its ID
                let tr = this.parentNode.closest(&#39;tr&#39;);
    
                // Add the request ID and operation type to the FormData object fd.set(&#39;id&#39;, tr.id); // Get the <tr>&#39;s id as the request ID
                fd.set(&#39;type&#39;, this.dataset.type); // Get the data-type attribute of the button// Send POST request using the fetch API fetch(&#39;../assets/php/accept-requests.inc.php&#39;, { 
                    method: &#39;post&#39;, 
                    body: fd 
                })
                .then(r => r.text()) // The parsing server response is text.then(text => {
                    // The callback function alert(text); // The pop-up window displays the information returned by the server// Here you can update the DOM according to the server response, such as removing the processed line// tr.remove();
                })
                .catch(e => {
                    //Catch errors that occur during the request process console.error(&#39;AJAX request failed: %s&#39;, e);
                    alert(&#39;The operation failed, please try again later.&#39;);
                });
            });
        });
    </script>

    Code parsing:

    • FormData object: used to collect data in the form of key-value pairs and can automatically handle complex situations such as file uploads.
    • document.querySelectorAll(): Select all buttons that need to be listened to.
    • addEventListener('click', ...): Add a click event listener for each button.
    • e.preventDefault(): Blocks the default behavior of the button and ensures that the request is sent by JavaScript control.
    • this.parentNode.closest('tr'): Find the nearest parent element upwards through the event source (clicked button), thereby obtaining the data for that row.
    • tr.id: Get the id attribute of the element, that is, request_id.
    • this.dataset.type: Gets the data-type attribute value of the button.
    • fetch(): AJAX API provided by modern browsers for sending network requests. method: 'post' is specified as a POST request, body: fd sends the FormData object as the request body.
    • .then(): The response after the request is successfully processed. .text() parses the response body into plain text.
    • .catch(): Captures errors that occur during request or response processing.
    • 2.3 PHP backend processing logic

      In the server-side ../assets/php/accept-requests.inc.php file, you can access the submitted data like you would handle a normal POST request.

       <?php // accept-requests.inc.php
      
      if ($_SERVER[&#39;REQUEST_METHOD&#39;] === &#39;POST&#39;) {
          // Check and get the request ID
          $requestId = filter_input(INPUT_POST, &#39;id&#39;, FILTER_SANITIZE_NUMBER_INT);
          // Check and get the operation type $actionType = filter_input(INPUT_POST, &#39;type&#39;, FILTER_SANITIZE_STRING);
      
          if ($requestId && $actionType) {
              // Perform the corresponding database operation according to the operation type if ($actionType === &#39;accept&#39;) {
                  // Execute the logic of accepting requests, such as updating the database status // delete from requests where request_id = $requestId; // Example: If you delete echo after acceptance "Request {$requestId} is accepted.";
              } elseif ($actionType === &#39;deny&#39;) {
                  // Execute the logic of rejecting the request, such as deleting from the database // delete from requests where request_id = $requestId;
                  echo "Request{$requestId} has been rejected.";
              } else {
                  echo "Invalid operation type.";
              }
          } else {
              echo "The necessary request parameters are missing.";
          }
      } else {
          echo "Invalid request method.";
      }
      ?>

      Notes:

      • Security: Be sure to strictly verify and filter all data received from the client (such as using filter_input) to prevent security vulnerabilities such as SQL injection and XSS.
      • Database operation: Perform database addition, deletion, and modification operations based on actual business logic.
      • Response: The server should return a meaningful response, and the client JavaScript can update the UI according to this response.

      3. Style optimization and complete examples

      To provide a better user experience, some CSS styles can be added.

       <style>
          *{
            transition:ease-in-out all 100ms;
            font-family:monospace
          }
          th{
            background:rgba(50,50,100,0.5);
            color:white;
          }
          tr{
            margin:0.25rem;
          }
          tr:hover td{
            background:rgba(0,200,0,0.25);
          }
          td,
          th{
            margin:0.25rem;
            border:1px dotted rgba(0,0,0,0.3);
            padding:0.45rem
          }
          button:hover{
            cursor:pointer;
          }
          [data-type=&#39;accept&#39;]:hover{
            background:lime
          }
          [data-type=&#39;deny&#39;]:hover{
            background:red;
            color:white;
          }
      </style>
      
      
      Assignment Forename Surname Vote
      candidate Geronimo Bogtrotter
      candidate Horatio Nelson
      voter John Smith

      4. Summary and precautions

      Through the explanation of this article, we understand that it is invalid to directly define the $_POST variable in the client code in PHP. For scenarios such as table row-level operations that require dynamic interaction, AJAX is a better choice, which provides the following advantages:

      • Improve user experience: data submission and update can be completed without refreshing the entire page, making user operations more smooth.
      • Efficient data transmission: only send necessary data to reduce network load.
      • The front-end separation: the responsibilities are clearer, the front-end is responsible for UI interaction and data submission, and the back-end focuses on business logic and data processing.

      Important tips:

      1. Data Verification and Security: Always strictly verify, filter and escape all received data on the server side to prevent malicious input and security vulnerabilities.
      2. Error handling: A robust error handling mechanism should be implemented in both client JavaScript and server PHP, and timely feedback operation results or problems to users.
      3. DOM operation: After the AJAX request is successful, the client JavaScript should dynamically update the page's DOM based on the data returned by the server (for example, removing processed rows, update status, etc.) to maintain consistency between the UI and the data.

      Mastering AJAX technology is an integral part of modern web development, and it can help us build more responsive and user-friendly applications.

The above is the detailed content of PHP table data processing: Avoid directly defining $_POST, and use AJAX to optimize interaction. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to add an icon to your website title tab in HTML How to add an icon to your website title tab in HTML Aug 07, 2025 pm 11:30 PM

To add an icon to the website title bar, you need to link a favicon file in part of the HTML. The specific steps are as follows: 1. Prepare a 16x16 or 32x32 pixel icon file. It is recommended to use favicon.ico to name it and place it in the website root directory, or use modern formats such as PNG and SVG; 2. Add link tags to HTML, such as PNG or SVG formats, adjust the type attribute accordingly; 3. Optionally add high-resolution icons for mobile devices, such as AppleTouchIcon, and specify different sizes through the sizes attribute; 4. Follow best practices, place the icon in the root directory to ensure automatic detection, clear the browser cache after update, and check the correctness of the file path.

Why is my HTML image not showing up? Why is my HTML image not showing up? Aug 16, 2025 am 10:08 AM

First, check whether the src attribute path is correct, and ensure that the relative or absolute path matches the HTML file location; 2. Verify whether the file name and extension are spelled correctly and case-sensitive; 3. Confirm that the image file actually exists in the specified directory; 4. Use appropriate alt attributes and ensure that the image format is .jpg, .png, .gif or .webp widely supported by the browser; 5. Troubleshoot browser cache issues, try to force refresh or directly access the image URL; 6. Check server permission settings to ensure that the file can be read and not blocked; 7. Verify that the img tag syntax is correct, including the correct quotes and attribute order, and finally troubleshoot 404 errors or syntax problems through the browser developer tool to ensure that the image is displayed normally.

How to use the HTML abbr tag for abbreviations How to use the HTML abbr tag for abbreviations Aug 05, 2025 pm 12:54 PM

Using HTML tags can improve the accessibility and clarity of content; 1. Mark abbreviations or acronyms with abbreviations; 2. Add title attributes to unusual abbreviations to provide a complete explanation; 3. Use when the document first appears, avoiding duplicate annotations; 4. You can customize the style through CSS, and the default browser usually displays dotted underscores; 5. It helps screen reader users understand terms and enhance user experience.

How to add an icon to a button in HTML How to add an icon to a button in HTML Aug 07, 2025 pm 11:09 PM

Using FontAwesome can quickly add icons by introducing CDN and adding icon classes to buttons, such as Like; 2. Using labels to embed custom icons in buttons, the correct path and size must be specified; 3. Embed SVG code directly to achieve high-resolution icons and keep them consistent with the text color; 4. Spacing should be added through CSS and aria-label should be added to the icon buttons to improve accessibility; in summary, FontAwesome is most suitable for standard icons, pictures are suitable for custom designs, while SVG provides the best scaling and control, and methods should be selected according to project needs. FontAwesome is usually recommended.

How to use the bdo tag to override text direction in HTML How to use the bdo tag to override text direction in HTML Aug 16, 2025 am 09:32 AM

Thebdotagisusedtooverridethebrowser’sdefaulttextdirectionrenderingwhendealingwithmixedleft-to-rightandright-to-lefttext,ensuringcorrectvisualdisplaybyforcingaspecificdirectionusingthedirattributewithvalues"ltr"or"rtl",asdemonstrat

Extract nested URLs from dynamic web pages using R language: httpr and API interaction practice Extract nested URLs from dynamic web pages using R language: httpr and API interaction practice Aug 27, 2025 pm 07:06 PM

This tutorial explores the problem of crawling failure if JavaScript dynamically loads content when crawling URLs from web pages using the R language rvest package. The article explains in detail why traditional HTML parsing methods may be invalid and provides an efficient solution: by identifying and directly calling the API interface behind the web page, using the httr package to obtain JSON data, thereby successfully extracting the required information.

What is the difference between HTML id and class What is the difference between HTML id and class Aug 07, 2025 am 12:03 AM

The id must be unique. One id in each page can only be used for one element, and the class can be reused on multiple elements, and one element can have multiple classes; 2. Scenarios using id include: positioning a single specific element, link anchors within the page, JavaScript operates elements through id, and labels associated with form elements; scenarios using class include: applying the same style or behavior to multiple elements, building reusable UI components, and selecting multiple elements in JavaScript; 3. In CSS, targeting is done by #id selector and .class selector respectively, getElementById() is used for id, getEleme

How to highlight text with the  tag? How to highlight text with the tag? Aug 04, 2025 pm 04:29 PM

Use tags to highlight text semantically, often used to identify search results or important content; 2. Custom styles such as background colors, text colors and borders can be customized through CSS; 3. It should be used in contexts with practical significance, rather than just visual decoration to improve accessibility and SEO effects.

See all articles