PHP - validar variables post generar query

 
Vista:
sin imagen de perfil

validar variables post generar query

Publicado por Lrz (26 intervenciones) el 03/03/2017 21:53:01
Hola buen Dia, He estado Generando reportes en php y mysql y hasta el momento no habia falla pero me surgio el siguiente problema

Tengo un formulario html que envia los datos a un archivo pdf_blanco.php y este los recibe con el metodo POST para imprimir los datos requeridos en un pdf , en una consulta sencilla si me lo genera pero son 3 datos losque ingresa el usuario pero puede ser uno solo de ellos o 2 de ellos o los 3 en si tienen que ser las combinaciones posibles , habia visto una forma en cuanto condicionar el "WHERE" y este iria cambiando dependiendo lo que ingrese pero no me ha resultado este es mi codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ciclo = $_POST["ciclo"];
$matricula = $_POST["matricula"];
$pago = $_POST["pago"];
//Condiciones en caso de que algun campo este vacio y juegue con la condicion WHERE	
 
 
 
if (empty($_POST["ciclo"]))
	{
		$where = "WHERE proveedores LIKE '".$matricula."' ORDER BY cxl ASC";
 
	}else if(empty($POST["pago"])){
 
		$where = "WHERE proveedores LIKE '".$matricula."' AND ciclo = '".$ciclo."' ORDER BY cxl ASC";
 
	}else if(empty($POST["matricula"])){
 
		$where = "WHERE ciclo LIKE '".$ciclo."' AND concepto = '".$pago."' ORDER BY cxl ASC";
 
	}
 
 
 
 
$sql = "SELECT * FROM retensiones $where";
$result = $mysqli->query($sql);


La primera condicion si me funciona cuando es con el campo matricula , pero cuando interactuo con "ciclo" o "pago" no me manda los datos me manda un reporte vacio , Lo curioso del caso es que esos mismos POST los utilizo tambien para imprimir dentro del reporte y se ve que el dato enviado por el formulario aparece , entonces lo unico que me hace pensar es que las condiciones del Query no son las correctas , Espero me puedan ayudar Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

validar variables post generar query

Publicado por kip (877 intervenciones) el 04/03/2017 06:25:56
Hola, podrias intentarlo de esta forma a ver si se ajusta a lo que pides:

1
2
3
4
5
6
7
8
9
$sql = 'SELECT * FROM retensiones [WHERE] ORDER BY cxl ASC';
$rows = array('matricula' => 'proveedores', 'pago' => 'concepto');
$where = array();
foreach ($_POST as $nom => $val) {
    $nom_row = isset($rows[$nom]) ? $rows[$nom] : $nom;
    $where[] ="{$nom_row} = '{$val}'";
}
$sql = str_replace('[WHERE]', 'WHERE '.implode(' AND ', $where), $sql);
echo $sql;

He colocado que siempre sea = y no LIKE ya que no lo veo necesario, ya que en tu codigo de arriba veo que usas LIKE y = para un mismo campo en dos posibles casos, necesitas usar LIKE obligatoriamente??

Haz la prueba con el codigo y nos avisas si te funciona.... yo hago uso del echo $sql para ver la consulta, tu puedes quitar esa linea y simplemente ejecutar la query...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

validar variables post generar query

Publicado por Lrz (26 intervenciones) el 06/03/2017 18:06:28
GRACIAS , POR TU RESPUESTA.
MMM NO SE SI ME EXPLIQUE BIEN PERO LO DEL LIKE Y EL = LOS DEJE SIN DARME CUENTA YA QUE SE LOS ESTABA MODIFICANDO POR SI ERA ALGO DENTRO DEL QUERY Y AL FINAL LO DEJE ASI ,

MIRA LI HE MODIFICADO ASI PERO AUN ASI ME GENERA CIERTAS DUDAS

AQUI SE ENCUENTRAN LOS POST DONDE OBTENGO LOS DATOS EL HECHO DE QUE ESTEN ASI ES QUE TAMBIEN NECESITO GENERAR OTRA VARIABLE QUE ME IMPRIMA EN UN ENCABEZADO PARA FORMAR EL REPORTE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//Obtenemos los valores de los formularios
 
$ciclo = $_POST["ciclo"];
$tua = $_POST["tua"];
 
 
$sql1 = "SELECT  `tua`, `sede` FROM `tua` WHERE tua LIKE '".$tua."'";
$result1 = $mysqli->query($sql1);
$extraido1= mysqli_fetch_array($result1);
$campotua= $extraido1['sede'];
$sedetua= $extraido1['tua'];
 
//seleccionar tipo de pago 
$pago = $_POST["pago"];
$sql4 = "SELECT `servicio` FROM `servicios` WHERE servicio LIKE '".$pago."'";
$result4 = $mysqli->query($sql4);
$extraido4= mysqli_fetch_array($result4);
$servicio= $extraido4['servicio'];
 
 
//campos datos de proveedor 
$matricula = $_POST["matricula"];
$sql2 = "SELECT `proveedores`, `rfc`, `direccion`,curp FROM `proveedores` WHERE proveedores LIKE '".$matricula."'";
$result2 = $mysqli->query($sql2);
$extraido2= mysqli_fetch_array($result2);
$nomprove = $extraido2['proveedores'];
$rfcprove = $extraido2['rfc'];
$direccion = $extraido2['direccion'];
 
 
 
 
if (empty($_POST["ciclo"]))
	{
		$where = "WHERE proveedores = '".$matricula."' ORDER BY cxl ASC";
 
	}else{
 
	 	$where = "WHERE ciclo = '".$pago."' ORDER BY cxl ASC";
 
	}


LOS DATOS QUE ENTRAN AL QUERY SON LOS DE "PAGO" "MATRICULA" Y "CICLO"
CON EELOS SE GENERA EL QUERY Y LOS DATOS QUE QUIERO QUE LLAME YA LO IMPRIME EN UN PDF ,
SI SOLO DEJO LA PRIMERA CONDICION SI ME IMPRIME AUCNDO LE DIGO QUE ME TRAIGA LOS DATOS POR MEDIO DE "MATRICULA " , PERO CUANDO INTERVIENE OTRO NO ME ENVIA NADA ESTA VACIO


Captura-REPORT

PERO CUARIOSAMENTE COMO VEZ EL DATO QUE LLEGA DEL FORMULARIO CON RESPECTO AL PAGO SI LLEGA PERO AL QUEY , POR EL MOMENTO SOLO LO HAGO CON ESAS 2 CONDICIONES PARA QUE SE CUMPLA POR LO MENOS otra condicion y me imprima algo pero solo me funciona cuando le digo que me envie los datos de matricula
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

validar variables post generar query

Publicado por Lrz (26 intervenciones) el 06/03/2017 18:15:28
MIRA LE INTENTE JUGAR ASI , Y SI ME RESULTA , PERO SOLAMENTE CON ESTAS 2 CONDICIONES

1
2
3
4
5
6
7
8
9
10
if (empty($_POST["pago"]))
{
 
	$where = "WHERE proveedores = '".$matricula."' ORDER BY cxl ASC";
 
}else {
 
	$where = "WHERE concepto='".$pago."' ORDER BY cxl ASC";
 
}

AQUI SI ME RESPETA LO QUE QUIERO HACER SI PAGO ESTA VACIO QUE ME GENERE LO QUE ESTA DENTRO DE MATRICULA Y EN OTRO CASO QUE ME IMPRIMA LO QUE ESTE DENTRO DE PAGO

LO QUE PASA ES QUE CUANDO SON 3 CAMPOS INCREMENTAN LAS CONDICIONES , Y LE INTENTE HACER
ASI ( LO HARE EN SEUDOCODIGO PORQUE NO RECUERDO LA SINTAXIS)

1
2
3
4
IF( ESTA_VACIO(PAGO)) Y ESTA_VACIO(CICLO)){
    $where = "WHERE proveedores = '".$matricula."' ORDER BY cxl ASC";  // SERIA CON MATRICULA 
}ELSE IF( CICLO Y MATRICULA (VACIOS)){
    $where = "WHERE concepto='".$pago."' ORDER BY cxl ASC";

ASI CADA UNA DE LAS CONDICIONES QUE SE GENEREN DENTRO DE LOS 3 CAMPOS


LO HABIA INTENTADO CREO DE ESTA MANERA

1
if ((empty($_POST["ciclo"])) and (empty($_POST["matricula"])) )

pero aun asi no me funciono , no se si halla alguna otra forma de condicionar estos tres campos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar