douketangyouzh5219 2017-12-17 05:19
浏览 85

我在php oracle中更新日期时出错

I have a problem when entering the date to the form, and I reviewed other posts (POST) but the solution they give me does not work for me :( error indicates me an invalid month error.

I tried using TO_DATE('...','DD/MM/YYYY') but throws another error by doing it this way (actualizaOferta.php):

begin ACTUALIZA_OFERTAS(:codigo, :monto, TO_DATE(:fechI,"DD/MM/YYYY"), TO_DATE(:fechL,"DD/MM/YYYY"), :retorno, :ok); end;');

PICTURE ERROR error photo

I tried many ways to enter the date and nothing.

The results of this select, select * from nls_session_parameters; , is:

PARAMETER                      VALUE                                   
------------------------------ ----------------------------------------
NLS_LANGUAGE                   SPANISH                                 
NLS_TERRITORY                  SPAIN                                   
NLS_CURRENCY                   €                                       
NLS_ISO_CURRENCY               SPAIN                                   
NLS_NUMERIC_CHARACTERS         ,.                                      
NLS_CALENDAR                   GREGORIAN                               
NLS_DATE_FORMAT                DD/MM/RR                                
NLS_DATE_LANGUAGE              SPANISH                                 
NLS_SORT                       SPANISH                                 
NLS_TIME_FORMAT                HH24:MI:SSXFF                           
NLS_TIMESTAMP_FORMAT           DD/MM/RR HH24:MI:SSXFF                  

PARAMETER                      VALUE                                   
------------------------------ ----------------------------------------
NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR                       
NLS_TIMESTAMP_TZ_FORMAT        DD/MM/RR HH24:MI:SSXFF TZR              
NLS_DUAL_CURRENCY              €                                       
NLS_COMP                       BINARY                                  
NLS_LENGTH_SEMANTICS           BYTE                                    
NLS_NCHAR_CONV_EXCP            FALSE        

CODE

<div role="tabpanel" class="tab-pane fade" id="Ofertas">
                  <div class="row">
                    <div class="col-xs-12">
                        <br><br>
                        <div class="panel panel-info">
                            <div class="panel-heading text-center"><i class="fa fa-refresh fa-2x"></i><h3>Actualizar datos de ofertas</h3></div>
                          <div class="table-responsive">
                              <table class="table table-bordered">
                                  <thead class="">
                                      <tr>
                                          <th class="text-center">Código Producto</th>
                                          <th class="text-center">% Dcto</th>
                                          <th class="text-center">Fecha Inicio</th>
                                          <th class="text-center">Fecha Fin</th>
                                      </tr>
                                  </thead>
                                  <tbody>
                                      <?php
                                          include("conexion.php");

                                          $conn = oci_connect($username, $password, $db);
                                          if (!$conn) {
                                              $e = oci_error();
                                              trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
                                          }
                                          $up=1;
                                          $seleccion="select * from ofertas order by codigo_producto asc";
                                          // Se hace la conversión de la consulta con la conexión
                                          $variable = oci_parse($conn,$seleccion);                                  
                                          $estado=@oci_execute($variable);
                                          if(!$estado){
                                              $error = oci_error($variable);  
                                              echo $error['message'];
                                          }                         
                                          //La consulta retorna un arreglo de valores que se debe recorrer con oci_fetch
                                          //Cada valor entre los [] es una columna de la tabla en la base de datos

                                          $contador = 0;
                                          while (($elementop = oci_fetch_array($variable, OCI_BOTH)) != false) 
                                          {  
                                            echo '<div id="update-product">
                                                  <form method="post" action="process/actualizaOferta.php" id="res-update-ofert-'.$up.'">
                                                    <tr>
                                                        <td>
                                                          <input class="form-control" type="text" name="ofer-cod-act" maxlength="30" required="" value="'.$elementop['CODIGO_PRODUCTO'].'">
                                                        </td>
                                                        <td><input class="form-control" type="text" name="ofer-monto-act" maxlength="30" required="" value="'.$elementop['MONTO'].'"></td>
                                                        <td><input class="form-control" type="text-area" name="ofer-fecI-act" required="" value="'.$elementop['FECHA_INICIO'].'"></td>
                                                        <td><input class="form-control" type="tel" name="ofer-fecL-act" required="" maxlength="20" value="'.$elementop['FECHA_LIMITE'].'"></td>
                                                        <td class="text-center">
                                                            <button type="submit" class="btn btn-sm btn-primary button-UPR" value="res-update-ofert-'.$up.'">Actualizar</button>
                                                            <div id="res-update-ofert-'.$up.'" style="width: 100%; margin:0px; padding:0px;"></div>
                                                        </td>
                                                    </tr>
                                                  </form>
                                                </div>
                                                ';
                                                $up=$up+1;
                                                $contador++;
                                            }
                                            if($contador == 0){
                                              echo '<h3>No hay ofertas registradas.</h3>';
                                            } 

                                            oci_free_statement($variable);
                                            oci_close($conn); 
                                            ?>
                                  </tbody>
                              </table>
                          </div>
                        </div>
                    </div>

                  </div>
                </div>

actualizaOferta.php

<?php
    include("conexion.php");

    $conn = oci_connect($username, $password, $db);
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }


    $ingreso = oci_parse($conn, 'begin ACTUALIZA_OFERTAS(:codigo, :monto, :fechI, :fechL, :retorno, :ok); end;');

    //  oci_bind_by_name para pasar los valores rescatados por $_POST[] desde el formulario.
    oci_bind_by_name($ingreso, ':codigo', $_POST['ofer-cod-act']);
    oci_bind_by_name($ingreso, ':monto', $_POST['ofer-monto-act']);
    oci_bind_by_name($ingreso, ':fechI', $_POST['ofer-fecI-act']);
    oci_bind_by_name($ingreso, ':fechL', $_POST['ofer-fecL-act']);
    oci_bind_by_name($ingreso, ':retorno',$salida,100);
    oci_bind_by_name($ingreso, ':ok',$listo,100);


    //  Con oci_execute se ejecuta la sentencia y retorna falso en caso de error.
    $ok = oci_execute($ingreso);
    if (!$ok) {
        $error = oci_error($ingreso);   //  oci_error entrega el mensaje de error que proviene de oracle
        echo htmlentities($error['message']);   //  htmlentities da formato html al texto retornado   
    }

    if ($listo=='FALSE') 
    {
        echo 'valor es: '.$salida . 'y: ' . $listo;

    else
    {
        echo 'valor es: '.$salida . 'y: ' . $listo;

    }

    oci_free_statement($ingreso);   //  Liberación de memoria utilizada.    
    oci_close($conn);
?>

PROCEDURE

CREATE OR REPLACE PROCEDURE ACTUALIZA_OFERTAS(
  cod_prod IN OFERTAS.codigo_producto%TYPE,
  mont IN OFERTAS.monto%TYPE, --objeto
  fec_in IN OFERTAS.fecha_inicio%TYPE, --objeto
  fec_lim IN OFERTAS.fecha_limite%TYPE,

  MENSAJE OUT VARCHAR2,
  VALOR OUT VARCHAR2
)
IS
  noExiste EXCEPTION;
BEGIN
    LOCK TABLE OFERTAS IN ROW EXCLUSIVE MODE;

    UPDATE OFERTAS 
    SET monto=mont,
        fecha_inicio=fec_in,
        fecha_limite=fec_lim
    WHERE codigo_producto=cod_prod;

    IF SQL%NOTFOUND THEN
      RAISE noExiste;
    END IF;

    COMMIT;

    MENSAJE:='OFERTA DEL PRODUCTO >' || cod_prod || '< ACTUALIZADO CORRECTAMENTE';
    VALOR:='TRUE';
EXCEPTION
  WHEN noExiste THEN
    MENSAJE:='NO SE HA ENCONTRADO EL PRODUCTO' || cod_prod;
    VALOR:= 'FALSE';
    ROLLBACK;
  WHEN PROGRAM_ERROR THEN
    MENSAJE:='DAÑO EN LA BASE DE DATOS O LIBRERIAS CORRUPTAS';
    VALOR:= 'FALSE';
    ROLLBACK;
  WHEN STORAGE_ERROR THEN
    MENSAJE:='LA MEMORIA SE TERMINÓ O ESTÁ CORRUPTA';
    VALOR:= 'FALSE';
    ROLLBACK;
  WHEN ROWTYPE_MISMATCH THEN 
    MENSAJE:='TIPO DE ASIGNACIÓN NO COINCIDE CON EL DE LA VARIABLE';
    VALOR:= 'FALSE';
    ROLLBACK;
  WHEN OTHERS THEN
    MENSAJE:='ERROR DESCONOCIDO EN EL PROCEDIMIENTO "ACTUALIZA_OFERTAS"';
    VALOR:= 'FALSE';
    ROLLBACK; 
END;
/

THANKS IN ADVANCE :)

  • 写回答

1条回答 默认 最新

  • dongsuoying9059 2017-12-17 07:13
    关注

    Screenshot suggests that you entered date value as "20/04/95" (which is DD/MM/YY), but you're using a different date format mask in TO_DATE function: DD/MM/YYYY. Try to make them the same. Personally, I prefer a 4-digits years.

    Besides, you shouldn't use double quotes but single ones.

    So:

    to_date(:fechI, 'dd/mm/yy')
    

    might do the job.

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?