在做项目时遇到一些问题。这就是发生的事情:通过选择我选择一个我想编辑的用户。表格附带该用户发布的所有消息。单击编辑后,使用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
}
答案 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()。
感谢您的帮助。