error al mostrar por tipo

41 views
Skip to first unread message

Andrés Oporto

unread,
Feb 11, 2017, 1:53:44 PM2/11/17
to Grupo PHP Argentina
Hola tengo la siguiente codificación en php

<div class="row" id="buscar-tipo">    
                   
<?php
                    include
"conexion.php";
           
                   
/*$id_articulo=$_SESSION['articulo']['idarticulo'];             */    
                    $resultado
=mysqli_query($conexion,"SELECT * FROM articulo where tipo='$tipo'");
                   
while($array=mysqli_fetch_array($resultado)){
                       
if($array['idarticulo']!=$id_articulo){
                   
?>
                       
<div class="col-sm-6 col-md-3">
                           
<div class="thumbnail">
                                <a class="example-image-link" href='
<?php echo($array['imagen']);?>' data-lightbox="example-set" data-title="Optional caption."><img class="example-image" src='<?php echo($array['imagen']);?>' alt=""/></a>
                               
<div class="caption">
                                   
<p><?php echo $array['descripcion'];?></p>
                                   
<h3><?php echo "$".$array['precio'];?></h3>
                                   
<?php echo "<p><a href='descripcion.php?id_plantilla=$array[id_plantilla]' class='btn btn-primary' role='button'>Comprar ahora</a> </p>";?>
                               
</div>
                               
</div>
                           
</div>
                   
                   
<?php
                       
}
                           
                   
}
                   
?>
               
</div>


lo que hago al seleccionar un item del combo, es buscar por tipo de articulo.
Para mí la lógica esta bien pero no me muestra nada.
Alguien me ayuda?

Tordek

unread,
Feb 11, 2017, 3:16:17 PM2/11/17
to php...@googlegroups.com
$resultado=mysqli_query($conexion,"SELECT * FROM
articulo where tipo='$tipo'");

¿de dónde viene $tipo?

¿Qué resultado te da `var_dump($resultado)`? ¿Probaste ver si no hubo
un error con `mysqli_error($conexion)`?

Varios puntos acá, relacionados pero separados:

> <div class="row" id="buscar-tipo">
> <?php
> include "conexion.php";

En general, tratá de evitar esto: no mezcles la generación de
contenido con la obtención de los datos; separalo: al principio hacés
la conexión, armás las consultas, etc, y recién al final del archivo
generás el contenido.

> $resultado=mysqli_query($conexion,"SELECT * FROM articulo where tipo='$tipo'");

No está _mal_ usar el formato procedural, pero hoy se suele estilar
más el formato orientado a objetos; es decir, en vez de:

$conexion = mysqli_connect(...);
$resultado = mysqli_query($conexion, ...);

se usa

$conexion = new mysqli(...);
$resultado = $conexion->query(...);

Igual, antes que cualquiera de esos dos, te recomiendo usar PDO.

Sí está mal armar la query así: "SELECT * FROM articulo where tipo='$tipo'"

porque si yo te paso (imagino que lo recibís via $_GET) `?tipo=' or
1=1--`, por ejemplo, cambio la query.

Deberías usar prepare... pero usar prepare con mysqli_ pelado es
horrible; es mucho más fácil si usás PDO:

$conexion = new PDO(...);
$statement = $conexion->prepare("SELECT * FROM articulo where tipo=:tipo");
$statement->execute(['tipo' => $tipo]);
$result = $statement->fetchAll();

Con esto podés evitar ataques de inyección SQL, que básicamente le
dejan a un atacante hacer lo que quiera con tu base de datos.

> if($array['idarticulo']!=$id_articulo){

A lo mejor te conviene combinar esto directamente en la query:

"SELECT * FROM articulo where tipo=:tipo and idarticulo != :idarticulo"
> --
> Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP
> Argentina" de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a php-arg+u...@googlegroups.com.
> Para publicar en este grupo, envía un correo electrónico a
> php...@googlegroups.com.
> Visita este grupo en https://groups.google.com/group/php-arg.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.

Andrés Oporto

unread,
Feb 12, 2017, 6:25:24 PM2/12/17
to Grupo PHP Argentina
tipo viene de otro archivo php

si pongo "SELECT * FROM articulo where tipo=:tipo and idarticulo != :idarticulo" me tira el sigueinte error:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\fyf\fyfherramientas60\buscartipo.php on line 6

Andrés Oporto

unread,
Feb 12, 2017, 6:43:38 PM2/12/17
to Grupo PHP Argentina
No hay otra forma de prevenir ataques de inyección SQL sin usar POO?

Tordek

unread,
Feb 13, 2017, 4:14:15 PM2/13/17
to php...@googlegroups.com
> Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\fyf\fyfherramientas60\buscartipo.php on line 6

Eso te indica que el problema es que mysqli_fetch_array no está
recibiendo un resultado `result` sino un `boolean`, que probablemente
sea `false` porque la consulta que le pasaste no es válida; no podés
simplemente meter una consulta que usa :param.

¿Qué pasa si hacés...

$resultado=mysqli_query($conexion,"SELECT * FROM
articulo where tipo='$tipo'");
var_dump($resultado);
echo mysqli_error($conexion);

?

> No hay otra forma de prevenir ataques de inyección SQL sin usar POO?

Sí, pero es bastante más complicado y propenso a errores.

--
Tordek

linu...@gmail.com

unread,
Feb 16, 2017, 9:58:14 PM2/16/17
to Grupo PHP Argentina
Concido con tordek, porque estas menzclando concetos de MVC, con lo cual ahi tmb estas expuestos a vulnerabilidades de SQL entre otras.

*También recomiendo no hacer select con asterisco,si la base tiene miles o milones de registros seria muy lento sin algun tipo de filtro por columnas.
*En estos casos las busquedas pueden hacer utilidad de algun proceso asincrono en javascript como Ajax o websocket hay muchas librerias buenas para esto como phpxajax.(Ya te filtras las sql injection)
*La otra es utilizar tockens para prevenir ataques, csrf.

como bien dicen los compañero la idea es que utilicen algun modelo para poder hacer los request a partir del controlador y convertir los resultados para que los muestre la vista de la forma mas sencilla posible con ayudar de algunos javascript. También hay banda de framework disponibles y microframework.

La otra para ir safando de lo que tenes actualmente para buscar errores, es utilizar var_dump sobre tus variables y habilitar el Error_ALL en conjunto con tail -f /var/log/loqueallademotorapache/*error*log

Luego mejora tu proyecto con los tips que te colaboramos.

slds.

El sábado, 11 de febrero de 2017, 15:53:44 (UTC-3), Andrés Oporto escribió:

Andrés Oporto

unread,
Feb 17, 2017, 11:52:17 AM2/17/17
to php...@googlegroups.com
Tordek si hago lo que me pediste. Me dice
 
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(6) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Grupo PHP Argentina" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/php-arg/7ziTS05oQjk/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a php-arg+unsubscribe@googlegroups.com.

Andrés Oporto

unread,
Feb 17, 2017, 11:53:08 AM2/17/17
to php...@googlegroups.com

Tordek

unread,
Feb 17, 2017, 12:20:30 PM2/17/17
to php...@googlegroups.com
Te está diciendo que la consulta te devuelve una lista vacía (
["num_rows"]=> int(0) ). ¿Tenés datos en la DB? ¿Qué pasa si hacés esa
consulta directamente?
>> correo electrónico a php-arg+u...@googlegroups.com.
>> Para publicar en este grupo, envía un correo electrónico a
>> php...@googlegroups.com.
>> Visita este grupo en https://groups.google.com/group/php-arg.
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP
> Argentina" de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a php-arg+u...@googlegroups.com.

Tordek

unread,
Feb 17, 2017, 12:23:22 PM2/17/17
to php...@googlegroups.com
No probé esa lib, pero filtrar HTML tiene poco y nada que ver con filtrar SQL.

Esa clase es para si querés, por ejemplo, permitir a los usuarios
darle formato a lo que te mandan usando HTML, pero no querés que te
enchufen un <script>window.location =
"http://terobo.losdatos.hack"</script>.
>>> correo electrónico a php-arg+u...@googlegroups.com.
>>> Para publicar en este grupo, envía un correo electrónico a
>>> php...@googlegroups.com.
>>> Visita este grupo en https://groups.google.com/group/php-arg.
>>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>
>>
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP
> Argentina" de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a php-arg+u...@googlegroups.com.

Andrés Oporto

unread,
Feb 20, 2017, 1:23:54 PM2/20/17
to php...@googlegroups.com
si tenes razon esta vacia. Me tira ahora:

 object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(6) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }
>> correo electrónico a php-arg+unsubscribe@googlegroups.com.

>> Para publicar en este grupo, envía un correo electrónico a
>> php...@googlegroups.com.
>> Visita este grupo en https://groups.google.com/group/php-arg.
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP
> Argentina" de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a php-arg+unsubscribe@googlegroups.com.

> Para publicar en este grupo, envía un correo electrónico a
> php...@googlegroups.com.
> Visita este grupo en https://groups.google.com/group/php-arg.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Grupo PHP Argentina" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/php-arg/7ziTS05oQjk/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a php-arg+unsubscribe@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Andrés Oporto

unread,
Feb 20, 2017, 1:29:29 PM2/20/17
to Grupo PHP Argentina
la base tiene dos articulos cargados y me tira esto: 
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(6) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }



El sábado, 11 de febrero de 2017, 15:53:44 (UTC-3), Andrés Oporto escribió:

Tordek

unread,
Feb 20, 2017, 2:34:06 PM2/20/17
to php...@googlegroups.com
Sigue devolviéndote una lista vacía; fijate de donde sale $tipo, qué
tiene, y fijate si la consulta está bien con algo como

echo "SELECT * FROM articulo where tipo='$tipo'";
> --
> Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP
> Argentina" de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a php-arg+u...@googlegroups.com.

Ariel Ramone

unread,
Feb 20, 2017, 3:08:34 PM2/20/17
to php...@googlegroups.com
quita las comillas simples de la variable, recuerda que si usas comilla simple debes parsear la variable como  "SELECT * FROM articulo where tipo='" . $tipo . "' ". De lo contrario usa "SELECT * FROM articulo where tipo=$tipo"

Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Tordek

unread,
Feb 20, 2017, 4:24:15 PM2/20/17
to php...@googlegroups.com
No, Ariel; como Andrés empezó un string con comillas dobles, adentro
puede usar comillas simples sin problemas (pasan directamente),
mientras que el contenido de la variable referenciada se interpola
directamente:

https://ideone.com/z5xT11

Sí sería al revés que necesitás hacer 'foo ="'.$bar.'"' porque las
comillas simples no interpolan automáticamente.

--
Tordek

Ariel Ramone

unread,
Feb 20, 2017, 8:28:13 PM2/20/17
to php...@googlegroups.com
Ok. Gracias.

Andrés Oporto

unread,
Feb 21, 2017, 10:21:34 AM2/21/17
to Grupo PHP Argentina
al invocar a echo "SELECT * FROM articulo where tipo='$tipo'"; me dice
SELECT * FROM articulo where tipo='Llave T'



El sábado, 11 de febrero de 2017, 15:53:44 (UTC-3), Andrés Oporto escribió:

Tordek

unread,
Feb 21, 2017, 3:04:10 PM2/21/17
to php...@googlegroups.com
Y al hacer esa consulta directo en la DB te devuelve resultados?

Andrés Oporto

unread,
Mar 1, 2017, 9:39:24 AM3/1/17
to Grupo PHP Argentina
si me devuelve resultados

Tordek

unread,
Mar 1, 2017, 3:52:29 PM3/1/17
to php...@googlegroups.com
Andrés, ¿usás algún mensajero instantáneo, o podés meterte al slack?
No rinde seguir esta línea de conversación con 1 semana entre mensaje.

http://slack.laravelba.com.ar/

Andrés Oporto

unread,
Mar 2, 2017, 6:00:48 AM3/2/17
to php...@googlegroups.com
La página que me enviaste, no está activa. Tengo mensajero instántaneo, pero por ahora no tengo pc.
Has recibido este mensaje porque estás suscrito a un tema del grupo "Grupo PHP Argentina" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/php-arg/7ziTS05oQjk/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a php-arg+u...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Tordek

unread,
Mar 2, 2017, 6:20:00 AM3/2/17
to php...@googlegroups.com

franco gasparini

unread,
Mar 22, 2017, 7:36:22 AM3/22/17
to Grupo PHP Argentina
Hola chicos no funciona, tira error ... https://phparg-slack.herokuapp.com alguien me puede invitar al slack de phparg

gracias!

Tordek

unread,
Mar 22, 2017, 2:09:15 PM3/22/17
to php...@googlegroups.com
Hola, Franco

¿Qué error te tira? Al dev de la app seguramente le gustaría saber qué
problema tuviste para tratar de arreglarlo :)

Desafortunadamente, la única forma de meterte en el slack es usando el link

Saludos!
--
Tordek

franco gasparini

unread,
Mar 23, 2017, 10:53:25 AM3/23/17
to Grupo PHP Argentina
Tordek ..  

phparg

Failed! no_perms

jaj ese es el mensaje del error.. 

igual que lo prueben tratando de registrarse

saludos

Cesar Barcia

unread,
Mar 23, 2017, 12:45:33 PM3/23/17
to php...@googlegroups.com
hola gente,tambien me gustaria sumarme. pero da error :(

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a php-arg+unsubscribe@googlegroups.com.

Tordek

unread,
Mar 25, 2017, 6:56:32 AM3/25/17
to php...@googlegroups.com
Ya avisé a guiwoda y p4bloch que son los encargados; el problema
parece ser que el bot es de Guido, pero no tiene permisos (because
???), y p4bloch... habrá salido de joda por el finde largo, o algo.

Ahora solo queda esperar.

Tordek

unread,
Apr 5, 2017, 11:47:26 AM4/5/17
to php...@googlegroups.com
Resucitó p4bloch, hay nuevo link para unirse al slack:

https://slack-phparg.now.sh/
Reply all
Reply to author
Forward
0 new messages