Hola 
ciscojuan, 
Básicamente el problema reside en que cargas la verificación del formulario incluso sin haber recibido nada por POST. 
 Código PHP:
    if($_REQUEST['nombre'] != null && $_REQUEST['valor'] != null //...)
{
//... 
    
  En teoría la secuencia sería así: 
 Código PHP:
    // 1. Verifica si hay datos POST.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // 2. Verificas si todos (los que necesites) traen algún valor. (Traen String, no null)
    if($_POST['nombre'] != '' && $_POST['valor'] != '' && $_POST['fecha_publicado'] != '' && $_POST['categoria'] != '')
    {
 
        // 3. Verificas si los datos recibidos son los esperados.
        //       Esto se recomienda para evitar injecciones en la DB. Recomendable usar PDO.
        
        // 4. Preparas los datos para pasarlos a consulta
        $nombre           = $_POST['nombre'];
        $valor            = $_POST['valor'];
        $fechapublicacion = $_POST['fecha_publicado'];
        $valor            = $_POST['categoria'];
    }
}
// Los pasos 2 y 3 se pueden hacer juntos o uno detrás de otro, depende de lo limpio que quieras tener el código.
// Si esperas datos por POST, mejor trabajar con $_POST. 
    
  Prueba y nos cuentas. 
Saludos,