У меня есть форма, которая заполняет данные из базы данных, пользователь выбирает различные интересующие строки, нажимая на флажок. Все успешно работает, как бы я сейчас ни пытался переадресовать страницу при отправке формы, перейдите в одно из 2 мест в зависимости от количества выбранных строк. (галочки отмечены.) Вот текущий сценарий, сжатый по соображениям безопасности.
if(isset($_POST['submit'])){
$DELETE = "DELETE FROM job_picks WHERE ID='$userid'";
$wpdb->query($DELETE);
foreach($_POST['check_list'] as $selected){
$rowCount = count($_POST['ref']);
for ($i=0; $i<$rowCount;$i++)
{
if ($selected == $_POST['ref'][$i])
$compcode = $_POST['COMPCODE'][$i];
$note = $_POST['note'][$i] ; // changed for security reasons
$time = $_POST['time'][$i]; // changed for security reasons
$date = $_POST['date'][$i]; // changed for security reasons
$SQL = " left out for security reasons but is correctly populating data";
$wpdb->query($SQL);
echo "<script>window.location='https://example.com/step2/';</script>";
} ?>
<br class="clear">
<?php } ?>
<br class="clear">
<?php } ?>
<br class="clear">
<?php }
?>
Я пытался изменить линию
echo "<script>window.location='https://example.com/step2/';</script>";
в
if ($rowcount == 1) {
echo "<script>window.location='https://example.com/step3/';</script>";
}
else
echo "<script>window.location='https://example.com/step2/';</script>";
но только казалось, что отправляет все результаты на шаг 3, в отличие от только тех представлений, в которых проверен только один элемент. Любое понимание будет оценено, и фрагменты всегда полезны заранее.
Ответ
Причина, по которой они все обращаются к трем, заключается в том, что вы делаете перенаправление внутри цикла. То есть на итерации цикла 0 вы выполняете <script>window.location = 'bla'
и он пытается по существу перенаправить сразу (не сразу, но до того, как другие смогут что-то сделать)
Вам нужно переместить if
предложения вне и после блока цикла.
Другие заметки
POST
переменные прямо в запросы SQL. Пожалуйста.<br/>
«S. Если вы разделили свою логику и просматриваете правильно, нет нужды в HTML, засоренном в обработчиках отправки.Я видел ваш $rowCount
а также $rowount
Надеюсь это просто опечатка.
и вы можете отладить значение для каждого $rowCount
в петле. что-то вроде в вашем коде для отладки:
foreach($_POST['check_list'] as $selected){
$rowCount = count($_POST['ref']);
//print the debug data
print_r($rowCount, true );
}
die();
также убедитесь, что $_POST['ref']
является действительным.
и до сих пор нет подсказок, что случилось, пожалуйста, приложите данные отладки, чтобы другие люди могли знать, в чем проблема