0

Buenas gracias a que me ayudaron por este medio llegue a a dicho codigo para modificar los datos de un usuario. No se si se podra impletar para que deje un dato tipo DATE COMO Null ya lo probe hacer y no me lo guardo, como referencia tengo entendido que se realiza de la siguiente manera, esto se podira impletar al codigo siguiente? o se tiene que hacer de otra manera para solucionarlo. Nota: si lo dejo vacio no carga pero si lo lleno si :/

<?php
  $fec_ege_emp=isset($_POST['fec_ege_emp'])? $_POST['fec_ege_emp'] : null;
    $arrayFechaDeegreso=null;
    $num_array=count($fec_ege_emp);
    $contador=0;
    if($num_array>0){
      foreach ($fec_ege_emp as $key => $value) {
        if($contador != $num_array-1){
          $arrayFechaDeegreso .=$value.' ';

          }else{
            $arrayFechaDeegreso .= $value;
            $contador ++;}

      }
    } ?>

<?php


//Lo que hace esta solución es guardar todos los campos que se van a usar en el array $fields:
$fields = array('cod_emp','cedula', 'nom_emp', 'ape_emp', 'fec_nac_emp', 'estatus', 'fec_ing_emp','id_estado','id_cargo',  'id_division', 'id_municipio','id_parroquia',  'tel_hab_emp', 'tel_cel_emp', 'mail_emp', 'id_rol', 'password', 'id_oficina', 'ciudad_emp', 'calle_emp', 'edf_emp', 'piso_emp', 'apt_emp');

$conex = pg_connect ("host=localhost port=5433 dbname=prueba user=postgres password=josec123");

if(trim($_POST["cod_emp"]) != "")
{
 $cod_emp = strtolower(htmlentities($_POST["cod_emp"], ENT_QUOTES));
 $result = pg_query('SELECT * FROM tbl_empleado WHERE cod_emp=\''.$cod_emp.'\'');
}
//Luego, se obtienen los datos del formulario correspondientes a estos campos y los asegura:
$data = array_intersect_key($_POST, array_flip($fields) ) ;
$data = array_map('pg_escape_string', $data);
//Se format la parte set de la consulta SQL:
$set = '';
foreach($data as $field => $value) {
  $set .= "{$field} = '{$value}',";
}
//Finalmente, se forma la consulta completa y se ejecuta:

$sql= "UPDATE tbl_empleado SET ".rtrim($set, ',')." WHERE cod_emp= ".$data['cod_emp'];

  $result = pg_Exec($conex, $sql);
?>
José
  • 153
  • 7
  • Hola @josé Para que se acepte un valor nulo, la columna debe admitirlo en la definición de estructura de la tabla. Si no puedes modificar la definición de la tabla puedes "idear" un valor admisible como equivalente a pasar cuando necesites pasar NULL, por ejemplo 24 de dic del año 1819, que muy posíblemente, no tenga sentido en la tabla y es anterior a cualquier fecha razonable que puedas recoger. – quevedo Dec 09 '19 at 18:43
  • Considera usar consultas preparadas. Tu código es vulnerable a ataques de *Inyección SQL*. [No es sólo la base de datos lo que está en riesgo, podría ser todo el sistema](https://es.stackoverflow.com/q/108520/29967). – A. Cedano Dec 09 '19 at 22:00
  • listo la tabla acepta valores nulos, en cuanto a otros campos me los guada sin problemas pero para el date da el error. – José Dec 10 '19 at 13:34

1 Answers1

0

Primero, deberías de cambiar la estructura de la base de datos para soportar el campo como NULL. Es decir, que no tenga un NOT NULL.

En segundo lugar, modifica tu código:


$set = '';
foreach($data as $field => $value) {
  if( isset($value) ) {
     $set .= "{$field} = '{$value}',";
  }else {
     $set .= "{$field} = NULL,";
  }
}

En vez de:


$set = '';
foreach($data as $field => $value) {
  $set .= "{$field} = '{$value}',";
}

Manuel canga
  • 394
  • 1
  • 6