Dudas de cakephp » dudas

Problema con una variable

(31 mensajes)
  1. ivablan
    Miembro

    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.

    Publicado hace 2 years #
  2. bernal
    Maestro de Llaves

    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 #
  3. ivablan
    Miembro

    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:

  4. <?php echo $html->link(__('Add Katho Course', true), array('controller'=> 'la_courses', 'action'=>'add',$la['La']['id_la'])); ?>
  5. 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 #
  • bernal
    Maestro de Llaves

    ¿En que momento pierdes los datos?, ¿a la hora de hacer el save?

    Publicado hace 2 years #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    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 #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    ¿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 #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    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 #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    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 #
  • ivablan
    Miembro

    Ok muchas gracias, lo voy a probar y ya te comento.

    Publicado hace 2 years #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    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 #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    Poner un botón de submit:

    echo $form->submit('Añadir');

    y cerrar el formulario

    echo $form->end();

    Publicado hace 2 years #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    ¿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 #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    ¿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 #
  • ivablan
    Miembro

    Esa consulta no funciona, porque el modelo es LaCourse y dentro de eso tengo La

    Publicado hace 2 years #
  • bernal
    Maestro de Llaves

    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 #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    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 #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    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 #
  • ivablan
    Miembro

    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 #
  • bernal
    Maestro de Llaves

    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 #
  • ivablan
    Miembro

    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 #

  • RSS feed for this topic

    Responder »