Отобразить 2 разных URL-адреса в зависимости от результатов отправки формы - PullRequest
0 голосов
/ 06 июля 2018

У меня есть форма, которая заполняет данные из базы данных, пользователь выбирает различные интересующие строки, нажимая на флажок. Все успешно работает, как бы я сейчас ни пытался переадресовать страницу при отправке формы, перейдите в одно из 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, а не только те заявки, в которых проверен только один элемент. Любое понимание будет оценено, и фрагменты всегда полезны заранее.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Ответ

Причина, по которой они все идут на три, в том, что вы делаете перенаправление внутри цикла Это означает, что на итерации цикла 0 вы выполняете <script>window.location = 'bla', и он пытается по существу перенаправить сразу (не сразу, но до того, как другие смогут что-либо сделать)

Вам необходимо переместить предложения if снаружи, а затем в блок цикла.

Другие заметки

  • Пожалуйста, не передавайте POST переменные прямо в SQL-запросы. Пожалуйста.
  • Предпочитать заголовки PHP перенаправлениям скриптов. В вашем комментарии упоминается, что он не работает, но вы используете WP, подумайте даже об использовании метода wp_redirect https://developer.wordpress.org/reference/functions/wp_redirect/
  • Удалите <br/>. Если вы разделили свою логику и просматриваете правильно, нет нужды в помете html в обработчиках отправки
0 голосов
/ 06 июля 2018

Я видел ваши $rowCount и $rowount, надеюсь, это просто опечатка.

и вы можете отлаживать значение для каждого $rowCount в цикле. что-то вроде в вашем коде для отладки:

foreach($_POST['check_list'] as $selected){

    $rowCount = count($_POST['ref']);
    //print the debug data
    print_r($rowCount, true );
}
die(); 

также убедитесь, что $_POST['ref'] действителен.

и до сих пор нет подсказок, что произошло, пожалуйста, приложите данные отладки, чтобы другие люди могли знать, в чем проблема

...