PROBLEMA PARA INSERTAR

158 views
Skip to first unread message

Valentina Aguirre

unread,
Feb 10, 2011, 10:30:56 AM2/10/11
to CodeIgniter-spanish
BUENOS DIAS, SUCEDE QUE ESTAMOS TRATANDO DE INSERTAR DATOS EN UNA BD,
LOS DATOS SON ENVIADOS POR UN FORMULARIO, AL MOMENTO DE ENVIAR EL
FORMULARIO NOS APARECE EL SIGUIENTE MENSAJE: "Disallowed Key
Characters.", NOS GUSTARIA SABER A QUE SE DEBE EL PROBLEMA Y COMO
SOLUCIONARLO.

DE ANTEMANO MUCHAS GRACIAS

Nokrosis

unread,
Feb 10, 2011, 12:14:21 PM2/10/11
to codeignit...@googlegroups.com
¿Qué código estás usando para hacer la inserción? ¿Qué base de datos usas?

Saludos.

2011/2/10 Valentina Aguirre <vale...@gmail.com>

--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

Daniel Perez

unread,
Feb 10, 2011, 12:17:18 PM2/10/11
to codeignit...@googlegroups.com
Yo esta tarde he tenido el mismo problema

y era por el nombre que doya los campos del formulario

he estado creando un generador de formularos

y los campos muchas veces son arrays


en principio solo es una cuestion de nombres que no admite

algun caracter
--

Daniel Perez |
Fotografo


Tlf.     627.93.74.93
Email. dani...@gmail.com
Webwww.daniperezfotografia.es

Valentina Aguirre

unread,
Feb 10, 2011, 3:46:28 PM2/10/11
to codeignit...@googlegroups.com
 El codigo que estoy usando es:

                  $this->db->insert('usuario', $_POST);

y el formulario es el siguiente, cabe aclarar que estoy utilizando hojas de estilo tambien 

<form method="post" action="insertar_usuario">
<table>
<tr>
<td><font size=4>Cedula<font color=red>*</font></td>
<td><br><input type=text name=cod_usuario class=login></td>
</tr>
<tr>
<td><font size='4'>Nombres<font color=red>*  </font></td>
<td><br><input type=text name=nom_usuario class=login></td>
</tr>
<tr>
<td><font size='4'> Apellidos<font color=red>*  </font></td>
<td><br><input type=text name=apell_usuario class=login></td>
</tr>
<tr>
<td><font size='4'>Contraseña<font color=red>*  </font></td>
<td><br><input type=password name=contraseña_usuario class=login></td>
</tr>
<tr>
<td><font size='4'>Telefono fijo </font></td>
<td><br><input type=text name=tel_usuario class=login></td>
</tr>
<tr>
<td><font size='4'>Telefono celular</font></td>
<td><br><input type=text name=cel_usuario class=login></td>
</tr>
<tr>
<td><font size='4'>Direccion</font></td>
<td><br><input type=text name=dir_usuario class=login></td>
</tr>
<tr>
<td> <font size='4'>Email<font color=red>*  </font></td>
<td><br><input type=text name=email_usuario class=login></td>
</tr>
<tr>
<td> <font size='4'> Tipo usuario<font color=red>*  </font></td>
<td><br><select name=id_tipousuario class="text"> <option value=3>Seleccione una opcion</option><option value=1>Estudiante</option> <option value=2>Profesor</option></select></td>
</tr>

el nombre de los campos del formulario es el mismo al nombre de los campos de la base de datos

de antemano muchas gracias

Daniel Perez

unread,
Feb 11, 2011, 5:27:00 AM2/11/11
to codeignit...@googlegroups.com
no deberia poner los valores de los campos entre comillas ?

es decir

tu indicas que tu codigo es

type=text name=cod_usuario class=login

y creo que deberia ser

type="text" name="cod_usuario" class="login"

vamos ... con los valores entrecomillados

juanmy

unread,
Feb 11, 2011, 5:31:13 AM2/11/11
to codeignit...@googlegroups.com
En vez de :

$this->db->insert('usuario', $_POST);

Usa:
$this->db->insert('usuario', $_REQUEST);

Además coloca el nombre de los campos con las " correspondientes, ya me contarás, de todas formas no te aconsejo que ingreses directamente a la base de datos los campos del formulario, ya que te pueden dar dolores de cabeza, p.e. si recibes un input submit lo va a intentar grabar también...

El 10 de febrero de 2011 21:46, Valentina Aguirre <vale...@gmail.com> escribió:

Julian Magnone

unread,
Feb 11, 2011, 6:54:15 AM2/11/11
to codeignit...@googlegroups.com
Hola:

Mi opinión es que $_REQUEST o $_POST son demasiado arriesgado como para pasar en un insert a la base.

Yo crearía un $data = array( 
$this->input->post('param1'),
$this->input->post('param2'),
..
);

y luego le pasaría:

$this->db->insert('usuario', $data );

Al menos te asegurás que los datos que querés insertar sean los que vas a insertar, ni uno menos ni uno más. Es más, debería usarse XSS Filtering que trae CodeIgniter (fijate en la configuración... o sino le pasás TRUE como segundo parámetro al $this->input->post.

Saludos!

Julián



2011/2/11 juanmy <juan...@gmail.com>

Axel Ariel Arroyo Braconi

unread,
Feb 11, 2011, 6:40:00 AM2/11/11
to codeignit...@googlegroups.com
Un consejo si queres hacerlo un poco mas prolijo podrias hacerlo de ls
siguiente forma

$campos = array('nombre_campo1' => $this->input->post('nombre_campo_form1'),
'nombre_campo2' =>
$this->input->post('nombre_campo_form2));


$this->db->save('nombre_tabla', $campos);


Donde el array de arriba lleva el nombre del campo en la base de datos
y la funcion $this->input->post(); se encarga de capturar los datos
via post y en el caso de que tengas activa y escapa los datos para
poder insertarlo correctamente en la bd. Es un poquito mas largo y vas
a tener que escribir algunas lineas mas pero es mas seguro.


Axel Ariel, Arroyo Braconi
Web Developer - Desarrollo de Aplicaciones Web
Cordoba Capital - Argentina
arroyo...@gmail.com | Skype: axelx5 | Tel: +543517546970 - +543514923892

El 11/02/11, juanmy <juan...@gmail.com> escribió:

--
Enviado desde mi dispositivo móvil

*Axel Ariel, Arroyo Braconi*

Valentina Aguirre

unread,
Feb 11, 2011, 8:30:39 AM2/11/11
to codeignit...@googlegroups.com
LA VERDAD YA PROBE TODAS LAS SOLUCIONES APORTADAS, Y AUN PERSISTE EL PROBLEMA, AGRADECERIA MUCHO Q ME PUDIERAN DAR OTRAS SOLUCIONES

DE ANTEMANO MUCHAS GRACIAS

william campos

unread,
Feb 11, 2011, 9:49:44 AM2/11/11
to codeignit...@googlegroups.com
mm xD $this->db->insert('nombre_tabla', $campos); no sera? XD!

Nokrosis

unread,
Feb 11, 2011, 10:10:28 AM2/11/11
to codeignit...@googlegroups.com
Después de tu insert, pon:

echo $this->db->last_query();

Y dinos qué te imprime, con eso podemos saber cuál es el problema.

Saludos.

2011/2/11 william campos <wca...@maxineti.com>

Teo Jurado

unread,
Feb 11, 2011, 12:50:48 PM2/11/11
to codeignit...@googlegroups.com
Y escribe con Minusculas, que escribir con mayusculas significa que estas chillando y da mala impresion... :-)

Teo Jurado

unread,
Feb 11, 2011, 12:54:33 PM2/11/11
to codeignit...@googlegroups.com
Por lo que he leido, el error que te puede dar es que metes unos caracteres en el codigo que no estan permitidos...

Por ejemplo, si la clave es numerica, estas intentando meter  letras...

Mira a ver como tienes definidas las claves en la tabla, y que valores estas intentando meter...

Dragan Ardala

unread,
Feb 11, 2011, 3:38:44 PM2/11/11
to codeignit...@googlegroups.com
<input type=password name=contraseña_usuario class=login>

revisa el atributo name, lo tienes con una ñ

salu2

Chispa28

unread,
Feb 11, 2011, 5:34:25 PM2/11/11
to CodeIgniter-spanish
debe ser por el contraseña_usuario no le gustan a php (creo que es el)
Salu2

On 11 feb, 18:38, Dragan Ardala <ard...@gmail.com> wrote:
> <input type=password name=contraseña_usuario class=login>
>
> revisa el atributo name, lo tienes con una ñ
>
> salu2
>
> El 11 de febrero de 2011 18:54, Teo Jurado <teo.jur...@gmail.com> escribió:
>
>
>
>
>
>
>
> > Por lo que he leido, el error que te puede dar es que metes unos caracteres
> > en el codigo que no estan permitidos...
>
> > Por ejemplo, si la clave es numerica, estas intentando meter  letras...
>
> > Mira a ver como tienes definidas las claves en la tabla, y que valores
> > estas intentando meter...
>
> > El 11 de febrero de 2011 18:50, Teo Jurado <teo.jur...@gmail.com>escribió:
>
> > Y escribe con Minusculas, que escribir con mayusculas significa que estas
> >> chillando y da mala impresion... :-)
>
> >> El 11 de febrero de 2011 16:10, Nokrosis <nokro...@gmail.com> escribió:
>
> >> Después de tu insert, pon:
>
> >>> echo $this->db->last_query();
>
> >>> Y dinos qué te imprime, con eso podemos saber cuál es el problema.
>
> >>> Saludos.
>
> >>> 2011/2/11 william campos <wcam...@maxineti.com>
>
> >>> mm xD $this->db->insert('nombre_tabla', $campos); no sera? XD!
>
> >>>> El 11 de febrero de 2011 06:40, Axel Ariel Arroyo Braconi <
> >>>> arroyo.axe...@gmail.com> escribió:
>
> >>>> Un consejo si queres hacerlo un poco mas prolijo podrias hacerlo de ls
> >>>>> siguiente forma
>
> >>>>> $campos = array('nombre_campo1' =>
> >>>>> $this->input->post('nombre_campo_form1'),
> >>>>>                             'nombre_campo2' =>
> >>>>> $this->input->post('nombre_campo_form2));
>
> >>>>> $this->db->save('nombre_tabla', $campos);
>
> >>>>> Donde el array de arriba lleva el nombre del campo en la base de datos
> >>>>> y la funcion $this->input->post(); se encarga de capturar los datos
> >>>>> via post y en el caso de que tengas activa y escapa los datos para
> >>>>> poder insertarlo correctamente en la bd. Es un poquito mas largo y vas
> >>>>> a tener que escribir algunas lineas mas pero es mas seguro.
>
> >>>>> Axel Ariel, Arroyo Braconi
> >>>>> Web Developer - Desarrollo de Aplicaciones Web
> >>>>> Cordoba Capital  -  Argentina
> >>>>> arroyo.axe...@gmail.com | Skype: axelx5 | Tel: +543517546970 -
> >>>>> +543514923892
>
> >>>>> El 11/02/11, juanmy <juanm...@gmail.com> escribió:
> >>>>> > En vez de :
> >>>>> > $this->db->insert('usuario', $_POST);
>
> >>>>> > Usa:
> >>>>> > $this->db->insert('usuario', $_REQUEST);
>
> >>>>> > Además coloca el nombre de los campos con las " correspondientes, ya
> >>>>> me
> >>>>> > contarás, de todas formas no te aconsejo que ingreses directamente a
> >>>>> la base
> >>>>> > de datos los campos del formulario, ya que te pueden dar dolores de
> >>>>> cabeza,
> >>>>> > p.e. si recibes un input submit lo va a intentar grabar también...
>
> >>>>> > El 10 de febrero de 2011 21:46, Valentina Aguirre
> >>>>> > <valena...@gmail.com>escribió:
> >>>>> >> El 10 de febrero de 2011 12:14, Nokrosis <nokro...@gmail.com>
> >>>>> escribió:
>
> >>>>> >> ¿Qué código estás usando para hacer la inserción? ¿Qué base de datos
> >>>>> usas?
>
> >>>>> >>> Saludos.
>
> >>>>> >>> 2011/2/10 Valentina Aguirre <valena...@gmail.com>

Axel Ariel Arroyo Braconi

unread,
Feb 11, 2011, 9:53:18 AM2/11/11
to codeignit...@googlegroups.com
Cuando tenes razon tenes razon estoy usando rails hace unas semanas y
medio como que ya se me confunden las cosas XD pero asi es tenes toda
la razon. jajajaja

2011/2/11 william campos <wca...@maxineti.com>:

--
Axel Ariel, Arroyo Braconi

Valentina Aguirre

unread,
Feb 11, 2011, 10:38:15 AM2/11/11
to codeignit...@googlegroups.com
AUN SIGUE MOSTRANDO EL MISMO ERROR, Y CON LA SENTENCIA echo $this->db->last_query(); NO NOS IMPRIME NADA

ESPERAMOS QUE NOS PUEDAN SEGUIR COLABORANDO CON NUESTRA DUDA,

DE ANTEMANO MUCHAS GRACIAS

Valentina Aguirre

unread,
Feb 11, 2011, 11:00:05 AM2/11/11
to codeignit...@googlegroups.com

GRACIAS POR TODA SU COLABORACION, YA ENCONTRAMOS EL ERROR, Y FUE QUE NO NOS ACEPTABA EL CARACTER "_" NI EL CARACTER "Ñ"

LES AGREDECEMOS LAS PRONTAS RESPUESTAS QUE DIERON A NUESTRAS PREGUNTAS 
Reply all
Reply to author
Forward
0 new messages