Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/11/2012, 04:34
alyciashape
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Inserción MySQL con campos recogidos de formulario (algunos vacíos)

Buenos días a todos.

Partiendo de esta consulta:
Código PHP:
"INSERT INTO cliente ($campos) VALUES ('$nombre', '$nif', $fecha_alta, '$direccion', $telefono, $fax, '$nombre_comercial', '$contacto', '$correo', '$correo_admin', $codigo_postal, '$poblacion', '$provincia', '$comunidad', '$pais', $id_codigo_pais, $id_usuario, $id_estado)" 
Y sabiendo que esos campos vienen de un formulario y a veces están vacíos (no todos los campos son obligatorios) pues así tal cual me da error. No me deja insertar los campos como ''. Vease esta consulta:

Código SQL:
Ver original
  1. INSERT INTO cliente (nombre, nif, fecha_alta, direccion, telefono, fax, nombre_comercial, contacto, correo, correo_administracion, codigo_postal, poblacion, provincia, comunidad, pais, id_codigo_pais, id_usuario, id_estado) VALUES ('prueba', '7668496', 2012-11-28, 'marques de quintanar', 986356659, 986724565, '', 'prueba', '[email protected]', '', , '', '', '', '', , 2, 1)

Me da error:
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 ' '', '', '', '', , 2, 1)' at line 159

No se pueden poner los campos como '' ? Que tendría que hacer? que si son '' ponerlos como NULL sin comillas?


EDIT: acabo de descubrir el error. Si el campo es INT no le estoy poniendo evidentemente. Así que si falta un campo INT en lugar de '' no aparece nada, quedaría algo así:
'campo de ejemplo', , 'El int sería el anterior', ''

Sólo se me ocurre esta solución y no se si hay alguna mejor:
En plan
Código PHP:
Ver original
  1. $columnas = $nombre; //este siempre va a ir, es obligatorio
  2. $campos = $nombre;
  3.  
  4. if ($nif!='') {
  5. $columnas+=", nif";
  6. $campos+=", $nif";
  7. }

Y luego
Código PHP:
Ver original
  1. INSERT INTO cliente ($columnas) VALUES($campos);

No se si me explico.

Última edición por alyciashape; 28/11/2012 a las 05:02