2013-05-14 2 views
0

Я работаю над страницей отправки переднего конца Wordpress, которая работает в нескольких шагах.Передача переменных формы между If Statement

Таким образом, у меня есть форма на странице, и она собирает данные за несколько этапов и публикует их после каждого этапа.

Я могу сделать это с использованием GET, но я не хочу, чтобы переменные отображались в URL-адресе, потому что людям было бы легко редактировать другие сообщения в блоге, которые они не пишут.

Как бы я пропустил идентификатор сообщения с этапа на сцену, используя этот метод? Есть ли лучший способ для нескольких форм страницы?

Как вы можете видеть ниже, мне нужно передать идентификатор сообщения между шагом настройки и шагом один так или иначе, но я не хочу, чтобы он находился в URL как GET.

UPDATE:

Хорошо, так что кажется, что этот шаг, чтобы подтвердить этап завершается в, если другое заявление было где я теряла все переменные POST и SESSION, я теперь изменилась так, что он отображает форму со скрытыми входами вместо ссылки продолжения для запроса GET. Обновленный Pastebin - http://pastebin.com/LpHrHwrE

Вот код, я использую: http://pastebin.com/8b4qMNrm

PHP

<?php 
if(isset($_GET['step'])){ 
    $step = $_GET['step']; 

    if ($step == "setup"){ 
    $setup = ""; $step_one =""; 
     if(isset($_POST['submit'])){ 
      $guide_title = trim($_POST['guide_title']); 
      if($guide_title != ""){ 
       $post = array(
        'post_title'  => $guide_title, 
       ); 

       $post_ID = wp_insert_post($post, $wp_error); 
       $stage_complete = true; 
      } else { 
       $message = "Please complete all required fields."; 
      } 
     } else { 
      $guide_title = ""; 
      $stage_complete = false; 
     } 

    } else if($step == "one"){ 
    $setup ="c"; $step_one = ""; 
    if(isset($_POST['submit'])){ 
      $guide_new_title = trim($_POST['guide_new_title']); 

      if($guide_new_title != ""){ 
       $my_post = array(); 
       $my_post['ID'] = $guide_id; 
       $my_post['post_title'] = $guide_new_title; 

       wp_update_post($my_post); 

       $stage_complete = true; 
      } else { 
       $message = "Please complete all required fields."; 
      } 
     } else { 
      $guide_title = ""; 
      $stage_complete = false; 
     } 
    } 
} else { 
    $step = "start"; 
} 

if(empty($message)){ 
    $message = ""; 
} 
?> 

HTML

<?php if($step == "start"){ ?> 
    <form action="<?php the_permalink() ?>?step=setup" method="POST" class="formee"> 
    <input class="button" type="submit" name="submit" value="Go To Post Setup"> 
    </form> 
    <?php } else if($step == "setup"){ ?> 
    <?php echo $message; if($stage_complete == false){ ?> 
    <form action="<?php the_permalink(); ?>?step=setup" method="POST" class="formee"> 
    <label>Guide Title <em class="formee-req">*</em></label> 
    <input type="text" name="guide_title" required="required" value="<?php echo htmlentities($guide_title); ?>"> 
    <input class="button" type="submit" name="submit" value="Setup Post"> 
    </form> 
    <?php } else { $step_one = "c" ?> 
    <p>Post Has Been Setup.</p> 
    <a href="<?php the_permalink(); ?>?step=one" class="button">Continue To Step One &rarr;</a> 
    <?php } ?> 
    <?php } else if($step == "one"){ ?> 
    <?php echo $message; if($stage_complete == false){ ?> 
    <form action="<?php the_permalink(); ?>?step=one" method="POST" class="formee"> 
    <label>Guide Title <em class="formee-req">*</em></label> 
    <input class="button" type="submit" name="submit" value="Rename Post Title"> 
    </form> 
    <?php } else { $step_one = "c" ?> 
    <p>Post Has Been Renamed.</p> 
    <a href="index.php?step=finish" class="button">Finished &rarr;</a> 
    <?php } ?> 
    <?php } ?> 

ответ

1

Просто используйте скрытое поле в форме, как так:

<input type="hidden" name="postID" value="<?= $theID ?>" /> 

А затем используйте POST, а не GET для формы.

В качестве альтернативы можно использовать переменную сессии:

session_start(); 
$_SESSION['postID'] = $theID; 

// Access via $_SESSION['postID'] 
+0

Я попытался с помощью скрытых полей, но не похоже, чтобы пройти через должным образом оставляя пустых почтовых полей и когда я пытаюсь с помощью сеанса он дает ошибку - Не удается отправить ограничитель кеша сеанса - уже отправленные заголовки. –

+0

Убедитесь, что 'session_start()' приходит, прежде чем вы выводите что-либо, попробуйте его в верхней части каждого файла, который вы используете. –

+0

Если по какой-либо причине скрытые поля не являются опцией, $ _SESSION - это путь. Это должен быть принятый ответ. – dzumla011

Смежные вопросы