1 votos

Como hacer un while en una funcion de una clase?

Quiero imprimir un while a través de una función dentro de una clase, por lo cual he echo lo siguiente:

<?php

class Taller {
    private $title;
    private $description;

    public function types(){
        $db = new Conexion();
        $sql = $db->query("SELECT * FROM s_types_taller");
        if($db->rows($sql)>0){
            $types = $db->recorrer($sql);
        }
    }
}

?>

y luego en la vista trato de imprimirlo de esta forma:

$taller = new Taller();
$taller->types();
while($t=$types){
    echo $t["type"];
}
exit;

Yo creo que el while lo tengo mal echo, o no se si tenga que hacerlo dentro de la función, espero una mano la función recorrer es un fetch_array y rows un num_rows

2voto

Ivan Muñoz Puntos 1120

Buen dia Miguel,

Tratando de mantener tu codigo lo mas parecido posible creo que esto te va a servir.

Para la clase:

<?php
class Taller {
    private $title;
    private $description;

    public function types(){
        $db = new Conexion();
        $sql = $db->query("SELECT * FROM s_types_taller");
        if($db->rows($sql)>0){
            $types = $db->recorrer($sql);
            if (!is_array($types)){
                $types = array();
            }
        }
        else
        {
            $types = array();
        }
        return $types;
    }
}
?>

Y para la vista:

<?php
$taller = new Taller();
foreach ($taller->types() as $t){
    echo $t["type"];
}
exit;
?>

Avisa cualquier duda, saludos.

Correccion:

Yo nose de que forma esta implementada la funcion $db->recorrer() y que datos te regresa yo solo me guie por tu codigo, por lo cual te daba esos errores en la linea:

echo $t["type"];

Para que funcione tendras que usar para la vista:

<?php
$taller = new Taller();
foreach ($taller->types() as $key => $t){
    echo  "Valor: ".$t." Clave: ".$key;
}
exit;
?>

Pero no creo que sea eso lo que quieres hacer o si?

Si eso no te sirve tendras que mostrarnos la funcion $db->recorrer() para poder aportar mas ayuda.

0 votos

Me vota un par de errores: Warning: Illegal string offset 'id' in... Warning: Illegal string offset 'type' in...

0 votos

El error te lo da en el codigo de la vista?

0 votos

exacto

0 votos

Ahi te puse la correccion

0 votos

Si funciona, pero como tu dices no es lo que quiero exactamente, te dejo abajo exactamente como esta en recorrer.

1voto

Mira no soy miembro oficial de este foro pero soy programador php senior,

si queres para no hacerla complicada podes hacer un ciclo foreach para no hacer algo infinito y que trabaje hasta que recoja todos los resultados ej: <pre>

class Taller {
    private $title;
    private $description;

    public function types(){
        $db = new Conexion();
        $sql = $db->query("SELECT * FROM s_types_taller");
        if($db->rows($sql)>0){
            $types = $db->recorrer($sql);
            if (is_array($types)){ 
                    foreach ($types  as $key => $val){
                       echo "Valores: " . $val . " claves: " . $key . "</br>";
                    }
            }
        }
    }
}

Perdon por mi identacion pero el codigo me queda asi ordenado en la pagina.

1 votos

Bienvenido Maxi, solo tienes que darle al cuadrito con los 010 que te sale al añadir, si no, con que pegues tu código con 4 espacios de indentación al principio también vale :)

0 votos

Si me funciona, pero ahora si quiero meter el $val dentro de un value="" y el $key dentro de los

0voto

Miguel Sirna Puntos 495

Gracias Ivan por la ayuda, estas son las funciones globales:

public function rows($x) {
    return mysqli_num_rows($x);
}

public function recorrer($x) {
    return mysqli_fetch_array($x);
}

public function liberar($x){
    return mysqli_free_result($x);
}

Estos pensando que tal vez si lo hiciera así:

public function getTypes(){
    $db = new Conexion();
    $sql = $db->query("SELECT * FROM s_types_taller ORDER BY id DESC");
    while($x = $db->recorrer($sql)){
        $type[] = array(
            'id' => $x['id'],
            'type' => $x['type']
        );
    }
    return $type;
}

Y en la vista pusiera algo como esto:

$db = new Conexion();
$taller = new Taller();
$taller->getTypes();
exit;

Debería de funcionar pero no se como imprimir los resultados.

0 votos

le acabo de asignar una variable a $taller y por ejemplo ahi si me emprime el primer resultado pero esta mal que lo haga con print_r creo $data = $taller->getTypes(); print_r($data[0]["id"]);

0 votos

Ya lo arregle cree un for($i = 0; $i < count($data); $i++){ y lo imprimi asi: $data[$i]["id"];} y magia :D GRACIAS A TODOS ITINEROS :D

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: