Php Codeigniter-重定向后变量未定义
在做项目时遇到一些问题。事情就是这样:通过选择,我选择了一个我想要编辑的用户。一个表包含该用户发布的所有消息。单击“编辑”后,使用Ajax会出现一个窗口,其中包含可编辑字段。然后,在提交信息后,将显示以下消息: 消息:未定义变量:数据 此时,在提交之后,我添加了一个重定向,它通过url(用户id)再次将我发送到表视图 以下代码更好地显示了这种情况:Php Codeigniter-重定向后变量未定义,php,codeigniter,variables,redirect,Php,Codeigniter,Variables,Redirect,在做项目时遇到一些问题。事情就是这样:通过选择,我选择了一个我想要编辑的用户。一个表包含该用户发布的所有消息。单击“编辑”后,使用Ajax会出现一个窗口,其中包含可编辑字段。然后,在提交信息后,将显示以下消息: 消息:未定义变量:数据 此时,在提交之后,我添加了一个重定向,它通过url(用户id)再次将我发送到表视图 以下代码更好地显示了这种情况: function traer_tabla(){ //Here is the function that loads the table aft
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 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
}
最后,模型中正在失去价值的函数:
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()的表单
函数mostrar\u datos()
{
$id=$this->input->post('id');//当用户单击编辑按钮时,此post来自表
$edicion=$this->datos_model->obtener($id);
$nombre=数组(
'name'=>'nombre',
'id'=>'nombre',
'value'=>$edicion->nombre
);
$email=array(
“名称”=>“电子邮件”,
'id'=>'email',
'value'=>$edicion->email
);
$asunto=数组(
'name'=>'asunto',
'id'=>'asunto',
'value'=>$edicion->asunto
);
$mensaje=数组(
'name'=>'mensaje',
'id'=>'mensaje',
'cols'=>'50',
“行”=>“6”,
“值”=>$edicion->mensaje
);
$submit=数组(
'name'=>'editando',
'id'=>'editando',
“值”=>“Editar mensaje”
);
$oculto=数组(
'id_mensaje'=>id$
);
?>
如果将浏览器指向另一个脚本,则当前脚本定义的所有变量都将 当它完成执行时将被销毁 要跨脚本持久化变量,需要使用会话或cookie script1.php
session_start();
$data['titulo'] = 'Update con codeIgniter';
$_SESSION['data']=$data;
header('location:script2.php');
die();
session_start();
echo $_SESSION['data']['titulo'];
script2.php
session_start();
$data['titulo'] = 'Update con codeIgniter';
$_SESSION['data']=$data;
header('location:script2.php');
die();
session_start();
echo $_SESSION['data']['titulo'];
正如上面andrew所述,当重定向时,变量数据丢失,所以解决方案是将数据存储在会话中 在您的情况下,您可以使用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传递它
如果有任何疑问,请随时告诉我。找到了解决方案。我使用的不是set\u flashdata(),而是set\u userdata()。现在,它返回到表中,刷新时,表继续显示 当我选择要编辑的用户时,还添加了unset_userdata()
感谢您的帮助。无任何内容。如果功能中有die,单击“提交”后,将显示一个空白页。如果没有,编辑后将显示相同的未定义变量消息。并且,script2是Realizar_datos还是视图?那么您是否使用表单重定向?也许您应该将表单标记添加到已发布的表单中。已管理到页面但是我相信这不是问题的真正解决方案。显然,如果用户刷新,数据将丢失,未定义的变量消息将重新出现。这就是我在回答中建议您接受的答案,因为它将帮助其他需要的用户。