Obtener datos de consulta MySQL para imprimir en HTML

publicado por: Anonymous

Dispongo de un formulario HTML donde quiero mostrar una serie de datos obtenidos de una consulta en MySQL mediante SQL.

Consulta:

    static public function obtenerAccesoriosPorCabana($idcabana){
        $ejecucion = self::Conexion();
        $sql = "SELECT a.idaccesorio, a.descripcion FROM accesorios AS a, cabanasaccesorios AS ca WHERE ca.idcabana=$idcabana AND ca.idaccesorio=a.idaccesorio;";
        $registro = $ejecucion->query($sql);
        //Creamos un array para almacenar los accesorios.
        $misaccesorios = array();
        //Recorremos el array y añadimos en él los accesorios mediante array_push.
        while($datos = $registro->fetch()){
            array_push($misaccesorios, $datos);
        }
        return $misaccesorios; //Devuelve un array asociativo.
    }

Prueba funcionamiento método obtenerAccesoriosPorCabana():

    $accesorios = BD::obtenerAccesoriosPorCabana(2);
    foreach ($accesorios as $a){
        echo $a["idaccesorio"]. " ".$a["descripcion"]."<br/><br/>";
    }

Todo OK.

Código HTML:

<form action="<?php echo $_SERVER['PHP_SELF'];?>" name="modificar" id="modificar" method="POST">
    <center>
        <h3><b>Accesorios:</b></h3><br/>
        <?php 
        $objeto_accesorios = BD::obtenerAccesoriosPorCabana($_GET["idcabana"]);
        $num_accesorios = BD::contarAccesorios();
        for($i=1; $i<=$num_accesorios; $i++){
            if(in_array($i, $objeto_accesorios)){
                echo "<br/><input type='checkbox' value=<?php echo $i; ?>' id=<?php $i ?>' name='accesorios' checked>";
            }else{
                echo "<br/><input type='checkbox' value=<?php echo $i; ?>' id=<?php $i ?>' name='accesorios'";
            }
        }
        ?>
        <input type="submit" value="Modificar" id="modificar" name="modificar" />
    </center>
</form>

Preguntas:

¿Por qué no se me muestran los accesorios con su checkbox correspondiente?

introducir la descripción de la imagen aquí

introducir la descripción de la imagen aquí

Los nombres se obtienen de la consulta: $accesorios[“descripcion”], los nombres coinciden con los nombres de las imágenes “imagenes/xxxxx.png”.

solución

Tu función para obtener accesorios por cabaña no devuelve un array asociativo. Devuelve un array de arrays. Si quieres que devuelva un array asociativo, tendrías que hacer:

 $misaccesorios = [];
 while($datos = $registro->fetch()){
    $misaccesorios[$datos['idaccesorio']]=$datos['descripcion'];    
 }
 return $misaccesorios; //Esto SÍ devuelve un array asociativo.

La lógica tiene otros supuestos débiles. Por ejemplo, BD::contarAccesorios(); te devuelve el total de accesorios disponibles, pero no contempla el caso que en la tabla de accesorios haya IDs no consecutivos.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published.