Foros del Web » Programando para Internet » PHP »

No guarda registros en mysql

Estas en el tema de No guarda registros en mysql en el foro de PHP en Foros del Web. Tengo un problema raro, raro, raro... Resulta que tengo un script en PHP para guardar en la base de datos de MYSLQ los datos del ...
  #1 (permalink)  
Antiguo 09/07/2012, 15:56
laventanadewindows
Invitado
 
Mensajes: n/a
Puntos:
No guarda registros en mysql

Tengo un problema raro, raro, raro...

Resulta que tengo un script en PHP para guardar en la base de datos de MYSLQ los datos del registro de cada usuario...

Pues el script no da ningún error de PHP, ni de MYSQL, absolutamente nada, asi que decidí hacer un script más corto para ver si veía el fallo, ya que no os voy a postear tamaño código aquí...
Este es el reducido...
Código PHP:
<?php
session_start
();
//Datos para establecer la conexion con la base de mysql...
if(mysql_connect('localhost','root','')==true) {
echo 
'Yeah';
mysql_error();
}
else {
echo 
'Fuck';
mysql_error();
}
if(
mysql_select_db('usuarios')==true) {
echo 
'Yeah2';
mysql_error();
}
else {
echo 
'Fuck2';
mysql_error();
}
$nombre $_POST["nombre"];
$nombre2 mysql_query("SELECT nombre FROM infopersonal WHERE nombre='$nombre'");
if(
$nombre2==true) {
echo 
'Yeah3';
mysql_error();
}
else {
echo 
'Fuck3';
mysql_error();
}
if(
mysql_query("insert into infopersonal (nombre) values ('$nombre')")==true) {
echo 
"Yeah4";
mysql_error();
}
else {
echo 
"Fuck4";
mysql_error();
}
?>
Cómo se ve añadí varias comprobaciones para ver donde fallaba el registro...
No hace falta decir que no obteengo ningún error del servidor, ni de sintaxis, nada en absoluto...
Sin embargo no conecta...
Actualmente obtengo como valores:
Cita:
YeahYeah2Yeah3Fuck4
Lo que quiere decir que establece bien la conexión, que elige bien también la base de datos, que es capaz de obtener resultados de la tabla de la base, pero luego falla justo al final, cuando intento meter un solo valor en un solo campo...
Y no tengo ni idea de que pasa...
  #2 (permalink)  
Antiguo 09/07/2012, 16:01
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 14 años, 5 meses
Puntos: 63
Exclamación Respuesta: No guarda registros en mysql

Prueba así...


Código PHP:
Ver original
  1. $query = mysql_query("insert into infopersonal (nombre) values ('$nombre')");
  2. if($query) {
  3. echo "Yeah4";

y me dices...
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #3 (permalink)  
Antiguo 09/07/2012, 16:05
laventanadewindows
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No guarda registros en mysql

Cita:
Iniciado por Heiroon Ver Mensaje
Prueba así...


Código PHP:
Ver original
  1. $query = mysql_query("insert into infopersonal (nombre) values ('$nombre')");
  2. if($query) {
  3. echo "Yeah4";

y me dices...
Da exactamente lo mismo:
YeahYeah2Yeah3Fuck4
  #4 (permalink)  
Antiguo 09/07/2012, 16:06
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: No guarda registros en mysql

Código PHP:
Ver original
  1. if($conexion = mysql_connect('localhost','root','')==true){
  2. bla bla bla
  3. ...
  4. ....
  5. .....
  6.  
  7. if(mysql_query("insert into infopersonal (nombre) values ('$nombre')",$conexion){
  8. bla bla bla
  9. ...
  10. ....
  11. .....

Si tenes solo un campo en tu tabla entonces esta bien la consulta, sino tenes que especificar los otros campos como '' ( null )
por ejemplo si tenes en tu tabla una estructura como: id, nombre, apellido y solo queres meter el nombre haces esto:
Código PHP:
Ver original
  1. if(mysql_query("insert into infopersonal ('',nombre,'') values ('','$nombre','')",$conexion){
  #5 (permalink)  
Antiguo 09/07/2012, 16:27
laventanadewindows
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No guarda registros en mysql

Cita:
Iniciado por rodrigo791 Ver Mensaje
Código PHP:
Ver original
  1. if($conexion = mysql_connect('localhost','root','')==true){
  2. bla bla bla
  3. ...
  4. ....
  5. .....
  6.  
  7. if(mysql_query("insert into infopersonal (nombre) values ('$nombre')",$conexion){
  8. bla bla bla
  9. ...
  10. ....
  11. .....

Si tenes solo un campo en tu tabla entonces esta bien la consulta, sino tenes que especificar los otros campos como '' ( null )
por ejemplo si tenes en tu tabla una estructura como: id, nombre, apellido y solo queres meter el nombre haces esto:
Código PHP:
Ver original
  1. if(mysql_query("insert into infopersonal ('',nombre,'') values ('','$nombre','')",$conexion){
Me pareció que podía ser eso, ya que tengo nueve campos en la tabla de la base de datos, así que cambie el código PHP de nuevo, y lo dejé así, siguiendo tu estilo, y añadiendo mas comillas sin contenido para los campos que no cambiaban:

Código PHP:
<?php
session_start
();
$nombre $_POST["nombre"];
if(
$conexion mysql_connect('localhost','root','')==true){
  echo 
'Yeah1';
  if(
mysql_query("insert into infopersonal ('',nombre,'','','','','','','') values ('','$nombre','','','','','','','')",$conexion)){
    echo 
'Yeah2';
  }
  else {
    echo 
'Fuck2';
  }
}
else {
  echo 
'Fuck1';
}
?>
Y da este error:
Cita:
Warning: mysql_query() expects parameter 2 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-12.0\www\php\subirfoto.php on line 6
Obtengo el primer Yeah1, pero en la segunda comprobación, pero al meter los valores en la tabla me falla, y me da Fuck2...

Te dejo la tabla:
http://www.mediafire.com/?ja712ao4uhz5k7i
  #6 (permalink)  
Antiguo 09/07/2012, 16:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: No guarda registros en mysql

Tres detalles:
1) Los apóstrofos (') se usan en MySQL únicamente para cadenas de texto.
2) Para los los nombres de bases, tablas, columnas y otros objetos creados con sentencias DDL, se usan o los acentos inversos(`) o las comillas (").
3) Sólo se deben poner obligatoriamente en la lista de campos aquellos que en la definición de la tabla sean NOT NULL, con la sola excepción de los que sean AUTO_INCREMENT. Esos no se necesitan.
4) Cuando se indica un campo, debe ser un campo que exista, por su nombre, y no cadenas vacías.
En otras palabras, esto:
Código MySQL:
Ver original
  1. insert into infopersonal ('',nombre,'','','','','','','')
  2. values ('','$nombre','','','','','','','')
Esta completamente mal escrito...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 09/07/2012, 16:43
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: No guarda registros en mysql

O.o como pretendes que se "imprima" mysql_error() si no antepones un echo,print,die, así jamás imprimirá, aparte, no le veo caso a todos esos "if" y "else", están de más y solo "ensucian" el código y hacen que se complique su lectura...

Cita:
Si tenes solo un campo en tu tabla entonces esta bien la consulta, sino tenes que especificar los otros campos como '' ( null )
por ejemplo si tenes en tu tabla una estructura como: id, nombre, apellido y solo queres meter el nombre haces esto:
Mentira, no importa cuantos campos tengas, no necesitas indicar todos, unicamente los que tengan propiedad NOT NULL, y mucho menos de la forma en la que mencionas, tal cual le sucedió a @laventanadewindows, arrojará error...

Tu código simplificado...

Código PHP:
Ver original
  1. <?php
  2.  
  3. $conexion = mysql_connect($host,$user,$pass) or die(mysql_error());
  4. mysql_select_db($db,$conexion) or die(mysql_error());
  5.  
  6. $nombre = $_POST["nombre"];
  7.  
  8. mysql_query("SELECT nombre FROM infopersonal WHERE nombre='$nombre'") or die(mysql_error());
  9. mysql_query("insert into infopersonal (nombre) values ('$nombre')") or die(mysql_error());
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 09/07/2012, 16:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: No guarda registros en mysql

Cita:
Iniciado por rodrigo791 Ver Mensaje
Si tenes solo un campo en tu tabla entonces esta bien la consulta, sino tenes que especificar los otros campos como '' ( null )
@rodrigo791: NULL y '' no son la misma cosa.

NULL no es un dato, es una indeterminación, estado de indefinición o puntero a la nada, mientras que '' es una cadena de texto vacía y desde el punto de vista de datos, no representa a NULL.
No confundir.

Cuando insertas un valor como '' en un campo de una tabla, no se dispara la restricción de NOT NULL, mientras que si le intentas meter un NULL, si. Eso demuestra que '' no es NULL.
NULL es en esencia un estado o puntero a la nada, similar al Nothing de VB.Net y null de C#.

Un detalle adicional es que como te dije, NULL no es un dato, por lo que no se pueden usar operadores lógicos con él, y también que toda operación realizada con un campo o variable NULL, devuelve NULL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 09/07/2012, 17:01
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: No guarda registros en mysql

Código PHP:
Ver original
  1. INSERT INTO infopersonal (campo1,nombre,campo3,campo4,campo5,campo6,campo7,campo8,campo9)
  2. VALUES ('','$nombre','','','','','','','')

algo asi quedaria
  #10 (permalink)  
Antiguo 09/07/2012, 17:03
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: No guarda registros en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
@rodrigo791: NULL y '' no son la misma cosa.

NULL no es un dato, es una indeterminación, estado de indefinición o puntero a la nada, mientras que '' es una cadena de texto vacía y desde el punto de vista de datos, no representa a NULL.
No confundir.

Cuando insertas un valor como '' en un campo de una tabla, no se dispara la restricción de NOT NULL, mientras que si le intentas meter un NULL, si. Eso demuestra que '' no es NULL.
NULL es en esencia un estado o puntero a la nada, similar al Nothing de VB.Net y null de C#.

Un detalle adicional es que como te dije, NULL no es un dato, por lo que no se pueden usar operadores lógicos con él, y también que toda operación realizada con un campo o variable NULL, devuelve NULL.
Bien gracias por la aclaración
  #11 (permalink)  
Antiguo 09/07/2012, 17:07
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: No guarda registros en mysql

gnzsoloyo
o sea que para asegurarnos de que esto esté bien como es la forma correcta?
Código PHP:
Ver original
  1. INSERT INTO infopersonal (campo1,nombre,campo3,campo4,campo5,campo6,campo7,campo8,campo9)
  2. VALUES (NULL,'$nombre',NULL,NULL,NULL,NULL,NULL,NULL,NULL)

algo así?
  #12 (permalink)  
Antiguo 09/07/2012, 17:09
laventanadewindows
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No guarda registros en mysql

Valeee... me alegro ver que me han contestado tantos, ya hoy he aprendido algo nuevo ;)

Finalmente funciona de esta forma:

Código PHP:
mysql_query("insert into infopersonal (nombre,apellidos,contrasena,email,fecha,sexo,cumpleanos,avatar) values ('$nombre','$apellidos','$contrasena','$email','$fecha','$sexo','$cumpleanos','$nombre_archivo')") or die(mysql_error()); 
  #13 (permalink)  
Antiguo 09/07/2012, 17:13
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: No guarda registros en mysql

Cita:
Iniciado por laventanadewindows Ver Mensaje
Valeee... me alegro ver que me han contestado tantos, ya hoy he aprendido algo nuevo ;)

Finalmente funciona de esta forma:

Código PHP:
mysql_query("insert into infopersonal (nombre,apellidos,contrasena,email,fecha,sexo,cumpleanos,avatar) values ('$nombre','$apellidos','$contrasena','$email','$fecha','$sexo','$cumpleanos','$nombre_archivo')") or die(mysql_error()); 
pero lo que usted quería no era solo insertar el nombre? si en realidad era eso no entiendo porque agrego mas campos en la consulta , de todas formas si está conforme dejemosla por acá
  #14 (permalink)  
Antiguo 09/07/2012, 18:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: No guarda registros en mysql

Cita:
Iniciado por rodrigo791 Ver Mensaje
gnzsoloyo
o sea que para asegurarnos de que esto esté bien como es la forma correcta?
Código PHP:
Ver original
  1. INSERT INTO infopersonal (campo1,nombre,campo3,campo4,campo5,campo6,campo7,campo8,campo9)
  2. VALUES (NULL,'$nombre',NULL,NULL,NULL,NULL,NULL,NULL,NULL)

algo así?
Basicamente si. Esa es la idea.
Por su puesto que a nivel de programación, lo mejor es crear dinamicamente la lista de campos y de valores a insertar, especialmente para las columnas que pueden ser nulificables. ¿Se entiende?

Un tip que me olvidé mencionar es que nunca se debe poner NULL entre apóstrofes ('NULL'), porque eso no es NULL sino una cadena de texto que dice "NULL".

El tema del NULL ocupa siempre un capítulo entero en los manuales de referencia de los diferentes DBMS, porque es un tema complejo, y difícil de dominar al principio. Pero cuando lo haces descubres que hay muchísima información que se puede obtener de ese estado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 09/07/2012, 18:32
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: No guarda registros en mysql

Si igual lo que hice no fue poner 'NULL' sino NULL sin las comillas simples gracias
  #16 (permalink)  
Antiguo 09/07/2012, 18:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: No guarda registros en mysql

Lo noté.
Sólo lo mencionaba porque lo pensé, pero no lo puse en el post anterior.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql, registro, registros, sql, tabla, usuarios, guardar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:20.