autocompletar muestra todas las entradas, no hace ninguna búsqueda

Por favor, ayúdame … ¡Soy un novato! Por favor dime qué hacer.

processed.php

 $row['name']); } echo json_encode($results); ?> 

index.php

     $(document).ready(function(){ $("#artist").autocomplete( { source: 'processed.php', }); });  

Tengo este problema: http://jsbin.com/alaci5

Autocompletar espera la fuente (cuando se especifica una URL para filtrar los resultados).

De la documentación:

Cadena: cuando se utiliza una cadena, el complemento Autocompletar espera que esa cadena apunte a un recurso URL que devolverá datos JSON. Puede estar en el mismo host o en otro diferente (debe proporcionar JSONP). El complemento Autocompletar no filtra los resultados, en su lugar se agrega una cadena de consulta con un campo de término, que la secuencia de comandos del lado del servidor debe usar para filtrar los resultados. Por ejemplo, si la opción fuente está configurada como ” http://example.com ” y el usuario escribe foo, se realizará una solicitud GET a http://example.com?term=foo . Los datos en sí pueden tener el mismo formato que los datos locales descritos anteriormente.

Entonces en tu código PHP tienes que hacer:

 include_once('../../dbConnect.inc.php'); $sql="SELECT name FROM artist WHERE `name` like '%".mysql_real_escape_string($_GET['term'])."%'"; $artist = select($sql); $output_items = array(); while($row = mysql_fetch_array($artist)) { $results[] = array('label' => $row['name']); } echo json_encode($results); 

Esa función de autocompletar probablemente está pasando algunas variables a su página processed.php.

Use var_dump($_GET) para ver todas las cosas que le están pasando.

Dentro de uno de esos elementos $_GET , tendrá el contenido del cuadro de texto tal como existe en la página. Por el bien de la demostración, voy a usar $_GET['text'] . Tendrá que averiguar qué parte contiene los datos que necesita.

Lo que tendrá que hacer es buscar en la base de datos utilizando este valor para obtener una lista de resultados a devolver.

 $sql="SELECT name FROM artist"; $artist = select($sql); 

Esta es tu secuencia de comandos tal como existe. Lo que puede terminar pareciendo similar es esto.

 $text_input = mysql_escape_string($_GET['text']); $sql="SELECT name FROM artists WHERE name LIKE '%$text_input%'"; $artist = select($sql); 

Querrá obtener resultados que sean similares al texto ingresado en la página del usuario.

Algunas notas para ti

  1. Utilicé mysql_escape_string() únicamente para lo que ya tienes. Si bien esto funciona (conducir un chevy pacer de culo roto también funciona, pero hay formas mucho mejores), no es recomendable, lo que nos prepara para el punto 2.

  2. Usar la antigua extensión mysql no es realmente una buena idea, ha sido reemplazada por mysqli y PDO .

  3. tendrás que escapar de tus datos, así es como se hace con mysqli .