Consulta php

Hola que tal, tengo una duda con respecto a una búsqueda, y es que tengo 5 combobox y 2 textbox, necesito hacer una búsqueda con los datos que tengo en estos combobox y textbox pero la verdad no me hace nada cuando se va a la otra página me manda todos los datos de mi base de datos no me busca lo que pongo en los combobox ni en los textbox, no quiero que sean dependientes uno del otro, solo necesito los datos que se pongan que esos los busquen, la verdad no se que tengo mal me puedes ayudar por favor, te dejo mi código de mi dos pantallas:
codigo formbuscar.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
<style type="text/css">
<!--
#Layer1 {    position:absolute;
    left:6px;
    top:50px;
    width:694px;
    height:145px;
    z-index:1;
}
.Estilo3 {
    font-size: 20px;
    font-weight: bold;
    color: #FFFFFF;
}
body {
    background-color: #990000;
}
.Estilo4 {color: #CCCCCC}
-->
</style>
</head>
<body>
<form name="form" action="buscacarrera.php" method="POST">
<p class="Estilo3">Consulta por Carrera:</p>
<div id="Layer1">
<table width="758" border="0">
<tr>
<th scope="col">
<p align="left" class="Estilo4">Carrera de Egreso
        <select name="select">
          <option value=""> </option>
          <option value="INGENIERÍA INDUSTRIAL">INGENIERÍA INDUSTRIAL</option>
          <option value="INGENIERÍA ELÉCTRICA">INGENIERÍA ELÉCTRICA</option>
          <option value="INGENIERÍA MECATRONICA">INGENIERÍA MECATRONICA</option>
          <option value="INGENIERÍA EN SISTEMAS COMPUTA">INGENIERÍA EN SISTEMAS COMPUTA</option>
          <option value="INGENIERÍA MECÁNICA">INGENIERÍA MECÁNICA</option>
          <option value="LICENCIATURA EN INFORMÁTICA">LICENCIATURA EN INFORMÁTICA</option>
          <option value="INGENIERIA ELECTRÓNIC">INGENIERIA ELECTRÓNIC</option>
          <option value="LICENCIATURA EN ADMINISTRACIÓN">LICENCIATURA EN ADMINISTRACIÓN</option>
        </select>
        Especialidad
        <select name="select2">
          <option> </option>
          <option>DESARROLLO DE SOFTWARE</option>
            </select>
      </p>
<p align="left" class="Estilo4">Rango: Del Semestre
            <select name="select3">
            <option> </option>
            <option>ENERO-JUNIO</option>
            <option>AGOSTO-DICIEMBRE</option>
          </select>
          Año
          <input name="textfield2" type="text" size="5" />
Al Semestre
            <select name="select5">
              <option> </option>
            <option>ENERO-JUNIO</option>
            <option>AGOSTO-DICIEMBRE</option>
            </select>
        Año
        <input name="textfield22" type="text" size="5" />
        </p>
<p align="left">
              <span class="Estilo4">
              <label>Titulado(s)              </label>
              </span>
            <label>
            <select name="select7">
              <option> </option>
              <option>SI</option>
              <option>NO</option>
            </select>
            </label>
        </p>
<p align="left"><input type=submit name="Buscar" value="Buscar"></p>
</th>
</tr>
</table>
</div>
</form>
<p>  </p>
</body>
</html>
pantalla buscacarrera:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
Respuesta
1
¿Me puedes pasar el SQL de tu BD?
Quiero hacer unas pruebas.
Tengo que decirte que el code que me has puesto va perfectamente...
Lo que tienes que hacer para que te muestre los trabajos, es que en la consulta:
$consulta = mysql_query("SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE '%$CARRERA_EGRESO%' or ESPECIALIDAD LIKE '%$ESPECIALIDAD%' or SEMESTRE_EGRESO LIKE '%$SEMESTRE%' or ANO_EGRESO LIKE '%$ANO_EGRESO%' or TITULADO LIKE '%$TITULADO%'", $enlace);
Cambies los or por and porque sino te busca en la bd los registros que tenga Una cosa o otra o otra... y con los and lo que haces que es que se respeten todos los criterios.
Estas son mis tablas de mi bd, solo que los nombres de los campos son en mayúsculas, el nombre de la tabla es en minúsculas:
Base de datos: 'usuarios'
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla 'escolaridad'
--
create table escolaridad (
id int(11) not null,
fecha_nacimiento varchar(10) not null,
curp varchar(18) not null,
estado_civil varchar(10) not null,
ingles_porcentaje int(3) not null,
otro_idioma varchar(10) not null,
o_idioma_porcentaje int(3) not null,
otros_estudios varchar(2) not null,
especialidad varchar(35) not null,
institucion varchar(50) not null,
primary key  (id)
) engine=myisam  default charset=utf8;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla 'laboral'
--
create table laboral (
id int(11) not null,
nombre_empresa varchar(30) not null,
organismo varchar(9) not null,
giro varchar(35) not null,
calle varchar(35) not null,
numero varchar(10) not null,
colonia varchar(30) not null,
codigo_postal varchar(8) not null,
cd varchar(30) not null,
municipio varchar(35) not null,
estado varchar(30) not null,
telefono_lada varchar(15) not null,
fax varchar(15) not null,
e_mail varchar(40) not null,
jefe_inmediato varchar(40) not null,
puesto varchar(30) not null,
antiguedad varchar(20) not null,
primary key  (id)
) engine=myisam  default charset=utf8;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla 'password'
--
create table `password` (
`user` int(8) not null,
pass varchar(10) not null,
id int(11) not null auto_increment,
primary key  (id)
) engine=myisam  default charset=utf8;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla 'perfil'
--
create table perfil (
numero_control varchar(8) not null,
apellido_paterno varchar(30) not null,
apellido_materno varchar(30) not null,
nombre_s varchar(30) not null,
carrera_egreso varchar(30) not null,
especialidad varchar(40) not null,
id int(11) not null auto_increment,
sexo varchar(15) not null,
calle varchar(35) not null,
numero varchar(6) not null,
colonia varchar(30) not null,
codigo_postal varchar(8) not null,
cd varchar(30) not null,
municipio varchar(30) not null,
estado varchar(30) not null,
telefono_lada varchar(15) not null,
e_mail varchar(40) not null,
celular varchar(15) not null,
semestre_egreso varchar(20) not null,
ano_egreso int(4) not null,
titulado varchar(2) not null,
primary key  (id)
) engine=myisam  default charset=utf8;
¿Has probado lo que te he dicho?
Lo más seguro es que ese sea tu problema...
Lo aabo de verificar, y tienes toda al razón era eso, solo era cambiar los and po los or y ya me hace la consulta como debe muchas gracias nunca pensé que fuera solo eso, gracias saludos!

5 respuestas más de otros expertos

Respuesta
1
¿Has comprobado que no tienes ningún error en el query? He visto que tienes esta línea comentada:
Cambia esto en buscacarrera:
while($row = mysql_fetch_array($consulta))
Por:
$row= mysql_fetch_array($consulta) or die( "Error en query: $consulta, el error  es: " . mysql_error() );
while($row)
Si al ejecutar de nuevo el php, no te sale ningún error, prueba con hacer esto:
echo "SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE '%$CARRERA_EGRESO%' or ESPECIALIDAD LIKE '%$ESPECIALIDAD%' or SEMESTRE_EGRESO LIKE '%$SEMESTRE%' or ANO_EGRESO LIKE '%$ANO_EGRESO%' or TITULADO LIKE '%$TITULADO%'"


Y ejecutarlo en tu base de datos, para saber qué resultados te arroja.
No obstante, si ANO_REGRESO es un campo de tipo int, el like no te va a funcionar y las comillas simples creo que te darían error...
No, a ver. No tienes que sustituir nada por el echo, es simplemente para que obtengas una consulta con los valores que recibes y poder ejecutarla en la base de datos. Es decir, para que sustituya las variables por los valores...
Tendrías que ponerlo antes de ejecutar el query, por ejemplo.
Para que sólo te muestre el texto con la consulta para que luego lo ejecutes tú pon:
echo "SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE
'%$CARRERA_EGRESO%' or ESPECIALIDAD LIKE '%$ESPECIALIDAD%' or
SEMESTRE_EGRESO LIKE '%$SEMESTRE%' or ANO_EGRESO LIKE '%$ANO_EGRESO%'
or TITULADO LIKE '%$TITULADO%'"

die();
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">echo "SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE
'%$CARRERA_EGRESO%' or ESPECIALIDAD LIKE '%$ESPECIALIDAD%' or
SEMESTRE_EGRESO LIKE '%$SEMESTRE%' or ANO_EGRESO LIKE '%$ANO_EGRESO%'
or TITULADO LIKE '%$TITULADO%'"
</div>
Gracias por la respuesta, ya cambie lo del while en mi código no me marco ningún erro, ¿solo una duda con respecto con el echo select... esto lo pongo en donde yo tengo mi consulta? ¿Osea cambio lo que tengo por esto? Y lo del ANO_EGRESO si es int, puse mi consulta en mi base de datos y me marca este error:
Error
Consulta SQL:
"SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE '%$CARRERA_EGRESO%' or ESPECIALIDAD LIKE '%$ESPECIALIDAD%' or SEMESTRE_EGRESO LIKE '%$SEMESTRE%' or ANO_EGRESO LIKE '%$ANO_EGRESO%' or TITULADO LIKE '%$TITULADO%'"
MySQL ha dicho:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE '%$CARRERA_EGRESO%' or ESPECIALI' at line 1
No sé si has enviado esto dos veces por error... en cualquier caso, lo que dices que has ejecutado no vale para nada porque lo que yo quiero es que sustituya las variables por los valores, con lo que esa sentencia tiene que ser ejecutada por php para interpretar las variables...
¿Puedes pegarme la consulta que te sale al hacer el echo? La que te devuelve el php...
Y por favor, una vez que me enseñes esa consulta, dime qué es lo que quieres que te devuelva la consulta y qué es lo que te está devolviendo...
Si perdón lo mande dos veces por error, ya hice lo que me comentaste, de ponerlo antes de mi query, pero me hace lo mismo que antes, me manda los valores de la bd, pero no me respeta lo que yo pongo en los combobox para que me busque solo eso, si busco por carrera y pongo solo sistemas me manda todas las carreras, como si no me mandara esos valores para buscar
Yo espero a que contestes el mensaje anterior, no te preocupes...
? Cuando puse le echo me mando esto en la página:
SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE '%%' or ESPECIALIDAD LIKE '%%' or
semestre_egreso like '%%' or ano_egreso like '%%' or titulado like '%%
Y abajo mis datos osea la consulta completa, como si estuvieran todos los combobox en blanco me manda todos los datos, y por ejemplo tengo el combobox carrera: allí vienen als carreras, combobox de especialidad: allí vienen las especialidades, combobox semestre de egreso: allí vienen los dos semestres, pongo estos de ejemplo, al seleccionar uno por ejemplo el de carrera si escojo ingeniería en sistemas pues de resultado solo me tiene que mandar todos los datos que tengan que ver con esa carrera, osea todos los egresados de la carrera de sistemas, ¿pero la ir seleccionan un dato en cada combobox me tiene que ir buscando cada dato y hacer la consulta y mandarme solo las carrera en las cuales solo tengan algo que ver con esos datos que se escojieron me explique?
Para empezar, disculpa si no te entiendo pero es que es un tanto difícil con cosas como "pero la ir seleccionan" o si no pones cosas...
Lo primero, decirte que al salir la consulta vacía, significa que no estás recogiendo bien los datos del formulario.
Prueba con poner en buscacarrera print_r($_POST); die(); a ver si está recogiendo algo.
Lo segundo, no tienes bien planteada la consulta para nada. Tú quieres que te salga, por ejemplo, aquellos registros cuya carrera sea Sistemas y cuya especialidad sea DESARROLLO DE SOFTWARE, por ejemplo. Pero la consulta que has hecho, te sacará los registros cuya carrera sea Sistemas o cuya especialidad sea Desarrollo de software.
Para que haga lo que tú quieres, tan sólo has de cambiar los or por and.
Por último, ten en cuenta que esto es mi tiempo libre y que lo estoy haciendo de buena manera y gratis, así que ten un poquito de paciencia cuando no os entendemos. No siempre os explicáis bien o aportáis todos los datos que debéis... Somos expertos, no adivinos.
Para empezar, disculpa si no te entiendo pero es que es un tanto difícil con cosas como "pero la ir seleccionan" o si no pones comas...
Un disculpa, pero por escribir rapido se me pasan las comas o no escribo bien la palabra, ya puse el print_r($_POST); die(); que me comentabas, lo puse después del echo select... y me salio así, ya sin ningún dato de mi bd, ya no me apareció la tabla donde me aparecían todos los datos solo esto:
SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE '%INGENIERÍA EN SISTEMAS COMPUTA%' or ESPECIALIDAD LIKE '%DESARROLLO DE SOFTWARE%' or SEMESTRE_EGRESO LIKE '%%' or ANO_EGRESO LIKE '%2009%' or TITULADO LIKE '%NO%'Array ( [select] => INGENIERÍA EN SISTEMAS COMPUTA [select2] => DESARROLLO DE SOFTWARE [select3] => AGOSTO-DICIEMBRE [textfield2] => 2009 [select5] => AGOSTO-DICIEMBRE [textfield22] => 2009 [select7] => NO [Buscar] => Buscar )
Y lo puse antes del echo select... y me mando el mismo resultado, como te comentaba anteriormente me mandaba los datos así:
SELECT * FROM perfil WHERE CARRERA_EGRESO LIKE '%INGENIERÍA EN SISTEMAS COMPUTA%' or ESPECIALIDAD LIKE '%DESARROLLO DE SOFTWARE%' or SEMESTRE_EGRESO LIKE '%%' or ANO_EGRESO LIKE '%2009%' or TITULADO LIKE '%NO%'
93180871 -- SANCHEZ -- GALLEGOS -- ALBINA YAZMIN -- LICENCIATURA EN ADMINISTRACIÓN -- RECURSOS HUMANOS EAD-9605 -- 0
este es uno de los datos que me mandaba, porque en si me mandaba los 7033 datos que tengo, no me respeta los valores que yo ponga en los combobox, no puse el "and" porque quiero que busque por cualquier dato que este en el formulario, no importa que solo el combobox de carrera tenga algún dato y los otros estén en blanco, que busque solo las carreras de sistemas, o si quiero solo los titulados de cierta carrera, pondría carrera:sistemas computacionales, titulados: si, y que mande la carrera de sistemas computacionales pero solo los titulados de esa carrera, espero haberme explicado ahora si un poco mejor, y gracias por tu tiempo
Está claro que el problema radica en que el script no está recogiendo los datos del formulario.
Prueba dos cosas, primero en un select cualquiera, aparte del atributo name, añádele un atributo id (con el mismo valor que en name). Y prueba ahora a ver si print_r($_POST); die(); te devuelve algo.
Si no te saca nada, por favor, comprueba en tu php.ini la directiva register_globals, para saber si está en off o en on.
Con respecto a la consulta, cuando consigamos los datos miramos a ver más.
Oye gracias por todo, en el código que te puse solo cambie los o por los and y ya me hace todo, con cualquier dato que escoja me lo busca y manda todos los datos similares
Gracias por tu tiempo,
Saludos!1
Respuesta
1
Ahora me copie el código que me mandaste para intentar ayudarte,,,,,,,,,,,,
mucha experiencia no tengo en esto de la prog, pero me interesa mucho,, y hasta quien dice, vos me terminas enseñando a mi :) ...
Si kres podes agregarme al msn así vamos avanzando más rapido con algunas dudas que tengo... para poder postear la solución lo antes posible...
Un gusto y gracias nuevamente...
Nelo Cabrera
Mi correo es: [email protected]
Ok yo en un momento más te agrego solo que pueda abrir el msn y ya jaja
Le estuve pegando una mirada así medio rapido... y podrías hacer varias cosas como para ir descartando cosas...
-En la pantalla buscacarrera:en la linea 18 abrís el body, y despeus en la liena 24 y 25 hay algunas cosas comentadas y ahí es como cerras el html y el body.. pero dentro del php.. supongo que eso es un erro de tiempo... chekealo...
-Despues lo q podrias hacer es un var_dump a las variables q reciben el $_post como para ver q los datos lleguen bien...
-Y despues creo q la mas importante de las cosas q deberias hacer es quitar las mayusculas, tgrabajar todo con minusculas, xq a veces te podes equivocar y tipear sin mayusculas y no anda, y podes perder mucho tiempo...
Si pones todo en minúsculas nunca tendrás ese problem...
- Después en formbuscar.php: fíjate de ponerle nombres más descriptvos a los select.
<select name="select">
<select name="select2">
<select name="select3">
<input name="textfield2"
<input name="textfield22"
Esto hace también que te equivoques muy fácil...
Bueno, espero que te ande el msn así podemos avanzar más rapido... un abrazo
Ya te agregue te dejo mi msn [email protected], a ya pude solucionar el problema solo cambie los or por los and, espero que cualquier duda te pueda contetsar por el msn saludos!
Respuesta
1
Veo que tal vez sea un problema con la consulta, si como me dices, te regresa todos los datos de la base de datos, prueba cambiando los OR por AND, para que te regrese solo los registros que cumplan todas las condiciones, y me dices como te fue.
Respuesta
1
Justo despues del query tienes comentarios de la ejecucion del mismo...¿?
//$result=mysql_query($consulta)...¿?¿?¿?
Coge justo despues del query y escribe:
echo $consulta;
Con esa consulta ves al phpmyadmin y lanzala a ver el resultado. Si no veo tu Bd no voy a poder ayudarte mucho más que lo que te digo. Compruébalo, no se como tienes los datos en la BD!...
Respuesta
1
Creo que todo esta bien pero el error que puede ser es en tu sintaxis LIKE '%$CARRERA_EGRESO%' probá con LIKE '%".$CARRERA_EGRESO."%.' creo que así es el estándar para la función like así también lo he usado con power builder, después tu estructura esta todo bien.
Lo que podes agregarle también es un paginador a tus resultados.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas