2012-05-14 34 views
2

我继续写一个迷宫生成器来教自己的PHP ...(php)在初始表单之后获得额外的输入?

我已经设置了一个会话,并且收集一个名称和一个迷宫大小(5-20​​)的表单。

在第一次运行时,工作正常,迷宫生成。

我想进一步的会议是名字被记住,但大小是重新输入。

我试过使用另一种(不同)的形式,如果会话不是新的,但它不承认/运行它和错误,告诉我$ mazesize是一个无法识别的索引。

代码:

<?php 
session_start(); 
error_reporting(-1); 
?> 
<html> 
<head> 
</head> 
<body> 
<?php 

include 'ClassFunc1.php'; 

//program functionality 
if (!isset($_SESSION['name']) && !isset($_POST['name'])){ 
    //if no data, print form 
     ?><table><tr> 
     <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"> 
     <td>Name: </td><td><input type="text" name="name"></td></tr> 
     <tr><td>Maze size (min 5 max 20): </td><td><input type="text" name="mazesize"></td></tr> 
     <tr><td colspan="2" align="center"><input type="submit" name="submit" value="Submit"></td></tr> 
     </form></table> 
     <?php 
}else if (!isset($_SESSION['name']) && isset($_POST['name']) && isset($_POST['mazesize'])){ 
     //if a session doesn't exist but the form has been submitted 
     //check to see if the form has all required values 
     //create a new session 
     if(!empty($_POST['name'])){ 
     $_SESSION['name']=$_POST['name']; 
     $_SESSION['start']=time(); 
     echo "Welcome, ".$_POST['name'].". A new session has been activated for you. Click <a href=".$_SERVER['PHP_SELF'].">here</a> to refresh the page."; 
     if($_POST['mazesize']>20){ 
      $m_size=20; 
     }elseif($_POST['mazesize']<5){ 
      $m_size=5; 
     }else{ 
      $m_size=$_POST['mazesize']; 
     } 
     define("COL_MAX",$m_size); 
     define("ROW_MAX",$m_size); 
     run_maze($_POST['name']); 
     close_down(); 
     }else{ 
      echo "ERROR. Please enter your name and a maze size"; 
     } 
}else if (isset($_SESSION['name'])) { 
     //if a previous session exists 
     //calculate elapsed time since session start and now 
     echo "Welcome back, ".$_SESSION['name'].". This session was activated ".round((time()-$_SESSION['start'])/60)." minute(s) ago. Click <a href=".$_SERVER['PHP_SELF'].">here</a> to refresh the page.<br />"; 
     echo "Current session ID: ".session_id(); 
    //Ask for a new maze size 
     ?><table><tr> 
     <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"> 
     <td>Maze size (min 5 max 20): </td><td><input type="text" name="mazesize"></td></tr> 
     <tr><td colspan="2" align="center"><input type="submit" name="submit" value="Submit"></td></tr> 
     </form></table> 
     <?php 
     if($_POST['mazesize']>20){ 
      $m_size=20; 
     }elseif($_POST['mazesize']<5){ 
      $m_size=5; 
     }else{ 
      $m_size=$_POST['mazesize']; 
     } 
    define("COL_MAX",$m_size); 
    define("ROW_MAX",$m_size); 
    run_maze($_POST['name']); 
    close_down(); 
} 

//session_destroy(); 


?> 

“包括” 文件是类,方法&功能。

我确定我做错了什么,任何人都可以帮忙吗?

非常感谢

ETA:

(代码回声“错误修正后...行)

}else if (isset($_SESSION['name']) && !isset($_POST['n_mazesize'])) { 
      //if a previous session exists but n_mazesize not set 
      //calculate elapsed time since session start and now 
      echo "Welcome back, ".$_SESSION['name'].". This session was activated ".round((time()-$_SESSION['start'])/60)." minute(s) ago. Click <a href=".$_SERVER['PHP_SELF'].">here</a> to refresh the page.<br />"; 
      echo "Current session ID: ".session_id(); 
     //Ask for a new maze size 
      ?><table><tr> 
      <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"> 
      <td>Maze size (min 5 max 20): </td><td><input type="text" name="n_mazesize"></td></tr> 
      <tr><td colspan="2" align="center"><input type="submit" name="submit" value="Submit"></td></tr> 
      </form></table> 
      <?php 
    }else if (!isset($_SESSION['name']) && isset($_POST['n_mazesize'])){ 
      //if a previous session exists and n_mazesize is set 
      //calculate elapsed time since session start and now 
      echo "Welcome back, ".$_SESSION['name'].". This session was activated ".round((time()-$_SESSION['start'])/60)." minute(s) ago. Click <a href=".$_SERVER['PHP_SELF'].">here</a> to refresh the page.<br />"; 
      echo "Current session ID: ".session_id(); 
      if(!empty($_POST['n_mazesize'])){ 
      if($_POST['n_mazesize']>20){ 
       $m_size=20; 
      }elseif($_POST['n_mazesize']<5){ 
       $m_size=5; 
      }else{ 
       $m_size=$_POST['n_mazesize']; 
      } 
     run_maze($_SESSION['name'], $m_size); 
     close_down(); 
     } 

    //session_destroy(); 
    } 

    ?> 
</body> 
</html> 

这要求进行规模但提交返回一个空白屏幕: - (

+0

你在调用'session_start()'的地方吗? –

+0

是的,这只是代码的摘录;如果没有设置会话名称,会出现一个表单询问名称和大小,如果会话名称已设置,则会尝试询问新的大小。此代码之前的行是:'} else if(isset($ _ SESSION ['name'])){' – horsethorn

+0

我会将整个代码添加到我的问题中... – horsethorn

回答

2

$ _POST ['mazesize']的值只有在表单提交时才可用,您应该添加一个条件:

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    // use posted data here 
} 
+0

所以我应该添加一个嵌套版本的初始if(isset ... for this form too? – horsethorn

+0

@horsethorn是啊,它似乎是这样:) –

+0

我需要给两个表单/提交单独的名称吗? – horsethorn