मुझे चेक किए गए चेकबॉक्स से mysqli में सही पंक्ति को अपडेट करने का सही तरीका नहीं मिल रहा है। अगर मैं बटन सबमिट करता हूं तो यह सभी फ़ील्ड अपडेट करता है। अगर मैं लूप के बाहर ifset का उपयोग करता हूं तो यह केवल पहली पंक्ति के साथ परिवर्तन करता है। क्या आप कृपया कुछ सुझा सकते हैं?

function display_orders(){

          $query = query("SELECT * FROM orders ORDER BY order_id DESC");
          confirm($query);

        while($row = fetch_array($query)) {

          $order_id = $row['order_id'];
          $order_amount = $row['order_amount'];
          $order_transaction = $row['order_transaction'];
          $order_status = $row['order_status'];
          $order_currency = $row['order_currency'];
          $order_date = $row['order_date'];
          $order_date = strtotime($order_date);
          $order_date = date('d-m-Y', $order_date);

          $checked = $row['mark_as_done'];

// 

    check if is mark as done or empty
        if($checked === "done"){

         echo $checked_status = "checked";

        }else{
          echo $checked_status = "";
        }

if isset submit updates the table

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

          global $connection;

          $value = $_POST['done'];
          $update_query = "UPDATE orders SET mark_as_done=? WHERE order_id =?;";

          $stmt = mysqli_stmt_init($connection);

          if(!mysqli_stmt_prepare($stmt, $update_query)){

            echo "SQL failed";
          }
          else {
            mysqli_stmt_bind_param($stmt, "ss", $value, $order_id);
            mysqli_stmt_execute($stmt);
          }
        }
//read information from database

        $orders = <<<DELIMETER

        <tr>
            <td><a href="index.php?order_details&id={$order_id}">{$order_id}</a></td>
            <td>{$order_transaction}</td>
            <td>{$order_amount}</td>
            <td>{$order_currency}</td>
            <td>{$order_status}</td>
            <td>{$order_date}</td>
            <td><a class="btn btn-danger" href="index.php?delete_order_id={$order_id}"><span class="glyphicon glyphicon-remove"></span></a></td>
            <td>
form to get information about checked fields

              <form class="" action="index.php?orders" method="post">
              <input type="checkbox" name="done" value="done" {$checked_status}>
              <input class="btn btn-primary btn-sm" type="submit" name="submit" value="submit">

              </form>
            </td>

        </tr>

        DELIMETER;
        echo $orders;
           }
}

आसान काम की तरह लगता है लेकिन पता नहीं लगा सकता।

-2
Gatis Vagulis 10 सितंबर 2019, 18:00

1 उत्तर

सबसे बढ़िया उत्तर

यह थोड़ा भ्रमित/घुसपैठ है लेकिन शायद यह आपके द्वारा किए जा रहे प्रयास (मुझे लगता है) के साथ अधिक इनलाइन हो सकता है। जेनरेट किए गए फॉर्म को रिकॉर्ड को संदर्भित करने के लिए किसी तरह की आवश्यकता होती है जिसे वे अपडेट करना चाहते हैं - इस मामले में order_id सही विकल्प प्रतीत होता है। इसके लिए फ़ॉर्म के साथ ऑर्डर_आईडी मान वाला एक छिपा हुआ फ़ील्ड सबमिट किया जाएगा (अभी भी स्पष्ट नहीं है कि done को "done" के मान की आपूर्ति के अलावा और क्या करना चाहिए)

function display_orders(){
        $query = query( "SELECT * FROM orders ORDER BY order_id DESC");
        confirm($query);

        while($row = fetch_array($query)) {

            $order_id = $row['order_id'];
            $order_amount = $row['order_amount'];
            $order_transaction = $row['order_transaction'];
            $order_status = $row['order_status'];
            $order_currency = $row['order_currency'];
            $order_date = $row['order_date'];
            $order_date = strtotime($order_date);
            $order_date = date('d-m-Y', $order_date);

            $checked = $row['mark_as_done'];


            if( $checked === "done" ){
                $checked_status = "checked";
            }else{
                $checked_status = "";
            }

        $orders = <<<DELIMITER
        <tr>
            <td><a href="index.php?order_details&id={$order_id}">{$order_id}</a></td>
            <td>{$order_transaction}</td>
            <td>{$order_amount}</td>
            <td>{$order_currency}</td>
            <td>{$order_status}</td>
            <td>{$order_date}</td>
            <td><a class="btn btn-danger" href="index.php?delete_order_id={$order_id}"><span class="glyphicon glyphicon-remove"></span></a></td>
            <td>

              <form action='index.php?orders' method='post'>
                  <input type='checkbox' name='done' value='done' {$checked_status} />
                  <input type='hidden' name='order_id' value='{$order_id}' />
                  <input class='btn btn-primary btn-sm' type='submit' name='submit' value='submit'>
              </form>
            </td>
        </tr>

        DELIMITER;
        echo $orders;
    }




    if( isset( $_POST['submit'], $_POST['order_id'], $_POST['done'] ) ){

        global $connection;

        $id = $_POST['order_id'];
        $value = $_POST['done'];

        $update_query = "UPDATE orders SET mark_as_done=? WHERE order_id =?;";

        $stmt = mysqli_stmt_init($connection);

        if( !mysqli_stmt_prepare($stmt, $update_query)){
            echo "SQL failed";
        } else {
            mysqli_stmt_bind_param( $stmt, "ss", $value, $id );
            mysqli_stmt_execute($stmt);
        }
    }
}
0
Professor Abronsius 10 सितंबर 2019, 18:05