acceso a la matriz de casilla de verificación de php

$i=0;
while (db_data) {
$i++;
echo '<input type="checkbox" name="v['.$i.']" value="'.$url.'"';
if ($v[$i]) {
  echo ' checked';
  $s .= $url;
}
echo '/>';

}

Tengo la matriz de casillas de verificación anterior. Funcionó en mi PC, pero no en el servidor; parece que la parte confusa está en $v[$i].

$ v no está definido, pero seguro que no se usa en ningún otro lugar. el problema es que la selección de mi casilla de verificación nunca se restauró y el código nunca entró en la declaración if.

sin embargo, si agrego lo siguiente, puedo ver el valor. solo la casilla de verificación se perdió después del procesamiento $ v = $ _ POST ['v']; while (lista ($ clave, $ val) = @each ($ v)) {$ x. = '11 *'. $ clave .'- '. $ val.' * 22 '; }

mi objetivo es conservar la casilla de verificación marcada en el formulario, y necesito los $ s en otro lugar. alguna solución para reemplazar $ v [$ i]?

¿Alguien puede ayudarme a solucionar esto? Gracias.

preguntado el 16 de mayo de 11 a las 18:05

¿Copiaste / pegaste esto incorrectamente? -

eh ? lo siento, pero no hay suficiente para continuar aquí, ¿podría darnos más detalles? -

Dónde están $v y $i definido? Obviamente, su muestra de código está incompleta. -

Agregue lo que espera ver y lo que realmente ve. -

3 Respuestas

El problema parece ser $ v = $ _POST. Si solo está haciendo eso, entonces su declaración condicional debería ser

if ($v['v'][$i]) {
   ///Checkbox
}

o simplemente haga $ v = $ _POST ['v'].

Lo siento, ignora lo anterior, ya que mencionaste que hiciste esa parte. Vea abajo.

Aquí está el código de trabajo.

<form action="" method="post">
<?php
$v = $_POST['v'];
$i=0;
while ($i < 4) {
    $i++;
    $url = "test.com/".$i;
    echo '<input type="checkbox" name="v['.$i.']" value="'.$url.'"';
    if ($v[$i]) {  
        echo ' checked="checked"';  
        $s .= $url;
    }
    echo '/> '.$url.'<br />';
}
?>
<input type="submit" name="submit" value="submit" />
</form>

Dejé el código prácticamente igual para mostrarte dónde te equivocaste, pero deberías comprobar la variable $ _POST en busca de exploits antes de usarla. Si también estuviera haciendo esto, usaría un recuento for, pero está configurado como un marcador de posición para el código de su base de datos. Asegúrese de que $ url también se complete.

También puede eliminar la variable $ i como:

<?php
$v = $_POST['v'];
while (db_data) {
    echo '<input type="checkbox" name="v[]" value="'.$url.'"';
    if (is_array($v)) {
         if (in_array($url,$v)) {  
              echo ' checked="checked"';  
              $s .= $url;
         }
    }
    echo '/> '.$url.'<br />';
}
?>

contestado el 18 de mayo de 11 a las 20:05

es genial! la mejor ayuda que tengo! ¡ustedes son geniales! - jon

Intente print_r ($ _ POST) y luego print_r ($ v) y vea si surge algo. Si $ _POST funciona, entonces sabrá que se está volviendo a publicar en la página correctamente. Entonces, si $ v está funcionando, entonces sabrá que configuró $ v = $ _POST correctamente. Debido al hecho de que en realidad no nos proporciona ninguna información sobre db_data, supongo que esto funciona correctamente y muestra todas las casillas de verificación en la primera carga, por lo que siempre que esté publicado y esté configurando la variable $ v debería estar funcionando.

Una nota al margen es que debe validar las variables $ _POST antes de usarlas, pero hágalo después de que todo funcione.

contestado el 17 de mayo de 11 a las 00:05

Si haces lo que FatherStorm dijo anteriormente (no puedo comentarlo, supongo que debido a que soy un usuario nuevo), entonces necesitas usar is_array e in_array, que pueden funcionar mejor de todos modos. - fanfavorito

Sé que _POST está funcionando, ya que el ciclo while funcionó. el problema es que la casilla marcada se pierde inmediatamente - jon

cambiar

name="v['.$i.']"

a

name="v[]"

el hecho de que PHP lo recoja como una matriz es una característica involuntaria de PHP que no fue diseñada intencionalmente. no necesita establecer los índices, simplemente defínalo como una matriz.

contestado el 17 de mayo de 11 a las 00:05

no, tengo que configurar el índice, de lo contrario, se almacenará como v0, v1, v2 ... en orden, sin importar lo que elija. - jon

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.