在codeigniter中重定向的行为

时间:2015-07-24 12:13:15

标签: php codeigniter

myform.php的代码

<html>
<head>
<title>My form</title>
</head>
<body>

<form action="success" method="post">
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<!--
<h5>Password</h5>
<input type="password" name="password" value="" size="50" />

<h5>Confirm Password </h5>
<input type="password" name="passconf" value="" size="50" />-->

<h5>Email Address </h5>
<input type="email" name="email" value="" size="50" />

<div><input type="submit" value="submit" /></div>

</form>
</body>
</html>

控制器脚本1

<?php 
    class Form extends CI_Controller{
        public function __construct(){
            parent::__construct();
            $this->load->library('session');
            $this->load->helper('url');
        }
        public function index(){
            $this->load->view('myform');
        }

        public function success(){
            $_SESSION['username']=$_POST['username'];
            $_SESSION['email']=$_POST['email'];


            redirect('form/home');
        }

        public function home(){
            $this->load->view('test_home');

        }
    }


?>

控制器脚本2

<?php 
    class Form extends CI_Controller{
        public function __construct(){
            parent::__construct();
            $this->load->library('session');
            $this->load->helper('url');
        }
        public function index(){
            $this->load->view('myform');
        }

        public function success(){
            $_SESSION['username']=$_POST['username'];
            $_SESSION['email']=$_POST['email'];
            echo $_SESSION['username'];
            echo $_SESSION['email'];

            redirect('form/home');
        }

        public function home(){
            $this->load->view('test_home');

        }
    }


?>

问题是当我使用控制器1时,脚本按预期工作并将我重定向到form / home。但是,当我使用控制器2时,我收到此错误

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /usr/local/apache2/htdocs/parth/application/controllers/Form.php:15)

Filename: helpers/url_helper.php

Line Number: 564

Backtrace:

File: /usr/local/apache2/htdocs/parth/application/controllers/Form.php
Line: 18
Function: redirect

File: /usr/local/apache2/htdocs/parth/index.php
Line: 292
Function: require_once

为什么代码表现如此?感谢您的时间。

2 个答案:

答案 0 :(得分:1)

因为,你在第二种情况下echo编了两个字符串。

注释掉这个:

//echo $_SESSION['username'];
//echo $_SESSION['email'];

由于这个原因,重定向没有发生。

在CodeIgniter中,重定向使用PHP的header("Location...")构造。

这要求您当前的脚本不在屏幕上输出任何内容。

甚至没有空格(这就是为什么CodeIgniter建议您不要使用?>来结束PHP文件,因为空格可以保留在那里。

答案 1 :(得分:0)

redirect()使用PHP header()功能。如果您在任何标题之前输出,则会出现此错误。

这是你的输出:

echo $_SESSION['username'];
echo $_SESSION['email'];

redirect('form/home');

注释掉或删除它,导致重定向时你不需要它。

亲切的问候