
Este script recibe valores de un formulario.
Código PHP:
<?PHP
include("config.php"); //de ahí es donde vienen los datos de conexión a la BD
$titulo = $_POST['titulo'];
$autor = $_POST['autor'];
$campo = $_POST['campo'];
$mes = $_POST['mes'];
$year = $_POST['year'];
$idioma = $_POST['idioma'];
$rev_lib = $_POST['rev_lib'];
$ed = $_POST['ed'];
$vol = $_POST['vol'];
$num = $_POST['num'];
$pags = $_POST['pags'];
$cong_simp = $_POST['cong_simp'];
$lugar = $_POST['lugar'];
$issn = $_POST['issn'];
$isbn = $_POST['isbn'];
$keywords = $_POST['keywords'];
$abstract = $_POST['abstract'];
$resumen = $_POST['resumen'];
$privado = $_POST['privado'];
$aportador = $_SESSION['nombre'];
$fecha;
if(get_magic_quotes_gpc==0){
$titulo = addslashes($titulo);
$autor = addslashes($autor);
$rev_lib = addslashes($rev_lib);
$ed = addslashes($ed);
$vol = addslashes($vol);
$cong_simp = addslashes($cong_simp);
$lugar = addslashes($lugar);
$abstract = addslashes($abstract);
$resumen = addslashes($resumen);
}
if(empty($titulo)) $titulo = NULL;
if(empty($autor)) $autor = NULL;
if(empty($campo)) $campo = NULL;
else $campo = settype($campo,"INT");
if(empty($mes)) $mes = NULL;
else $mes = settype($mes,"INT");
if(empty($year)) $year = NULL;
if(empty($idioma)) $idioma = NULL;
else $idioma = settype($idioma,"INT");
if(empty($rev_lib)) $rev_lib = NULL;
if(empty($ed)) $ed = NULL;
if(empty($vol)) $vol = NULL;
if(empty($num)) $num = NULL;
if(empty($pags)) $pags = NULL;
if(empty($cong_simp)) $cong_simp = NULL;
if(empty($lugar)) $lugar = NULL;
if(empty($issn)) $issn = NULL;
if(empty($isbn)) $isbn = NULL;
if(empty($keywords)) $keywords = NULL;
if(empty($abstract)) $abstract = NULL;
if(empty($resumen)) $resumen = NULL;
if(empty($privado)) $privado = 0;
else $privado = 1;
$fecha = date("Y-m-d");
$articulos = mysql_pconnect($db_host, $db_user, $db_pwd) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database, $articulos);
$valores = "NULL ,'".$titulo."',NULL, '".$autor."','".$campo."','".$mes."','".$year."','".$idioma."','".$rev_lib."','".$ed."','".$vol."','".$num."','".$pags."','".$cong_simp."','".$lugar."','".$issn."','".$isbn."','".$keywords."','".$abstract."','".$resumen."','".$privado."','".$aportador."','".$fecha."'";
$query = "INSERT INTO articulos (id, titulo, url, autor, campo_id, mes, year, idioma, rev_lib, ed, vol, num, pags, cong_simp, lugar, issn, isbn, keywords, abstract, resumen, privado, aportador, fecha) VALUES (".$valores.")";
$resultado = mysql_query($query,$articulos) OR die(mysql_error());
if($resultado) echo '<br>'.mysql_affected_rows().' artículo insertado en la base de datos.';
?>
La tabla en cuestión:
Código:
Entonces el problema me viene con cuando hay un campo del formulario que no se rellena, como por ejemplo el correspondiente a "mes". En este caso el script recibe el valor de "mes", y como está vacío lo pone a NULL. Pero claro, luego recibo este error:CREATE TABLE `articulos` ( `id` mediumint(9) NOT NULL auto_increment COMMENT 'identificador', `titulo` tinytext collate utf8_spanish2_ci COMMENT 'titulo', `url` tinytext collate utf8_spanish2_ci, `autor` tinytext collate utf8_spanish2_ci, `campo_id` tinyint(4) default NULL COMMENT 'campo del articulo', `mes` tinyint(4) default NULL, `year` year(4) default NULL, `idioma` tinyint(4) default NULL, `rev_lib` tinytext collate utf8_spanish2_ci, `ed` tinytext collate utf8_spanish2_ci, `vol` tinyint(4) default NULL, `num` tinyint(4) default NULL, `pags` smallint(6) default NULL, `cong_simp` tinytext collate utf8_spanish2_ci, `lugar` tinytext collate utf8_spanish2_ci, `issn` tinytext collate utf8_spanish2_ci, `isbn` tinytext collate utf8_spanish2_ci, `keywords` tinytext collate utf8_spanish2_ci, `abstract` tinytext collate utf8_spanish2_ci, `resumen` text collate utf8_spanish2_ci, `privado` binary(1) default '0', `aportador` tinytext collate utf8_spanish2_ci, `fecha` date default NULL, PRIMARY KEY (`id`), KEY `mes` (`mes`), KEY `year` (`year`), KEY `idioma` (`idioma`), KEY `privado` (`privado`), KEY `fecha` (`fecha`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci AUTO_INCREMENT=17 ;
Código:
que creo que se debe porque al poner $mes = NULL; lo que hace es vaciar el contenido de la variable y la base de datos necesita recibir un entero, para esecaso en concreto, o NULL. Y si hago $mes = "NULL"; también me da error pero diciéndome:Incorrect integer value: '' for column 'mes' at row 1
Código:
Yo creo que el problema está en hacer algún apaño en el script para que si $mes tiene un contenido que se lo mande a la BD en la forma 'número' y que si no tiene nada se lo mande en la forma NULL, sin comillas, pero no se me ocurre nada muy concreto para hacerlo.Incorrect integer value: 'NULL' for column 'mes' at row 1
Agradecería alguna idea o si es un fallo tonto que alguien me lo comentara

Un saludo.