PHP - Warning: foreach() argument must be of type array|object, string given in

 
Vista:

Warning: foreach() argument must be of type array|object, string given in

Publicado por SergioMM (26 intervenciones) el 14/05/2021 14:25:08
hola tengo este fallo y No se como soucionarlo, si alguien me pudiese ayudar se lo agradeceria mucho.

Warning: foreach() argument must be of type array|object, string given in C:\xampp\htdocs\db\consulta.php on line 47

Se trata de que al teclear en un input tipo text una tabla me cargue la busueda (live search), el codigo esta bien por que lo estaba haciendo con msqli y gargaba la tabla con un WHILE pero he cambiado a PDO y ahora la tabla se carga con un FOREACH; la tabla cuando carga la pagina funciona bien, el borrar, actualizar añadir registros funciona bien y se recarga la pagina despues de cada accion, pero no funciona el LIVE SEARCH.
Adjunto codigo.

JS
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
<script type="text/javascript">
	$(buscar_datos());
function buscar_datos(consulta)
{
	$.ajax({
		url : 'db/consulta.php',
		type : 'POST',
		dataType : 'html',
		data : { consulta: consulta },
		})
 
	.done(function(respuesta){
		$("#datos").html(respuesta);
	})
}
 
$(document).on('keyup', '#txtbuscar', function()
{
	var valorBusqueda=$(this).val();
	if (valorBusqueda!="")
	{
		buscar_datos(valorBusqueda);
	}
	else
		{
			buscar_datos();
		}
});
 
</script>
CONSULTA



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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
require_once 'conexion.php';
 
$salida = "";
$consultar=$conexion->query("SELECT * FROM operaciones ORDER BY Id_Operacion");
$consultar->execute();
$resultado = $consultar->fetchAll();
 
$salida="";
 
if (isset($_POST['consulta'])) {
	$q = $_POST['consulta'];
	$resultado="SELECT * FROM operaciones WHERE
		Id_Operacion LIKE '%".$q."%' OR
		Fecha LIKE '%".$q."%' OR
		Par LIKE '%".$q."%' OR
		Orden LIKE '%".$q."%' OR
		Precio LIKE '%".$q."%' OR
		Cantidad LIKE '%".$q."%' OR
		Total_Comprado LIKE '%".$q."%' OR
		Comision LIKE '%".$q."%' OR
		Moneda_Comision LIKE '%".$q."%'";
	}
 
	if ($resultado !== false){
 
	$salida.=
	'<table class="table table-striped table-hover" style="width: 80%; margin: 0 auto;" name="tabla" id="tabla">
		<thead>
			<tr>
				<td>Id				</td>
				<td>Fecha			</td>
				<td>Par				</td>
				<td>Orden			</td>
				<td>Precio			</td>
				<td>Cantidad		</td>
				<td>Total Comprado  </td>
				<td>Comision		</td>
				<td>Moneda Comision </td>
				<td>Acción          </td>
			</tr>
  		</thead>';
 
 
       foreach ($resultado as $fila) {
 
		$salida.=
		'<tr>
			<td><span id="Id_operacionI'.$fila['Id_Operacion'].'">'.$fila['Id_Operacion'].'</span></td>
			<td><span id="FechaI'.$fila['Id_Operacion'].'">'.$fila['Fecha'].'</span></td>
			<td><span id="ParI'.$fila['Id_Operacion'].'">'.$fila['Par'].'</span></td>
			<td><span id="OrdenI'.$fila['Id_Operacion'].'">'.$fila['Orden'].'</span></td>
			<td><span id="PrecioI'.$fila['Id_Operacion'].'">'.$fila['Precio'].'</span></td>
			<td><span id="CantidadI'.$fila['Id_Operacion'].'">'.$fila['Cantidad'].'</span></td>
			<td><span id="Total_CompradoI'.$fila['Id_Operacion'].'">'.$fila['Total_Comprado'].'</span></td>
			<td><span id="ComisionI'.$fila['Id_Operacion'].'">'.$fila['Comision'].'</span></td>
			<td><span id="Moneda_ComisionI'.$fila['Id_Operacion'].'">'.$fila['Moneda_Comision'].'</span></td>
			<td><button class="btn btn-warning mb-3 edit" value="'.$fila['Id_Operacion'].'"><i class="bi bi-pencil-square"></i></button>
				<button type="" class="btn btn-danger mb-3" id="idborrar" name="idborrar" onclick="respuestasino('.$fila['Id_Operacion'].')"><i class="bi bi-eraser-fill"></i></button></td>
		 </tr>
		 </tbody>';
 
	}
 
	$salida.='</table>';
 
} else
 
	{
 
		$salida.="No se encontraron coincidencias con sus criterios de búsqueda.";
 
	}
 
echo $salida;
 
?>
GRACIAS DE ANTEMANO.
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 Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Warning: foreach() argument must be of type array|object, string given in

Publicado por Mauro (1036 intervenciones) el 14/05/2021 17:14:33
Hola Sergio!

El problema es que $resultado es un string cuando debería ser un arrreglo o algún otro objeto iterable,

Por lo que veo en tu código diría que te has olvidado de ejecutar la consulta... nota como guardas todo el SQL en tu variable $resultado y luego inmediatamente la utilizas en el foreach... en el medio te falta invocar a la db.

Por otro lado, ten cuidado con esas concatenaciones... podrían exponerte a inyecciones sql.

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

Warning: foreach() argument must be of type array|object, string given in

Publicado por SergioMM (26 intervenciones) el 14/05/2021 23:16:05
Agradezco tu respuesta lo he vuelto a dejar en mysqli que si que me funciona, el tema de las inyecciones ahora no me preocupa puesto que es una webapp para mi y trabajo en local, pero si que tienes RAZON, por ahora voy a avazar con el aproyecto y esto lo dejare para el fianal.

Muchas gracias por la respuesta.
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 Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Warning: foreach() argument must be of type array|object, string given in

Publicado por Mauro (1036 intervenciones) el 17/05/2021 14:51:18
No hay problema! De paso, por si quieres indagar un poco más en temas de seguridad, di recientemente un seminario al respecto.

Aquí están los slides que usé.

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