ayuda autocompletar

Iniciado por Siempre Azul, 25 Septiembre 2015, 15:07 PM

0 Miembros y 1 Visitante están viendo este tema.

Siempre Azul

hola amigos aqui les coloco mi codigo para autocompletar una busqueda:

Siempre Azul, Nunca Rojo.

0roch1

El código es tuyo?, es un poco extraño que no puedas implementar esa parte cuando básicamente ya lo tienes.

Además hay algunos errores.

functions.js

Código (javascript) [Seleccionar]

html+='<a href="#" onclick="info('+json.data[datos].id+',\''+json.data[datos].nombre+'\')" class="list-group-item">';


De dónde tomas id y nombre si en la consulta no están indicados?.

autocompletar.class.php
Código (php-brief) [Seleccionar]

$query = $this->dbh->prepare("SELECT art_des FROM medi WHERE art_des LIKE :search");


Cuando llamas a la función info en la etiqueta a pasas dos parámetros pero solo recibes uno.

functions.js
Código (html4strict) [Seleccionar]

function info(art_des)
{

}


Respondiendo a tu duda.
Puedes crear otra clase (Depende de cómo sea la estructura de tus tablas) o crear una función en la clase Autocompletar para consultar el stock.

Sugerencias:
- Crea una clase por cada tabla
- Separa la conexión a la base de datos en otra clase
- Coloca nombres apropiados a tus clases, Autocompletar no es un nombre apropiado para una clase donde tienes información sobre medicamentos.


Coloca el código completo de la parte donde consultas el Stock para poder ayudarte con esa parte.

Saludos.

Siempre Azul

Cita de: 0roch1 en 25 Septiembre 2015, 19:57 PM
El código es tuyo?, es un poco extraño que no puedas implementar esa parte cuando básicamente ya lo tienes.

Además hay algunos errores.

functions.js

Código (javascript) [Seleccionar]

html+='<a href="#" onclick="info('+json.data[datos].id+',\''+json.data[datos].nombre+'\')" class="list-group-item">';


De dónde tomas id y nombre si en la consulta no están indicados?.

autocompletar.class.php
Código (php-brief) [Seleccionar]

$query = $this->dbh->prepare("SELECT art_des FROM medi WHERE art_des LIKE :search");


Cuando llamas a la función info en la etiqueta a pasas dos parámetros pero solo recibes uno.

functions.js
Código (html4strict) [Seleccionar]

function info(art_des)
{

}


Respondiendo a tu duda.
Puedes crear otra clase (Depende de cómo sea la estructura de tus tablas) o crear una función en la clase Autocompletar para consultar el stock.

Sugerencias:
- Crea una clase por cada tabla
- Separa la conexión a la base de datos en otra clase
- Coloca nombres apropiados a tus clases, Autocompletar no es un nombre apropiado para una clase donde tienes información sobre medicamentos.


Coloca el código completo de la parte donde consultas el Stock para poder ayudarte con esa parte.

Saludos.

no me sirve fijate coloco:

Código (php) [Seleccionar]
<?php
class Autocompletar
{

private $dbh;

public function __construct()
{
$this->dbh = new PDO("mysql:host=localhost;dbname=medicinas""root""123456");
}

public function findData($search)
{
$query $this->dbh->prepare("SELECT art_des FROM medi WHERE art_des LIKE :search");
        
$query->execute(array(':search' => '%'.$search.'%'));
        
$this->dbh null;
        if(
$query->rowCount() > 0)
        {
        
echo json_encode(array('res' => 'full''data' => $query->fetchAll()));
        }
        else
        {
        
echo json_encode(array('res' => 'empty'));
        

        
         if($row['stock_act'] > ) {
 
echo 
'Disponible';
 
} else {
 
echo 
'No hay Disponible';
 
}

        }
}
}


y no me funciona
Siempre Azul, Nunca Rojo.

0roch1

Por lo que entiendo la aplicación debería funcionar así.

Buscas el nombre de un medicamento
Si se encuentran coincidencias con el nombre se despliega una lista con estos.
Al hacer clic sobre un medicamento este deberá mostrar un mensaje cuantos hay en stock

Corrígeme si estoy mal con los pasos.

Podrías colocar exactamente que campos tiene la tabla medi.



Siempre Azul

Cita de: 0roch1 en 25 Septiembre 2015, 20:54 PM
Por lo que entiendo la aplicación debería funcionar así.

Buscas el nombre de un medicamento
Si se encuentran coincidencias con el nombre se despliega una lista con estos.
Al hacer clic sobre un medicamento este deberá mostrar un mensaje cuantos hay en stock

Corrígeme si estoy mal con los pasos.

Podrías colocar exactamente que campos tiene la tabla medi.




exactamente asi como dices es que deberia ser, la tabla donde dice la cantidad de medicinas que hay disponibles se llama "stock_act" la tabla "art_des" es la que tiene el nombre de las medicinas.
Siempre Azul, Nunca Rojo.

0roch1

Código (php-brief) [Seleccionar]

if($query->rowCount() > 0)
        {
        echo json_encode(array('res' => 'full', 'data' => $query->fetchAll()));
        }
        else
        {
        echo json_encode(array('res' => 'empty'));

                if($row['stock_act'] > 0 ) {

echo 'Disponible';

} else {

echo 'No hay Disponible';

}

        }

:huh:
Por esa parte del código presiento que no es tu código.

Si el contador es igual a cero o menor que cero (casos contrarios a count > 0) por qué deberías mostrar el stock en este caso?.
Además en ningún momento estás realizando la consulta a la tabla del stock_act

Primero necesitas sabes que es lo que estás haciendo, comprenderlo, corregir el código en las partes que te indiqué y verificar que funcione, si no no tiene caso continuar.

Después deberás crear una función muy parecida a findData la llamaré findStock por ejemplo, en dónde tu consulta deberá ser algo así.

Código (php-brief) [Seleccionar]

$query = $this->dbh->prepare("SELECT stock FROM stock_act WHERE med_id LIKE :med_id");


Todo lo demás es muy parecido.

Intenta y comenta si tienes más dudas.

Siempre Azul

Cita de: 0roch1 en 25 Septiembre 2015, 23:56 PM
Código (php-brief) [Seleccionar]

if($query->rowCount() > 0)
        {
        echo json_encode(array('res' => 'full', 'data' => $query->fetchAll()));
        }
        else
        {
        echo json_encode(array('res' => 'empty'));

                if($row['stock_act'] > 0 ) {

echo 'Disponible';

} else {

echo 'No hay Disponible';

}

        }

:huh:
Por esa parte del código presiento que no es tu código.

Si el contador es igual a cero o menor que cero (casos contrarios a count > 0) por qué deberías mostrar el stock en este caso?.
Además en ningún momento estás realizando la consulta a la tabla del stock_act

Primero necesitas sabes que es lo que estás haciendo, comprenderlo, corregir el código en las partes que te indiqué y verificar que funcione, si no no tiene caso continuar.

Después deberás crear una función muy parecida a findData la llamaré findStock por ejemplo, en dónde tu consulta deberá ser algo así.

Código (php-brief) [Seleccionar]

$query = $this->dbh->prepare("SELECT stock FROM stock_act WHERE med_id LIKE :med_id");


Todo lo demás es muy parecido.

Intenta y comenta si tienes más dudas.
no me sirve ya coloque tu codigo y no hizo nada:

Código (php) [Seleccionar]
<?php
class Autocompletar
{

private $dbh;

public function __construct()
{
$this->dbh = new PDO("mysql:host=localhost;dbname=medicinas""root""123456");
}

public function findData($search)
{
$query $this->dbh->prepare("SELECT art_des FROM medi WHERE art_des LIKE :search");
        
$query->execute(array(':search' => '%'.$search.'%'));
        
$this->dbh null;
        if(
$query->rowCount() > 0)
        {
        
echo json_encode(array('res' => 'full''data' => $query->fetchAll()));
        }
        else
        {
        
echo json_encode(array('res' => 'empty'));
        

        
         if($row['stock_act'] > ) {
 
echo 
'Disponible';
 
} else {
 
echo 
'No hay Disponible';
 

 
        }
 
        }
}
}


el javascript que dice id no existe ninguna tabla llamada id ni nada solo existen las tablas que te dije
Siempre Azul, Nunca Rojo.

0roch1

Cita de: doctorman en 26 Septiembre 2015, 00:32 AM
no me sirve ya coloque tu codigo y no hizo nada:

el javascript que dice id no existe ninguna tabla llamada id ni nada solo existen las tablas que te dije


Cita de: doctorman en 25 Septiembre 2015, 21:28 PM
exactamente asi como dices es que deberia ser, la tabla donde dice la cantidad de medicinas que hay disponibles se llama "stock_act" la tabla "art_des" es la que tiene el nombre de las medicinas.

Claro que no te va a servir solo coloqué un nombre de campo cualquiera (por eso te pedí que pusieras la estructura de tu tabla) debes de colocar los nombres de tus campos y tablas.

Creo que no haz comprendido nada de lo que expliqué.

Al final de corregir y seguir los pasos que te indiqué deberías tener algo así.



Saludos.

Siempre Azul

#8
Cita de: 0roch1 en 26 Septiembre 2015, 00:45 AM

Claro que no te va a servir solo coloqué un nombre de campo cualquiera (por eso te pedí que pusieras la estructura de tu tabla) debes de colocar los nombres de tus campos y tablas.

Creo que no haz comprendido nada de lo que expliqué.

Al final de corregir y seguir los pasos que te indiqué deberías tener algo así.



Saludos.

no me sirve ya lo coloque como dices:

Código (php) [Seleccionar]
   <?php
    
class Autocompletar
    
{
     
    
private $dbh;
     
    
public function __construct()
    
{
    
$this->dbh = new PDO("mysql:host=localhost;dbname=medicinas""root""123456");
    
}
     
    
public function findData($search)
    
{
    
$query $this->dbh->prepare("SELECT art_des FROM medi WHERE art_des LIKE :search");
$query $this->dbh->prepare("SELECT stock_act FROM stock_act WHERE stock_act LIKE :stock_act");
            
$query->execute(array(':search' => '%'.$search.'%'));
            
$this->dbh null;
            if(
$query->rowCount() > 0)
            {
            
echo json_encode(array('res' => 'full''data' => $query->fetchAll()));
            }
            else
            {
            
echo json_encode(array('res' => 'empty'));
     
            
         if($row['stock_act'] > ) {
     
    echo 
'Disponible';
     
    } else {
     
    echo 
'No hay Disponible';
     
     
     
            }
     
            }
    
}
    }


Siempre Azul, Nunca Rojo.