2013-04-03 168 views
0

嗨我做了一个PHP页面,当提交表单时返回自己,但有一个情况下,当它是真正的PHP标题(“位置:url” )功能应该被执行。PHP返回到相同的页面,调用header()函数

有没有可能这样做?

 <form action="" method="post"> 
     <input type="text" name="username" value="" /> 
     <?php 
if (isset($_POST['submitted'])) { 

$username = $_POST['username']; 

     $qryS="SELECT * FROM student WHERE ID='$username';"; 
     $resultS=mysql_query($qryS); 
      if($resultS){ 
      if(mysql_num_rows($resultS)>=1) { 

      header("location: studentprofile.php"); 
      }} 
       else { 

      echo"<p><small> There was an error</p>"; 

      } 
} 

     ?> 
     <input type="submit" name="submitted" value="Submit" /></p> 

    </form> 
+1

后的东西已经被发送到缓冲区不能更改标题。在输出任何html或回显任何内容之前,需要做到这一点。 – Pitchinnate 2013-04-03 19:43:55

+0

[Headers already already sent by PHP]可能的重复(http://stackoverflow.com/questions/8028957/headers-already-sent-by-php) – meagar 2013-04-03 19:44:31

+0

另外http://bobby-tables.com/ - 转义数据库输入字符串,或者如果聪明,查看准备好的语句,这些语句更容易正确。 – mario 2013-04-03 19:47:41

回答

3

在发送数据(HTML)后,您不能发送任何标题。如果您在输出任何东西之前将if-clause和header()调用移至 - 没有问题。

+0

或者使用输出缓冲...... – 2013-04-03 19:44:43

+2

或者只是正确地做,并且从视图中分离出那种逻辑。然而,这个答案必须相当长,才能有建设性,而且可能不会被反正使用。 – Clarence 2013-04-03 19:46:38

0

是的,这是可能的(只要没有输出发送到浏览器 - 你可以用你的情况output buffering)。你只需要确保逻辑阻止重定向循环。

+0

我会试试看谢谢 – Lamia 2013-04-03 19:53:39

0

您应该在使用之前使用header("location: studentprofile.php");。在html标记之前,在文件的顶部使用它。

+0

你的意思是我分开我的PHP? if语句可以分成两部分吗?如果在没有结果时需要执行,会导致内部出现回声 – Lamia 2013-04-03 19:54:59

0
<?php 
if (isset($_POST['submitted'])) { 

    $username = mysql_real_escape_string($_POST['username']); 

    $qryS = "SELECT * FROM student WHERE ID='$username'"; 
    $resultS = mysql_query($qryS); 

    // changed to == 1, you probably only want to select one record 
    if(mysql_num_rows($resultS) ==1) { 
     header("location: studentprofile.php"); 
    } else { 
     echo"<p><small> There was an error</p>"; 
    } 
} 
?> 

<form action="?submitted" method="post"> 
<input type="text" name="username" value="" /> 
<input type="submit" name="submitted" value="Submit" /></p> 
</form> 
+0

在提交按钮之前,我想要打印的消息如何? – Lamia 2013-04-03 19:55:31

+0

只要您不想操纵标题,就可以打印任何类型的消息。标题调用必须在输出到页面的任何HTML之前。 – 2013-04-03 19:59:36

-1

您可以使用JavaScript。

例如:

<?php 
... 
if(mysql_num_rows($resultS)>=1) { 
    ?> 
    <script> 
    window.location = 'studentprofile.php'; 
    </script> 
    <?php 
}} 
+0

我认为这一个会工作,谢谢 – Lamia 2013-04-03 19:56:32

+0

它的工作!)没问题;) – denisko 2013-04-03 20:03:17

+1

你*可以*使用JavaScript,但你不应该。底层的HTTP协议支持重定向,这就是重定向应该发生的地方。这是滥用JavaScript。 – meagar 2013-04-04 01:28:34