Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consulta sql segun criterios

Estas en el tema de Consulta sql segun criterios en el foro de PHP en Foros del Web. Hola, ante todo gracias a todos los que lean mi post, Este es mi caso, tengo dos tablas, una para acceso para administradores, y la ...
  #1 (permalink)  
Antiguo 23/10/2013, 03:57
 
Fecha de Ingreso: octubre-2013
Mensajes: 62
Antigüedad: 10 años, 6 meses
Puntos: 0
Consulta sql segun criterios

Hola, ante todo gracias a todos los que lean mi post,
Este es mi caso, tengo dos tablas, una para acceso para administradores, y la que más problemas da, jeJE, asi que voy a insertarla aqui:
CREATE TABLE curriculums
(
iduser int NOT NULL PRIMARY KEY AUTO_INCREMENT,
nombre varchar(20),
apellidos varchar(40),
provincia varchar(20),
localidad varchar(20)
direccion varchar(60),
email varchar(40),
telefono varchar(9),
nacimiento varchar(20),
sexo varchar(6),
estudios varchar(20),
monthlastjob varchar(20),
yearlastjob int(4),
favorito varchar(60)
);
En la página principal los usuarios podrán introducir los datos de su curriculum y asi se ira llenando la tabla.
El problema viene aqui, cuando entro como administrador, tengo un formulario en el que eligo los criterios de bsuqueda de candidatos que busco, aqui el codigo del formulario:
<?php
session_start();
if(isset($_SESSION['nombre']))
{
?>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
<h2>Inserte sus criterios de búsqueda</h2>
<!--INTRODUCIR CIRTERIOS DE BUSQUEDA-->
<table>
<form action="procesarcriterios.php" method="post">
<tr>
<td><label for="provincia">Provincia:<!--<input type="text" name="provincia" id="provincia">-->
<select name="provincia" id="provincia">
<option value="Albacete">Albacete</option>
<option value="Alicante">Alicante</option>
<option value="Almeria">Almería</option>
<option value="Alava">ÁlaVa</option>
<option value="Asturias">Asturias</option>
<option value="Avila">Ávila</option>
<option value="Badajoz">Badajoz</option>
<option value="Baleares">Baleares</option>
<option value="Barcelona">Barcelona</option>
<option value="Bizkaia">Bizkaia</option>
<option value="Burgos">Burgos</option>
<option value="Caceres">Cáceres</option>
<option value="Cadiz">Cádiz</option>
<option value="Cantabria">Cantabria</option>
<option value="Castellon">Castellón/Castelló</option>
<option value="Ciudadreal">Ciudad Real</option>
<option value="Cordoba">Córdoba</option>
<option value="A Coruña">A Coruña</option>
<option value="Cuenca">Cuenca</option>
<option value="Gipuzcua">Guipuzcua</option>
<option value="Girona">Girona</option>
<option value="Granada">Granada</option>
<option value="Guadalajara">Guadalajara</option>
<option value="Huelva">Huelva</option>
<option value="Huesca">Huesca</option>
<option value="Jaen">Jaén</option>
<option value="Leon">León</option>
<option value="Lleida">Lleida</option>
<option value="Lugo">Lugo</option>
<option value="Madrid">Madrid</option>
<option value="Malaga">Málaga</option>
<option value="Murcia">Murcia</option>
<option value="Navarra">Navarra</option>
<option value="Ourense">Ourense</option>
<option value="Palencia">Palencia</option>
<option value="Palmas">Palmas</option>
<option value="Pontevedra">Pontevedra</option>
<option value="La Rioja">La Rioja</option>
<option value="Salamanca">Salamanca</option>
<option value="Santacruz">Santa cruz de Tenerife</option>
<option value="Segovia">Segovia</option>
<option value="Sevilla">Sevilla</option>
<option value="Soria">Soria</option>
<option value="Tarragona">Tarragona</option>
<option value="Teruel">Teruel</option>
<option value="Toledo">Toledo</option>
<option value="Valencia">Valencia/Válencia</option>
<option value="Valladolid">Valladolid</option>
<option value="Zamora">Zamora</option>
<option value="Zaragoza">Zaragoza</option>
<option value="Ceuta">Ceuta</option>
<option value="Melilla">Melilla</option>
</select></td>
<td><label for="localidad">Localidad:<input type="text" name="localidad" id="localidad"></td></tr><br>
<tr><td><label for="nacimiento">Nacido a partir del año:<input type="number" name="nacimiento" id="nacimiento"><br><td></tr>
<tr><td><label for="sexo">Sexo
<select name="sexo" id="sexo">
<option value="indiferente">Indiferente</option>
<option value="hombre">Hombre</option>
<option value="mujer">Mujer</option>
</select></td></tr></br>
<tr><td><label for="estudios">Estudios<select name="estudios" id="estudios">
<option value="Nada">Nada</option>
<option value="ESO">ESO</option>
<option value="FP1">FPI</option>
<option value="FPII">FPII</option>
<option value="Superiores">Superiores</option>
</select></td><tr></br>
<tr><td>Fecha del ultimo trabajo:
<select name="monthlastjob" id="monthlastjob">
<option value="enero">Enero</option>
<option value="febrero">Febrero</option>
<option value="marzo">Marzo</option>
<option value="abril">Abril</option>
<option value="mayo">Mayo</option>
<option value="junio">Junio</option>
<option value="julio">Julio</option>
<option value="agosto">Agosto</option>
<option value="septiembre">Septiembre</option>
<option value="octubre">Octubre</option>
<option value="noviembre">Noviembre</option>
<option value="diciembre">Diciembre</option>
</select></td>
<td><label for="yearlastjob">de<input type="number" name="yearlastjob" id="yearlastjob"><td></tr><br>
<tr><td><label for="enviar"><input type="submit" value="enviar" id="enviar"></td></tr>
</tr>
</table>
</body>
</html>
<?php
}
else
{
header("Refresh: 5; URL=crearcurriculum.php");
}

?>
Y aqui dejo el codigo php de procesarcriterios.php:

<?php
session_start();
if(isset($_SESSION['nombre']))
{
//PASAR SOLO LAS VARIABLES RECIBIDAS
$provincia=$_POST['provincia'];
$localidad=$_POST['localidad'];
$nacimiento=$_POST['nacimiento'];
$sexo=$_POST['sexo'];
$estudios=$_POST['estudios'];
$monthlastjob=['monthlastjob'];
$yearlastjob=['yearlastjob'];

//CREAR CONEXION
mysql_connect("localhost","root","")or die("No se pudo establecer conexión.");
mysql_select_db("curriculums")or die("No se pudo establecer conexión con la base de datos.");

//CREAR TABLA DE RESULTADOS
echo'
<table border="1">
<tr>
<td>nombre</td>
<td>apellidos</td>
<td>provincia</td>
<td>localidad</td>
<td>direccion</td>
<td>email</td>
<td>telefono</td>
<td>nacimiento</td>
<td>sexo</td>
<td>Estudios</td>
<td>monthlastjob</td>
<td>yearlastjob</td>
<td>favorito</td>
</tr>
<tr>
';
//DEVOLVER SOLO LOS VALORES EXISTENTES
if()
//EXTRAER LOS RESULTADOS DATOS
$consulta=mysql_query("SELECT nombre,apellidos,provincia,localidad,direccion,ema il,telefono,nacimiento,sexo,estudios,monthlastjob, yearlastjob,favorito FROM curriculums WHERE provincia='$provincia' AND localidad=/*'function($localidad)'*/1")OR DIE("No se pudo realizar la consulta");
while($dato=mysql_fetch_array($consulta))
{
echo '<td>'.$dato['nombre'].'</td>';
echo '<td>'.$dato['apellidos'].'</td>';
echo '<td>'.$dato['provincia'].'</td>';
echo '<td>'.$dato['localidad'].'</td>';
echo '<td>'.$dato['direccion'].'</td>';
echo '<td>'.$dato['email'].'</td>';
echo '<td>'.$dato['telefono'].'</td>';
echo '<td>'.$dato['nacimiento'].'</td>';
echo '<td>'.$dato['sexo'].'</td>';
echo '<td>'.$dato['estudios'].'</td>';
echo '<td>'.$dato['monthlastjob'].'</td>';
echo '<td>'.$dato['yearlastjob'].'</td>';
echo '<td>'.$dato['favorito'].'</td>';
}

echo '</tr></table>';

}
else
{
header("Refresh: 5; URL=crearcurriculum.php");
}
?>

El problema que tengo es en este último archivo, puesto que le he dado mil y una vueltas y no logro conseguir que me salgan solo los usuarios que indican las prefencias, por ejemplo, que sean ususarios de la rioja, de logroño, y que hallan nacido a partir de 1995, y asi con todas las posibilidades que deja a la imaginacion que formulario. Se que hay un post del 2005 pero no he loggrado entenderlo, quizás porque es un tema algo ajeno a mi y por lo tantto algo abstractto, si alquien podría ayudarme y explicarmelo bien...no solo quiero solucionar este caso, si no entenderlo para luego poder resolver más prblemas que me puedan venir parecidos a este.

Gracias por todo, un saludo.
  #2 (permalink)  
Antiguo 23/10/2013, 06:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta sql segun criterios

Código MySQL:
Ver original
  1. SELECT nombre,
  2.              apellidos,
  3.              provincia,
  4.              localidad,
  5.              direccion,
  6.              email,
  7.              telefono,
  8.              nacimiento,
  9.              sexo,
  10.              estudios,
  11.              monthlastjob,
  12.              yearlastjob,
  13.              favorito
  14. FROM curriculums
  15. WHERE provincia='$provincia'
  16.        AND localidad='$localidad'
  17. /// Aqui otras restricciones....

Luego debes construir el texto de la query en función de los datos que tengas....

Código PHP:
Ver original
  1. $Sql="SELECT nombre,
  2.             apellidos,
  3.             provincia,
  4.             localidad,
  5.             direccion,
  6.             email,
  7.             telefono,
  8.             nacimiento,
  9.             sexo,
  10.             estudios,
  11.             monthlastjob,
  12.             yearlastjob,
  13.             favorito
  14. FROM curriculums ";
  15.  
  16. $filtro="";
  17.  
  18. if(isset($_POST['provincia'])){
  19.      if($filtro=="") $filtro="WHERE ";
  20.      $filtro.="provincia='".$_POST['provincia']."'";
  21. }
  22. if(isset($_POST['localidad'])){
  23.      if($filtro=="") {
  24.            $filtro="WHERE ";
  25.      }else{
  26.            $filtro=" AND ";
  27.      }
  28.      $filtro.="localidad='".$_POST['localidad']."'";
  29. }
  30. if(isset($_POST['nacimiento'])){
  31.      if($filtro=="") {
  32.            $filtro="WHERE ";
  33.      }else{
  34.            $filtro=" AND ";
  35.      }
  36.      $filtro.="nacimiento='".$_POST['nacimiento']."'";
  37. }
  38. if(isset($_POST['sexo']) && $_POST['sexo']!="indiferente"){
  39.      if($filtro=="") {
  40.            $filtro="WHERE ";
  41.      }else{
  42.            $filtro=" AND ";
  43.      }
  44.      $filtro.="sexo='".$_POST['sexo']."'";
  45. }
  46. if(isset($_POST['estudios']) && $_POST['estudios']!="indiferente"){
  47.      if($filtro=="") {
  48.            $filtro="WHERE ";
  49.      }else{
  50.            $filtro=" AND ";
  51.      }
  52.      $filtro.="estudios='".$_POST['estudios']."'";
  53. }
  54. if(isset($_POST['monthlastjob'])){
  55.      if($filtro=="") {
  56.            $filtro="WHERE ";
  57.      }else{
  58.            $filtro=" AND ";
  59.      }
  60.      $filtro.="monthlastjob='".$_POST['monthlastjob']."'";
  61. }
  62. if(isset($_POST['yearlastjob'])){
  63.      if($filtro=="") {
  64.            $filtro="WHERE ";
  65.      }else{
  66.            $filtro=" AND ";
  67.      }
  68.      $filtro.="yearlastjob='".$_POST['yearlastjob']."'";
  69. }
  70.  
  71. $Sql.=$filtro;
  72.  
  73. echo $Sql."<br />";//Solo sirve de control para ver que se ha construido.
  74.  
  75. //EXTRAER LOS RESULTADOS DATOS
  76. $consulta=mysql_query($Sql)OR DIE("No se pudo realizar la consulta");
  77. ...

Ojo entre indiferente y nada en estudios.....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 23/10/2013, 09:21
 
Fecha de Ingreso: octubre-2013
Mensajes: 62
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Consulta sql segun criterios

Muchas gracias quimfv por tu respuesta tan rápida, la verdad que es un tema que me urge, ya he puesto el codigo en mi archivo, pero el único resultado es el siguiente:

SELECT nombre, apellidos, provincia, localidad, direccion, email, telefono, nacimiento, sexo, estudios, monthlastjob, yearlastjob, favorito FROM curriculums AND yearlastjob=''
No se pudo realizar la consulta

Es como si todo el valor de $filtro anterior a yearlastjob fuera sustituido...que puedo hacer para que me contalice todo el codigo anterior?No se podría meter en un array?

Muchas gracias por tu atención, espero que puedas ayudarme, gracias, un saludo.
  #4 (permalink)  
Antiguo 23/10/2013, 10:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta sql segun criterios

Código PHP:
Ver original
  1. $Sql="SELECT nombre,
  2.             apellidos,
  3.             provincia,
  4.             localidad,
  5.             direccion,
  6.             email,
  7.             telefono,
  8.             nacimiento,
  9.             sexo,
  10.             estudios,
  11.             monthlastjob,
  12.             yearlastjob,
  13.             favorito
  14. FROM curriculums ";
  15.  
  16. $filtro="";
  17.  
  18. if(isset($_POST['provincia'])){
  19.      if($filtro=="") $filtro="WHERE ";
  20.      $filtro.="provincia='".$_POST['provincia']."'";
  21. }
  22. if(isset($_POST['localidad'])){
  23.      if($filtro=="") {
  24.            $filtro="WHERE ";
  25.      }else{
  26.            $filtro.=" AND ";
  27.      }
  28.      $filtro.="localidad='".$_POST['localidad']."'";
  29. }
  30. if(isset($_POST['nacimiento'])){
  31.      if($filtro=="") {
  32.            $filtro="WHERE ";
  33.      }else{
  34.            $filtro.=" AND ";
  35.      }
  36.      $filtro.="nacimiento='".$_POST['nacimiento']."'";
  37. }
  38. if(isset($_POST['sexo']) && $_POST['sexo']!="indiferente"){
  39.      if($filtro=="") {
  40.            $filtro="WHERE ";
  41.      }else{
  42.            $filtro.=" AND ";
  43.      }
  44.      $filtro.="sexo='".$_POST['sexo']."'";
  45. }
  46. if(isset($_POST['estudios']) && $_POST['estudios']!="indiferente"){
  47.      if($filtro=="") {
  48.            $filtro="WHERE ";
  49.      }else{
  50.            $filtro.=" AND ";
  51.      }
  52.      $filtro.="estudios='".$_POST['estudios']."'";
  53. }
  54. if(isset($_POST['monthlastjob'])){
  55.      if($filtro=="") {
  56.            $filtro="WHERE ";
  57.      }else{
  58.            $filtro.=" AND ";
  59.      }
  60.      $filtro.="monthlastjob='".$_POST['monthlastjob']."'";
  61. }
  62. if(isset($_POST['yearlastjob'])){
  63.      if($filtro=="") {
  64.            $filtro="WHERE ";
  65.      }else{
  66.            $filtro.=" AND ";
  67.      }
  68.      $filtro.="yearlastjob='".$_POST['yearlastjob']."'";
  69. }
  70.  
  71. $Sql.=$filtro;
  72.  
  73. echo $Sql."<br />";//Solo sirve de control para ver que se ha construido.
  74.  
  75. //EXTRAER LOS RESULTADOS DATOS
  76. $consulta=mysql_query($Sql)OR DIE("No se pudo realizar la consulta");
  77. ...

Se trata de intentar entender y depurar los códigos que se dan, si había un error, y puede haber mas. Como puedes imaginar no he construido un entorno completo para poder probar el código.

Y si el error era el que dices… pero insisto puede haber más.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 23/10/2013, 10:43
 
Fecha de Ingreso: octubre-2013
Mensajes: 62
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Consulta sql segun criterios

Gracias por responder de nuevo, de verdad que se agradece y que lo he intentado entender y depurar, pero no entiendo por ejemplo porque contemplas que la provincia puede estar vacia ya que es un select, al igual que estudios, pero a parte de eso, cuando ya se comprueba cada variable no se porque se sale del condicional if y se sigue declarando $filtro, creía que deberia de ser $sql, pero lo he intentado y nada, le estoy dando vueltas, pero no doy con la solución. Lo que menos entiendo es porque al imprimiar la consulta no me da todo el valor supuestamante asignado.
  #6 (permalink)  
Antiguo 23/10/2013, 11:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta sql segun criterios

$filtro.=" AND ";

Yo he corregido esto sigue sin cargar todo el filtro?

En cuanto a comprobar si un campo esta lleno o no tu sabras cuando es necesario...

La idea es $Sql contiene la parte fija de la query...

$filtro varia des de "" (cadena bacia) a "WHERE ...."

Al final se juntan si es "" no se agrega nada a $sql si no se agrega WHERE...

Ahora aduqua los if a las validaciones que hagas antes de mandar el formulario... si sabes que un campo simpre va a llegar ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 24/10/2013, 02:18
 
Fecha de Ingreso: octubre-2013
Mensajes: 62
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Consulta sql segun criterios

Ante todo darte las gracias por tu aporte, esfuerzo y dedicación, pero es que lo que no entiendo, por ejemplo, te pongo este campo:

if(isset($_POST['localidad'])){
if($filtro=="")
{
$filtro="WHERE ";
}
else
{
$filtro.=" AND ";
}
$filtro.="localidad='".$_POST['localidad']."'";
}

He modificado un poco el campo porque no entiendo mucho los condicionales ternarios, si lo que he puesto aqui significa algo diferente a lo que tu me has escrito dimelo porfavor, entiendo que si el campo no se ha introducido no pasa nada, y si se ha introducido, si el filtro, que se saca del campo anterior, es "" se le pone where, lo que pasa que eso lo modificaré ya que el primer campo es localidad y como es un campo que es seguro que tiene valor lo adjudicare directamante en la variable $Sql, y si no el filtro es AND, pero lo que no entiendo es porque despúes de acabar el condicional entero, tanto el if como el else, al filtro se continua con la consulta sql, no deberia de ser la variable $Sql la que deberia de continuar para que asi el filtro seguiria siendo "" u otra cosa?
  #8 (permalink)  
Antiguo 24/10/2013, 02:34
 
Fecha de Ingreso: octubre-2013
Mensajes: 62
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Consulta sql segun criterios

Así queda el archivo después de haberlo modificado:

<?php

mysql_connect("localhost","root","")or die("conexion fallida");
mysql_select_db("curriculums")or die("bd fallida");

$provincia=$_POST['provincia'];
$localidad=$_POST['localidad'];
$nacimiento=$_POST['nacimiento'];
$sexo=$_POST['sexo'];
$estudios=$_POST['estudios'];
$yearlastjob=$_POST['yearlastjob'];

$Sql="SELECT nombre,
apellidos,
provincia,
localidad,
direccion,
email,
telefono,
nacimiento,
sexo,
estudios,
monthlastjob,
yearlastjob,
favorito
FROM curriculums WHERE provincia='$provincia' ";

if(!empty($localidad))
{
$Sql.="AND localidad='$localidad '";
}
if(!empty($nacimiento))
{
$Sql.="AND nacimiento>='$nacimiento '";
}
if($sexo=='Indiferente')
{
$Sql.="AND sexo='$sexo '";
}
$Sql.="AND estudios='$estudios'";
if(!empty($yearlastjob))
{
$Sql.="AND yearlastjob>='$yearlastjob '";
}


echo $Sql."<br />";//Solo sirve de control para ver que se ha construido.

//EXTRAER LOS RESULTADOS DATOS
$consulta=mysql_query($Sql)OR DIE("No se pudo realizar la consulta");
while($dato=mysql_fetch_array($consulta))
{
echo '<td>'.$dato['nombre'].'</td>';
echo '<td>'.$dato['apellidos'].'</td>';
echo '<td>'.$dato['provincia'].'</td>';
echo '<td>'.$dato['localidad'].'</td>';
echo '<td>'.$dato['direccion'].'</td>';
echo '<td>'.$dato['email'].'</td>';
echo '<td>'.$dato['telefono'].'</td>';
echo '<td>'.$dato['nacimiento'].'</td>';
echo '<td>'.$dato['sexo'].'</td>';
echo '<td>'.$dato['estudios'].'</td>';
echo '<td>'.$dato['monthlastjob'].'</td>';
echo '<td>'.$dato['yearlastjob'].'</td>';
echo '<td>'.$dato['favorito'].'</td>';
}

echo '</tr></table>';
?>
que es a lo que me refería en la respuesta anterior, el problema es que no me da ningún resultado, solo se me imprime la variable sql, que es lo que puedo estar haciendo mal?Te mando una copia de todo lo que aparece en la pantalla:
SELECT nombre, apellidos, provincia, localidad, direccion, email, telefono, nacimiento, sexo, estudios, monthlastjob, yearlastjob, favorito FROM curriculums WHERE provincia='La Rioja' AND estudios='Nada'
A mi juzgar está todo bien ya que la consulta sql solo busca los criterios que yo he rellenado, pero a pesar de haber un usuario/fila, que cumple todos los requisitos, no me aparece, que puede estar pasando?Puede haber algún tipo de problema de tipo type input="text"/"number" o si en la tabla es varchar o int?
Por si a caso te mando el archivo sql de la tabla:
-- phpMyAdmin SQL Dump
-- version 4.0.4.1
-- http://www.phpmyadmin.net
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 24-10-2013 a las 10:33:08
-- Versión del servidor: 5.5.32
-- Versión de PHP: 5.4.19

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de datos: `curriculums`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `curriculums`
--

CREATE TABLE IF NOT EXISTS `curriculums` (
`iduser` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(20) DEFAULT NULL,
`apellidos` varchar(40) DEFAULT NULL,
`provincia` varchar(20) NOT NULL,
`localidad` varchar(20) NOT NULL,
`direccion` varchar(60) DEFAULT NULL,
`email` varchar(40) DEFAULT NULL,
`telefono` varchar(9) DEFAULT NULL,
`nacimiento` varchar(20) DEFAULT NULL,
`sexo` varchar(6) DEFAULT NULL,
`estudios` varchar(15) NOT NULL,
`monthlastjob` varchar(20) NOT NULL,
`yearlastjob` varchar(2) NOT NULL,
`favorito` varchar(60) DEFAULT NULL,
PRIMARY KEY (`iduser`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Volcado de datos para la tabla `curriculums`
--

INSERT INTO `curriculums` (`iduser`, `nombre`, `apellidos`, `provincia`, `localidad`, `direccion`, `email`, `telefono`, `nacimiento`, `sexo`, `estudios`, `monthlastjob`, `yearlastjob`, `favorito`) VALUES
(2, 'Gonzalo', 'Bustamante Herce', 'La Rioja', 'Logroño', 'Emilia Pardo Bazán,14,1ºA', '[email protected]', '647240546', '18/04/1989', 'hombre', '', 'octubre', '20', 'Programador web');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Y aqui el fichero admin.php tal como está ahora:
<?php
session_start();
if(isset($_SESSION['nombre']))
{
?>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
<h2>Inserte sus criterios de búsqueda</h2>
<!--INTRODUCIR CIRTERIOS DE BUSQUEDA-->
<table>
<form action="procesarcriterios.php" method="post">
<tr>
<td><label for="provincia">Provincia:<!--<input type="text" name="provincia" id="provincia">-->
<select name="provincia" id="provincia">
<option value="Albacete">Albacete</option>
<option value="Alicante">Alicante</option>
<option value="Almeria">Almería</option>
<option value="Alava">ÁlaVa</option>
<option value="Asturias">Asturias</option>
<option value="Avila">Ávila</option>
<option value="Badajoz">Badajoz</option>
<option value="Baleares">Baleares</option>
<option value="Barcelona">Barcelona</option>
<option value="Bizkaia">Bizkaia</option>
<option value="Burgos">Burgos</option>
<option value="Caceres">Cáceres</option>
<option value="Cadiz">Cádiz</option>
<option value="Cantabria">Cantabria</option>
<option value="Castellon">Castellón/Castelló</option>
<option value="Ciudadreal">Ciudad Real</option>
<option value="Cordoba">Córdoba</option>
<option value="A Coruña">A Coruña</option>
<option value="Cuenca">Cuenca</option>
<option value="Gipuzcua">Guipuzcua</option>
<option value="Girona">Girona</option>
<option value="Granada">Granada</option>
<option value="Guadalajara">Guadalajara</option>
<option value="Huelva">Huelva</option>
<option value="Huesca">Huesca</option>
<option value="Jaen">Jaén</option>
<option value="Leon">León</option>
<option value="Lleida">Lleida</option>
<option value="Lugo">Lugo</option>
<option value="Madrid">Madrid</option>
<option value="Malaga">Málaga</option>
<option value="Murcia">Murcia</option>
<option value="Navarra">Navarra</option>
<option value="Ourense">Ourense</option>
<option value="Palencia">Palencia</option>
<option value="Palmas">Palmas</option>
<option value="Pontevedra">Pontevedra</option>
<option value="La Rioja">La Rioja</option>
<option value="Salamanca">Salamanca</option>
<option value="Santacruz">Santa cruz de Tenerife</option>
<option value="Segovia">Segovia</option>
<option value="Sevilla">Sevilla</option>
<option value="Soria">Soria</option>
<option value="Tarragona">Tarragona</option>
<option value="Teruel">Teruel</option>
<option value="Toledo">Toledo</option>
<option value="Valencia">Valencia/Válencia</option>
<option value="Valladolid">Valladolid</option>
<option value="Zamora">Zamora</option>
<option value="Zaragoza">Zaragoza</option>
<option value="Ceuta">Ceuta</option>
<option value="Melilla">Melilla</option>
</select></td>
<td><label for="localidad">Localidad:<input type="text" name="localidad" id="localidad"></td></tr><br>
<tr><td><label for="nacimiento">Nacido a partir del año:<input type="varchar" name="nacimiento" id="nacimiento"><br><td></tr>
<tr><td><label for="sexo">Sexo
<select name="sexo" id="sexo">
<option value="indiferente">Indiferente</option>
<option value="hombre">Hombre</option>
<option value="mujer">Mujer</option>
</select></td></tr></br>
<tr><td><label for="estudios">Estudios<select name="estudios" id="estudios">
<option value="Nada">Nada</option>
<option value="ESO">ESO</option>
<option value="FP1">FPI</option>
<option value="FPII">FPII</option>
<option value="Superiores">Superiores</option>
</select></td><tr></br>
<tr><!--<td>Fecha del ultimo trabajo:
<select name="monthlastjob" id="monthlastjob">
<option value="enero">Enero</option>
<option value="febrero">Febrero</option>
<option value="marzo">Marzo</option>
<option value="abril">Abril</option>
<option value="mayo">Mayo</option>
<option value="junio">Junio</option>
<option value="julio">Julio</option>
<option value="agosto">Agosto</option>
<option value="septiembre">Septiembre</option>
<option value="octubre">Octubre</option>
<option value="noviembre">Noviembre</option>
<option value="diciembre">Diciembre</option>
</select></td>-->
<td><label for="yearlastjob">Año del último trabajo:<input type="text" name="yearlastjob" id="yearlastjob"><td></tr><br>
<tr><td><label for="enviar"><input type="submit" value="enviar" id="enviar"></td></tr>
</tr>
</table>
</body>
</html>
<?php
}
else
{
header("Refresh: 5; URL=crearcurriculum.php");
}

?>

Espero no ser muy canso, pero es que esto me corre prisa, es que estoy de practicas de empresa y me gustaría poder dar la talla para que me contraten, muchas gracias por todo, espero tu respuesta lo antes posible, un saludo.
  #9 (permalink)  
Antiguo 24/10/2013, 04:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta sql segun criterios

Cita:
...no entiendo mucho los condicionales ternarios...
No son condicionales ternarios. Es un condicional binario que tiene anidado otro condicional binario.

Te falta "session_start();" en el fichero de la consulta.

La linea, que por lo que dices no entiendes:

$Sql.=$filtro;

esto es equivalente a

$Sql=$Sql.$filtro;

Es donde se juntan la parte fija de la query con el filtro, si este es "" no se le junta nada si hay algo se junta...

El echo $Sql entiendes que debes eliminarlo cuando todo te funcione?

lo que imprime ese echo debe ser una query con sintaxis correcta que incluya la parte fija inicial y el filtro que se haya construido, has copiado todo menos eso con lo que no puedo ver donde esta el error....

Yo usaba $filtro porque te daba una solución general, si cualquier campo podia ser nulo luego no podias poner WHERE en la parte fija.
Al tener el primer campo como fijo luego se simplifica.


Código PHP:
Ver original
  1. if(!empty($localidad))
  2. {
  3. $Sql.="AND localidad='$localidad '"; //Aqui sobra un blanco despues del nombre de la variable y falta uno despues del delimitador (') o antes de AND
  4. }
  5. if(!empty($nacimiento))
  6. {
  7. $Sql.="AND nacimiento>='$nacimiento '";///Idem
  8. }
  9. if($sexo=='Indiferente')
  10. {
  11. //Ojo a este condicional $sexo!='Indiferente', no?
  12. $Sql.="AND sexo='$sexo '";//Idem
  13. }
  14. //Ojo $estudios="nada" que significa que se requiere jente con "nada" de estudios o que no se requiere ningun nivel de estudios?
  15. $Sql.="AND estudios='$estudios'";//Idem
  16.  
  17. if(!empty($yearlastjob))
  18. {
  19. $Sql.="AND yearlastjob>='$yearlastjob '";//Idem
  20. }
  21.  
  22.  
  23. echo $Sql."<br />";//Solo sirve de control para ver que se ha construido.

La sentencia que imprima ese echo debe tener los blancos donde toca

SELECT..... FROM curriculums FROM curriculums WHERE provincia='Barcelona' AND localidad='Sabadell 'AND nacimiento>='1963-11-28 'AND sexo='Hombre 'AND....

SELECT.....FROM curriculums FROM curriculums WHERE provincia='Barcelona' AND localidad='Sabadell' AND nacimiento>='1963-11-28' AND sexo='Hombre' AND....


Código PHP:
Ver original
  1. while($dato=mysql_fetch_array($consulta))
  2.         {
  3.             echo '<td>'.$dato['nombre'].'</td>';
  4.             echo '<td>'.$dato['apellidos'].'</td>';
  5.             echo '<td>'.$dato['provincia'].'</td>';
  6.             echo '<td>'.$dato['localidad'].'</td>';
  7.             echo '<td>'.$dato['direccion'].'</td>';
  8.             echo '<td>'.$dato['email'].'</td>';
  9.             echo '<td>'.$dato['telefono'].'</td>';
  10.             echo '<td>'.$dato['nacimiento'].'</td>';
  11.             echo '<td>'.$dato['sexo'].'</td>';
  12.             echo '<td>'.$dato['estudios'].'</td>';
  13.             echo '<td>'.$dato['monthlastjob'].'</td>';
  14.             echo '<td>'.$dato['yearlastjob'].'</td>';
  15.             echo '<td>'.$dato['favorito'].'</td>';
  16.         }
  17.  
  18.         echo '</tr></table>';//Donde inicias la table i las tr?
  19. ?>

Venga que ya lo tienes.... he intentado ayudarte en lo que preguntas y corregirte algun otro error que he visto... ese es el objetivo del foro. No hacerte el trabajo... ni corregirlo como si fuera un profesor o un empleador o un crítico ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 24/10/2013 a las 04:48
  #10 (permalink)  
Antiguo 24/10/2013, 05:13
 
Fecha de Ingreso: octubre-2013
Mensajes: 62
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Consulta sql segun criterios

Muchas gracias por todo, de verdad, me hacia mucha falta, y me lo has solucionado, no se si se puede puntuar o muy bien como funciona el foro, pero si puede te daré la máxima puntuación, un saludo.

Etiquetas: busqueda, criterios, formulario, mysql, select, sql, variable
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:54.