How to update table column with array and for loop in php and mysql?

for ($key=0; $key < count($_POST['marks']); $key++) {

            $from_marks = $_POST['from'][$key];
            $get_marks = $_POST['marks'][$key];

            //echo $from_marks." ";
            if($get_marks > $from_marks){
                // header("location: ../../pages/marks.php?over=err");
                // break;

                echo "Cant add more marks <br/>";

            }
            else{
                echo $get_marks."<br/>";

                $update_marks_query = $db->prepare(
                    "UPDATE sc_marks SET get_marks='"
                    .$get_marks
                    ."' WHERE _sid='$sc_foreign_id' AND exam_type='$select_exam_type' ");
                $update_marks_query -> execute();
            }
}

The problem occurs when I execute the code, I got the last extracted value in each row of the table.

The result of the data after the update:

Data result after update

+4
source share
2 answers
    <?php
    include "./connection/config.php";

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

        $sc_foreign_id = $_POST['sc_foreign_id'];
        $select_exam_type = $_POST['select_exam_type'];

        for($key=0; $key<count($_POST['marks']); $key++){

            $from_marks = $_POST['from'][$key];
            $get_marks = $_POST['marks'][$key];

            echo $from_marks." ";


            if($get_marks > $from_marks){
                // header("location: ../../pages/marks.php?over=err");
                // break;

                echo "Marks Vadhu Chhe <br/>";

            }
            else{
                echo $get_marks."<br/>";

                $update_marks_query = $db->query("UPDATE sc_marks SET get_marks='".$get_marks."' WHERE _sid='$sc_foreign_id' AND exam_type='$select_exam_type' ");
            }
            // else{
                // $update_marks_query = $db->prepare("UPDATE sc_marks SET get_marks='$get_marks' WHERE _sid='$sc_foreign_id' ");
                // $update_done = $update_marks_query -> execute();
            // }
        }

        // if($update_done){
            // echo "Successfully Updated";
            // header("location: ../../pages/marks.php?add-marks=yes");
        // }
        // else{
            // echo "Error";
            // header("location: ../../pages/marks.php?add-marks=error");
        // }
    }
?>
+4
source

I suggest you prepare instructions for updating to the for loop

$query = $db->prepare("UPDATE sc_marks SET get_marks=? WHERE _sid=? AND exam_type=?");

for ($key=0; $key < count($_POST['marks']); $key++) {

            $from_marks = $_POST['from'][$key]; //add some validation here
            $get_marks = $_POST['marks'][$key]; //e.G with regex

            //echo $from_marks." ";
            if($get_marks > $from_marks){
                // header("location: ../../pages/marks.php?over=err");
                // break;

                echo "Cant add more marks <br/>";

            }
            else{
                echo $get_marks."<br/>";

                $query->execute($get_marks, $sc_foreign_id, $select_exam_type); 

            }
}

//Then attach the parameters during each iteration within the loop

Your current approach is a security risk, in addition to being less effective than it can be. Read about SQL injection.

0
source

Source: https://habr.com/ru/post/1610532/


All Articles