简体   繁体   中英

PHP - Submitting date/time/select input values from foreach loop through $_POST returns nothing

I'm having an issue in submitting input values in a form from a page to another, with the post method; when I try getting the values with $_POST['input_name'], it doesn't return anything, and I get a "Undefined index" notice on the page I'm sending the data to. The only value that is passed correclty is ['studentid']. the form is inside of a foreach loop. I'm pretty new to php, so I might be ignoring something really basic.

first page code:

<?php
$aStudents = NULL;
$aStudents = $MobilityClass->GetFlowStudents($id_flow, $oConn);

if (count((array) $aStudents) > 0) {
    $k = 0;
    foreach ($aStudents as $aResult) {
        $k = $k + 1;
        ?>
        <tr>
            <td><?php echo($k); ?></td>
            <td><a class="" title="edit" href="student.php?id_student=<?php echo($aResult['id_student']); ?>"><?php
        echo($aResult['student_surname']);
        echo(' ');
        echo($aResult['student_name']);
        ?> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>
                    <?php
                    $studentid = "";
                    $studentid = $aResult['id_student'];
                    ?>
            </td>
            <td>
                <?php
                $data_par = null;
                $datap = null;
                $datap = mysqli_query($oConn, "SELECT DATE_FORMAT(data_partenza, '%d-%m-%Y') as data_partenza from flight_details where id_student = " . $studentid . ";");
                $data_par = mysqli_fetch_array($datap);
                if ((string) $data_par[0] == '00-00-0000') {
                    $data_par[0] = null;
                    $formdatea = null;
                } else {
//                                       echo $data_par[0];
                    $formdatep = DateTime::createFromFormat('d-m-Y', $data_par[0])->format('Y-m-d');
                }
                echo $formdatep;
                ?>
                <input  form="update_form" value="<?php echo $formdatep; ?>"  class="form-control" type="date" name="data_partenza">
                <input form="update_form" type="hidden" value="<?php echo $url; ?>" name="url">

            </td>
            <td>
                <?php
                $data_arr = null;
                $dataa = null;
                $dataa = mysqli_query($oConn, "SELECT DATE_FORMAT(data_arrivo, '%d-%m-%Y') as data_arrivo from flight_details where id_student = " . $studentid . ";");
                $data_arr = mysqli_fetch_array($dataa);
                if ((string) $data_arr[0] == '00-00-0000') {
                    $data_arr[0] = null;
                    $formdatea = null;
                } else {
//                                       echo $data_par[0];
                    $formdatea = DateTime::createFromFormat('d-m-Y', $data_arr[0])->format('Y-m-d');
                }
                echo $formdatea;
                ?>
                <input form="update_form" type="date" name="data_arrivo" class="form-control" id="name" value="<?php echo $formdatea; ?>">
            </td>
            <td>
                <?php
                $orap = mysqli_query($oConn, "SELECT DATE_FORMAT(ora_partenza, '%H:%i') as ora_partenza from flight_details where id_student = " . $studentid . ";");
                $ora_par = mysqli_fetch_array($orap);
                ?>
                <input form="update_form" type="time" name="ora_partenza" class="form-control" id="name" value="<?php echo $ora_par[0]; ?>">
            </td>
            <td>
                <?php
                $oraa = mysqli_query($oConn, "SELECT DATE_FORMAT(ora_arrivo, '%H:%i') as ora_arrivo from flight_details where id_student = " . $studentid . ";");
                $ora_arr = mysqli_fetch_array($oraa);
                ?>
                <input form="update_form" type="time" name="ora_arrivo" class="form-control" id="name" value="<?php echo $ora_arr[0]; ?>">
            </td>
            <td>
                <select form="update_form" name="luogo_partenza" class=" form-control" >
                    <?php
                    $departure = mysqli_query($oConn, "select luogo_partenza from flight_details where id_student = " . $studentid . ";");
                    $loc_departure = mysqli_fetch_array($departure);
                    $countries = array();
                    $countries = mysqli_query($oConn, "select id,name from countries");

                    foreach ($countries as $country) {
                        if (trim($loc_departure[0]) == trim($country['name'])) {
                            $selected = 'selected';
                        } else {
                            $selected = '';
                        }
                        echo '<option value="' . $country['name'] . '"' . $selected . '>' . $country['name'] . '</option>';
                    }
                    ?>
                </select>
            </td>
            <td>
                <!--class="selectpicker"-->
                <select form="update_form" name="luogo_arrivo" class=" form-control" >
                    <?php
                    $arrival = mysqli_query($oConn, "select luogo_arrivo from flight_details where id_student = " . $studentid . ";");
                    $loc_arrival = mysqli_fetch_array($arrival);
//                                         echo $loc_arrival[0];
                    $countries = array();
                    $countries = mysqli_query($oConn, "select id,name from countries");

                    foreach ($countries as $country) {
                        if ($loc_arrival[0] == $country['name']) {
                            $selected = 'selected';
                        } else {
                            $selected = '';
                        }
                        echo '<option value="' . $country['name'] . '"' . $selected . '>' . $country['name'] . '</option>';
                    }
                    ?>
                </select>
            </td>
            <td style="align-content: center;">
                <form id="update_form" action="update-flight-details.php" method="post">
                    <?php echo $studentid ?>
                    <input type="hidden" value="<?php echo $studentid; ?>" name="studentid">
                    <button type="submit" name="update" class="btn-success btn btn-sm">Save</button>
                </form>
            </td>
        </tr>
    <?php }
} ?>

second page code:

<?php

if (isset($_POST["update"])) {
    $url = $_POST['url'];
    echo $_POST['studentid'];
    echo $_POST['data_partenza'];
    echo $_POST['luogo_arrivo'];

    if (!isset($_POST['data_partenza'])) {
        $_POST['data_partenza'] = null;
    }
    if (!isset($_POST['data_arrivo'])) {
        $_POST['data_arrivo'] = null;
    }
    if (!isset($_POST['ora_partenza'])) {
        $_POST['ora_partenza'] = null;
    }
    if (!isset($_POST['ora_arrivo'])) {
        $_POST['ora_arrivo'] = null;
    }
    if (!isset($_POST['luogo_partenza'])) {
        $_POST['luogo_partenza'] = null;
    }
    if (!isset($_POST['luogo_arrivo'])) {
        $_POST['luogo_arrivo'] = null;
    }


    mysqli_query($oConn, "
            UPDATE flight_details SET 
                    data_partenza = '" . $_POST['data_partenza'] . "',
                    data_arrivo = '" . $_POST['data_arrivo'] . "',
                    ora_partenza = '" . $_POST['ora_partenza'] . "',
                    ora_arrivo = '" . $_POST['ora_arrivo'] . "',
                    luogo_partenza = '" . $_POST['luogo_partenza'] . "',
                    luogo_arrivo = '" . $_POST['luogo_arrivo'] . "'
                    where id_student = " . $_POST['studentid'] . ";
        ");
}?>

I lost all day on this, help please :')

EDIT: I also created the code to update all students together, I wrote it just as the one I wrote above, and that one works. here it is:

1st page:

<tr>
    <td></td>
    <td>All students</td>

    <td>
        <input form="update_all_form" type="date" name="data_partenza_all" class="form-control" id="name"   value="">
        <input form="update_all_form" type="hidden" value="<?php echo $url; ?>" name="urlall">
    </td>
    <td>
        <input form="update_all_form"type="date" name="data_arrivo_all" class="form-control" id="name"   value="">
    </td>
    <td>
        <input form="update_all_form" type="time" name="ora_partenza_all" class="form-control" id="name"   value="">
    </td>
    <td>
        <input form="update_all_form" type="time" name="ora_arrivo_all" class="form-control" id="name"  value="">
    </td>
    <td>
        <select form="update_all_form" name="luogo_partenza_all" class=" form-control">
            <?php
            $countries = array();
            $countries = mysqli_query($oConn, "select id,name from countries");
            foreach ($countries as $country) {
            echo '<option value="'.$country['name'].'">'.$country['name'].'</option>';
            }
            ?>
        </select>
    </td>
    <td>
        <select form="update_all_form" name="luogo_arrivo_all" class=" form-control">
            <?php
            $countries = array();
            $countries = mysqli_query($oConn, "select id,name from countries");
            foreach ($countries as $country) {
            echo '<option value="'.$country['name'].'">'.$country['name'].'</option>';
            }
            ?>
        </select>
    </td>

    <td style="align-content: center;">
        <form id="update_all_form" action="update-flight-details.php" method="post">
            <button type="submit" name="update_all" class="btn-success btn btn-sm">Save</button>
        </form>
    </td>

</tr>
</thead>
<tbody>

2nd page:

else if (isset($_POST["update_all"])){
    $urlall=$_POST['urlall'];
    mysqli_query($oConn, 
        "
            UPDATE flight_details SET 
                    data_partenza = '".$_POST['data_partenza_all']."',
                    data_arrivo = '".$_POST['data_arrivo_all']."',
                    ora_partenza = '".$_POST['ora_partenza_all']."',
                    ora_arrivo = '".$_POST['ora_arrivo_all']."',
                    luogo_partenza = '".$_POST['luogo_partenza_all']."',
                    luogo_arrivo = '".$_POST['luogo_arrivo_all']."';
        ");
}

You are opening form tag after elements are declared. Form elements should be wrapped inside opening and closing form tags to fetch data.

first page code:

<form id="update_form" action="update-flight-details.php" method="post">
<?php
$aStudents = NULL;
$aStudents = $MobilityClass->GetFlowStudents($id_flow, $oConn);

if (count((array) $aStudents) > 0) {
    $k = 0;
    foreach ($aStudents as $aResult) {
        $k = $k + 1;
        ?>
        <tr>
            <td><?php echo($k); ?></td>
            <td><a class="" title="edit" href="student.php?id_student=<?php echo($aResult['id_student']); ?>"><?php
        echo($aResult['student_surname']);
        echo(' ');
        echo($aResult['student_name']);
        ?> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>
                    <?php
                    $studentid = "";
                    $studentid = $aResult['id_student'];
                    ?>
            </td>
            <td>
                <?php
                $data_par = null;
                $datap = null;
                $datap = mysqli_query($oConn, "SELECT DATE_FORMAT(data_partenza, '%d-%m-%Y') as data_partenza from flight_details where id_student = " . $studentid . ";");
                $data_par = mysqli_fetch_array($datap);
                if ((string) $data_par[0] == '00-00-0000') {
                    $data_par[0] = null;
                    $formdatea = null;
                } else {
//                                       echo $data_par[0];
                    $formdatep = DateTime::createFromFormat('d-m-Y', $data_par[0])->format('Y-m-d');
                }
                echo $formdatep;
                ?>
                <input  form="update_form" value="<?php echo $formdatep; ?>"  class="form-control" type="date" name="data_partenza">
                <input form="update_form" type="hidden" value="<?php echo $url; ?>" name="url">

            </td>
            <td>
                <?php
                $data_arr = null;
                $dataa = null;
                $dataa = mysqli_query($oConn, "SELECT DATE_FORMAT(data_arrivo, '%d-%m-%Y') as data_arrivo from flight_details where id_student = " . $studentid . ";");
                $data_arr = mysqli_fetch_array($dataa);
                if ((string) $data_arr[0] == '00-00-0000') {
                    $data_arr[0] = null;
                    $formdatea = null;
                } else {
//                                       echo $data_par[0];
                    $formdatea = DateTime::createFromFormat('d-m-Y', $data_arr[0])->format('Y-m-d');
                }
                echo $formdatea;
                ?>
                <input form="update_form" type="date" name="data_arrivo" class="form-control" id="name" value="<?php echo $formdatea; ?>">
            </td>
            <td>
                <?php
                $orap = mysqli_query($oConn, "SELECT DATE_FORMAT(ora_partenza, '%H:%i') as ora_partenza from flight_details where id_student = " . $studentid . ";");
                $ora_par = mysqli_fetch_array($orap);
                ?>
                <input form="update_form" type="time" name="ora_partenza" class="form-control" id="name" value="<?php echo $ora_par[0]; ?>">
            </td>
            <td>
                <?php
                $oraa = mysqli_query($oConn, "SELECT DATE_FORMAT(ora_arrivo, '%H:%i') as ora_arrivo from flight_details where id_student = " . $studentid . ";");
                $ora_arr = mysqli_fetch_array($oraa);
                ?>
                <input form="update_form" type="time" name="ora_arrivo" class="form-control" id="name" value="<?php echo $ora_arr[0]; ?>">
            </td>
            <td>
                <select form="update_form" name="luogo_partenza" class=" form-control" >
                    <?php
                    $departure = mysqli_query($oConn, "select luogo_partenza from flight_details where id_student = " . $studentid . ";");
                    $loc_departure = mysqli_fetch_array($departure);
                    $countries = array();
                    $countries = mysqli_query($oConn, "select id,name from countries");

                    foreach ($countries as $country) {
                        if (trim($loc_departure[0]) == trim($country['name'])) {
                            $selected = 'selected';
                        } else {
                            $selected = '';
                        }
                        echo '<option value="' . $country['name'] . '"' . $selected . '>' . $country['name'] . '</option>';
                    }
                    ?>
                </select>
            </td>
            <td>
                <!--class="selectpicker"-->
                <select form="update_form" name="luogo_arrivo" class=" form-control" >
                    <?php
                    $arrival = mysqli_query($oConn, "select luogo_arrivo from flight_details where id_student = " . $studentid . ";");
                    $loc_arrival = mysqli_fetch_array($arrival);
//                                         echo $loc_arrival[0];
                    $countries = array();
                    $countries = mysqli_query($oConn, "select id,name from countries");

                    foreach ($countries as $country) {
                        if ($loc_arrival[0] == $country['name']) {
                            $selected = 'selected';
                        } else {
                            $selected = '';
                        }
                        echo '<option value="' . $country['name'] . '"' . $selected . '>' . $country['name'] . '</option>';
                    }
                    ?>
                </select>
            </td>
            <td style="align-content: center;">
                    <?php echo $studentid ?>
                    <input type="hidden" value="<?php echo $studentid; ?>" name="studentid">
                    <button type="submit" name="update" class="btn-success btn btn-sm">Save</button>
            </td>
        </tr>
    <?php }
} ?>
</form>

Try the above code.

You all fields which you want in second page must be within <form id="update_form" action="update-flight-details.php" method="post"> tag

So Just cut <form id="update_form" action="update-flight-details.php" method="post"> tag and put before the <?php $aStudents = NULL;

And cut </form> and put it after <?php } } ?>

This will work for you. Also I just put whole code for you.

  <form id="update_form" action="update-flight-details.php" method="post">
        <?php
        $aStudents = NULL;
        $aStudents = $MobilityClass->GetFlowStudents($id_flow, $oConn);

        if (count((array) $aStudents) > 0) {
            $k = 0;
            foreach ($aStudents as $aResult) {
                $k = $k + 1;
                ?>
                <tr>
                    <td><?php echo($k); ?></td>
                    <td><a class="" title="edit" href="student.php?id_student=<?php echo($aResult['id_student']); ?>"><?php
                echo($aResult['student_surname']);
                echo(' ');
                echo($aResult['student_name']);
                ?> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>
                            <?php
                            $studentid = "";
                            $studentid = $aResult['id_student'];
                            ?>
                    </td>
                    <td>
                        <?php
                        $data_par = null;
                        $datap = null;
                        $datap = mysqli_query($oConn, "SELECT DATE_FORMAT(data_partenza, '%d-%m-%Y') as data_partenza from flight_details where id_student = " . $studentid . ";");
                        $data_par = mysqli_fetch_array($datap);
                        if ((string) $data_par[0] == '00-00-0000') {
                            $data_par[0] = null;
                            $formdatea = null;
                        } else {
        //                                       echo $data_par[0];
                            $formdatep = DateTime::createFromFormat('d-m-Y', $data_par[0])->format('Y-m-d');
                        }
                        echo $formdatep;
                        ?>
                        <input  form="update_form" value="<?php echo $formdatep; ?>"  class="form-control" type="date" name="data_partenza">
                        <input form="update_form" type="hidden" value="<?php echo $url; ?>" name="url">

                    </td>
                    <td>
                        <?php
                        $data_arr = null;
                        $dataa = null;
                        $dataa = mysqli_query($oConn, "SELECT DATE_FORMAT(data_arrivo, '%d-%m-%Y') as data_arrivo from flight_details where id_student = " . $studentid . ";");
                        $data_arr = mysqli_fetch_array($dataa);
                        if ((string) $data_arr[0] == '00-00-0000') {
                            $data_arr[0] = null;
                            $formdatea = null;
                        } else {
        //                                       echo $data_par[0];
                            $formdatea = DateTime::createFromFormat('d-m-Y', $data_arr[0])->format('Y-m-d');
                        }
                        echo $formdatea;
                        ?>
                        <input form="update_form" type="date" name="data_arrivo" class="form-control" id="name" value="<?php echo $formdatea; ?>">
                    </td>
                    <td>
                        <?php
                        $orap = mysqli_query($oConn, "SELECT DATE_FORMAT(ora_partenza, '%H:%i') as ora_partenza from flight_details where id_student = " . $studentid . ";");
                        $ora_par = mysqli_fetch_array($orap);
                        ?>
                        <input form="update_form" type="time" name="ora_partenza" class="form-control" id="name" value="<?php echo $ora_par[0]; ?>">
                    </td>
                    <td>
                        <?php
                        $oraa = mysqli_query($oConn, "SELECT DATE_FORMAT(ora_arrivo, '%H:%i') as ora_arrivo from flight_details where id_student = " . $studentid . ";");
                        $ora_arr = mysqli_fetch_array($oraa);
                        ?>
                        <input form="update_form" type="time" name="ora_arrivo" class="form-control" id="name" value="<?php echo $ora_arr[0]; ?>">
                    </td>
                    <td>
                        <select form="update_form" name="luogo_partenza" class=" form-control" >
                            <?php
                            $departure = mysqli_query($oConn, "select luogo_partenza from flight_details where id_student = " . $studentid . ";");
                            $loc_departure = mysqli_fetch_array($departure);
                            $countries = array();
                            $countries = mysqli_query($oConn, "select id,name from countries");

                            foreach ($countries as $country) {
                                if (trim($loc_departure[0]) == trim($country['name'])) {
                                    $selected = 'selected';
                                } else {
                                    $selected = '';
                                }
                                echo '<option value="' . $country['name'] . '"' . $selected . '>' . $country['name'] . '</option>';
                            }
                            ?>
                        </select>
                    </td>
                    <td>
                        <!--class="selectpicker"-->
                        <select form="update_form" name="luogo_arrivo" class=" form-control" >
                            <?php
                            $arrival = mysqli_query($oConn, "select luogo_arrivo from flight_details where id_student = " . $studentid . ";");
                            $loc_arrival = mysqli_fetch_array($arrival);
        //                                         echo $loc_arrival[0];
                            $countries = array();
                            $countries = mysqli_query($oConn, "select id,name from countries");

                            foreach ($countries as $country) {
                                if ($loc_arrival[0] == $country['name']) {
                                    $selected = 'selected';
                                } else {
                                    $selected = '';
                                }
                                echo '<option value="' . $country['name'] . '"' . $selected . '>' . $country['name'] . '</option>';
                            }
                            ?>
                        </select>
                    </td>
                    <td style="align-content: center;">

                            <?php echo $studentid ?>
                            <input type="hidden" value="<?php echo $studentid; ?>" name="studentid">
                            <button type="submit" name="update" class="btn-success btn btn-sm">Save</button>

                    </td>
                </tr>
            <?php }
        } ?>

         </form>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM