Mostrando las entradas con la etiqueta php. Mostrar todas las entradas
Mostrando las entradas con la etiqueta php. Mostrar todas las entradas

viernes, 6 de agosto de 2021

Crear archivo Xlsx con lista despegable sin límite de opciones

Crear documentos xlsx de hojas de cálculo con PHP y la librería PhpSpreadsheet es sencillo.

Para ello necesitamos descargar PhpSpreadsheet a nuestro proyecto:


composer require phpoffice/phpspreadsheet



Ahora creamos un nuevo documento de php con el siguiente código:

<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; $plantilla = new Spreadsheet(); $sheet = $plantilla->getActiveSheet(); $sheet->setCellValue('A1', 'Hola PhpSpreedsheet !');
$catalogos = $plantilla->createSheet(); $catalogos->setTitle('Catalogos');

$dc_array = ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
$column_array = array_chunk($dc_array, 1);
$catalogos->fromArray($column_array,NULL,'A2');
$validation = $sheet->getCell('B5')->getDataValidation(); $validation->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST);

$validation->setFormula1('Catalogos!A1:A100'); $validation->setAllowBlank(false); $validation->setShowDropDown(true); $validation->setShowInputMessage(true); $validation->setPromptTitle('Nota'); $validation->setPrompt('*Requerido'); $validation->setShowErrorMessage(true); $validation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP); $validation->setErrorTitle('Opción no válida'); $validation->setError('Seleccione una opción');

$writer = new Xlsx($spreadsheet); $writer->save('paginalista.xlsx');

?>



Creamos la plantilla del documento
$plantilla = new Spreadsheet();

Obtenemos la hoja activa $sheet = $plantilla->getActiveSheet();

Colocamos un comentario $sheet->setCellValue('A1', 'Seleccione su mes preferido');
Creamos una nueva hoja a la que llamaremos Catalogos donde colocaremos nuestros datos
que usaremos posteriormente
$catalogos = $plantilla->createSheet(); $catalogos->setTitle('Catalogos');

Creamos el arreglo de los datos a visualizar y los agregamos a la hoja de Catalogos
$dc_array = ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
$column_array = array_chunk($dc_array, 1);
$catalogos->fromArray($column_array,NULL,'A2');
Obtenemos la posición donde vamos a colocar el listado
$validation = $sheet->getCell('B5')->getDataValidation();

Indicamos el tipo de celda que nos permite usar los listados $validation->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST);

Colocamos el rango a utilizar en nuestra lista, el cual se encuentra en la hoja de Catalogos
$validation->setFormula1('Catalogos!A1:A100');

Asignamos valores para nuestro combo $validation->setAllowBlank(false); $validation->setShowDropDown(true); $validation->setShowInputMessage(true); $validation->setPromptTitle('Nota'); $validation->setPrompt('*Requerido'); $validation->setShowErrorMessage(true); $validation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP); $validation->setErrorTitle('Opción no válida'); $validation->setError('Seleccione una opción');
Generamos nuestro documento
$writer = new Xlsx($plantilla); $writer->save('ms.xlsx');


ejecutamos nuestro php

Así obtenemos nuestro archivo, al abrirlo podemos observar lo siguiente:



y nuestro listado desplegado



y en la pestaña de Catalogos tenemos nuestro listado



En algunos casos cuando intentamos poner datos del listado directamente en

$validation->setFormula1('"Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo"');

podemos llegar a encontrar un límite de uso en la longitud de la fórmula.
Por eso, colocamos los datos en otra hoja y los obtenemos a través de la referencia:

Catalogos!A1:A100

Espero les ayude y dejen sus comentarios.
¡Éxito!

viernes, 1 de enero de 2021

Warning: Invalid argument supplied for foreach() in EasyAdminExtension.php symfony 5 easyadmin

 Al intentar agregar EasyAdmin a Symfony 5 se presento el siguiente error:


Warning: Invalid argument supplied for foreach() in EasyAdminExtension.php


para resolverlo hay que ingresar a app/src/DependencyInjection/EasyAdminExtension.php y agregamos un valor por default = array() a $configs.


....

 private function processConfigFiles(array $configs = array())

    {

.....


grabamos y limpiamos caché y listo.

Fácil.

martes, 21 de abril de 2020

PHP Mysql PDOException: SQLSTATE[HY000] General error: 1267 Illegal mix of collations

PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

Este error se genera por que el resultado del valor de un campo en nuestra base de datos esta en una cotejamiento(collection) diferente al del dato con el cual lo comparamos.


Solución:

Cambiar el tipo de cotejamiento(collecion) de la tabla
En Mysql  utilizando phpmyadmin editamos el campo de la tabla donde tenemos el conflicto y colocamos el valor que deseamos, en mi caso cambio de latin1_swedish_ci  a utf8_general_ci y le das clic en guardar.



Saludos

sábado, 16 de marzo de 2019

Error de conexión a Mysql: Server sent charset (255) unknown to the client

Por algunas circunstancias formatee mi computadora con windows 10. Todo iba bien hasta que una vez instalado Mysql 8.0 CE; intente entrar a phpmyadmin y me regreso el siguiente error:

"mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers"

"mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers"


Buscando en internet nos comentan que se debe al cambio de configuración del chartset por default, entonces debemos ajustar configuración de nuestro mysql.

Solución

Editaremos el archivo de configuración my.cnf
El cual se debe encontrar en C:\ProgramData\MySQL\MySQL Server 8.0
Agregamos y/o modificamos las siguientes lineas:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci

character-set-server = utf8 


Una vez hecho esto, reinicien su servicio de Mysql

e ingresen a su aplicación o a su phpmyadmin

Enhorabuena, pueden utilizar su conexión de nuevo.


miércoles, 24 de octubre de 2018

Habilitar Mysql con php7-Apache2 en Ubuntu

Instale ubuntu 16 en un equipo para realizar unas pruebas con Apache2 y php7.2

Cuando quise utilizar mysql mostraba que no estaba podía realizar la conexión.

Entonces hice lo siguiente:


Primero, edite el archivo

$ sudo nano /etc/php/7.2/apache2/php.ini

descomente la línea (elimine ;):

extension=php_mysqli.so

Guarde sus cambios (CTRL+C)

Después necesitamos instalar la librería php-mysql

$ sudo apt install php-mysql

Se instalarán los siguientes paquetes NUEVOS:
  php-mysql php7.2-mysql

Para versiones de php7 se deben habilitar las extensiones, entonces ejecutamos:

$ sudo phpenmod mysqli

Reiniciamos el servicio de apache

$ sudo ./etc/init.d/apache2 stop
$ sudo ./etc/init.d/apache2 start

Si tenemos instalado phpmyadmin entonces podemos revisar la conexión

¡¡Funciona!!


jueves, 18 de octubre de 2018

Habilitar OPcache en PHP 5.5 o superior

Opcache es una tecnología muy usada actualmente para mejorar el rendimiento de un sitio web

Habilitar la librería es muy sencillo.

Primero hay que editar nuestro archivo php.ini que estamos usando con Apache

Agregamos la siguiente linea en la parte donde cargamos las extensiones:

#en mi caso tengo ubicado el php en la unidad D

zend_extension=D:\php\ext\php_opcache.dll


Después configuramos los siguientes valores, se recomienda revisar las especificaciones que usted necesite, estas digamos son las comunes:

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1



Ahora guardamos nuestro archivo php.ini

Si estamos en windows, copiamos el archivo php.ini a C:\windows\

Detenemos el servicio de Apache
y lo volvemos a iniciar.






Si todo esta correcto, nuestra extensión ha sido agregada.

Podemos usar un script y probar con php_info()



Saludos.

jueves, 11 de octubre de 2018

Mysql apache 2_4 php 5.6 Moodle 3.1 Error: database driver problem detected

Error: database driver problem detected

The site administrator should verify server configuration

PHP has not been properly configured with the MySQLi extension for it to communicate with MySQL. Please check your php.ini file or recompile PHP.


El anterior error ocurrió cuando cambie de php 7.0 a php 5.6

Anteriormente tenia el php 5, pero debido a requerimientos instale php 7.0 (necesitaba instalar drupal 8)

Sin embargo encontré un error en moodle 3.1 cuando quería agregar un nuevo curso 

$this no context 

La solución era migrar a moodle 3.2 pero como tengo personalizado algunas cosas y el servidor de producción del cliente esta con las características de 3.1, entonce la solución era volver a usar php 5.6. Al cargar la anterior configuración marcaba que no encontraba el driver de mysqli,
lo raro es que las demás extensiones si las cargaba menos la de mysqli.



Solución

Pues intentando varias cosas la solución fue poner de manera absoluta la ruta de la carpeta de extensiones.

Así que en el archivo php.ini modifique

 extension_dir = "d:\php\ext"

copie el archivo php.ini a c:\windows\

y reinicie el servicio de Apache 2


Ahora bien, por obvias razones, resolveré lo que tengo y regresaré a php 7.0 (actualmente ya solo trabajo con moodle 3.3 y drupal 8) pero esta solución permitirá que si lo necesitan puedan resolver su problema.

Saludos.

jueves, 21 de enero de 2016

Windows 10 + apache 2.4 y php 5.5



Actualmente Apache httpd se tiene que descargar de páginas alternativas donde lo han compilado.

Instalando apache 

Descargue desde: http://www.apachehaus.com/cgi-bin/download.plx

Descomprima en su pc, en mi caso renombro la carpeta para que sea mas fácil:

E:/servidor/Apache24

Edite el archivo Apache24/conf/httpd.conf  con los valores de la ruta de la carpeta donde se localiza apache

Define SRVROOT "E:/server/Apache24"

DocumentRoot "E:/server/www"
<Directory "E:/server/www">


guarde e inicie desde una consola y ejecute el archivo

Apache24/bin/httpd

Inicie su explorador y escriba en la barra de dirección

localhost

El empaquetado viene con una guía para mayor información.
(httpd-2.4.18-x64-vc11/readme_first.html)


Instalando PHP5

Intente descargar varias versiones de php pero la única que tiene la librería php5papache2_4.dll es la
php-5.5.5-Win32-VC11-x64.zip 
 

Descargue php 5 desde http://windows.php.net/downloads/releases/archives/ 
Descomprima y coloque en una ubicación adecuada

E:/servidor/php


Duplique el archivo php.ini-production como php.ini

Edite el archivo httpd.conf de apache para configurar su uso con php

Agrege y edite las siguientes líneas

LoadModule php5_module "E:/server/php/php5apache2_4.dll"

DirectoryIndex index.php index.html
AddType application/x-httpd-php .php

Guarde y reinicie apache

verifique en httpd://localhost con un archivo que tenga código php


Ejecutando  Apache como servicio


Para agregar apache como un servicio de windows y se ejecute desde el inicio, ejecute el siguiente comando desde la consola:

httpd.exe -k install -n "Apache24"

Ahora puede verificar en el administrador de servicios que Apache24 ha sido agregado.

Es todo, espero agregar el uso de mysql próximamente.

Saludos =)


viernes, 8 de mayo de 2015

EZPDF Centrar datos en columnas de las tablas de documentos PDF

Hace poco estaba realizando un reporte en pdf, para lo cual necesitaba listar datos en una tabla. Sin embargo, todas las columnas tenian el mismo ancho. El manual  PHP Pdf Creation de R&OS esta algo incompleto, así que buscando en internet por horas, encontré por casualidad como resolverlo.

La solución

El manejo de datos en EZPDF se hace mediante array
Para ello hay que pasarle los parametros al objeto que construye la tabla en la variable de opciones poniendo como clave de referencia cols que refiere a las columnas, y después describir el comportamiento de cada una de ellas a través de otro array. Es decir, es un array de arrays de opciones.


Ejemplo

$options['showHeadings'] =1;
$opcions['showlines'] = 1;
$options['shaded'] =1;
$options['shadeCol'] =array(0.81,0.84,0.9);
$opcions['shadeCol2'] = array(0.91,0.93,0.95);
$options['xPos'] ='left';
$options['xOrientation'] ='right';
$options['textCol'] = array(0,0,0);
$options['width'] =500;
$options['cols'] = array('col_num'=>array('justification'=>'center', 'width'=>30),'col_datos'=>array('justification'=>'left'),'col_total'=>array('justification'=>'center', 'width'=>100) );
$pdf->ezTable($data, $titles, '', $options);

Salida (Claro será en su documento pdf, esto es solo ilustrativo)


num datos total


Saludos

PHP Evaluar una expresión matemática (fórmula) almacenada en un string

En ocasiones hay datos almacenados en algún string con fórmulas que deseamos ejecutar en php, por ejemplo 2+4*6.  Una solución es recorrer el string caracter por caracter para comparar operadores, variables y elementos, pero eso nos llevaría un buen rato de programar.

La solución

Usar la función eval()

<?php
//php 4.3
$formula = "2+4*6";
eval(" $var = $formula; ");
echo $var;
?>


<?php
// php 5,6 y 7
$formula = "2+4*6";
$var = eval("return ".$formula.";");
print $var;

?>


Nuestra salida es 26


Así de fácil