Foros del Web » Programando para Internet » PHP »

PHP , MySql . Criterios de busqueda....

Estas en el tema de PHP , MySql . Criterios de busqueda.... en el foro de PHP en Foros del Web. Hola Amigos, os comento un tema que me tiene perdido, a ver si alguien me orienta por favor. Tengo un formulario en Html, el cual ...
  #1 (permalink)  
Antiguo 08/03/2010, 06:35
 
Fecha de Ingreso: marzo-2010
Mensajes: 4
Antigüedad: 12 años, 3 meses
Puntos: 1
PHP , MySql . Criterios de busqueda....

Hola Amigos, os comento un tema que me tiene perdido, a ver si alguien me orienta por favor.

Tengo un formulario en Html, el cual quiere recoger varios datos de una BD, el problema es que lo encuentro un poco lioso por que la busqueda depende de varios criterios, y no se por donde empezar.

Datos para introducir en la busqueda:

"desde una fecha- hasta otra fecha" (si estan en blanco las busca todas)
"desde codigo de cliente - hasta codigo de cliente" (si en blanco lo busca todo)
"por nombre de cliente"

Y luego por si no ando ya perdido en este tema...... el usuario puede decir con que criterio quiere realizar la busqueda.

- POR CODIGO, y ademas se añade la fecha y el nombre.
- POR NOMBRE, se le añade tambien la fecha.
- POR FECHA, a la cual le añado el nombre del cliente.

No se por donde tirar....


Os dejo el Código para que veaís el tema, y si alguien tiene un ejempliyo sencillo que se asemeje a alguna de las cuestiones o me da alguna idea me vendría estupendo.

.................................................. ................

CODIGO FORMULARIO: BUSCAR PEDIDO
.................................................. ................

<form name="busqueda" action="mostrarPedido.php" method="post"><br />
<fieldset>
<p>&nbsp;</p>
<p align="left" class="Estilo1">B&uacute;squeda por Fecha:</p>
<p align="left">Desde:
<input type="text" name="fdesde" />
</p>
<p align="left">Hasta:
<input type="text" name="fhasta" />
</p>
<p align="left" class="Estilo1">B&uacute;squeda por C&oacute;digo Cliente:</p>
<p align="left">Desde:
<input type="text" name="cdesde" />
</p>
<p align="left">Hasta:
<input type="text" name="chasta" />
</p>
<p align="left" class="Estilo1">Busqueda por nombre Cliente: </p>
<p align="left">Nomb.
<input type="text" name="nombre" />
</p>
<p align="left">Apelli.
<input type="text" name="apellidos" />
</p>
<p align="center" class="Estilo1">Criterio de Ordenaci&oacute;n: </p>

<label>

<input type="radio" name="ordenacion" value="codigo" />
Por Código . </label>
<br />
<label>
<input type="radio" name="ordenacion" value="nombre" />
Por Nombre</label>
<br />
<label>
<input type="radio" name="ordenacion" value="fecha" />
Por Fecha </label>
. </p>
<p align="center"><br />
<input name="submit" type="submit" value="Consultar" />
</p>
</form>




MOSTRAR RESULTADO DE LA BUSQUEDA.
.................................................. ...............................

<?php

$fdesde = $_POST['fdesde'];
$fhasta = $_POST['fhasta'];
$cdesde = $_POST['cdesde'];
$chasta = $_POST['chasta'];
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$criterio=

conexion con la bd.....

¿ EN CRITERIO TENGO QUE METER EN UN ARRAY LAS 3 OPCIONES, O HACER UN SWICHT ?

No tengo ni idea de nada :(

Muchas gracias de antemano. Juan Carlos GM
.................................................. ................................
  #2 (permalink)  
Antiguo 08/03/2010, 10:00
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: PHP , MySql . Criterios de busqueda....

Al presionar $_POST['submit'], tu vas recogiendo los criterios. Despues en tu consulta MySQL SELECT *FROM tabla WHERE uncampo = '$criterio1' AND otrocampo = '$criterio2'..... ORDER BY tucampo
  #3 (permalink)  
Antiguo 08/03/2010, 11:53
 
Fecha de Ingreso: marzo-2010
Mensajes: 4
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: PHP , MySql . Criterios de busqueda....

Ok, gracias por contestar....

Mira he hecho esto ... pero no se... no me da resultados.

Te pongo el Formulario de Busqueda y el de recogida y muestra de datos.


................................................

Busqueda
................................................

<h2 align="center" > INTRODUCIR DATOS </h2>

<form name="busqueda" action="mostrarPedido.php" method="post"><br />
<fieldset>
<p>&nbsp;</p>
<p align="left" class="Estilo1">B&uacute;squeda por Fecha:</p>
<p align="left">Desde:
<input type="text" name="fechaIni" />
</p>
<p align="left">Hasta:
<input type="text" name="fechaFin" />
</p>
<p align="left" class="Estilo1">Busqueda por nombre Cliente: </p>
<p align="left">Desde:
<input type="text" name="nombreIni" />
</p>
<p align="left">Hasta:
<input type="text" name="nombreFin" />
</p>



<?php
[email protected]_connect('localhost','AluM2','AluM 2');

if (!$id_conex) die ('Imposible conectar con el motor de BD. Proceso interrumpido');

if (!mysql_select_db('php05',$id_conex)) die ('Imposible seleccionar la BD. Proceso interrumpido');

$id_resultado=mysql_query('SELECT distinct cod_ord FROM ordenes');

if ($id_resultado==false) errorBD($id_conex);

mysql_free_result($id_resultado);

mysql_close($id_conex);
?>

<strong>Ordenaci&oacute;n por:</strong><p><input name='orden' type="radio" value="codigo" checked="checked">C&oacute;digo de Pedido</input></p>
<p><input name='orden' type="radio" value="nombre">Nombre del Cliente</input></p>

<p><input name='orden' type="radio" value="fecha">Fecha del Pedido</input></p>
<input type=submit value="Realizar Consulta">


</form>




.................................................. .......

PHP
.................................................. ........


<?php
function errorBD($id_conex) {
echo "<p>Error nº ".mysql_errno($id_conex)."en BD:".mysql_error($id_conex)."</p>";
echo "<p>Proceso interrumpido</p>";
exit;
}

function filtraEHP($valor,$tipo) { //filtra escapado automático, HTML y PHP
$valor=trim($valor);
if (get_magic_quotes_gpc()) $valor=stripslashes($valor);
$valor=strip_tags($valor);
switch ($tipo) {
case 1: {$valor=intval($valor);break;} //entero
case 2: {$valor=floatval($valor);break;} //flotante
//case 3: {$valor=htmlentities(strval($valor));break;} //cadena
// con mysql_real ... evito errores y ataques de inyección de código
case 3: {$valor=mysql_real_escape_string(htmlentities(strv al($valor)));break;} //cadena
case 4: {//fecha en formato ddSmmSaaaa donde S es cualquier
$valor=str_pad($valor,10); //devuelve la fecha en $valor=substr($valor,6,4).substr($valor,3,2).subst r($valor,0,2);}
default: ;
}
return $valor;
}
?>

<body>
<div class="iframe">
<div id="bloque">
<h1>BUSQUEDA DE PEDIDOS</h1>
<h2 align="center" > INTRODUCIR DATOS </h2>
<?php


[email protected]_connect('localhost','AluM2','AluM 2');

if (!$id_conex) die ('Imposible conectar con el motor de BD. Proceso interrumpido');

if (!mysql_select_db('php05',$id_conex)) die ('Lo sentimos. Imposible seleccionar la BD. Proceso interrumpido');



$fechaIni= $_POST['fechaIni'] ;

$fechaFin= $_POST['fechaFin'] ;

$nombreIni= $_POST['nombreIni'] ;

$nombreFin= $_POST['nombreFin'];

$orden=isset($_POST['orden'])?$_POST['orden']:'fecha'; //El orden por defecto es la fecha.

$fechaIni=($fechaIni)?$fechaIni:'2006-03-06 10:32:00'; // Suponiendo que la empresa o el comienzo de la realizacion de pedidos comienza en esta fecha.

$fechaFin=($fechaFin)?$fechaFin:'2100-12-31 00:00:00';

$nombreIni=($nombreIni)?$nombreIni:'A';

$nombreFin=($nombreFin)?$nombreFin:str_pad('',35,' Z');

//Construcción de la parte ORDER BY

switch ($orden){
case 'codigo': {$ordenA=" ORDER BY o.cod_ord";break;} // MIRATE ESTO MIRATELO.
case 'nombre': {$ordenA=" ORDER BY o.nom_cli, o.fechaHora";break;}
case 'fecha': {$ordenA=" ORDER BY o.fechaHora, o.nom_cli";break;}
default: {$orden=' ORDER BY o.fechaHora';}
}

//Construcción de la SELECT

$cons="SELECT o.cod_ord, o.fechaHora, o.nom_cli, o.direc_cli, o.total_br, o.total_or ";

$cons.="FROM ordenes o;";

$cons.=" WHERE (o.fechaHora BETWEEN '".$fechaIni."' AND '".$fechaFin."' AND o.nom_cli BETWEEN '".$nombreIni."' AND '".$nombreFin."')";

$cons.=(' '.$ordenA);

echo $cons;

$id_result=mysql_query($cons,$id_conex);


echo $id_result;


if (mysql_num_rows($id_result)==0) echo '<p><strong>Ning&uacute;n alumno cumple los criterios indicados.</strong></p>';


$ncr=mysql_num_fields($id_result);// Número de campos



if (mysql_num_rows==0)

mysql_free_result($id_result);

mysql_close($id_conex);

?>
  #4 (permalink)  
Antiguo 08/03/2010, 13:53
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 13 años, 8 meses
Puntos: 175
Respuesta: PHP , MySql . Criterios de busqueda....

o sea.. e menos de 6 horas quieres que estemos a tus pies? mira tú!!

Primero empieza por ordenar mejor tu codigo antes de hacerte el delicado.. ponle un resaltador de codigo PHP, HTML o lo que sea, para hacerlo legible, el solo verlo asi, ya da fastidio...

Cita:
Iniciado por jartaud Ver Mensaje
Al presionar $_POST['submit'], tu vas recogiendo los criterios. Despues en tu consulta MySQL SELECT *FROM tabla WHERE uncampo = '$criterio1' AND otrocampo = '$criterio2'..... ORDER BY tucampo
creo que te dio una pista muy clara, de ahi que tu uses otro metodo ya es cosa tuya, el amigo te paso algo muy decente... de lo cual puedes hacer usao, sin usar los cases/break... con unos if para verificar que datos recibes, armas A o B sentencia SQL...

Disculpa a los foreros por no acudir a tí inmediatamente, amo!!
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: criterios, mysql, 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 19:43.