Warning: invalid argument supplied for foreach () in - PHP

0

Why the following errors?

Notice: Undefined index: images in C: \ xampp \ htdocs \ daw \ Classes \ Cabanas.php on line 24    Warning: Invalid argument supplied for foreach () in C: \ xampp \ htdocs \ daw \ modify.php on line 39

Test Code.php:

$datos = BD::datosCabana(1);  //print_r($datos);
    echo "<br/><br/><br/>";
    foreach($datos as $cabana){
        echo "<b>".$cabana->getIdcabana()."</b><br/>";
        echo "<b>".$cabana->getNombre()."</b><br/>";
        echo "<b>".$cabana->getCapacidad()."</b><br/>";
        echo "<b>".$cabana->getDescripcion()."</b><br/>";
        echo "<b>".$cabana->getPrecio()."</b><br/>";
        $imagenes = $cabana->getImagenes();
        foreach($imagenes as $imagen){
            echo "<img src='imagenes/".$imagen."' width='140' height='140'/> &nbsp;&nbsp;&nbsp;&nbsp;";
        }
        echo "<br/><br/>";
    }

Execution var_dump ($ data):

array(12) { 
 ["idcabana"]=> string(1) "1" 
 [0]=> string(1) "1" 
 ["nombre"]=> string(7) "CABAÑA1" 
 [1]=> string(7) "CABAÑA1" 
 ["capacidad"]=> string(1) "9" 
 [2]=> string(1) "9" 
 ["descripcion"]=> string(57) "HABITACIÓN DE CABAÑA MUY GRANDE CON TODOS LOS ACCESORIOS." 
 [3]=> string(57) "HABITACIÓN DE CABAÑA MUY GRANDE CON TODOS LOS ACCESORIOS." 
 ["precio"]=> string(6) "150.00" 
 [4]=> string(6) "150.00" 
 ["ruta"]=> string(13) "cabana1_1.jpg" 
 [5]=> string(13) "cabana1_1.jpg" 
} 

Error line 24 Cabanas.php:

<?php

/**
 * Clase Cabañas.
 */
class Cabanas {
    private $idcabana;
    private $nombre;
    private $capacidad;
    private $descripcion;
    private $precio;
    private $imagenes; //Array

    /**
     * Constructor de la clase Cabanas.
     * @param type $row
     */
    public function __construct($row){
        $this->idcabana = $row["idcabana"];
        $this->nombre = $row["nombre"];
        $this->capacidad = $row["capacidad"];
        $this->descripcion = $row["descripcion"];
        $this->precio = $row["precio"];
        $this->imagenes = $row["imagenes"]; //linea 24
    }

    function getIdcabana() {
        return $this->idcabana;
    }

    function getNombre() {
        return $this->nombre;
    }

    function getCapacidad() {
        return $this->capacidad;
    }

    function getDescripcion() {
        return $this->descripcion;
    }

    function getPrecio() {
        return $this->precio;
    }

    function getImagenes() {
        return $this->imagenes;
    }

    function setIdcabana($idcabana) {
        $this->idcabana = $idcabana;
    }

    function setNombre($nombre) {
        $this->nombre = $nombre;
    }

    function setCapacidad($capacidad) {
        $this->capacidad = $capacidad;
    }

    function setDescripcion($descripcion) {
        $this->descripcion = $descripcion;
    }

    function setPrecio($precio) {
        $this->precio = $precio;
    }

    function setImagenes($imagenes) {
        $this->imagenes = $imagenes;
    }


    function mostrarCabana(){
        echo $this->idcabana."    ";
        echo $this->nombre."    ";
        echo $this->capacidad."    ";
        echo $this->descripcion."    ";
        echo $this->precio."    ";
        echo $this->imagenes;
    }

}

Error line 39 modify.php:

<?php
    header("Content-Type: text/html;charset=utf-8");
    require_once "Clases/BD.php";
    require_once "Clases/Cabanas.php";
    require_once "conexion.php";

    //Si existe la sesión "administrador"..., la guardamos en una variable.
    if (isset($_SESSION['administrador'])){
        $administrador = $_SESSION['administrador'];
    }
?>

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Modificar cabaña</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <script type="text/javascript" src="js/validar_formulario_cabana.js"></script>
    </head>
    <body>
        <div id="sesion_administrador">
            <?php 
            if(isset($_SESSION['administrador'])){
                echo "Bienvenido ".$administrador."&nbsp;&nbsp;&nbsp;";
                echo "<a href='salir_administrador.php?salir=1'>Salir</a>"; //GET
                //_REQUEST = $_POST o $_GET
                if(isset($_REQUEST["salir"])){
                    unset($_SESSION["administrador"]);
                    header("Refresh:0; url=iniciar_sesion_administrador.php");
                }
            }
            ?>
        </div>

        <?php
        //Pasamos al método "datosCabana" el idcabana de la cabaña que queremos modificar.
        $datos = BD::datosCabana($_GET["idcabana"]);
        foreach($datos as $cabana){ //linea 39
        ?>
            <!-- Modificar cabaña -->
            Estamos en modificar...
            <form action="panel_administrador.php" name="modificar" id="modificar" method="POST">
                <label for="idcabana">ID: </label>
                    <input type="text" id="idcabana" name="idcabana" value="<?php $cabana->getIdcabana(); ?> "/>
                <br/><br/>
                <label for="nombre">Nombre: </label>
                    <input type="text" id="nombre" name="nombre" value="<?php $cabana->getNombre(); ?> "/>
                <br/><br/>
                <label for="capacidad">Capacidad: </label>
                    <?php
                    echo "<select name='capacidad' value='$cabana->getCapacidad();'>";
                    for($i=1; $i<11; $i++){
                        if($i==1){
                            echo "<option value='$i' selected='selected'>$i</option>";
                        }else{
                            echo "<option value='$i'>$i</option>";
                        }
                    }
                    echo "</select>";
                    ?>
                <br/><br/>
                <label for="descripcion">Descripción: </label>
                    <input type="text" id="descripcion" name="descripcion"  value="<?php $cabana->getDescripcion(); ?> "/>
                <br/><br/>
                <label for="precio">Precio: </label>
                    <input type="text" id="precio" name="precio" onkeypress="return soloNumeros(event);" value="<?php $cabana->getPrecio(); ?> "/>
                <br/><br/>

                <input type="submit" value="Modificar" id="modificar" name="modificar" />
                <input type="reset" value="Resetear" id="resetear" name="resetear" />
            </form>
        <?php
        }
        ?>
    </body>
</html>
    
asked by omaza1990 05.12.2017 в 12:25
source

1 answer

1

I already understood.

When you bring the data of the cabin, your data array has no images.

   $datos = $registro->fetch();  // <--- no tiene imágenes

   $micabana = new Cabanas($datos);

What you need is to add the images before instantiating the cabins. Taking me from your other question :

   $datos = $registro->fetch();  // <--- no tiene imágenes

   $datos['imagenes'] = self::obtenerImagenesCabana($id_cabana);

   $micabana = new Cabanas($datos);

Or:

   $datos = $registro->fetch();  // <--- no tiene imágenes

   $micabana = new Cabanas($datos);

   $imagenes = self::obtenerImagenesCabana($id_cabana);

   $micabana->setImagenes($imagenes);
    
answered by 05.12.2017 / 13:01
source