Foros del Web » Programando para Internet » Javascript »

Select que coja solo los registros que empiezan por "el valor de un campo texto"

Estas en el tema de Select que coja solo los registros que empiezan por "el valor de un campo texto" en el foro de Javascript en Foros del Web. Hola forer@s: Estoy gestionando una clínica médico-dental en la que hay 7000 clientes. Y están aumentando. Tengo un campo de texto en el que la ...
  #1 (permalink)  
Antiguo 23/03/2005, 10:48
 
Fecha de Ingreso: enero-2005
Mensajes: 116
Antigüedad: 19 años, 3 meses
Puntos: 0
Pregunta Select que coja solo los registros que empiezan por "el valor de un campo texto"

Hola forer@s:
Estoy gestionando una clínica médico-dental en la que hay 7000 clientes. Y están aumentando.
Tengo un campo de texto en el que la dependienta escribirá el principio del nombre del cliente, para que ¡YO! se lo busque en la base de datos.
El select que tengo ahora (dentro de un script) es:
SELECT Codigo,Nombre FROM Clientes ORDER BY Nombre;
Pero necesito hacer la consulta en php, con lo que me queda algo como:
Código PHP:
$paciente=mysql_query("select Codigo,Nombre from Clientes order by Nombre",$link); 
Mi problema es que quiero que se busquen las entradas que empiecen por txtVal, que es la variable que contiene el valor del campo texto en el que escribirá la dependienta.
Código HTML:
var txtVal = document.form_nueva_cita.paciente.value;
Ya probé con esto:
Código PHP:
$paciente=mysql_query("select Codigo,Nombre from Clientes where Nombre LIKE 'txtVal%' order by Nombre",$link); 
Pero ... me carga valores vacíos en el Select, es decir, se despliegan unos 10 huecos vacíos en el select. Y se supone que debéría cargar los que empiecen por txtVal.
Yo creo que el problema está en que no actualiza bien el txtVal, porque esto (fuera del script) sí funciona (Me selecciona todos los registros cuyo campo nombre empieza por tr):
Código HTML:
<body>
$txtVal='Tr';
$paciente=mysql_query("select Codigo,Nombre from Clientes where Nombre LIKE '$txtVal%' order by Nombre",$link);  
while($row = mysql_fetch_array($paciente)) 
 { 
   echo 'Codigo: '.$row['Codigo'].'<br>';
   echo 'Nombre: '.$row['Nombre'].'<br>';
 } 
mysql_free_result($paciente); 
</body> 
Si alguien sabe de que puede ser, agradecería su ayuda.
  #2 (permalink)  
Antiguo 23/03/2005, 10:58
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
con LIKE variable debería traerte todos los que tienen ese nombre pero porque le colocas esas ' ' y el % ?

seguramente esten mal las ' '

Cheques bien que el php te devualva la info que quieres !!! y que le mandes la info que realmenten lo queires mandar, esto la entrada y salida del script, es fundamental que sea la correcta...

Saludos
PD: Esta pregunta no sería más de PHP ?
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 23/03/2005, 11:14
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Pones una consulta de JS en el foro de PHP y una de PHP en JS...

Justo te acabo de contestar... pero decidete.. estabas trabajando un combobox y ahora quieres realizar consultas a la BD???... ... te recomiendo sigas con lo que tienes.. creo recorrer el combobox gasta menor recursos que consultar una BD...

Para quienes lean esto... nuestra amiga esta ocupando la FAQ#60 de este foro... Trata de limitar los options de una lista despegable según lo tecleado en un textbox... Pero esta manejando 7000 registros... y por eso le gasta tiempo.

Lo que veo yo es que esta función "escribe" las opciones... no se desplaza por la lista... Me pareció ver una FAQ donde se desplazaba... pero no la hayé.. se podrá hacer algo así??... ó quizá, como ya le dije... hacer la "consulta" cada ciertos carácteres y no con cada teclaso como esta ahora... no sé! ¿qué piensan?

Saludos!

PD: Lo dije.. un rotundo NO :
Código PHP:
 $paciente=mysql_query("select Codigo,Nombre from Clientes where Nombre LIKE 'txtVal%' order by Nombre",$link); 
//txtVal es una variable JS ¿no??... tienes que recargar para hacer algo een PHP... 
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 23/03/2005 a las 11:16
  #4 (permalink)  
Antiguo 23/03/2005, 11:53
 
Fecha de Ingreso: enero-2005
Mensajes: 116
Antigüedad: 19 años, 3 meses
Puntos: 0
Si lo puse aquí es porque creo que el problema está en la actualización del valor de la variable txtValue. Y eso se hace en un script.
Por otra parte, no me parece muy normal que te burles (jam1138) de gente como yo, que está desesperada por hacer las cosas, y que busca ayuda donde cree que la puede hallar.
Os explico mi problema más detallado.
Tengo el siguiente script:
Código HTML:
 <script language="JavaScript"> 
var i; 
function addOpt(oCntrl, sTxt, sVal, sCnd)
{ 
   if (sTxt.substr(0, sCnd.length).toUpperCase() == sCnd.toUpperCase())
    { 
        var selOpcion=new Option(sTxt, sVal); 
        eval(oCntrl.options[i++]=selOpcion); 
    } 
} 
function cambia(oCntrl)
{ 
   var txtVal = document.form_nueva_cita.paciente.value; 
   while(oCntrl.length > 0) 
        oCntrl.options[0]=null; 
   i = 0; 
   oCntrl.clear;
   <?php 
   $paciente=mysql_query("select Codigo,Nombre from Clientes order by Nombre",$link);  	      
   echo "addOpt(oCntrl,\"Seleccione un paciente\",\"0\",txtVal);";
   while($row = mysql_fetch_array($paciente)) 
     { 
       echo "addOpt(oCntrl,\"".$row['Nombre']."\",\"".$row['Codigo']."\",txtVal);";
     } 
   mysql_free_result($paciente); 
   ?>
} 
</script> 
Que tal y como está me busca en el select cada vez que escribo un carácter. Pero ... son 7000 y el primer caracter tarda de 1 minuto a 1 minuto y medio. Y ... mi intención era mejorar eso restringiendo el select.
El código que tengo en el cuerpo de la página es:
Código HTML:
<body onLoad="cambia(document.form_nueva_cita.select_paciente)">
<form name="form_nueva_cita" method="get" action="validar.php">
  <strong>Paciente:</strong>
  <input type="text" name="paciente" size="50" onKeyUp="cambia(document.form_nueva_cita.select_paciente)">
  <select name="select_paciente" >
  </select>
  <input type="submit" value="Crear cita">
</form>	
</body> 
Probé con este código PHP, para ver si la consulta sql funcionaba(pero en el body de la página, no en el script):
Código PHP:
  $txtVal='Tr';
$paciente=mysql_query("select Codigo,Nombre from Clientes where Nombre LIKE '$txtVal%' order by Nombre",$link);  
while(
$row mysql_fetch_array($paciente)) 
  { 
     echo 
'Codigo: '.$row['Codigo'].'<br>';
     echo 
'Nombre: '.$row['Nombre'].'<br>';
  } 
mysql_free_result($paciente); 
y la consulta me selecciona correctamente todos los registros cuyo campo nombre empieza por tr. Es decir, que me visualiza el código y el nombre de todos los pacientes que empiezan por tr.
Pero esto
Código PHP:
$paciente=mysql_query("select Codigo,Nombre from Clientes where Nombre LIKE 'txtVal%' order by Nombre",$link); 
dentro del script no funciona. Es por eso que llegué a la conclusion de que era el txtVal el que fallaba.
Si alguien ve algún error o sabe qué puedo hacer para corregir el fallo, agradezco su colaboración.
Gracias por anticipado a cualquier ayuda (que será bien recibida).
  #5 (permalink)  
Antiguo 23/03/2005, 12:26
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
ortografia e incoherencias

Cita:
Iniciado por lcrecarey
(...) Por otra parte, no me parece muy normal que te burles (jam1138) (...)
... Perdona... jamás me burle, pero disculpame... (¿¿qué traigo últimamente??) .

... Bueno... espero no desprecies mi ayuda:

... Primero diferenciar PHP de JS... tan simple como que PHP trabaja del lado del servidor .. . solo te engrega código HTML ó JS... si quieres volver a ejecutar algo en PHP tendrás que recargar al menos... Lo que planteas ahora... no esta bien... Creo ya te lo dije... tengo idea de que una consulta MySQL gasta más recursos.. y si piensas realizar una consulta cada que se teclee algo... imaginate...

... Pero bueno... tú sabes. Yo solo puedo ayudarte... te diré que para hacer algo como lo que tienes en mente... cambiaria la cuestión... ahora necesitarias de un iframe que es el que se recargará y realizará las consultas. Esto es importante porque si haces este método en la página donde trabajas se recargaria ésta... Bien... como estamos hablando de recargar la función cambia... ahora ocuparias algo como
Código:
<input type="text" name="paciente" size="50" onKeyUp="iframe.location='pagina.php?buscar=loEscrito'">
Acá recogemos el contenido del textarea y lo mandamos por URL... y en tu página.php hacer algo como
Código PHP:
<?php
$buscar
=$_GET['buscar'];
$paciente=mysql_query("select Codigo,Nombre from Clientes where Nombre LIKE '".$buscar."%' order by Nombre",$link);  
while(
$row mysql_fetch_array($paciente))
  {
     echo 
'Codigo: '.$row['Codigo'].'<br>';
     echo 
'Nombre: '.$row['Nombre'].'<br>';
  }
... pero quiero insistir en el gasto de recursos... sigo pensando que la consulta seria mejor realizarla cada cierto número de carácteres.. ó cada nueva palabra... ó de plano hacer un botón "buscar"... pero bueno...

Espero te ayude y aceptes mis disculpas...

PD: .. al final de la función JS loEscrito... no se me viene ahora como optener el valor del textbox.. quizá con this.value... ó this.text.. no sé! esperemos la ayuda de los expertos...

La mejor de las suertes!

Edito: Otro Dato... creo sería mejor llamar a una función... porque al pasar la variable por URL habria problemas si se crean espacios.. entonces habria antes que cambiar los espacios por signos como %...
.. y... ahora solo planteo el problema... dime si vaz a inclinarte por este método y trabajamos con código mas "firme" ...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 23/03/2005 a las 12:33
  #6 (permalink)  
Antiguo 23/03/2005, 13:33
 
Fecha de Ingreso: enero-2005
Mensajes: 116
Antigüedad: 19 años, 3 meses
Puntos: 0
No son necesarias tus disculpas. Pero mi unica intencion era solucionar mi problema y aprender algo.
Lo que aprendí fué que la opción que escogí no me servía. Pero trabajar con ella me sirvió para conseguir que me funcionara la opcion de Desarrollo Web que había posteado Andrecito.
Es esta:
Código HTML:
<script language="JavaScript1.2"> 
 var digitos=40 //cantidad de digitos buscados 
 var puntero=0 
 var buffer=new Array(digitos) //declaración del array Buffer 
 var cadena="" 

 function buscar_op(obj)
  { 
    var letra = String.fromCharCode(event.keyCode) 
    if(puntero >= digitos)
     { 
       cadena=""; 
       puntero=0; 
     } 
    //si se presiona la tecla ENTER, borro el array de teclas presionadas y salto a otro objeto... 
    if (event.keyCode == 13)
       borrar_buffer();  
    //sino busco la cadena tipeada dentro del combo... 
    else
	 { 
       buffer[puntero]=letra; 
       //guardo en la posicion puntero la letra tipeada 
       cadena=cadena+buffer[puntero]; //armo una cadena con los datos que van ingresando al array 
       puntero++; 

       //barro todas las opciones que contiene el combo y las comparo la cadena... 
       for (var opcombo=0;opcombo < obj.length;opcombo++)
	    { 
          if(obj[opcombo].text.substr(0,puntero).toLowerCase()==cadena.toLowerCase())
		   { 
             obj.selectedIndex=opcombo; 
           } 
        } 
     } 
   event.returnValue = false; //invalida la acción de pulsado de tecla para evitar busqueda del primer caracter 
  } 

 function borrar_buffer()
  { 
    //inicializa la cadena buscada 
    cadena=""; 
    puntero=0; 
} 
</script> 
Estoy haciendo algun cambio para "adaptarla" pero va mucho mejor que la opción sobre la que llevo días trabajando y mucho más rápido.
Gracias a todos por todo lo que os habeis molestado.
para todos.
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 01:52.