2011-08-30 57 views
1

你好老乡堆栈Overflowites:复杂的服务器端验证

我在这里有一个复杂的系统/形式,我已经完成了整个前端验证(使用jQuery)....

我需要帮助验证(在PHP的服务器端)......我希望这可能是我们一起工作的东西(因为我的大脑现在几乎被炒了)......我认为在这一点上我只需要一些关于逻辑的帮助。 ...

你可以在这里看看我的表单:(查看HTMLjQuery /源代码,因为它相当长) http://www.thesportinghub.com/lms/make-my-picks

正如你所看到的,它是有很多事情在进行相当激烈...这里是我的基本验证请求:

1)你只能通过所有17周选择同一队一度.. ) 2.)在该游戏时间过后,你不能选择一个团队在各个星期...

所有围绕此计划的信息都是在一个XML文档中设置的,格式如下(这只是BIGGER XML代码的一部分):

<week id="1"> 
     <matchup id="1" date="08/29/11" time="1:53 PM"> 
      <away city="New Orleans">Saints</away> 
      <home city="Green Bay">Packers</home> 
      <finalscore> 
       <away>6</away> 
       <home>0</home> 
      </finalscore> 
     </matchup> 
     <matchup id="2" date="09/11/11" time="1:00 PM"> 
      <away city="Atlanta">Falcons</away> 
      <home city="Chicago">Bears</home> 
      <finalscore> 
       <away></away> 
       <home></home> 
      </finalscore> 
     </matchup> 
</week> 
    <week id="2"> 
     <matchup id="1" date="09/18/11" time="1:00 PM"> 
      <away city="Oakland">Raiders</away> 
      <home city="Buffalo">Bills</home> 
      <finalscore> 
       <away></away> 
       <home></home> 
      </finalscore> 
     </matchup> 
     <matchup id="2" date="09/18/11" time="1:00 PM"> 
      <away city="Kansas City">Chiefs</away> 
      <home city="Detroit">Lions</home> 
      <finalscore> 
       <away></away> 
       <home></home> 
      </finalscore> 
     </matchup> 
     <matchup id="3" date="09/18/11" time="1:00 PM"> 
      <away city="Baltimore">Ravens</away> 
      <home city="Tennessee">Titans</home> 
      <finalscore> 
       <away></away> 
       <home></home> 
      </finalscore> 
     </matchup> 
</week> 

所以,告诉我,如果我的逻辑就在这里...或者你会在这种情况下怎么办?

当表单提交,我将需要创建一个存储提交的数据的多维数组(前永远去我的数据库)...这个数组将包含选择的团队,无论他们选择了哪一周,以及他们被选中的时间。

我将不得不加载我的XML(与SimpleXML和PHP),并以某种方式?逐周确保游戏过后没有选择。

老实说,我的脑袋现在真的被打破了。我怀疑你们有谁在跟踪我?

你能让我走向正确的方向吗?这是一个包含这么多东西的激烈剧本。所有的前端验证都完成了。我只需要将提交的信息与XML进行比较,并确保涵盖了所有的漏洞。

UPDATE:

这是我的PHP代码迄今,但它不是真正的工作...我只是显示它帮助画什么我一起工作的照片。

<?php 
    if(isset($_POST['submit'])) { 
    $schedule = "schedule.xml"; 

$xml = simplexml_load_file($schedule) or die ("Unable to load XML file!"); 
    date_default_timezone_set('US/Eastern'); 
    $time = date("h:i:s", time()); 
    $week1 = $_POST['Week_1']; 
    $week2 = $_POST['Week_2']; 
    $week3 = $_POST['Week_3']; 
    $week4 = $_POST['Week_4']; 
    $week5 = $_POST['Week_5']; 
    $week6 = $_POST['Week_6']; 
    $week7 = $_POST['Week_7']; 
    $week8 = $_POST['Week_8']; 
    $week9 = $_POST['Week_9']; 
    $week10 = $_POST['Week_10']; 
    $week11 = $_POST['Week_11']; 
    $week12 = $_POST['Week_12']; 
    $week13 = $_POST['Week_13']; 
    $week14 = $_POST['Week_14']; 
    $week15 = $_POST['Week_15']; 
    $week16 = $_POST['Week_16']; 
    $week17 = $_POST['Week_17']; 

    foreach($xml->week as $week) 
    { 
    $week_number = $week['id']; 

    foreach($week->matchup as $matchup) 
    { 
    $week_name = "Week_" . $week_number; 
    $away_city = $matchup->away['city']; 
    $home_city = $matchup->home['city']; 
    $away_teamname = $matchup->away; 
    $home_teamname = $matchup->home; 
    $game_time = $matchup['time']; 
    $game_date = $matchup['date']; 
    $away_full = "{$away_city} {$away_teamname}"; 
    $home_full = "{$home_city} {$home_teamname}"; 
    $home_score = $matchup->finalscore->home; 
    $away_score = $matchup->finalscore->away; 

    date_default_timezone_set('US/Eastern'); 
    $game = "{$game_date} {$game_time}"; 

    ?> 
    <div class="savedbox"> 
    <?php 
    if (strtotime($game) <= time()) { 
    ?> 
    <strong>You cannot pick the <?php echo $away_full ?> or <?php echo $home_full ?>. Those teams have been locked for the respective week.</strong> 
    <?php 
    } 
    } 
    } 
    ?> 
    <?php 

    if (count(array_unique($_POST)) === count($_POST)) { 
    ?> 
    <strong>Your picks have been saved!</strong><br/><br/> 

    <strong>Week 1 Pick:</strong> <?php echo $week1 ?><br/> 
    <strong>Week 2 Pick:</strong> <?php echo $week2 ?><br/> 
    <strong>Week 3 Pick:</strong> <?php echo $week3 ?><br/> 
    <strong>Week 4 Pick:</strong> <?php echo $week4 ?><br/> 
    <strong>Week 5 Pick:</strong> <?php echo $week5 ?><br/> 
    <strong>Week 6 Pick:</strong> <?php echo $week6 ?><br/> 
    <strong>Week 7 Pick:</strong> <?php echo $week7 ?><br/> 
    <strong>Week 8 Pick:</strong> <?php echo $week8 ?><br/> 
    <strong>Week 9 Pick:</strong> <?php echo $week9 ?><br/> 
    <strong>Week 10 Pick:</strong> <?php echo $week10 ?><br/> 
    <strong>Week 11 Pick:</strong> <?php echo $week11 ?><br/> 
    <strong>Week 12 Pick:</strong> <?php echo $week12 ?><br/> 
    <strong>Week 13 Pick:</strong> <?php echo $week13 ?><br/> 
    <strong>Week 14 Pick:</strong> <?php echo $week14 ?><br/> 
    <strong>Week 15 Pick:</strong> <?php echo $week15 ?><br/> 
    <strong>Week 16 Pick:</strong> <?php echo $week16 ?><br/> 
    <strong>Week 17 Pick:</strong> <?php echo $week17 ?><br/> 

    <?php 
    } else { 
    ?> 
    <strong>Trying to pull a <em>fast one</em>? We don't think so. You can only pick the same team once. If you need more clarification of the rules, please visit <a href="how-to-play">How To Play</a>.</strong> 
    <?php 
    } 
    ?> 
    </div><br/> 
    <?php 
    } 
    ?> 

我还要提一下,这也将全部绑定到mySQL数据库表中。我需要将人们提交的所有信息都插入到我设置的数据库表中。如果他们通过我上面概述的所有验证,它将只会进入数据库。

任何和所有帮助,将不胜感激。即使你只是给我一些关于如何开始的基本指针。

谢谢, 克里斯

+0

非常感兴趣的任何帮助,我可以得到通过这个逻辑。我可以提供任何和所有的代码片段以及... 我有一个在jQuery中进行前端验证的表单...它从XML中提取所有信息以...开头...现在在服务器端验证,我需要比较所有提交的信息(基于最初的XML文档),并确保解决其他问题。 (一次只能选择同一个球队...在时间过后,不能选择球队)... Thhanks –

+0

我想我在这里......我可能需要做一个foreach循环对于每个$ _POST作为$ key => $ value ...我将如何实现这个?谢谢... –

+0

没有帮助任何人?我试图成为一个清晰的沟通者... –

回答

1
<?php 

if(isset($_POST['submit'])) 
{ 
    $required_weeks = 17; 
    $schedule = "schedule.xml"; 
    $xml = simplexml_load_file($schedule) or die ("Unable to load XML file!"); 
    date_default_timezone_set('US/Eastern'); 
    $time = date("h:i:s", time()); 

    foreach($xml->week as $week) 
    { 
     foreach($week->matchup as $matchup) 
     { 
      $away_city = $matchup->away['city']; 
      $home_city = $matchup->home['city']; 
      $away_teamname = $matchup->away; 
      $home_teamname = $matchup->home; 
      $game_time = $matchup['time']; 
      $game_date = $matchup['date']; 
      $away_full = $away_city . ' ' . $away_teamname; 
      $home_full = $home_city . ' ' . $home_teamname; 
      $home_score = $matchup->finalscore->home; 
      $away_score = $matchup->finalscore->away; 

      date_default_timezone_set('US/Eastern'); 
      $game = $game_date . ' ' . $game_time; 

?> 
<div class="savedbox"> 
<?php 

      if (strtotime($game) <= time()) 
      { 

?> 
<strong>You cannot pick the <?php echo $away_full ?> or <?php echo $home_full ?>. Those teams have been locked for the respective week.</strong> 
<?php 

      } 
     } 
    } 

    //if (count(array_unique($_POST)) === count($_POST)) 
    if (count(array_unique($_POST)) === $required_weeks) 
    { 

?> 
<strong>Your picks have been saved!</strong><br/><br/> 
<?php 

     for($a = 1; $a <= $required_weeks; $a++) 
     { 

?> 
<strong>Week <?php print $a; ?> Pick:</strong> <?php echo $_POST['Week_' . $a] ?><br/> 
<?php 

     } 
    } 
    else 
    { 

?> 
<strong>Trying to pull a <em>fast one</em>? We don't think so. You can only pick the same team once. If you need more clarification of the rules, please visit <a href="how-to-play">How To Play</a>.</strong> 
<?php 

    } 

?> 
</div><br/> 
<?php 

} 

?> 

我收拾你的代码了一点(无需使用瓦尔时,你可以使用$ _ POST和更灵活的总周),但你的代码看起来不错。

除了检查17(在你的例子中)独特的选择,并确保所有将来都有,你需要检查/做其他事情吗?