Es poco probable que a alguien le den ganas de leer esa maraña de
codigo sin formato. ¿Por que no pruebas usar el http://bin.cakephp.org
cuando tengas que pegar tanto codigo ?
On 6 mar, 18:05, yuyul <[EMAIL PROTECTED]> wrote:
> Buenas amigos,
> mi problema es el siguiente:
>
> Cuando intento guardar tanto editando como a la hora de añadir un
> nuevo usuario, me guarda bien los datos, tanto del usuario como la
> tabla relacionada usuarios_contratas, pero me el siguiente error:
>
> Query: data
> Warning: SQL Error: 1064: You have an error in your SQL syntax; check
> the manual that corresponds to your MySQL server version for the right
> syntax to use near 'data' at line 1 in C:\xampp\htdocs\GESINC\cake\libs
> \model\datasources\dbo_source.php on line 440
>
> Mirando las diferentes consultas que intenta hacer contra la base de
> datos, me fijo que intenta ejecutar una consulta "data" y hay da el
> error, pero no se porque intenta ejecutar esa consulta.
>
> Trabajo con la version estable de cakephp y mysql.
>
> Les pongo aqui los controladores y los modelos, a ver si alguien ve
> por donde puede estar el fallo, ya que llevo varios dias mirando y
> probando y no doy con el error.
>
> <?php
> class UsuariosController extends AppController {
> var $name ='Usuarios';
> var $layout = 'default';
> function login(){
> //No mostrar el mensaje de error si no se han proporcionado
> datos.
> $this->set('error', false);
>
> //Si un usuario ha proporcionado datos a través del formulario
> if (!empty($this->data)){
> //Primero, veamos si hay usuarios en la base de datos
> //con el nombre de usuario proporcionado por el
> usuario
> //utilizando el formulario
>
> $someone =
> $this->Usuario->findByLogin($this->data['Usuario']
> ['login']);
>
> //En este punto, $someone está lleno con datos del
> usuario, o está
> vacio.
> //Comparemos la contraseña proporcionada a través del
> formulario
> con la
> //almacenada en la base de datos.
> if(!empty($someone['Usuario']['password']) &&
> ($someone['Usuario']
> ['password'] == $this->data['Usuario']['password'])){
> //Nota: esperanzado en que las contraseñas
> estén ofuscadas en la
> base de datos,
> //tu comparación podria verse más como:
> //md5($this->data['Usuario']['password'] ==
> ...
>
> //Esto significa que estas son iguales. Ahora
> podemos contruir
> alguna información básica de
> //sesión para recordar este usuario como con
> 'sesión-iniciada'
>
> $this->Session->write('Usuario',
> $someone['Usuario']);
>
> //Ahora que tenemos a los usuarios
> registrados en una sesión,
> redireccionémoslos a
> //la página de recibimiento para la
> aplicación.
>
> $this->redirect('/empresas');
> }
> //Caso contrario, han provisto datos incorrectos:
> else {
> //Recuerdas la variable $error en la vista?
> Cambiemos su valor a
> verdadero:
> $this->set('error', true);
> }
> }
> }
>
> function logout(){
> //Redirecciona usuarios a esta acción si hacen click en el
> botón
> Cerrar Sesión.
> //Todos lo que necesitamos hacer aquí es destruir la
> información de
> sesión.
> $this->Session->delete('Usuario');
>
> //Y problablemente deberíamos redireccionarlos a alguna parte,
> también ...
>
> $this->redirect('/usuarios/login');
> }
>
> function index(){
> $this->Usuario->recursive = 0;
> $this->set('usuarios', $this->Usuario->findAll());
> }
>
> function view($id){
> $this->set('usuarios', $this->Usuario->read(null,$id));
> $this->set('contratasArray',
> $this->Usuario->Contrata->generateList());
>
> }
>
> function add (){
> if(empty($this->data)){
> $this->set('empresaArray',
> $this->Usuario->Empresa->generateList());
> $this->set('contratasArray',
> $this->Usuario->Contrata->generateList());
>
> $this->set('usuarios', null);
> }
> else{
> if($this->Usuario->save($this->data)){
> //$this->redirect('usuarios/index');
> //$this->set('Correcto', 1);
> $this->set('empresaArray',
> $this->Usuario->Empresa->generateList());
> $this->set('contratasArray',
> $this->Usuario->Contrata->generateList());
> }
> else{
> $data = $this->data;
> $this->set('usuarios', $data);
> $this->set('empresaArray',
> $this->Usuario->Empresa->generateList());
> $this->set('contratasArray',
> $this->Usuario->Contrata->generateList());
> }
> }
> }
>
> function edit($id=null){
> if(empty($this->data)){
> $this->Usuario->id = $id;
> $this->data = $this->Usuario->read();
> $data = $this->Usuario->read(null, $id);
> $this->set('usuarios', $data);
> $this->set('empresaArray',
>
> $this->Usuario->Empresa->generateList());
> $this->set('contratasArray',
>
> $this->Usuario->Contrata->generateList());
> foreach($data['Contrata'] as $var){
> $contrata[$var['id']] = $var['id']; }
> $this->set('selectedContrata', $contrata);
> }
> else {
> if($this->Usuario->save($this->data)){
> //$this->redirect('usuarios/index');
> /*$data = $this->Usuario->read();
> $this->set('usuarios', $data);
>
> $this->set('empresaArray',
>
> $this->Usuario->Empresa->generateList());
> $this->set('contratasArray',
>
> $this->Usuario->Contrata->generateList());
> // echo $data['Contrata']['id'];
> foreach($data['Contrata'] as $var){
> $contrata[$var['id']] = $var['id']; }
> $this->set('selectedContrata', $contrata);
> */
> }
> else {
> /*$this->Usuario->id = $id;
> $this->data = $this->Usuario->read();
> $data = $this->Usuario->read(null, $id);
> $this->set('usuarios', $data);
>
> $this->set('empresaArray',
>
> $this->Usuario->Empresa->generateList());
> $this->set('contratasArray',
>
> $this->Usuario->Contrata->generateList());
> foreach($data['Contrata'] as $var){
> $contrata[$var['id']] = $var['id']; }
> $this->set('selectedContrata', $contrata);
> */
> }
> }
> }
>
> function delete($id){
> $this->Usuario->del($id);
> $this->flash('Usuario eliminado.', '/usuarios/index');
> }}
>
> ?>
>
> <?php
> class usuario extends AppModel {
> var $name = 'Usuario';
>
> var $defaultFields = 'nombre';
>
> var $belongsTo = array(
> 'empresa' =>
> array ('className' =>
> 'Empresa',
> 'Conditions'
> => '',
> 'order' => '',
> 'foreignKey'
> => 'empresa_id',
>
> 'counterCache' => ''),);
>
> var $hasAndBelongsToMany = array('Contrata' =>
> array('className' => 'Contrata',
> 'joinTable' =>
> 'usuarios_contratas',
> 'foreignKey' => 'usuario_id',
> 'associationForeignKey'=>
> 'contrata_id',
> 'conditions' => '',
> 'order' => '',
> 'limit' => '',
> 'unique' => true,
> 'finderQuery' => '',
> 'deleteQuery' => '',
> )
> );
>
> var $validate = array(
> 'login' => '/[a-z0-9\_\-]{3,}$/i',
> 'password' => VALID_NOT_EMPTY
> );
>
> function beforeSave()
> {
> $this->data['Usuario']['password'] = md5($this->data('Usuario',
> 'password'));
>
> return true;
> }
>
> }
>
> ?>
>
> Aqui les dejo el modelo de contratas
>
> <?php
> class Contrata extends AppModel {
> var $name = 'Contrata';
> var $displayField = 'nombre';
>
> var $belongsTo = array(
> 'empresa' =>
> array('className' => 'Empresa',
> 'conditions' => '',
> 'order' => '',
> 'foreignKey' => 'empresa_id',
> 'counterCache' => ''),
> 'tipocontrata' =>
> array('className' => 'Tipocontrata',
> 'conditions' => '',
> 'order' =>'',
> 'foreignKey' => 'tipocontrata_id',
> 'counterCache' => ''),);
>
> }
>
> ?>
>
> Aqui les pongo la estructura de las tablas:
>
> CREATE TABLE `usuarios` (
> `id` int(11) NOT NULL auto_increment,
> `nombre` varchar(20) collate latin1_general_ci NOT NULL,
> `login` varchar(20) collate latin1_general_ci NOT NULL,
> `password` varchar(50) collate latin1_general_ci NOT NULL,
> `rol` char(1) collate latin1_general_ci NOT NULL,
> `empresa_id` int(11) default NULL,
> PRIMARY KEY (`id`)
> ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1
> COLLATE=latin1_general_ci;
>
> CREATE TABLE `contratas` (
> `id` int(11) NOT NULL auto_increment,
> `nombre` varchar(40) collate latin1_general_ci default NULL,
> `empresa_id` int(11) NOT NULL,
> `tipocontrata_id` int(11) NOT NULL,
> PRIMARY KEY (`id`),
> KEY `contratas_fk` (`empresa_id`),
> KEY `contratas_fk1` (`tipocontrata_id`),
> CONSTRAINT `contratas_fk` FOREIGN KEY (`empresa_id`) REFERENCES
> `empresas` (`id`),
> CONSTRAINT `contratas_fk1` FOREIGN KEY (`tipocontrata_id`)
> REFERENCES `tipocontratas` (`id`)
> ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
> COLLATE=latin1_general_ci;
>
> CREATE TABLE `usuarios_contratas` (
> `usuario_id` int(11) NOT NULL,
> `contrata_id` int(11) NOT NULL,
> PRIMARY KEY (`usuario_id`,`contrata_id`),
> KEY `usuario_contratas_fk1` (`contrata_id`),
> CONSTRAINT `usuario_contratas_fk` FOREIGN KEY (`usuario_id`)
> REFERENCES `usuarios` (`id`),
> CONSTRAINT `usuario_contratas_fk1` FOREIGN KEY (`contrata_id`)
> REFERENCES `contratas` (`id`)
> ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
>
> Gracias a todos.
--~--~---------~--~----~------------~-------~--~----~
Has recibido este mensaje porque estás suscrito a Grupo "CakePHP-es" de Grupos
de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a [email protected]
Para anular la suscripción a este grupo, envía un mensaje a [EMAIL PROTECTED]
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/CakePHP-es?hl=es.
-~----------~----~----~----~------~----~------~--~---