Busqueda en php, por que no me va?

Hola chicos estoy retocando una pagina que solo tenia busqueda por un campo de la bbdd y queria meterle que buscase en dos campos.
Por nombre me devuelve bien los resultados de la busqueda, lo tenia tal que asi:
<?php
      $consulta=mysql_query("select * from productos");
       if (isset($_POST['buscar'])){
         $consulta=mysql_query("select * from productos where nombre like '%".$_POST['buscar']."%'");
      }

queria buscar tambien por campo descripcion y lo puse asi

<?php
      $consulta=mysql_query("select * from productos");
       if (isset($_POST['buscar'])){
         $consulta=mysql_query("select * from productos where nombre like '%".$_POST['buscar']."%' or descripcion like '%".$_POST['buscar']."%'");
      }

Donde tengo el fallo?, si meto la consulta directamente en sql me devuelve bien los valores si busco cualquier palabra :-?
Eso de meter en un sql_query un $_POST directamente deberia estar penado por ley. Luego nos quejamos de los sql injection
A grosso modo no veo nada raro en la sentencia sql. En cuanto a codificación php, te recomendaría que te miraras la librería mejorada mysqli y usaras sentencias preparadas para evitar inyección SQL como dice el compañero, porque así estás metiendo a saco datos del formulario en la sentencia sql, y con tan solo poner unhas comillas puedes añadir sentencias sql. Con las sentencias evitas que caracteres como las comillas o sentencias sql sean interpretadas, tratándolas como texto plano. Otra solución si no me equivoco (que alguien me corrija si es el caso) es usar una función de filtrado de php antes de añadir los parámetros que vienen por post a la sentencia sql, como por ejemplo strip_tags();

Librería mysqli:
http://es1.php.net/manual/es/book.mysqli.php


Perdón por el tocho, y un saludo!
Gracias chicos,
lo de inyecciones no importa porque es una página que solo voy a usar yo dentro de una lan para tener una gestión de stock, pero os agradezco el consejo.
Primero de todo, te recomiendo(por no decir obligarte jeje) que no pongas directamente un $_POST sin filtrar el string antes, más que nada para evitar ataques de inyección SQL. También te recomiendo que utilices mysqli antes que mysql (antigua).

Dicho ésto, podrías hacer una prueba:

<?php
       $consulta=mysql_query("select * from productos");
       $buscar = 'producto1';
       if (isset($_POST['buscar'])) {
            $consulta=mysql_query("select * from productos where nombre like '%".$buscar."%' or descripcion like '%".$buscar."%'");
       }



Básicamente es comprobar si poniendo tu el string directamente te da un resultado, o si por el contrario no aparece nada. De todas maneras, te devuelve algún error del SQL o algo?

Saludos,
prueba a ponerle las comillas ` en el nombre de la tabla y los campos.

    <?php
           $consulta=mysql_query("select * from productos");
           $buscar = 'producto1';
           if (isset($_POST['buscar'])) {
                $consulta=mysql_query("select * from `productos` where `nombre` like '%".$buscar."%' or descripcion like '%".$buscar."%'");
           }


5 respuestas