Foros del Web » Programando para Internet » PHP »

buscar registro en la base de datos

Estas en el tema de buscar registro en la base de datos en el foro de PHP en Foros del Web. Hola: Alguien podria indicarme si mi codigo es correcto, tengo esto en html para hacer una busqueda, solo esta el text donde se introduce la ...
  #1 (permalink)  
Antiguo 03/05/2011, 10:20
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Sonrisa buscar registro en la base de datos

Hola:
Alguien podria indicarme si mi codigo es correcto, tengo esto en html para hacer una busqueda, solo esta el text donde se introduce la palabra y el boton de guardar.....


Código HTML:
Ver original
  1. <form action="buscar_registro_inventario.php" method="POST"><br><br>
  2. <center> <font size="7"> No Inventario: </font><br><br>
  3. <input size=30 type="text" name="no_inventario">
  4. <input name="Buscar" type="submit" value="Buscar"></center>
  5. </form>


para que lea la instruccion tengo el siguiente codigo:

Código PHP:
Ver original
  1. <?PHP
  2. include("config.php");
  3. $link=Conectarse();
  4. $result="select * from bienes WHERE no_inventario='".$_POST['no_inventario']."'";
  5. //$result=mysql_query('select * from bienes where seccion="SALON1"',$link);
  6. ?>
  7.  
  8. <html>
  9. <head>
  10.    <title></title>
  11. </head>
  12. <body>
  13.   <CENTER> <TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
  14.    
  15.       <TR><TD>&nbsp;NO_INVENTARIO</TD><TD>&nbsp;DESCRIPCION&nbsp;</TD><TD> ESTADO FISICO</TD><TD> RESGUARDANTE </TD> <TD>NIVEL</TD><td>SECCION</td></TR>
  16.         <TR> <TD colspan="6"> </TD></TR>
  17.           <TR> <TD colspan="6"></TD></TR>
  18.             <TR> <TD colspan="6"></TD></TR>
  19.               <TR> <TD colspan="6"></TD></TR>
  20.                 <TR> <TD colspan="6"></TD></TR>
  21. <?php      
  22.    while($row = mysql_fetch_array($result)) {
  23.       printf("<tr> <td>&nbsp;%s</td> <td>&nbsp;%s</td> <td>&nbsp;%s</td> <td>&nbsp;%s</td> <td>&nbsp;%s</td> <td>&nbsp;%s</td> </tr>", $row["no_inventario"],$row["descripcion"],$row["estado_fisico"],$row["resguardante"],$row["nivel"],$row["seccion"],$row["id_bienes"]);
  24.    }
  25.    mysql_free_result($result);
  26.    mysql_close($link);
  27. ?>
  28. </table></CENTER>
  29. </body>
  30. </html>

Realice este codigo pensando en hacer una busqueda pero creo mi sentencia esta mal, me marca error cuando deseo imprimir el result, alguien podria auxiliarme, lo que requiero que haga el codigo es que haga la busqueda de acuerdo al numero de inventario.... pero no me hace ninguna busqueda......solo me marca el error de result

Espero puedan ayudarme

GRACIAS !!!!
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #2 (permalink)  
Antiguo 03/05/2011, 11:51
Avatar de dcreate  
Fecha de Ingreso: octubre-2009
Ubicación: Veracruz
Mensajes: 536
Antigüedad: 14 años, 6 meses
Puntos: 22
Respuesta: buscar registro en la base de datos

amigo donde ejecutas el query???

creo q para una busqueda quedaria mejor:

Código PHP:
$result="select * from bienes WHERE no_inventario='".$_POST['no_inventario']."'"
$que=mysql_query($result) or die("error al consultar: ".mysql_error()); 
__________________
Somos lo que pensamos, como pensamos vivimos.
  #3 (permalink)  
Antiguo 03/05/2011, 12:18
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: buscar registro en la base de datos

Gracias por contestar jeje soy mujer, ya le he intentado pero aun asi sigue sin darme resultado, lo he modificado varias veces pero no me resulta es por eso que he pedido ayuda, u alguna otra forma para hacer busqueda, cres que me puedas indicar...

Gracias !!!! ......... Saludos
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #4 (permalink)  
Antiguo 03/05/2011, 12:34
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: buscar registro en la base de datos

Puedes probar colocando la consulta directamente en tu base de datos con el phpMyAdmin o con el manejador que tengas para ver que resultado arroja.

Tambien puedes probar imprimiendo el valor que envias por post con un echo para saber si pasa bien o no

echo $_POST['no_inventario'];

Es lo que se me ocurre con los datos que proporcionas. Si te marca error podrias indicar cual es para poder ayudarte mejor.
  #5 (permalink)  
Antiguo 03/05/2011, 14:20
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 13 años, 5 meses
Puntos: 48
Respuesta: buscar registro en la base de datos

Bueno asi un ojo por encima deveria ser algo asi:

Código PHP:
Ver original
  1. <?PHP
  2. include("config.php");
  3. $link = Conectarse();
  4. $result = mysql_query("select * from bienes WHERE no_inventario='".$_POST['no_inventario']."'");
  5. //$result=mysql_query('select * from bienes where seccion="SALON1"',$link);
  6. ?>
  7.  
  8. <html>
  9. <head>
  10.    <title></title>
  11. </head>
  12. <body>
  13.   <CENTER> <TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
  14.    
  15.       <TR><TD>&nbsp;NO_INVENTARIO</TD><TD>&nbsp;DESCRIPCION&nbsp;</TD><TD> ESTADO FISICO</TD><TD> RESGUARDANTE </TD> <TD>NIVEL</TD><td>SECCION</td></TR>
  16.         <TR> <TD colspan="6"> </TD></TR>
  17.           <TR> <TD colspan="6"></TD></TR>
  18.             <TR> <TD colspan="6"></TD></TR>
  19.               <TR> <TD colspan="6"></TD></TR>
  20.                 <TR> <TD colspan="6"></TD></TR>
  21. <?php      
  22.    while($row = mysql_fetch_assoc($result)) {
  23.        
  24.       echo "<tr> <td>&nbsp;".$row["no_inventario"]."</td> <td>&nbsp;".$row["descripcion"]."</td> <td>&nbsp;".$row["estado_fisico"]."</td> <td>                     &nbsp;".$row["resguardante"]."</td> <td>&nbsp;".$row["nivel"]."</td> <td>&nbsp;".$row["seccion"]."</td> </tr> ".$row["id_bienes"];
  25.    }
  26.    mysql_free_result($result);
  27.    mysql_close($link);
  28. ?>
  29. </table></CENTER>
  30. </body>
  31. </html>

Una de las cosas principales jamas ejecutas la query, luego el printf si podemos hacerlo directamente y es menos codigo y factible porque no hacerlo?

Otra cosa $_POST['no_inventario'] recuerda limpiar la variable antes de mandarla, porue si lo haces asi directamente puedes obtener una Inyeccion SQL(Hack), bueno espero y te sirva cualquier cosa aqui estamos n_n
  #6 (permalink)  
Antiguo 04/05/2011, 08:49
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Sonrisa Respuesta: buscar registro en la base de datos

HOla !!!
Gracias por su ayuda, ya me realiza la busqueda correctamente asi como lo deseaba, solo me gustaria saber unas cosas que no entendi del todo bien, ojala puedan explicarme por favor, si imprimi el echo para saber si ha pasado los datos, hasta ahi voy bien, lo que no entiendo es como "limpiar la variable antes de mandarla" y mysql_fetch_assoc que hay de diferencia con mysql_fetch_array, y la ejecucion del query en que momento la debo de utilizar, se que debo de leer mas pero mas que nada para darme una idea global......

Gracias por apoyarme, la verdad llevo menos de 2 meses usando php, no he tomado clases de este, solo los manuales que he leido y ayuda de ustedes... y aun se me complica un poco, y lo de la busqueda casi es el ultimo punto para terminar mi sistema, aunque sea chico pero funcional.......

Mil Gracias ...... Saludos !!!
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #7 (permalink)  
Antiguo 04/05/2011, 09:30
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: buscar registro en la base de datos

lo e limpiar variables es un poquito avanzado para principiantes,
se trata de asegurar de nadie hackee tu sitio con tecnicas tenebrosas...
en cuanto a mysql_fetch_assoc y mysql_fetch_array
yo te recomiendo mysql_fetch_object mas corta y te acostumbras a los objetos y te dejas de dudas.
y cuando decis "y la ejecucion del query en que momento la debo de utilizar"
te podrias hacer un "mapa" del codigo de que queres que pase en cada accion que tome el usuario.

son mis recomendaciones

BSS
  #8 (permalink)  
Antiguo 04/05/2011, 09:36
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: buscar registro en la base de datos

GRACIAS !!!
Y otra pregunta abusando de su ayuda, me hace las busquedas correctas, sale bien, solo que por ejemplo si quiero buscar a JUAN PEREZ tengo k anotarlo tal y como esta el nombre en mi base de datos....
Mi pregunta : hay alguna instruccion que acepte palabras cortas, ejemplo si quiero buscar JUAN PEREZ igual me lo acepte si anoto PEREZ, o solo anotar palabras claves o raiz, por ejemplo si anoto ZAPAT me arroje ZAPAT-ILLA O ZAPAT-O...

Gracias !!!!!!!!!!!
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #9 (permalink)  
Antiguo 04/05/2011, 09:46
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: buscar registro en la base de datos

claro linda
$result = mysql_query("select * from bienes WHERE no_inventario LIKE %'".$_POST['no_inventario']."'%");

LIKE TE TRAE LOS APROXIMADOS
TENES ESTAS COMBINACIONES
%PALABRA% //QUE CONTENGA ...
PALABRA% //QUE EMPIECE CON ...
%PALABRA //QUE TERMINE CON ...
%____% //QUE CONTENGA 5 CARACTARES

ETC ETC Y TODAS SUS COMBINACIONES

BSS
  #10 (permalink)  
Antiguo 04/05/2011, 09:59
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: buscar registro en la base de datos

gracias !!!!
Solo me marcaba un error pero solo fue c uestion de cambiar el signo de porcentaje queda asi por los que les interese:

Código PHP:
Ver original
  1. $result = mysql_query("select * from bienes WHERE inventario LIKE '%".$_POST['no_inventario']."%'");


...:::: GRacias por su aportacion ::....
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #11 (permalink)  
Antiguo 04/05/2011, 10:05
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: buscar registro en la base de datos

Si, pero depende...
Y si busco numeros???? M
  #12 (permalink)  
Antiguo 04/05/2011, 10:10
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: buscar registro en la base de datos

Es que en inventario si lo deje asi normal sin el uso de LIKE que me acabas de enseñar, porque esa busqueda si me interesa que se encuentre con el numero de inventario exacto, pero tengo otras opciones de busqueda, por resguardante, estado fisico y descripcion, y es donde si le agrege el LIKE para que con una pequeña palabra me haga la busqueda.....

Gracias !!!!
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #13 (permalink)  
Antiguo 04/05/2011, 13:04
Avatar de Sotelio  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago de Chile
Mensajes: 68
Antigüedad: 12 años, 11 meses
Puntos: 21
Respuesta: buscar registro en la base de datos

Hola

Ojalá toda la gente que está aprendiendo fuera como @Ximenitaa, admitiéndolo desde el principio y agradeciendo la ayuda, desde el principio también.

Como sugerencia y aportando a la forma de búsqueda, cuando compares campos con textos puedes usar:

Código PHP:
Ver original
  1. $sql = "SELECT * FROM personas WHERE LOWER(nombre) = '%" . strtolower($_POST["nombre"]) ."%';

Con LOWER en el sql te aseguras de transformar el texto a minúsculas, y con strtolower en php transformas el texto a minúsculas también.

Por otro lado también parece buena idea hacer:

Código PHP:
Ver original
  1. $nombre = $_POST["nombre"];
  2. $sql = "SELECT * FROM personas WHERE LOWER(nombre) = '%$nombre%';
Así evitas mezclar tantas comillas en la consulta sql.

Saludos
Sotleio
  #14 (permalink)  
Antiguo 04/05/2011, 19:02
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: buscar registro en la base de datos

Gracias por tu aportacion... y tambien por tu comentario,es muy grato para mi....

de hecho en una parte de mi sistema, intente que el texto k introducieran si era minuscula lo conviertiera en mayuscula y lo guardara en la base de datos como mayusculas, pero jeje no encontre la forma, aun asi en mi busqueda si reconoce minusculas y mayusculas y es buen tips para no pelearnos con las comillas que en un tema anterior batalle mucho .....

investigare bien esas instrucciones..... gracias ...
Saludos ....
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #15 (permalink)  
Antiguo 05/05/2011, 02:07
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 13 años, 5 meses
Puntos: 48
Respuesta: buscar registro en la base de datos

Bueno aqui te dejo mi antisql, para limpiar la variable n.n

Código PHP:
Ver original
  1. function clean($value)
  2. {
  3.         $check = $value;
  4.  
  5.         $search = array('chr(', 'chr=', 'chr%20', '%20chr', 'wget%20', '%20wget', 'wget(',
  6.         'cmd=', '%20cmd', 'cmd%20', 'rush=', '%20rush', 'rush%20',
  7.         'union%20', '%20union', 'union(', 'union=', 'echr(', '%20echr', 'echr%20', 'echr=',
  8.         'esystem(', 'esystem%20', 'cp%20', '%20cp', 'cp(', 'mdir%20', '%20mdir', 'mdir(',
  9.         'mcd%20', 'mrd%20', 'rm%20', '%20mcd', '%20mrd', '%20rm',
  10.         'mcd(', 'mrd(', 'rm(', 'mcd=', 'mrd=', 'mv%20', 'rmdir%20', 'mv(', 'rmdir(',
  11.         'chmod(', 'chmod%20', '%20chmod', 'chmod(', 'chmod=', 'chown%20', 'chgrp%20', 'chown(', 'chgrp(',
  12.         'locate%20', 'grep%20', 'locate(', 'grep(', 'diff%20', 'kill%20', 'kill(', 'killall',
  13.         'passwd%20', '%20passwd', 'passwd(', 'telnet%20', 'vi(', 'vi%20',
  14.         'insert%20into', 'select%20', 'fopen', 'fwrite', '%20like', 'like%20',
  15.         '$_request', '$_get', '$request', '$get', '.system', 'HTTP_PHP', '&aim', '%20getenv', 'getenv%20',
  16.         'new_password', '&icq','/etc/password','/etc/shadow', '/etc/groups', '/etc/gshadow',
  17.         'HTTP_USER_AGENT', 'HTTP_HOST', '/bin/ps', 'wget%20', 'uname\x20-a', '/usr/bin/id',
  18.         '/bin/echo', '/bin/kill', '/bin/', '/chgrp', '/chown', '/usr/bin', 'g\+\+', 'bin/python',
  19.         'bin/tclsh', 'bin/nasm', 'perl%20', 'traceroute%20', 'ping%20', '.pl', 'lsof%20',
  20.         '/bin/mail', '.conf', 'motd%20', 'HTTP/1.', '.inc.php', 'config.php', 'cgi-', '.eml',
  21.         'file\://', 'window.open', '<script>', 'javascript\://','img src', 'img%20src','.jsp','ftp.exe',
  22.         'xp_enumdsn', 'xp_availablemedia', 'xp_filelist', 'xp_cmdshell', 'nc.exe', '.htpasswd',
  23.         'servlet', '/etc/passwd', 'wwwacl', '~root', '~ftp', '.js', '.jsp', 'admin_', '.history',
  24.         'bash_history', '.bash_history', '~nobody', 'server-info', 'server-status', 'reboot%20', 'halt%20',
  25.         'powerdown%20', '/home/ftp', '/home/www', 'secure_site, ok', 'chunked', 'org.apache', '/servlet/con',
  26.         '<script', 'UPDATE', 'SELECT', 'DROP', '/robot.txt' ,'/perl' ,'mod_gzip_status', 'db_mysql.inc', '.inc', 'select%20from',
  27.         'select from', 'drop%20', 'getenv', 'http_', '_php', 'php_', 'phpinfo()', '<?php', '?>', 'sql=');
  28.  
  29.         $value = str_replace($search, '', $value);
  30.  
  31.         $value = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$value);
  32.         $value = trim($value);
  33.         $value = strip_tags($value);
  34.         $value = addslashes($value);
  35.         $value = str_replace("'", "''", $value);
  36.  
  37.         if( $check != $value )
  38.         {
  39.             $logf = fopen("./sql.txt", "a+");
  40.             fprintf($logf, "%s - Fecha: %s IP: %s Valor: %s, Corregido: %s\r\n", $_SERVER[PHP_SELF], date("d-m-Y h:i:s A"), $_SERVER['REMOTE_ADDR'], $check, $value );
  41.             fclose($logf);
  42.             alertbox("Que intentas hacer? (: , Mejor mira esto xD", "http://www.google.com/");
  43.              
  44.         }
  45.  
  46.         return( $value );
  47. }
  48.  
  49. if(!function_exists("alertbox")){
  50. function alertbox($text, $url)
  51. {
  52.     echo "<body  bgcolor='#000000'><script>alert('$text');document.location = '$url'</script></body>";
  53.     die("Javascript disabled");
  54. } }

Y ya pues solamente am ya te explicarion lo de
$nombre = $_POST["nombre"];

entonces para limpiar la variable hariamos esto solamente
Código PHP:
Ver original
  1. $nombre = clean($_POST["nombre"]);
  2.     $sql = "SELECT * FROM personas WHERE LOWER(nombre) = '%$nombre%';

Ahi espero explicarme n_n, cualquier duda aqui estamos :P
  #16 (permalink)  
Antiguo 05/05/2011, 08:19
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: buscar registro en la base de datos

ahh ya ya, ya entendi, es a lo que se referia limpiar antes la variable, muchisismas gracias por tu explicacion y dedicarme tu tiempo.....sin duda alguna aun falta muxo por aprender....

Gracias a todos !!!!
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!

Etiquetas: registro, busquedas
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 07:42.