Codeigniter - 重定向后变量未定义

时间:2014-09-02 18:14:37

标签: php codeigniter variables redirect

在做项目时遇到一些问题。这就是发生的事情:通过选择我选择一个我想编辑的用户。表格附带该用户发布的所有消息。单击编辑后,使用Ajax会出现一个带有可编辑字段的窗口。然后,在提交信息后,将显示以下消息:

消息:未定义的变量:数据

此刻,在提交之后,我添加了一个重定向,再次将我发送到通过url用户ID的表视图。

以下代码更好地展示了这种情况:

   function traer_tabla(){ //Here is the function that loads the table after post
     $nombre = $this->input->post('nombre');
     $data['titulo'] = 'Update con codeIgniter';
    $data['mensajes'] = $this->datos_model->mensajes($nombre);
    $this->load->view('datos_view', $data);

}

重定向到traer_tabla的功能

       function actualizar_datos()    
       {        
           $id = $this->input->post('id_mensaje');
           $nombre = $this->input->post('nombre');
           $email = $this->input->post('email');
           $asunto = $this->input->post('asunto');
           $mensaje = $this->input->post('mensaje');

           $actualizar = $this->datos_model->actualizar_mensaje($id,$nombre,$email,$asunto,$mensaje);
           if($actualizar)
           {
            $this->session->set_flashdata('actualizado', 'El mensaje se actualizó correctamente');
            redirect(base_url().'datos/traer_tabla/'.$id, 'refresh'); 
           }
}

最后,模型中的函数正在失去其价值:

function mensajes($nombre){        
   $this->db->where('id', $nombre);
$query = $this->db->get('mensajes');
    foreach ($query->result() as $fila)
    {
        $data[] = $fila;
    }
return $data;}

如果我尝试直接访问该函数而不是首先通过select表单,则会出现同样的问题。

选择要编辑的用户后,如何返回表格视图?

编辑:添加了重定向到traer_tabla()

的表单
  function mostrar_datos()
{

    $id = $this->input->post('id'); //This post is from the table when the user click edit button

    $edicion = $this->datos_model->obtener($id);

        $nombre = array(
            'name' => 'nombre',
            'id' => 'nombre',
            'value' => $edicion->nombre
        );
        $email = array(
            'name' => 'email',
            'id' => 'email',
            'value' => $edicion->email
        );
        $asunto = array(
            'name' => 'asunto',
            'id' => 'asunto',
            'value' => $edicion->asunto
        );
        $mensaje = array(
            'name' => 'mensaje',
            'id' => 'mensaje',
            'cols' => '50',
            'rows' => '6',
            'value' => $edicion->mensaje
        );
        $submit = array(
            'name' => 'editando',
            'id' => 'editando',
            'value' => 'Editar mensaje'
        );
        $oculto = array(
            'id_mensaje' => $id
           );

        ?>
        <?= form_open(base_url() . 'datos/actualizar_datos','', $oculto) ?>
        <?= form_label('Nombre') ?>
        <?= form_input($nombre) ?>
        <?= form_label('Email') ?>
        <?= form_input($email) ?>
        <?= form_label('Asunto') ?>
        <?= form_input($asunto) ?>
        <?= form_label('Mensaje') ?>
        <?= form_textarea($mensaje) ?>

        <?= form_submit($submit) ?>
        <?php    
        }    

3 个答案:

答案 0 :(得分:1)

如果您将浏览器定向到另一个脚本,则当前脚本定义的所有变量都将 完成执行后被销毁。

要跨脚本保留变量,您需要使用会话或cookie。

<强> script1.php

session_start();
$data['titulo'] = 'Update con codeIgniter';
$_SESSION['data']=$data;
header('location:script2.php');
die();

<强> script2.php

session_start();
echo $_SESSION['data']['titulo'];

答案 1 :(得分:1)

正如上面提到的安德鲁所说,当你重定向时,你会丢失变量数据,因此解决方案就是在会话中存储数据。

在你的情况下,你可以做的是使用session来存储'nombre',因为我看到你试图访问$nombre = $this->input->post('nombre');,我想这将无效。

在这样的会话中存储'nombre'

$this->session->set_userdata('number',$nombre);

并在任何地方访问它,如下所示:

$this->session->userdata('number');

另请注意您的重定向是

redirect(base_url().'datos/traer_tabla/'.$id, 'refresh');

这意味着你将参数'id'传递给你的函数traer_tabla。如果你想要传递你想让你的函数接收的那个变量,就像这样。

function traer_tabla($id,$number)
{
//code goes here
}

同样,如果您不想将您的号码存储在会话中,您可以将其传递给URL,如上所述。

如果有任何疑问,请随时告诉我。

答案 2 :(得分:0)

得到了解决方案。我没有使用set_flashdata(),而是使用了set_userdata()。现在,它返回到表,并在刷新时,表继续出现。

当我选择要编辑的用户时,还添加了unset_userdata()。

感谢您的帮助。