Ввод значения флажка в переменную сеанса и последующее перенаправление

#php #html

#php #HTML

Вопрос:

Интересная (для меня) проблема здесь. У меня есть некоторые данные, возвращенные обратно из веб-службы. Что я пытаюсь сделать, так это создать страницу, которая при установке флажка автоматически перенаправляется на новую страницу и отображает эти конкретные данные.

Код в настоящее время выглядит следующим образом

 <table width="90%">
        <thead>
            <tr>
                <th class="col-md-4 text-center" width="25%">Title</th>
                <th class="col-md-2 text-center" width="25%">Venue</th>
                <th class="col-md-4 text-center" width="20%">Date</th>
                <th class="col-md-1 text-center" width="20%">Length</th>
                <th class="col-md-1 text-center" width="10%">View</th>
            </tr>
        </thead>
        <tbody>
        <?php
                $url = getUrlForMethod("Appointments", $_SESSION["Username"]);
                $response = callGetAPI($url);
                $decoded = json_decode($response);
                foreach($decoded->AppointmentList as $d)
                {
                ?>
                <tr>
                    <td width="25%"><?php echo $d->AppointmentList->MeetingName; ?></td>
                    <td width="25%"><?php echo $d->AppointmentList->Venue; ?></td>
                    <td width="20%"><?php echo $d->AppointmentList->DateTimeFrom; ?></td>
                    <td width="20%"><?php echo $d->AppointmentList->Length; ?></td>
                    <td width="10%"><input type="checkbox" name="view" value="<?php echo $d->AppointmentList->MeetingId; ?>" onclick="<?php $_SESSION["meetingId"]=$d->AppointmentList->MeetingId;?>; Javascript:window.location.href='showmeeting.php'"></td>
                </tr>
                <?php
                }
                ?>
        </tbody>
    </table>
  

Я не могу использовать форму здесь, хотя (часть спецификаций).

Проблема в том, что независимо от того, какой флажок установлен, это только последний из списка, который когда-либо отображается. Возможно ли установить переменную сеанса в качестве значения для установленного флажка, а затем перенаправить, но без формы?

Комментарии:

1. Вероятно, здесь проблема с html … у каждого флажка есть уникальный идентификатор? если нет — тогда ваш браузер просто предоставит значение последнего. Возможно, вам потребуется изменить свой код, чтобы у каждого флажка был уникальный идентификатор (а не просто уникальное значение)

2. У вас проблема в вашей логике! вы просто не можете использовать onclick="<?php $_SESSION["meetingId"]=$d->AppointmentList->MeetingId;?>; и ожидать, что сеанс будет установлен на стороне сервера при нажатии на флажок на стороне клиента! Я не уверен, что вы хотите сделать, или если использовать session для того, что вы хотите сделать, это лучшая практика или нет. но если вы действительно хотите использовать, вы можете использовать ajax в onclick событии и отправить ID в server-side script и установить сеанс в этом скрипте, тогда результат ajax вернется, перенаправьте страницу.

3. @TarynEast — все идентификаторы уникальны. @EhsanT — Я бы подумал, что этот код ввел бы значение при создании флажка

Ответ №1:

Не совсем уверен, что это действительно то, что вы хотите, но если я буду точно следовать описанию в 1-м абзаце вашего вопроса, вы могли бы просто добавить MeetingId в качестве параметра запроса к URL, на который вы перенаправляете.

Затем ваш something.php скрипт должен использовать этот параметр (из $_GET['meetingid'] , а не из некоторых $_SESSION данных) для создания желаемой страницы, которая заменяет текущую, как вы просили.

Таким образом, это может выглядеть следующим образом:

 <table width="90%">
    <thead>
        <tr>
            <th class="col-md-4 text-center" width="25%">Title</th>
            <th class="col-md-2 text-center" width="25%">Venue</th>
            <th class="col-md-4 text-center" width="20%">Date</th>
            <th class="col-md-1 text-center" width="20%">Length</th>
            <th class="col-md-1 text-center" width="10%">View</th>
        </tr>
    </thead>
    <tbody>
<?php
$url = getUrlForMethod("Appointments", $_SESSION["Username"]);
$response = callGetAPI($url);
$decoded = json_decode($response);
foreach($decoded->AppointmentList as $d) {
?>
        <tr>
            <td width="25%"><?php echo $d->AppointmentList->MeetingName; ?></td>
            <td width="25%"><?php echo $d->AppointmentList->Venue; ?></td>
            <td width="20%"><?php echo $d->AppointmentList->DateTimeFrom; ?></td>
            <td width="20%"><?php echo $d->AppointmentList->Length; ?></td>
            <td width="10%">
                <input type="checkbox" onclick=
                  "javascript: window.location.href = 'showmeeting.php?meetingid='  
                  '<?php echo $d->AppointmentList->MeetingId; ?>'">
            </td>
        </tr>
<?php
}
?>
    </tbody>
</table>
  

Вы заметите, что я удалил оба name и value атрибуты <input> , поскольку они здесь бесполезны.

Кстати, я немного удивлен всем этим $d->AppointmentList->... : написано так, это означает, что ваш $decoded ответ имеет AppointmentList свойство, содержащее список объектов, которые сами обладают AppointmentList свойством… Вы уверены в этом?