2013-10-04 2 views
1

По правде говоря, у меня нет понятия, когда дело доходит до PHP, но я могу видеть его мощь, я просто хочу узнать, как его контролировать. У меня есть трехстраничная форма бронирования. Работающие страницы один-два работают, но два-три не работают. Вот PHP-код со страницы два -PHP - Проводка данных на нескольких страницах формы

<?php 

// Total Number of Nights Between Picked Dates 

$days = (strtotime($_POST["checkoutdate"]) - strtotime($_POST["checkindate"]))/86400 - 1; 

// Extra Nightly Cost 

define ("extranights", 80); 
$addnights = (int)extranights * ($days - 4); 

// Deposit Price Calculation 

define("deposit", 370); 
$deposit = null; 

if (isset($_POST["numberofpeople"])) { 
$numberofpeople = intval($_POST["numberofpeople"]); 
$deposit = ((int)deposit * $numberofpeople + $addnights) * 0.3; 
}  

// Total Price Calculation 

define("totalprice", 370); 
$result = null; 

if (isset($_POST["numberofpeople"])) { 
$numberofpeople = intval($_POST["numberofpeople"]); 
$result = (int)totalprice * $numberofpeople + $addnights; 
}  

?> 

Затем я повторил значения депозита и totalprice на той же странице

..... (подтверждение бронирования) 30% Депозит: € Общая стоимость: €

То, чем я мучился, заключается в том, как отправить эхо-значения депозита и totalprice на третью страницу. Если решение/ответ обширны, мне придется вернуться к чертежной доске и начать все сначала, понемногу. Но это закончило бы пользовательскую сторону формы. Я не с нетерпением жду материал базы данных :(

+0

Не видя всего своего кода, мое чувство кишки должно удивлять, может ли ваш общий подход быть неправильным. Как правило, мы хотим контролировать весь пользовательский интерфейс через javascript/jQuery - создавать новые страницы с помощью вкладок ([см. Пример jQueryUI] (http://jqueryui.com/tabs/)), а затем - когда все данные присутствуют - - отправьте его на PHP для входа в базу данных. Если дополнительные биты данных, определяемые тем, что пользователь ввел до сих пор, необходимы из БД по мере продвижения, тогда [мы можем использовать AJAX] (http://stackoverflow.com/questions/17221813/place-php- results-inside-html-page/17221883 # 17221883), чтобы получить эти биты. – gibberish

+0

Да, я согласен, так как я, вероятно, столкнусь с непредвиденными проблемами, поскольку я продолжаю, из-за отсутствия знаний о PHP. Я использовал скрытое поле ввода для эхо-выходов, затем снова эхо с помощью $ _Post на третьей странице. Я не знаю, если это лучший способ и каковы могут быть последствия для будущего, но я буду иметь в виду ваше предложение - Спасибо – onejed

ответ

0

Я хотел бы предложить вам посмотреть на PHP сессии:

вы могли бы сделать что-то вроде этого на странице 2:

<?php 
    session_start(); 
    $deposit= $_SESSION['deposit'] = $depositVar; 
    $total = $_SESSION['total'] = $totalVar; 
    ?> 

Тогда на странице 3 вы ча называть значения, как это: \

  echo $deposit= $_SESSION['deposit']; 
       echo $total= $_SESSION['total'] 

PhP Documentation

+0

Спасибо - я попробую и посмотрю, работает ли он – onejed

+0

Один из ответов, которые я получил должен был эхо-значения в скрытом поле ввода, а затем эхо-значения на третьей странице, и он работал как шарм. Спасибо за ваше предложение – onejed

0

Примите во внимание преимущества этого альтернативного подхода. Форма бронирования может быть настроена с использованием нескольких «страниц», которые отображаются только как страницы для пользователя.

jsFiddle example

То есть, пользователю, он/она будет идти от одного экрана к другому, но это будет иллюзия, созданная JavaScript (например jQueryUI Tabs). В действительности все поля находятся на одной странице/в той же форме, что и в jsFiddle. Затем вы можете собрать всю информацию, когда пользователь нажимает кнопку «Отправить» и:

  • проверить, что все поля заполнены;
  • проверить правильный формат данных в полях;
  • если что-то не так, (1) отображение сообщений с помощью alert() или диалога jQueryUI, и (2) отправить пользователя обратно в форму с помощью return false;
  • если ничего плохого, не отправить форму с помощью: $('#IdOfForm').submit();

Поступая все средства сбора и проверки данных на стороне клиента, вы можете значительно упростить свой код PHP. Кроме того, если пользователь отправлен обратно в полные пропущенные поля, все данные, которые они набрали до сих пор, все еще существуют ...

Обратите внимание, что вы все равно должны проверять данные на стороне PHP, чтобы предотвратить SQL-инъекцию. See this article и this SO Post для получения дополнительной информации.


Автономный, работающий пример кода:

<html> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script> 
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" /> 

     <style> 
     </style> 

     <script type="text/javascript"> 
      $(document).ready(function() { 

       var arrFormFields = ['cn','ca','ce','cp','dd','rd']; 

       $("#tabs").tabs(); 
       $("#theMsg").dialog({ 
        autoOpen: false, 
       }); 
       $('#doit').click(function() { 
        for (var fld in arrFormFields) { 
         if ($('#' + arrFormFields[fld]).val() == ''){ 
          console.log('Var ' +arrFormFields[fld]+ ' has value: ' + $('#'+arrFormFields[fld]).val()); 
          $('#' + arrFormFields[fld]).css({'border':'1px solid red','background':'yellow'}) 
          $('#ui-id-1').trigger('click'); 
          $('#' + arrFormFields[fld]).focus(); 
          alert('Please complete all fields'); //For some reason the alert isn't displaying 
          return false; 
         }else{ 
          //Submit form to "dothebooking.php", like this: 
          //$('#TripForm').submit(); 
          $('#theMsg').html('<h2>Form was successfully submitted</h2>'); 
          $('#theMsg').dialog({'title':'Notice'}).dialog('open'); 
         } 
        } 
       }); 

       $('input:text').blur(function() { 
        $("input:not(:button)").css({'border':'1px solid grey','background':'white'}); 
       }); 

      }); //END $(document).ready() 

     </script> 
    </head> 
<body> 

    <div id="tabs"> 
     <ul> 
      <li><a href="#tabs-1">Customer Details</a></li> 
      <li><a href="#tabs-2">Trip Details</a></li> 
      <li><a href="#tabs-3">Trip Options</a></li> 
     </ul> 
     <form id='TripForm' action="dothebooking.php" method="POST"> 
      <div id="tabs-1"> 
       Customer Name: <input type='text' id="cn"><br> 
       Customer Address: <input type='text' id="ca"><br> 
       Customer Email: <input type='text' id="ce"><br> 
       Customer Phone: <input type='text' id="cp"><br> 
      </div><!-- #tabs-1 --> 
      <div id="tabs-2"> 
       Departure Date: <input type='text' id="dd"><br> 
       Return Date: <input type='text' id="rd"><br> 
      </div><!-- #tabs-2 --> 
      <div id="tabs-3"> 
       Guided Tour option <input type='checkbox' id="gt"><br> 
       Presidential Suite <input type='checkbox' id="ps"><br> 
       Bed and Breakfast <input type='checkbox' id="bb"><br> 
       <input type='button' id="doit" value="Submit Trip"><br> 
      </div><!-- #tabs-3 --> 
     </form><!-- #TripForm --> 
    </div><!-- #tabs --> 
    <div id="theMsg"></div> 

</body> 
</html> 

jQuery validation plugin может также представлять интерес для Вас.

Check out these demos для быстрого просмотра/просмотра.

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