PHP - excel jtable

 
Vista:
sin imagen de perfil

excel jtable

Publicado por Rafael (5 intervenciones) el 06/04/2015 20:11:41
Estimados:

Tengo un problema con jtable al exportar a excel, he investigado la documentacion de jtable.org y la forma que sale ahi para exportar a excel no me ha servido por lo que lo implemente a mi manera crenado un formulario de busqueda. ahora bien todo me resulta a la perfeccion exporta a excel los datos que se encuentran en la base de datos al dar click en una imagen. el formulario de busqueda tambien ha funcionado sin problemas todo parace estar normal. ahora el problema esta en cuando filtro en el formulario de busuqeda y quiero exportar a un excel todos los datos filtrados, este me devuelve todos los datos de la base de datos y no lo que he filtrado cabe señalar que la consulta sql es la misma que use para filtrar por lo que deberia exportar los mismos datos que filtro pero no lo hace. es extraño ya que si pongo una palabra cualquiera en la sentencia like de la consuta resulta todo bien exporta los datos que contengan la palabra que se coloque en el like. espero me puedan ayudar les adjunto el codigo.

funcionarios.php

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
session_start();
	if($_SESSION['idrol'] == 2 || $_SESSION['idrol'] == 3 ){
	header("Location: home.php?error=".md5(4)."");
	}else{
?>
<html>
  <head>
    <link href="../themes/custom-theme/jquery-ui-1.10.4.custom.css" rel="stylesheet" type="text/css" />
	<link href="../scripts/jtable/themes/metro/blue/jtable.min.css" rel="stylesheet" type="text/css" />
    <link href="../css/estilos.css" rel="stylesheet" type="text/css" />
	<script src="../scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
    <script src="../scripts/jquery-ui-1.8.16.custom.min.js" type="text/javascript"></script>
    <script src="../scripts/jtable/jquery.jtable.js" type="text/javascript"></script>
    <!-- Import CSS file for validation engine (in Head section of HTML) -->
	<link href="../css/validationEngine.jquery.css" rel="stylesheet" type="text/css" />
	<!-- Import Javascript files for validation engine (in Head section of HTML) -->
	<script type="text/javascript" src="../js/jquery.validationEngine.js"></script>
	<script type="text/javascript" src="../js/jquery.validationEngine-es.js"></script>
 
 </head>
   <body>
     <form id="searchform">
     <table border="0">
     <tr>
      <td><a href="accionFuncionarios.php?action=export-excel"><img src="../img/Freeform-Excal-64.png" width="30px" height="30px" style="float:left;"/></a></td>
     <td><input type="text" name="parametro" id="parametro" placeholder="Ingrese aquí una búsqueda"/><button type="submit" id="LoadRecordsButton">Buscar</button></td>
        </tr>
        </table>
    </form>
   		</div>
	<div id="PeopleTableContainer" style="width:auto;"></div>
		<script type="text/javascript">
			$(document).ready(function () {
			   //Prepare jTable
			$('#PeopleTableContainer').jtable({
	      		title:'Tabla de Funcionarios',
				paging: true,
				pageSize: 14,
				sorting: true,
				defaultSorting: 'nombres ASC',
				actions: {
					listAction: 'accionFuncionarios.php?action=list',
					createAction: 'accionFuncionarios.php?action=create',
					updateAction: 'accionFuncionarios.php?action=update',
					deleteAction: 'accionFuncionarios.php?action=delete'
				},
				fields: {
					rut: {
						title: 'Rut',
						key: true,
						edit: true,
						list: true,
						width: '15%',
						inputClass: 'validate[required]'
					},
					nombres: {
						title: 'Nombres',
						width: '15%',
						inputClass: 'validate[required]'
					},
					apellidos: {
						title: 'Apellidos',
						width: '15%',
						inputClass: 'validate[required]'
					},
					correo: {
						title: 'Correo',
						width: '17%',
						inputClass: 'validate[required,custom[email]]'
					},
					telefono : {
						title: 'Teléfono',
						width: '15%',
						inputClass: 'validate[required,custom[phone]]'
					},
					estado: {
                    	title: 'Estado',
                    	width: '10%',
                    	type: 'checkbox',
						setOnTextClick: false,
                    	values: { 'false': 'Inactivo', 'true': 'Vigente' },
                    	defaultValue: 'true'
 
					}
 
				},
 
            //Initialize validation logic when a form is created
           formCreated: function (event, data) {
                data.form.validationEngine();
            },
            //Validate form when it is being submitted
            formSubmitting: function (event, data) {
                return data.form.validationEngine('validate');
            }
			});
			$("#searchform").appendTo(".jtable-title").addClass('filter_class');
 
			  $('#LoadRecordsButton').click(function (e) {
       			 e.preventDefault();
       			 $('#PeopleTableContainer').jtable('load', {
           		 parametro: $('#parametro').val(),
        });
    });
 $('#LoadRecordsButton').click();
			//Load person list from server
			//$('#PeopleTableContainer').jtable('load');
			jQuery("#jtable-create-form").validationEngine();
});
	</script>
  </body>
</html>
 
<?php
}
?>


accionFuncionarios.php

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<?php
 
try
{
	//Open database connection
	$con = mysql_connect("localhost","root","");
	mysql_select_db("laboratorios", $con);
	mysql_query ("SET NAMES 'utf8'");
 
	$parametro= $_POST['parametro'];
 
	switch ($_GET["action"]) {
    case 'list' :
			if($parametro==""){
				//Get record count
				$result = mysql_query("SELECT COUNT(*) AS RecordCount FROM funcionario;");
				$row = mysql_fetch_array($result);
				$recordCount = $row['RecordCount'];
 
				//Get records from database
				$result = mysql_query("SELECT * FROM funcionario ORDER BY " . $_GET["jtSorting"] . " LIMIT " . $_GET["jtStartIndex"] . "," . $_GET["jtPageSize"] . ";");
				}else{
 
				$result = mysql_query("SELECT COUNT(*) AS RecordCount FROM funcionario WHERE nombres like '%".$parametro."%' OR rut like '%".$parametro."%';");
				$row = mysql_fetch_array($result);
				$recordCount = $row['RecordCount'];
 
				$result = mysql_query("SELECT * FROM funcionario WHERE nombres like '%".$parametro."%' OR rut like '%".$parametro."%' OR apellidos like '%".$parametro."%' ORDER BY " . $_GET["jtSorting"] . " LIMIT " . $_GET["jtStartIndex"] . "," . $_GET["jtPageSize"] . ";");
 
				}
				//Add all records to an array
				$rows = array();
				while($row = mysql_fetch_array($result))
				{
		 		   $rows[] = $row;
				}
				//Return result to jTable
				$jTableResult = array();
				$jTableResult['Result'] = "OK";
				$jTableResult['TotalRecordCount'] = $recordCount;
				$jTableResult['Records'] = $rows;
				print json_encode($jTableResult);
 
				break;
 
	case 'create':
 
				//Insert record into database
				$result = mysql_query("INSERT INTO funcionario(rut, nombres, apellidos, correo, telefono, estado) VALUES('" . $_POST["rut"] . "', '".$_POST["nombres"]. "', '".$_POST["apellidos"]. "', '".$_POST["correo"]. "', '".$_POST["telefono"]. "' , '".$_POST["estado"]."');");
 
				//Get last inserted record (to return to jTable)
				$result = mysql_query("SELECT * FROM funcionario WHERE rut = '".$_POST["rut"]."';");
				$row = mysql_fetch_array($result);
 
				//Return result to jTable
				$jTableResult = array();
				$jTableResult['Result'] = "OK";
				$jTableResult['Record'] = $row;
				print json_encode($jTableResult);
 
      			break;
 
 
	//Exporting to Excel
 
	//Creating a new record (createAction)
 
	//Getting records (listAction)
 
 
	//Updating a record (updateAction)
 
	case 'update':
 
		//Update record in database
				$result = mysql_query("UPDATE funcionario SET rut = '" . $_POST["rut"] . "', nombres = '" . $_POST["nombres"] . "', apellidos = '" . $_POST["apellidos"] . "', correo = '" . $_POST["correo"] . "', telefono = '" . $_POST["telefono"] . "', estado = '" . $_POST["estado"] . "' WHERE rut = '" . $_POST["rut"] . "';");
				//Return result to jTable
				$jTableResult = array();
				$jTableResult['Result'] = "OK";
				print json_encode($jTableResult);
 
				break;
 
	case 'delete':
			//Deleting a record (deleteAction)
			//Delete from database
			$result = mysql_query("DELETE FROM funcionario WHERE rut = '" . $_POST["rut"] . "';");
 
			//Return result to jTable
			$jTableResult = array();
			$jTableResult['Result'] = "OK";
			print json_encode($jTableResult);
 
 
	case 'export-excel':
 
		$result = mysql_query("SELECT * FROM funcionario WHERE rut like '%".$parametro."%' OR nombres like '%".$parametro."%' OR apellidos like '%".$p."%';");
 		$registros = mysql_num_rows ($result);
 
 		if ($registros > 0) {
 
   			require_once '../PHPExcel/PHPExcel.php';
   			$objPHPExcel = new PHPExcel();
 
   //Informacion del excel
  			 $objPHPExcel->
   				 getProperties()
      			  	->setCreator("sislab")
					->setLastModifiedBy("sislab")
					->setTitle("Exportar excel desde mysql")
					->setSubject("Funcionarios")
					->setDescription("Documento generado con PHPExcel")
					->setKeywords("sislab  con  phpexcel")
					->setCategory("nombres");
 
						 $objPHPExcel->getDefaultStyle()->getFont()->setName('Arial Narrow');
						 $objPHPExcel->getDefaultStyle()->getFont()->setSize(10);
						 $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(20);
 
						 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
						 $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
						 $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
						 $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(40);
						 $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(10);
 
				 $i = 1;
				 $objPHPExcel->setActiveSheetIndex(0)
				 ->setCellValue("A" .$i, 'Rut')
				 ->setCellValue("B" .$i, 'Nombres')
				 ->setCellValue("C" .$i, 'Apellidos')
				 ->setCellValue("D" .$i, 'Correo')
				 ->setCellValue("E" .$i, 'Telefono');
 
					 $objPHPExcel->getActiveSheet()
					 ->getStyle('A1:E1')
					 ->getFill()
					 ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
					 ->getStartColor()->setARGB('FFEEEEEE');
 
						$borders = array(
								'borders' => array(
									'allborders' => array(
										'style' => PHPExcel_Style_Border::BORDER_THIN,
										'color' => array('argb' => 'FF000000'),
										)
									),
								);
 
						$objPHPExcel->getActiveSheet()
						->getStyle('A1:E1')
						->applyFromArray($borders);
 
				   while ($registro = mysql_fetch_object ($result)) {
							$i++;
					  $objPHPExcel->setActiveSheetIndex(0)
							->setCellValue('A'.$i, $registro->rut)
							->setCellValue('B'.$i, $registro->nombres)
							->setCellValue('C'.$i, $registro->apellidos)
							->setCellValue('D'.$i, $registro->correo)
							->setCellValue('E'.$i, $registro->telefono);
   }
}
$fecha= date('d_m_y');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="Funcionarios"'.$fecha.'".xlsx"');
header('Cache-Control: max-age=0');
 
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
$objWriter->save('php://output');
exit;
 
break;
 
	}
	//Close database connection
	mysql_close($con);
}
catch(Exception $ex)
{
    //Return error message
	$jTableResult = array();
	$jTableResult['Result'] = "ERROR";
	$jTableResult['Message'] = $ex->getMessage();
	print json_encode($jTableResult);
}
 
?>

atento a sus comentarios.


no tengo problemas en pasar el codigo. esperando una soluciona a este tema desde ya les agradezco
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 Alberto
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

excel jtable

Publicado por Alberto (351 intervenciones) el 07/04/2015 01:13:46
Hola...

Siento que tu problema radica en el result ya que al declarar simultáneamente dicha variable pero con consultas diferentes, posiblemente te la esta tomando en ese orden o eso quiero creer.

Intenta realizar un switch para que de esta forma sepas en que caso se va a declarar la variable con la consulta necesaria.

Cualquier duda y/o comentario, aquí estamos. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

excel jtable

Publicado por Rafael (5 intervenciones) el 07/04/2015 02:54:23
Hola alberto primero que todo gracias por responder. estuve revisando lo que me dijiste pero en que parte especificamente tendria que poner el switch ? ya que si vez el codigo hice uno pero no resulta, tbn lo pobe con el siclo iterativo "IF" pero no tuve exito, es muy extraño ya que en el case"list" ocupo la variable "parametro" para filtrar y funciona perfectamente pero en el case "export-excel" no la recepciona y el excel muestra todos los funcionarios registrados en la tabla y no los que he filtrado es como que si en la consulta del case: "export-excel" hubiera la siguiente consulta "SELECT * FROM funcionario". y no toma en cuenta la variable $parametro.
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
Imágen de perfil de Alberto
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

excel jtable

Publicado por Alberto (351 intervenciones) el 07/04/2015 03:31:20
Hola...

Eh de suponer que la consulta que va a tener $result depende del resultado que tenga $parametro, o de acuerdo a tu lógica, ¿Como sabes que consulta va en cada caso? ya que lo único que veo es que una validación para $parametro si esta vació, dependiendo de esta validación lo llenas con consultas, pero en resumen, no veo claro donde le dices que tome tal consulta...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

excel jtable

Publicado por Rafael (5 intervenciones) el 07/04/2015 13:24:36
hola alberto. efectivamente hay un IF que pregunta si la caja de texto "parametro" viene vacia entonces que me liste en el jtable todos los funcionarios que estan en la base de datos. de lo contrario si el usuario le ingresa algun valor a la caja de texto entonces que liste todos los funcionarios que coincidan con el parametro que ingreso el usuario. para esto se ocupo la sentencia "like" en la consulta sql. ahora bien, en la funcion:

1
2
3
4
5
$('#LoadRecordsButton').click(function (e) {
    e.preventDefault();
    $('#PeopleTableContainer').jtable('load', {
    parametro: $('#parametro').val(),
});

se envia el valor del parametro por medio de javascript en cual es recepcionado por $_POST en el archivo accionFuncionarios.php. donde en el listar no tiene problemas para reconocer el parametro ya que lista a los funcionarios dependiendo de los valores ingresados por el usuario. existe una imagen en el formulario:

1
2
3
4
5
6
7
8
<form id="searchform">
     <table border="0">
     <tr>
      <td><a href="accionFuncionarios.php?action=export-excel"><img src="../img/Freeform-Excal-64.png" width="30px" height="30px" style="float:left;"/></a></td>
     <td><input type="text" name="parametro" id="parametro" placeholder="Ingrese aquí una búsqueda"/><button type="submit" id="LoadRecordsButton">Buscar</button></td>
        </tr>
    </table>
</form>

donde se envia por $_GET la accion a la cual debe acudir al hacer click, en este caso es export-excel ,es ahí en esa acción donde el parámetro que se envía por $_POST ***parametro: $('#parametro').val(),*** no lo recepciona, yo no se si sera por el javascript o la forma de enviarlo. jtable trabaja las variables de esta forma lo cual no me desagrada pero me parece extraño que el parametro lo recepcione bien en una consulta y no en la otra.

saludos alberto.
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
Imágen de perfil de Alberto
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

excel jtable

Publicado por Alberto (351 intervenciones) el 07/04/2015 18:38:13
Hola...

Podríamos intentar darle una mejor estructura a tus consultas para que de esa forma no le cueste tanto al lenguaje interpretar que consulta debe tomar de acuerdo a lo que recibe $parametro, te proporciono un ejemplo sencillo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$parametro=$_POST['parametro'];
$query = "";
 
if($parametro == ''){
	$query = "QUERY 1";
} else if($parametro == 'VALOR1'){
	$query = "QUERY 2";
} else if($parametro == 'VALOR2'){
	$query = "QUERY 3";
} else if($parametro == 'VALOR3'){
	$query = "QUERY 4";
}
$result=mysqli_query($conexion,$query);
while($line = mysqli_fetch_array($result)){
	echo "VALOR 1: ".$line[0]."VALOR 2".$line[1];
}

Veamos... Capturamos el valor de parámetro en una variable con el mismo nombre, tenemos una variable extra la cual es la contendrá la consulta que necesitamos, por lo que entendí las consultas dependen del valor de parámetro, por lo tanto hacemos un else if en donde asigna una consulta especifica para cada valor en especifico, posteriormente, realizamos la consulta a través del método mysqli_query() (La razón del porque uso este método y no el tradicional se debe a que mysql_query() esta siendo obsoleto, sino es que ya se convirtió totalmente obsoleto). Ahora, es importante que cuando nosotros hacemos uso del método mysqli_fetch_array() ya no es necesario pasar el resultado a un arreglo como pude observar en tu código, la razón se debe a que este método automáticamente nos devuelve un array por lo es innecesario ese línea de código que implementas. Finalmente, solamente es cuestión de imprimir el resultado tal y como se muestra en el ejemplo, en este caso, solo es cuestión de ir recorriendo el resultado para que se valla exportando a excel.

Te proporciono una liga con este tema para mayor compresión del mismo. Estoy seguro que si combinas ambos códigos lograras tu objetivo.

http://www.ingenieroweb.com.co/exportar-datos-desde-mysql-excel-con-php

Cualquier duda y/o inconveniente aquí estamos. Suerte!

P.D. Recuerda cerrar la conexión siempre :)
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