Foros del Web » Programando para Internet » PHP »

Fallo raro al ejecutar una consulta en MySql (Autosuggest)

Estas en el tema de Fallo raro al ejecutar una consulta en MySql (Autosuggest) en el foro de PHP en Foros del Web. Hola a todos, Recientemente me he puesto a revisar un código de Ajax que encontré hace tiempo en una web que combinaba PHP con MySql ...
  #1 (permalink)  
Antiguo 29/04/2010, 11:59
 
Fecha de Ingreso: mayo-2009
Mensajes: 14
Antigüedad: 14 años, 11 meses
Puntos: 0
Fallo raro al ejecutar una consulta en MySql (Autosuggest)

Hola a todos,

Recientemente me he puesto a revisar un código de Ajax que encontré hace tiempo en una web que combinaba PHP con MySql y aunque para algunas consultas funciona pefectamente en otras no me muestra nada.

El problema es el siguiente estoy intentando hacer una base de datos de películas, la tabla películas tendra Id como clave principal: int (11) y aparte de eso tiene los siguientes campos:

- Titulo_original: varchar(80) y utf8_general_ci
- Titulo varchar(80) y utf8_general_ci
- Director varchar(80) y utf8_general_ci
- Pais varchar(80) y utf8_general_ci
- Anio int(11)
- Duración int (11)
- Interpretestext y utf8_general_ci
- Sinopsis text y utf8_general_ci
- Portada varchar(50) y utf8_general_ci

El caso es que hay varios archivos que conforman el autossugest. Así que intentaré explicar lo que me falla poniendo un par de ejemplos.
En el caso de que yo intente buscar películas por titulo en mi base de datos la consulta funciona perfectamente y nada más poner la primera letra me va mostrando una lista con todas las películas que comienzen por esa letra y su director debajo, según voy acotando más la búsqueda, la lista se va acortando.

El problema lo tengo si en lugar de buscar películas que empiecen por una letra busco directores en la base de datos, se que tendría que usar SELECT DISTINCT para que lso directores que tienen más de una película no aparezcan varias veces pero he probado de las 2 formas y no hay manera de que salga nada.

El archivo de autosuggest.php es éste:
Código PHP:
<!-- AJAX AUTOSUGGEST SCRIPT -->
<
script type="text/javascript" src="lib/ajax_framework.js"></script>

<style type="text/css">
/* ---------------------------- */
/* CUSTOMIZE AUTOSUGGEST STYLE    */
#search-wrap input{width:400px; font-size:16px; color:#999999; padding:6px; border:solid 1px #999999;}
#results{width:260px; border:solid 1px #DEDEDE; display:none;}
#results ul, #results li{padding:0; margin:0; border:0; list-style:none;}
#results li {border-top:solid 1px #DEDEDE;}
#results li a{display:block; padding:4px; text-decoration:none; color:#000000; font-weight:bold;}
#results li a small{display:block; text-decoration:none; color:#999999; font-weight:normal;}
#results li a:hover{background:#FFFFCC;}
#results ul {padding:6px;}
</style>
<div id="search-wrap">
<h1>Search with Auto Suggest</h1>
<input name="search-q" id="search-q" type="text" onkeyup="javascript:autosuggest()"/>
<div id="results"></div>
</div> 
Y el que ejecuta las consultas en la base de datos es éste:
Código PHP:
<?php 
    
include('config.php'); 
    
$SQL_FROM 'peliculas';
    
$SQL_WHERE 'Titulo';
    
$searchq        =    strip_tags($_GET['q']);
    
$getRecord_sql    =    'SELECT * FROM '.$SQL_FROM.' WHERE '.$SQL_WHERE.' LIKE "'.$searchq.'%"';
    
$getRecord        =    mysql_query($getRecord_sql);
    if(
strlen($searchq)>0){
        echo 
'<ul>';
    while (
$row mysql_fetch_array($getRecord)) {?>
        <li><a href="#"><?php echo $row['Titulo_original']; ?> <small><?php echo $row['Titulo']; 
echo 
'</small></a></li>';

echo 
'</ul>';

?>
Este es el archivo que no me muestra nada al intentar mostrar los directores:
Código PHP:
<?php 
    
include('config.php'); 
    
$SQL_FROM 'peliculas';
    
$SQL_WHERE 'Director';
    
$searchq =    strip_tags($_GET['q']);
    
$getRecord_sql    =    'SELECT DISTINCT Director FROM '.$SQL_FROM.' WHERE '.$SQL_WHERE.' LIKE "'.$searchq.'%"';
    
$getRecord        =    mysql_query($getRecord_sql);
    if(
strlen($searchq)>0){
    echo 
'<ul>';
    while (
$row mysql_fetch_array($getRecord)) {
echo 
'<li><a href="#">';
echo 
$row['Director'];
echo 
"</a></li>";

    echo 
'</ul>';

?>

Este es el archivo de selección de la base de datos config.php
Código PHP:
<?php
$db_host
="localhost";
$db_name="peliculas";
$username="root";
$password="root";
$db_con=mysql_connect($db_host,$username,$password);
$connection_string=mysql_select_db($db_name);
mysql_connect($db_host,$username,$password);
mysql_select_db($db_name);
mysql_query('SET NAMES utf8');
?>
Cuando intento buscar el director sólo me muestra esto <ul></ul> es decir toda la parte del while no encuentra nada por lo que me imagino que será fallo mío al ejecutar la consulta.
  #2 (permalink)  
Antiguo 29/04/2010, 21:17
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Hola, noriyuki.

Por favor, no coloque código de programación en la sección de Bases de Datos
Traslado el tema a una sección donde encaja mejor.
Tema trasladado desde la sección de Mysql.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 29/04/2010, 22:11
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Fallo raro al ejecutar una consulta en MySql (Autosuggest)

Código PHP:
Ver original
  1. <?php
  2.     include('config.php');
  3.     $SQL_FROM = 'peliculas';
  4.     $SQL_WHERE = 'Director';
  5.     $searchq =    strip_tags($_GET['q']);
  6.     $getRecord_sql    =    "SELECT Director FROM ".$SQL_FROM." WHERE ".$SQL_WHERE Director =  LIKE '%$searchq%'";
  7.    $getRecord        =    mysql_query($getRecord_sql);
  8.    if(strlen($searchq)>0){
  9.    echo '<ul>';
  10.    while ($row = mysql_fetch_array($getRecord)) {
  11. echo '<li><a href="#">';
  12. echo $row['Director'];
  13. echo "</a></li>";
  14. }
  15.     echo '</ul>';
  16. }
  17. ?>
__________________
Tengo una pregunta que a veces me tortura... ¿El loco soy yo o los locos son los demás?
  #4 (permalink)  
Antiguo 30/04/2010, 11:58
 
Fecha de Ingreso: mayo-2009
Mensajes: 14
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Fallo raro al ejecutar una consulta en MySql (Autosuggest)

Buenas tardes millan2525,

Gracias por tu ayuda, he probado con el código que has peusto y no me ha funcionado pero revisando la base de datos he visto cuál es el fallo, el problema es que no se cómo arreglarlo.

La causa por la que no conseguía que me mostrará los datos de los directores es que tenían insertado antes y después el código html para buscarlos en la base de datos, es decir que en la base de datos de MySql aparece en el campo director:
Código HTML:
<a href="buscardirector.php?director=Tim Burton">Tim Burton</a> 
en vez de poner simplemente Tim Burton.
Esto es así porque en la zona de administración usé un método en su día que quitaba y ponía el código html necesario a ciertos campos para que en las fichas

Ahora lo tengo así:

Código PHP:
        $SQL_WHERE = 'Director';    
    $getRecord_sql    =    'SELECT DISTINCT Director FROM '.$SQL_FROM.' WHERE '.$SQL_WHERE.' LIKE ';
    $getRecord_sql .=   '"'.$searchq.'%" ORDER BY Director ASC ';    
    $getRecord =    mysql_query($getRecord_sql);
    if(strlen($searchq)>0){
echo '<ul>';
    while ($row = mysql_fetch_array($getRecord)) {?>
        <li>
    <? echo $row['Director']; ?></li>
    <? 
    echo 
'</ul>';
    
    
?>
 }
Y si escribo en el cuadro de buscado <a href empiezan a salir los nombres de todos los directores, he intentado usar el código que tenía para quitar lo de <a href="buscardirector.php?director=Nombre del director">Nombre del director</a> y dejarlo sólo en Nombre del director pero no ha funcionado bien, se que la solución fácil sería quitar ese código html de los datos almacenados en la base de datos MySql pero si hago eso y por ejemplo hay un película que tiene varios directores no puedo simplemente poner antes y después del dato el código html. No se si me explico bien.

Etiquetas: autosuggest, ejecutar, fallo, mysql, raro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:40.