Buenas hace poco escribi acerca de una duda y ahora me ha surgido otra. He estado mirando los textos y no he encontrado la respuesta. El problema es el siguiente: Paso una variable a un controlador poniendola en el metodo redirect, y en el otro controlador la recibo sin problemas, hago una colsulta para obtener los datos mediante find y los obtengo sin problemas usando la variable que pasé, pero cuando voy a guardar los datos, no se porque la variable en la que hice la consulta se me resetea y pierde todo lo que tenia dentro, por lo que no se me guardan los datos en la base de datos. La verdad que he estado buscando y no encuentro la solucion, no se si alguien mas le habra pasado lo mismo. Gracias de ante mano.
Dudas de cakephp » dudas
Problema con una variable
(31 mensajes)-
Publicado hace 2 years #
-
Buenos días Ivan, la verdad es que no entiendo demasiado bien porqué no te funciona. Podrías poner un código de ejemplo en el que veamos que haces exactamente, con eso nos sería mucho más fácil ayudarte.
Un saludo
Publicado hace 2 years # -
Buenas, yo tengo una aplicacion de matricula y en en mi sistema hay varios ususarios, el problema es que un alumno hace la matricula, pero luego puede ser modificada por un coordinador, cuando el alumno añade asignaturas a su matricula no tengo ningun problema, es cuando las añade el coordinador, que en un primer momento al hacer la consulta obtengo todos los datos pero cuando los intento guardar no se proque motivo los pierdo el codigo es el siguiente:
Aqui paso el id de la matricula para saber que matricula ha elegido modificar el corrdinador y con ello ya obtengo todos los datos:
- <?php echo $html->link(__('Add Katho Course', true), array('controller'=> 'la_courses', 'action'=>'add',$la['La']['id_la'])); ?>
Y aqui tengo la funcion añadir en el controlador
function add($id = null) {
if($this->Session->read('Auth.User.group_id') == 3){
$las = $this->LaCourse->La->find('first',array('conditions'=>array('La.user_id'=>$this->Session->read('Auth.User.id_user'))));//Guarda informacion general de la sesion
}//Cierre if
else{
$las=$this->LaCourse->La->find('first',array('conditions'=>array('La.id_la'=>$id)));
}//Cierre else
$Coursesid = $this->LaCourse->KathoCourse->find('list',array('fields'=>array('KathoCourse.name','KathoCourse.id_katho_course'),'order'=>'KathoCourse.name'));//Para guardar el id de los cursos de Katho
$dat = array();
$i = 0;
$kathoCourses = $this->LaCourse->KathoCourse->query("SELECT name,ECTS FROM katho_courses ORDER BY name;");//Para guardar el nombre y los creditos de cada curso
$this->set(compact('las','kathoCourses'));
if (!empty($this->data)) {
$this->LaCourse->create();
debug($id);
//Pasamos los datos a un array auxiliar para luego guardarlos
foreach($Coursesid as $dato){//['katho_course_id'.$i] as $dato){
if($this->data['LaCourse']['katho_course_id'.$i] ==1){
$dat[] = $dato;
}//
$i++;
}
//Recorremos para guardar cada asignatura
$i = 1;
foreach($dat as $dato){
$this->data['LaCourse']['katho_course_id'] = $dato;
$this->data['LaCourse']['la_id'] = $las['La']['id_la'];
$this->LaCourse->save($this->data);
$this->LaCourse->id=false;
//Una vez que haya guardado todas las asignaturas redireccionamos
if(count($dat)==$i){
if($this->Session->read('Auth.User.group_id') == 1){
$this->redirect(array('controller'=>'las','action'=>'manage'));
}
else{
$this->redirect(array('action'=>'index'));
}
}//Fin if
$i++;
}//foreach
}
}gracias.
Publicado hace 2 years # -
¿En que momento pierdes los datos?, ¿a la hora de hacer el save?
Publicado hace 2 years # -
Si en ese momento, pierdo los datos de $las y con ello la informacion del id de la matricula que se esta modificando, lo curioso es lo que comente, que pasa solo a los coordinadores, porque los estudiantes que son el grupo 3, si que funciona.
Publicado hace 2 years # -
Entonces, puede ser que el problema esté en la línea 10
$las = $this->LaCourse->La->find('first',array('conditions'=>array('La.id_la'=>$id)));
Que esa consulta no devuelva ningún registro, porque las consultas son diferentes dependiendo de si es coordinador o alumno, ¿no?
Publicado hace 2 years # -
Si, la consulta esa es la que me tiene mosqueado, porque en un primer momento me recoge los datos perfectamente, pero luego no se porque razon los pierdo, lo he comprobado con debug() y al cargar la pagina la variable contiene los datos, pero cuando das a guardar los pierdo porque lo imprimo despues y aparece vacia, la verdad es que es una cosa que no me habia pasado nunca que una variable que tiene algo lo pierna sin hacer nada.
Publicado hace 2 years # -
¿Y el modelo LaCourse?, ¿sólo tiene dos atributos?, katho_course_id y la_id.
Porque al hacer un $html->link, la variable $this->data estará vacía.
Publicado hace 2 years # -
Si tengo esos dos datos y el id de la asociacion pero ese se pone automaticamente en la base de datos, porque es un campo autoincremental. Y si es así como puedo pasar el dato que quiero desde una vista a un controlador distinto del de la vista desde la que paso el dato.
Publicado hace 2 years # -
A ver si me sitúo. La vista de add, recibe el id de la matrícula, con esto sacarás un listado de las asignaturas y las presentarás como checkboxes o algo así y el formulario llamará también a add, o algo así, ¿no?
Publicado hace 2 years # -
Si justamente eso, yo saco todas las asignutaras que hay y se las presento en una tabla con checkboxes y yo lo que hago es guardar la relacion entre la_id y katho_course_id, para saber las asignaturas que componen una matricula. Si despues de guardar las asignaturas redirecciono a add.
Publicado hace 2 years # -
Entonces está ahí el problema, lo que pones como un enlace debería ser un botón de un formulario, ya que en el momento que se hace una redirección o se pincha en un enlace se pierden los variables que se le pasan a la vista.
La idea sería hacer lo mismo que estás haciendo ahora pero en vez de poner $html->link, poner un $form->create con la misma acción y pasándole como parámetro el id de la matrícula.
La primera vez que llegases a add, no tendrías datos en el $this->data, por lo que tendrías que iniciar la variable con todos los cursos de esa matrícula, al pinchar en el botón del formulario ya tendrías los datos preparados para almacenarlos.
Publicado hace 2 years # -
Ok muchas gracias, lo voy a probar y ya te comento.
Publicado hace 2 years # -
Una pregunta tonta, he estado buscando informacion del $form->create y no me ha quedado muy claro como ponerlo, yo he probado con esto pero no me funciona echo $form->create('LaCourses',array($html->link(__('Add Katho Course', true), array('controller'=> 'la_courses', 'action'=>'add',$la['La']['id_la'])))); como seria?
Gracias
Publicado hace 2 years # -
Tiene que ser algo así
echo $form->create('LaCourses', array('url' => 'add/' . $la['La']['id_la'));
Así el formulario te enviaría a la_courses/add , con la variable $la['La']['id_la'] como parámetro.
Publicado hace 2 years # -
Ok ya lo hice, pero ahora no me sale el enlace para poder ir hasta la pagina de añadir, debo hacer alguna cosa mas?
Publicado hace 2 years # -
Poner un botón de submit:
echo $form->submit('Añadir');
y cerrar el formulario
echo $form->end();
Publicado hace 2 years # -
Ok ya lo tengo, pero el problema no me ha desaparecido asi que no se que sera, intentare indagar mas con el debug() a ver que pone. Gracias
Publicado hace 2 years # -
¿Has metido los checkboxes dentro del formulario?, sino no el $this->data irá vacío.
Tienes que hacer, en la vista del add, por cada asignatura un echo $form->checbox('nombre_del_input');
Publicado hace 2 years # -
Si eso esta hecho, de hecho funciona. porque para los alumnos me deja matricularles y el formulario es el mismo. Lo que pasa que no se porque razon se me vacia esto $las=$this->LaCourse->La->find('first',array('conditions'=>array('La.id_la'=>$id))); en un principio tiene datos, pero al ir a guardarlos sigo con el mismo problema que pierdo los datos.
Publicado hace 2 years # -
¿No tendría más sentido hacer la búsqueda de este modo?:
$las=$this->La->find('first',array('conditions'=>array('La.id_la'=>$id)));
Publicado hace 2 years # -
Esa consulta no funciona, porque el modelo es LaCourse y dentro de eso tengo La
Publicado hace 2 years # -
En el controlador podrías poner
var $uses = array(
'La',
'LaCourse',
);Con esto ya podrías empezar a utilizar directamente el modelo La. Si lo haces tal y como está hecho ahora, buscará entre todos los La relacionados con LaCourse, no se si es eso lo que quieres hacer, o lo que quieres es buscar entre todos los La, siendo indiferente que esté relacionado con LaCourse
Publicado hace 2 years # -
Lo que yo quiero es cargar los datos de la matricula que me ha clicado el coordinador, y eso me lo hace bien, lo unico que luego magicamente la variable donde lo tengo guardado se me formatea y deja de tener datos. Y es lo que no se porque pasa.
Publicado hace 2 years # -
Siento no poderte ayudar, la verdad es que estoy un poco confuso, no entiendo demasiado bien en que momento la variable desaparece.
Es muy raro.
Publicado hace 2 years # -
Ya eso me pasa a mi jejejejeje, la verdad es que es una cosa muy rara, pero el caso es que la variable que le paso a la funcion, despues de dar a guardar es como si se formateara y pierdo toda la informacion gracias por todo.
Publicado hace 2 years # -
No tengo muy claro que haces, la idea sería ir a la función add y comprobar que el $this->data está vacío, si es así mostrar el formulario con todas las asignaturas a las que está matriculado, con el botón del formulario que redirija de nuevo a esa función.
Por otra parte, en esa misma función , si el $this->data tiene info, pues será la información que viene del formulario, la tratas y la guardas.¿Sería así lo que estás haciendo?
Publicado hace 2 years # -
Si el $this->data esta vacio, yo lo que hago es cargarle todas las asignaturas disponibles y ya el coordinador le modifica la matricula al alumno, para que ademas de las que se ha matriculado tenga otras asignaturas que el coordinador ha elegido para él. Y es justo en este paso cuando tengo los problemas. El problema viene que como el número de matricula se le paso desde la otra pagina, pues al ir a guardar se me pierde el id de la matricula y claro no me guarda los datos en la base de datos.
Publicado hace 2 years # -
No tengo demasiado claro cómo lo estás haciendo, no tendrás algún sitio donde pueda ver el comportamiento de la página, ¿verdad?
Publicado hace 2 years # -
Pues es que de momento lo tengo solo en mi ordenador. Y mandarte los archivos yo te les mando, pero el tema es que tienes que crear la base de datos y todo y es un jaleo para ti, porque lleva un poco de tiempo la verdad.
Publicado hace 2 years #