2

Tengo una duda sobre el ciclo for, es que tengo un formulario dónde mando y recibo las siguientes variables:

case 'updatePD': //ACTUALIZACION DEL COLABORADOR
if(!empty($_POST['consecutivo'])){

$n=count($_POST['consecutivo']);
$iddatospersonales=$_SESSION['iddatospersonales'];
$cedula=$_SESSION['numdocumcolaboradorview'];

for ($i=0; $i<$n; $i++) {
    $rutaarchivo="../../assets/files/upload/archivo/";

    if (empty($_POST['idprocesodisciplinario'][$i])) {
        $_POST['idprocesodisciplinario'][$i]=0;
    }

    if (empty($_POST['causa'][$i])) {
        $_POST['causa'][$i]=-1;
    }

    echo "CAUSA:  ". $_POST['causa'][$i]."  CONSECUTIVO:  ".$_POST['consecutivo'][$i];
    echo "<br>";

    $query=$obj->post_ejecutar("SELECT * FROM procesodisciplinario WHERE 
idprocesodisciplinario=".$_POST['idprocesodisciplinario'][$i]." 
ORDER BY idprocesodisciplinario");
    $opcion=pg_fetch_row($query);

    if(!empty($_FILES['cargadisciplinarios'])){
        if(!empty($_FILES['cargadisciplinarios'])){
            $cargadisciplinarios=$obj->cargar_archivo($_FILES['cargadisciplinarios']['name'][$i],$_FILES['cargadisciplinarios']['type'][$i],$_FILES['cargadisciplinarios']['size'][$i],$_FILES['cargadisciplinarios']['tmp_name'][$i],$_FILES['cargadisciplinarios'],$rutaarchivo,$iddatospersonales,'DISCIPLINARIO',$cedula);

            try {
                $filedisciplinario=$cargadisciplinarios['filename'];
            } catch (Exception $e) {
                echo "NO ES UN ARCHIVO VÁLIDO";
                $filedisciplinario="";
            }
        }
    }

Tengo un select que dependiendo de la elección del usuario se habilita o se deshabilita el otro select (La Causa):

introducir la descripción de la imagen aquí

El problema o el error que tengo es que al hacer la siguiente validación:

if (empty($_POST['causa'][$i])) {
    $_POST['causa'][$i]=-1;
 }

Si no llega esa variable como resultado debería traerme -1 en la causa, pero ese no es el problema si no que en el orden que me la trae no es el correcto ya que llega de última, cuando en realidad debería llegarme de primera anexo esta imagen para que sea más fácil de entender:

introducir la descripción de la imagen aquí

  • El código que compartes es vulnerable a diferentes tipos de ataques y debería modificarse antes de ponerse en entornos de producción o de cara al público. Lee sobre [inyección SQL](https://es.stackoverflow.com/q/10518/250) y [cómo evitarla en PHP](https://es.stackoverflow.com/q/18232/250), también lee sobre [XSS](https://es.stackoverflow.com/q/53591/250). – Alvaro Montoro Apr 23 '18 at 14:38
  • Aparte, la pregunta en sí es algo confusa: ¿qué es lo que no funciona exactamente? ¿Quieres que el registro que aparece tercero sea realmente el primero? – Alvaro Montoro Apr 23 '18 at 14:42
  • La prueba que hice fue agregar 3 formularios y enviar los diferentes select en el primero hago que no llegue la causa osea la causa llega disabled como en la primera imagen que coloque, mientras que en los 2 formularios restantes la envie bien osea que si llegara. – Daniel Alexander Paz Apr 23 '18 at 14:47
  • Pero en ves de llegar el -1 de primero que significa Desconocido llega de último, en pocas palabras no llega en orden al ciclo – Daniel Alexander Paz Apr 23 '18 at 14:47
  • Ya añadí una imagen a la pregunta inicial dónde se explica mejor – Daniel Alexander Paz Apr 23 '18 at 14:55
  • Tal vez en vez de asignarle el `-1` al recibir el valor por `$_POST`, debieras darle ese `-1` directo al valor "Desconocido" en el combobox de Causa. – quinqui Apr 23 '18 at 14:55
  • Si ya lo tiene pero ese no es el problema, el problema es que al estar el select como disabled el $_POST['causa'][$i] de esa variable no llega, entonces lo que hago es una validación en donde si llega vacia esa variable pase a ser -1 (Desconocido) – Daniel Alexander Paz Apr 23 '18 at 14:58
  • Uhm, ¿ya intentaste darle un `print_r($_POST)` al inicio del script que recibe los valores del formulario? De pronto ahí verás si vienen en el orden correcto desde el formulario. – quinqui Apr 23 '18 at 14:58
  • Puede ser que, si deshabilitas el combobox, entonces no se envía, vale decir, todo el array de `"causa"` llega desfasado con respecto a `"idprocesodisciplinario"`. – quinqui Apr 23 '18 at 15:00
  • Si ya imprimí las variables, con echo y todas me llegan en orden al ciclo pero la unica que no llega bien es la del $_POST['causa'][$i] que llega de ultima al esta estar disabled en la segunda imagen que anexe se puede apreciar la causa – Daniel Alexander Paz Apr 23 '18 at 15:02
  • Precisamente, y como dice en la [documentación de "HTML Form input disabled"](https://www.w3schools.com/tags/att_input_disabled.asp), si deshabilitas un control (en este caso, uno de los comboboxes), el formulario no lo envía. En ese sentido, si tú planeas enviar 3 valores por "Sanción" y 3 por "Causa", si una de estas está deshabilitada, al script de destino le llegará un array "Sanción" de 3 elementos, y uno de "Causa" de sólo 2: y como son indexados numéricamente, estos índices no coincidirán entre Sanción y Causa. Te recomiendo no deshabilitar los controles, y buscar otra forma de abordar. – quinqui Apr 23 '18 at 15:07
  • Mmmm, que me recomendarías entonces? – Daniel Alexander Paz Apr 23 '18 at 15:11

0 Answers0