Respuestas a las preguntas

Tuesday, June 13, 2006

PHP y variables globales

Hace un par de meses el amigo Alberto tuvo una sorpresa con PHP, a la cual penso en solicitar ayuda a Doctor Notes, aquí el problema:

Mi estimado Doctor Notes:

Como estas, ya no he sabido mas de ti, supongo que has de estar muy
ocupado. En fin, solo quiero pedirte un favor, es una aclaración
técnica:

en PHP

Cuando uno tiene activado las variables globales puede pasar las
variables fácilmente desde una liga mas o menos así:

<a href=\"services.php?pagina=support\">Support</a>

Donde servicies.php sería el template y la pagina support.php sería
el contenido

entonces en la página servicies.php incluía

include($pagina.".php");

y asunto arreglado, podía usar el mismo template varias veces y solo
variaba el contenido, pero resulta que por materia de seguridad,
ahora las variables globales (php.ini) se desactivan y estas ya no
pasan, ¿como debería de hacer para que siguiera manteniendo el
template y solo varía el contenido según la liga?.

Talvez no tengas ocasión de explicarlo tu, pero ¿sabes adonde me
puedo remitir?, el manual de php es inmenso....

Algo en lo que quiero hacer incapie es que el amigo Alberto tiene razón, el manual de php es inmenso y es un poco complicado encontrar algo de manera rápida y exacta.

La respuesta que se le hizo llegar fue la siguiente:

checate esta parte del manual

http://www.php.net/manual/en/language.variables.external.php
con $_GET, $_POST, $_REQUEST

tambien esta parte
http://www.php.net/manual/en/security.globals.php en el ejercicio
Example 29-3. Detecting simple variable poisoning

Con esto debe de quedar entendido.

Cuando tienes las variables globales en off, lo que harías según el ejemplo sería:

Haces la misma llamada de tu href <a href=\"services.php?pagina=support\">Support</a>

y para cachar la variable sería con
include($_GET['pagina'].".php");

Cuando mandas llamar una página por su URL se hace un get, asi que
todo lo que aparece después del signo ? en el url se almacenan como
variables en el arreglo de $_GET

Bueno, con esto quedo bien entendido y se resolvio el problema, aqui los dejo esperando mayor colaboración de su parte y tiempo para poder contestarle.

Saludos
Doctor Notes

3 Columnas en Una

Ok, yo se que he estado algo alejado de este espacio, pero afortunadamente he tenido mucho trabajo, pero ahora quiero retomar en un par de oportunidades para agregar algo más a este lugar de respuestas.

El otro día la amiga ALEJA me pregunto si existía alguna forma más fácil de juntar 3 columnas en excel, esto es, si tengo en la columna A el apellido paterno, en la columna B el apellido materno y en la columna C el nombre como le hago para que en la columna D aparezcan los tres juntos. En ese momento estaba un poco apurado y lo único que se me ocurrio decirle es que, porque no los guardaba como un archivo de texto (txt) y luego lo volvía a abrir con excel y le decía que el archivo era de ancho fijo y listo tendría todo en una columna. Ese mismo día más tarde recapacite de lo que le dije, tomandome un par de minutos para pensarlo recorde que existe una función para concatenar cadenas, así pues la respuesta es un poco más fácil de lo que había mencionado.

Inserta en la celda D1 la siguiente fórmula =CONCATENATE(C1," ",A1," ",B1) y listo, esta nos dara primero el nombre y después los apellidos, pero puedes utilizar el orden que necesites.

Como no todo en la vida es MS-Office, entonces la respuesta en OpenOffice.org, que es la misma =CONCATENATE(C1;" ";A1;" ";B1), y también funciona.

Saludos y hasta la próxima, esperando un reto mayor y mayor tiempo.

doctor notes



Nota agregada:

Pues resulta que la repuesta no le soluciono el problema a la amiga ALEJA, dado que su excel esta en español y sus benditas funciones no corren en inglés, asi que solo basta con cambiar el CONCATENATE por un CONCATENAR, así queda =CONCATENAR(C1;" ";A1;" ";B1) y listo.
También existe la forma de hacerlo insertando la función, en el menú insertar, opción función, y seleccionar en la categoría texto y ahi debe existir una función que haga referencia a la concatenación.