PHP - Recorrer arrays como objetos

 
Vista:
Imágen de perfil de Lucas
Val: 87
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por Lucas (46 intervenciones) el 08/05/2020 02:02:03
Hola, estoy teniendo unos problemas para recorrer unas arrays que indexé como objetos, alguien puede ver el fallo en el código? Use un código parecido para hacer un CRUD muy parecido y si funcionó.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CRUD</title>
 
<?php
include ("conexion.php");
?>
 
</head>
<body>
 
 
 
<?php
  $registros=$base->query("SELECT * FROM datos")->fetchAll(PDO::FETCH_OBJ);
?>
 
 
 
<form action="envio.php?planilla=Corte" method="post">
  <table>
    <tr>
      <td>
        <label for="fecha">Fecha:</label>
        <input type="date" name="fecha">
      </td>
      <td>
        <input type="text" name="lote">
      </td>
    </tr>
    <tr>
<?php
foreach($registros as $fila):
?>
   	<tr>
      <td><?php echo $fila->Nombre?></td>
      <td><?php echo $fila->elemento1?></td>
      <td><?php echo $fila->elemento2?></td>
      <td><?php echo $fila->elemento3?></td>
      <td><?php echo $fila->elemento4?></td>
      <td><?php echo $fila->elemento5?></td>
 
 
      <td class="bot"><a href="borrar.php?Id=<?php echo $fila->ID?>"><input type='button' name='borrar' value='Borrar'></a></td>
      <td class='bot'><a href="editar.php?Id=<?php echo $fila->ID?> & nombre=<?php echo $fila->Nombre?>"><input type='button' name='actualizar' value='Actualizar'></a></td>
    </tr>
<?php
endforeach;
?>
    </tr>
    <tr>
	<td></td>
      <td><input type='text' name='nombre'></td>
      <td><input type='number' name='elemento1'></td>
      <td><input type='number' name='elemento2'></td>
      <td><input type='number' name='elemento3'></td>
      <td><input type='number' name='elemento4'></td>
      <td><input type='number' name='elemento5'></td>
      <td class='bot'><input type='submit' name='insertar'value='Insertar'></td></tr>
  </table>
</form>
</body>
</html>
Anotacion-2020-05-08-015516






Este es conexión.php:
1
2
3
4
5
6
7
8
9
10
<?php
try{
    $base= new PDO ('mysql:host=localhost; dbname=formulario', 'root', '');
    $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $base->exec("SET CHARACTER SET UTF8");
}catch(Exception $e){
    die('Error') . $e->getmessage();
    echo "Linea del error" . $e->getLine();
}
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lucas
Val: 87
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por Lucas (46 intervenciones) el 08/05/2020 02:26:47
Adjunto además foto de la base de datos
Anotacion-2020-05-08-022608



INFORMACIÓN UTIL:
ESTE CÓDIGO SI FUNCIONA (CON OTRA BASE):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
try{
    $base= new PDO ('mysql:host=localhost; dbname=pruebas', 'root', '');
    $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $base->exec("SET CHARACTER SET UTF8");
}catch(Exception $e){
    die('Error') . $e->getmessage();
    echo "Linea del error" . $e->getLine();
}
 
 
 
 
$registros=$base->query("SELECT * FROM datos_usuarios")->fetchAll(PDO::FETCH_OBJ);
 
 
foreach($registros as $persona):?>
   	<tr>
      <td><?php echo $persona->ID?></td>
      <td><?php echo $persona->Nombre?></td>
      <td><?php echo $persona->Apellido?></td>
      <td><?php echo $persona->Direccion?></td>
 
      <td class="bot"><a href="borrar.php?Id=<?php echo $persona->ID?>"><input type='button' name='del' id='del' value='Borrar'></a></td>
      <td class='bot'><a href="editar.php?Id=<?php echo $persona->ID?> & nombre=<?php echo $persona->Nombre?> & apellido=<?php echo $persona->Apellido?> & direccion=<?php echo $persona->Direccion?>"><input type='button' name='up' id='up' value='Actualizar'></a></td>
    </tr>
<?php
endforeach;
?>

PERO CUANDO CAMBIO LOS DATOS PARA QUE UTILICE MI BASE DE DATOS DEJA DE HACERLO:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
try{
    $base= new PDO ('mysql:host=localhost; dbname=formulario', 'root', '');
    $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $base->exec("SET CHARACTER SET UTF8");
}catch(Exception $e){
    die('Error') . $e->getmessage();
    echo "Linea del error" . $e->getLine();
}
 
 
$registros=$base->query("SELECT * FROM datos")->fetchAll(PDO::FETCH_OBJ);
 
 
foreach($registros as $fila):
?>
   	<tr>
       <td><?php echo $fila->ID?></td>
      <td><?php echo $fila->Nombre?></td>
      <td><?php echo $fila->Elemento1?></td>
      <td><?php echo $fila->Elemento2?></td>
 
 
      <td class="bot"><a href="borrar.php?Id=<?php echo $fila->ID?>"><input type='button' name='borrar' value='Borrar'></a></td>
      <td class='bot'><a href="editar.php?Id=<?php echo $fila->ID?> & nombre=<?php echo $fila->Nombre?>"><input type='button' name='actualizar' value='Actualizar'></a></td>
    </tr>
<?php
endforeach;
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por javier (547 intervenciones) el 08/05/2020 07:05:37
hola, los errores te estan diciendo que no estan definidas las propiedades
imagino que la lineas de la 43 a la 48 seran estas:

1
2
3
4
5
6
<td><?php echo $fila->Nombre?></td>
<td><?php echo $fila->elemento1?></td>
<td><?php echo $fila->elemento2?></td>
<td><?php echo $fila->elemento3?></td>
<td><?php echo $fila->elemento4?></td>
<td><?php echo $fila->elemento5?></td>

El objero $fila no tiene las propiedades NOMBRE, ELEMENTO1, ELEMENTO2, ELEMENTO3, ELEMENTO4, ELEMENTO5

donde instancias el objeto $fila?, osea, donde haces:

1
$fila = new ElNombreDeLaClase;

Cual es la clase? muestra el codigo.

Tambien haz un

1
2
3
echo '<pre>';
print_r($resultado);
echo '</pre>;

a ver lo que contiene el array

por que veria logico hace:

1
2
3
4
5
6
<?php echo $fila->Nombre?></td>
<td><?php echo $fila[elemento1]?></td>
<td><?php echo $fila[elemento2]?></td>
<td><?php echo $fila[elemento3]?></td>
<td><?php echo $fila[elemento4]?></td>
<td><?php echo $fila[elemento5]?></td>

si es que $fila es un array

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lucas
Val: 87
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por Lucas (46 intervenciones) el 08/05/2020 13:18:57
Hola, por alguna razón el código solo funciona si escribo así la consulta:
1
$registros=$base->query("SELECT ID, Nombre, Elemento1, Elemento2, Elemento3, Elemento4, Elemento5, Suma, Lote, Fecha, Planilla FROM datos")->fetchAll(PDO::FETCH_OBJ);
La verdad no entiendo por que, si escribiéndolo con un * en el otro documento funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por javier (547 intervenciones) el 08/05/2020 13:54:02
Hola, la verdad es que no se el por que de ese comportamiento habria que ir comprbando variable a variable y metodo a metodo y analizar el codigo.....es analizar PDO tambien, mira te dejo como conecto yo a la BBDD con PDO y como hago las consultas, yo si pongo * mis consultas van bien, manejas PDO de una forma extraña

mira yo tengo un archivo que se llama class_consulta.php con la clase PDO siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class consulta
    public $db;
    private $hostName;
    private $dbName;
    private $userName;
    private $passWord;
 
 
 
       function __construct()
 
      {
 
           //en este otro archivo estan definidas las variables del host, user, pass y BBDD, es mejor por seguridad que lo esten
           //el archivo solo contiene este codigo que esta comentado a continuacion
          include ('conexion_principal.php');
 
	// $hostName1 = "localhost";
        // $dbName1 = "ibase_datos";
        // $userName1 = "root";
        // $passWord1 = "";
 
 
          $this->dbName   = $dbName1;
          $this->hostName = $hostName1;
          $this->userName = $userName1;
          $this->passWord = $passWord1;
 
        try {
          $this->db = new PDO("mysql:host={$this->hostName};dbname={$this->dbName}",
          $this->userName,
          $this->passWord);
 
          $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          $this->db->exec("set names utf8");
 
        }
        catch(PDOException $e){
          return 'Algo mal en la conexion';
        }
	    }
 
 
 
//ahora por ejemplo un metodo para leer datos de la base
public function leer ($tbl, $clmns = '')
{
  try {
 
        $stmt = $this->db->prepare(" SELECT {$clmns} FROM {$tbl} ");
        $stmt->bindParam(1, $tbl    , PDO::PARAM_STR);
        $stmt->bindParam(2, $clmns  , PDO::PARAM_STR);
 
 
        $stmt->execute();
 
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
 
         return $result;
 
       }
         catch(PDOException $e){
            return 'no se pudieron leer los datos' . $e;
          }
   }
}

y ahora en cualquier archivo donde hagas un include del archivo class_consulta.php con solo el codigo de la clase (ojo que cada clase deberia de estar solo la clase en un archivo con el mismo nombre de la clase).

para conectar y leer de la BBDD solo has de hacer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
//incluimos la clase
include("clase_consulta.php");
 
//instancio el objeto y ya estamos conectados
$BD = new consulta_principal();
 
//declaramos los parametros para pasarle al metodo leer();
$tabla = 'tuTabla';
$columnas = '*';
 
//hacemos la llamada al metodo leer();
$resultado = $BD->leer($tabla, $columnas);
 
?>

no se si Usas PDO de esta manera pero te la recomiendo.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Lucas
Val: 87
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por Lucas (46 intervenciones) el 08/05/2020 19:08:09
Mil gracias Javier! Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por javier (547 intervenciones) el 08/05/2020 19:32:27
Hola,

si te sirvió lo que te deje de codigo te puedo pasar mas metodos de la clase consulta

para hacer INSERT, el metodo se llama write.
Para recoger la ID autoincrement del ultimo registro insertado en la BBDD, LastInsrtId();
y unos cuantos mas, a mi no me importa compartir cogigo.l os tengo hechos, de algo te serviran.

una cosa:
donde pone$BD = new consulta_principal();

deberia poner $BD = new consulta();


saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por javier (547 intervenciones) el 08/05/2020 19:34:37
donde pone$BD = new consulta_principal();

deberia poner $BD = new consulta();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Lucas
Val: 87
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Recorrer arrays como objetos

Publicado por Lucas (46 intervenciones) el 08/05/2020 20:47:39
Excelente! Te continuo agradeciendo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar