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.
-~----------~----~----~----~------~----~------~--~---