El lenguaje PHP (cuyo nombre es acrónimo de PHP:
Hipertext Preprocessor) es un lenguaje interpretado con una
sintaxis similar a la de C++ o JAVA. Aunque el lenguaje se puede
usar para realizar cualquier tipo de programa, es en la generación
dinámica de páginas web donde ha alcanzado su máxima popularidad.
En concreto, suele incluirse incrustado en páginas HTML (o XHTML),
siendo el servidor web el encargado de ejecutarlo.
Algunas de las características de su enorme popularidad son:
Es un lenguaje libre. Puede descargarse de http://www.php.net.
Está disponible para muchos sistemas (GNU/Linux, Windows, UNIX,
etc).
Tiene una extensa documentación oficial en varios idiomas
(disponible libremente en http://www.php.net).
Existen multitud de extensiones: para conectar con bases de
datos, para manejo de sockets, para generar documentos PDF, para
generar dinámicamente páginas.
Al ejecutarse en el servidor, los programas PHP lo pueden usar
todo tipo de máquinas con todo tipo de sistemas operativos.
En caso de que un cliente falle (por error hardware, virus,
etc) se puede seguir usando el sistema desde otro cualquiera que
tenga un navegador web con conexión al servidor.
Inclusión de
código PHP en una página HTML
Para incluir código PHP basta con
precederlo de la etiqueta <?php, y cerrarlo con ?>. Si el
servidor web está correctamente configurado, detectará código
PHP y, en vez de proporcionarle el contenido de la página
directamente al cliente (lo que significaría que recibiría el
código fuente del programa), ejecuta el programa y devuelve su
resultado al navegador.
Así pues, el esquema de una petición sería como sigue:
Primeros programas en PHP
Las explicaciones de sintaxis serán mínimas,
pues (salvo que se indique lo contrario) la sintaxis es
idéntica a la de C.
Los nombres de variables en PHP comienzan
por un carácter y van seguidos de números y caracteres sin
espacios. Para hacer referencia a una variable debemos
anteponer a su nombre el símbolo de ($). Los tipos básicos
son:
Entero: número entero con signo
Flotante: número decimal con signo
Booleano: vale true o false
Cadena de caracteres: cadena de caracteres delimitada por
comillas.
Las comillas simples interpretan el texto literalmente,
mientras que las dobles sustituyen las variables.
No es necesario declarar las variables, simplemente el
intérprete averiguará el tipo de dato que almacenará y se
declarará automáticamente. Si es necesaria una conversión de
tipos, al igual que en C, se puede anteponer el tipo al que se
desea promocionar entre paréntesis.
Los comentarios pueden ser de dos tipos:
Para comentarios de unas sólo línea (o parte de ella) se
pueden usar indistintamente // o #, que comentan todo lo que
se encuentre a continuación de ellos hasta el fin de la línea.
Si se desean comentario de varias líneas, se abren con /* y
se cierran con */
Para imprimir en pantalla se puede usar la orden echo o
print:
La orden echo es muy similar a la de shell Bash. Recibe
como primer y único parámetro una cadena. Esa cadena, si está
entre comillas simples, se imprimirá literalmente. Si por el
contrario deseamos que se sustituyan las variables que
contenga por sus valores hay que usar comillas dobles.
Por ejemplo, $cant=8; echo 'Son $cant pesos'; dará como
resultado Son $cant pesos. Pero $cant=8; echo "pesosSon $cant
"; imprimirá Son 8 pesos. Como se observa, las órdenes
PHP van terminadas por el carácter ;
Por el contrario, la orden print recibe sus parámetros entre
paréntesis. Es una orden que admite muchos más parámetros y
opciones. Una de sus principales diferencias es que evalúa su
parámetro y después lo imprime. Por ejemplo echo "doble(8)" da
doble(8), pero print(doble(8)) da 16.
Las diferencias son pequeñas: echo no tiene
valor de retorno mientras que print tiene un valor de retorno
de 1 por lo que puede usarse en expresiones. echo puede tomar
múltiples parámetros (aunque dicho uso es raro) mientras que
print puede tomar un argumento. El echo es marginalmente más
rápido que la impresión. Y por esta razón se utiliza mas echo.
¿Por qué Aprender PHP?
PHP se ejecuta en varias plataformas
(Windows, Linux, Unix, Mac OS X, etc.)
PHP es compatible con casi todos los servidores utilizados hoy
en día (Apache, IIS, etc.)
PHP soporta una amplia gama de bases de datos
PHP es gratis.
PHP es fácil de aprender y se ejecuta eficientemente en el
lado del servidor
PHP es un lenguaje de scripts del lado del servidor que se usa
principalmente para crear páginas web dinámicas. Verás al PHP
haciendo cosas como generar contenido interactivo, recolectar
datos de formularios, enviar información a los visitantes y
autenticar a los usuarios. También es la columna vertebral de
WordPress y sus plugins, que añaden todo tipo de funciones
únicas al CMS (Content Management
System, en español Sistema de Gestión de Contenidos. En
síntesis, un CMS te permite crear, organizar, publicar y
eliminar contenidos de tu sitio web.) Puedes
hacer casi cualquier cosa con PHP.
También es generalmente muy fácil de dominar y un buen
lenguaje de inicio para los nuevos desarrollos. Si tienes
conocimientos de programación, deberías aprenderlo. Pero
incluso a los principiantes tampoco les costará mucho navegar
por los inicios del PHP.
Y si te sumerges en desarrollo de WordPress, PHP es una
necesidad. Se requiere para modificar WordPress o escribir
temas y plugins, y es el núcleo de todo el CMS. HTML, CSS y
JavaScript son también lenguajes a tener en cuenta, pero
ninguno es tan integral para WordPress como PHP.
La última razón para aprender PHP: al igual que otros
lenguajes de programación, tiene un una enorme comunidad y una
tonelada de recursos gratuitos. Eso significa que tienes
muchos lugares a los que acudir para pedir ayuda, intercambiar
ideas y descargar software gratuito o encontrar guías útiles.
Ejercicio 1
Mostrare el primer ejercicio que permite
mostrar un mensaje en el navegador, el archivo debería de tener
la extensión .php, el codigo html estara en la parte principal
del diseño de la pagina, la cuestión importante aquí es como se
explico php se ejecuta desde el servidor WEB, si que este
archivo debe estar en el directorio, donde reside la información
del servidor WEB en el caso de LINUX se encuentra en
/var/www/html, en la unidad de Gestion de Sistemas
Operativos y Virtualizacion esta el procedimiento para
crear un servidor WEB, para el caso de WAMPSERVER versión para
windows el directorio esta en la ruta por defecto tiene la
carpeta www dentro del mismo directorio donde se instala wamp.
En c:/wamp64/www y es en este lugar donde estarán tus ejercicios
de php, y los solicitaras usando 127.0.0.1/ejercicio..
o bien localhost/ejercicio ... ,
cualquiera de las 2 maneras es valido si no funciona, debes
asegurarte que wamp server este en funcionamiento, es posible
que te interese cambiar o mover este directorio donde se
alojaran tus proyectos fuera de la carpeta wamp.
Si quieres cambiar el directorio de www, en
windows tienes que editar los archivo de tu versión de apache:
httpd-vhosts.conf y httpd.conf:
1. httpd-vhosts.conf
Situado en:
C:\wamp64\bin\apache\apache2.x.xx\conf\extra\httpd-vhosts.conf
Posiblemente tengas una ruta similar a esta: C:/wamp64/www y va
a cambiarla a: C:/www
ServerName localhost
DocumentRoot D:/www
<Directory "C:/www/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
Hay que editar esas 2 rutas o las que tu tengas
por la nueva donde lo quieres mover.
2. httpd.conf
Situado en: C:\wamp64\bin\apache\apache2.x.xx\conf\httpd.conf
Cambiamos la ruta: ${INSTALL_DIR}/www por la nueva: C:/www
DocumentRoot "C:/www"
<Directory "C:/www/">
index.php
Y por último el index.php que carga el wamp en el raíz del
directorio www. Hay que editar la nueva ruta en la variable
$server_dir:
$server_dir = "C:/www/";
Cualquiera que sea la ruta deberán de tener activo
wampserver para poder usar los ejemplos que se explican aquí,
si lo cierras este dejara de funcionar, esto es solo para
windows.
En nuestro primer ejemplo usaremos la instrucción echo para
mostrar un texto, en primer lugar debemos de indicar en el
código html que llevara una sentencia en php, y es poner las
etiquetas <?php ... ?> para que sea
interpretado con el PHP, lo que debes de no olvidar es que el
código de PHP se ejecuta desde el servidor WEB.
ejercicio1-php.php
<!DOCTYPE html>
<html>
<head>
<title>Como poner código PHP en HTML
Ejercicio 1</title>
</head>
<body>
<h1><?php echo
"Este mensaje es desde PHP, se realiza con el servidor WEB
configurado" ?></h1>
</body>
</html>
En LINUX: Ya realizado pasarlo al directorio /var/www/html y ahí
le das derechos de root para propietario y grupo.
y lo puedes "ejecutar" con lo siguiente
localhost/ejercicio1-php.php el navegador lo presentara como:
http://localhost/ejercicio1-php.php
el resultado de esto se ve así:
Las etiquetas son las ya conocidas en HTML, la gran diferencia
es la extension .php y que este código debe estar en el directorio
que corresponde al servidor WEB
Para el caso de Windows es lo mismo solo que solo copia el
archivo .php a c:/wamp64/www y en el navegador le escribes los
mismo que en LINUX, localhost/ejercicio1-php.php
Cuando intentes ejecutar el código, si no esta en ejecucion del
WAMP server se vera este error:
se requiere que tengas en ejecución el WAMP server
ejercicio1a-php.php
Revisemos que hace este código
<!DOCTYPE html>
<html>
<head>
<title>Como obtener informacion desde PHP
en HTML Ejercicio 1a</title>
</head>
<body>
<?php echo
$_SERVER["HTTP_USER_AGENT"]; ?>
</body>
</html>
Resultado:
Prueben con diferentes navegadores y la información que presenta
en Windows, aquí esta en un servidor con LINUX.
ejercicio1b-php.php
<!DOCTYPE html>
<html>
<head>
<title>Como obtener informacion desde PHP
en HTML Ejercicio 1b</title>
</head>
<body>
<?php
if (strstr($_SERVER["HTTP_USER_AGENT"],
"MSIE")) {
echo "Está usando Internet Explorer<br>";}
else {
echo "No está usando Internet
Explorer";
}
?>
</body>
</html>
´ es la forma de establecer los acentos en la vocal a
&ecute; para la e
&icute; para la i
&ocute; para la o
&ucute; para la u
y la tilde a la Ñ y ñ
Ñ para Ñ
ñ para ñ
La función llamada strstr().
Es integrada de PHP que busca un cadena dentro
de otra cadena más larga. En el caso anterior estamos buscando
"MSIE" dentro de $_SERVER["HTTP_USER_AGENT"]. Si la cadena fue
encontrada, la función devolverá
verdadero ("TRUE"), la declaración "if" se evalúa a verdadero
("TRUE") y el código adentro de las
llaves {} es ejecutado. De otra manera no resulta ejecutado.
Resultado:
Complementado esto :
Los
comentarios pueden ser de dos tipos:
Para comentarios de unas sólo línea (o parte de
ella) se pueden usar indistintamente // o #, que comentan todo lo
que se encuentre a continuación de ellos hasta el fin de la línea.
Si se desean comentario de varias líneas, se abren con /* y se
cierran con */. Para presentar en pantalla se puede usar la orden
echo o print
Los comentarios de una sola línea son útiles
para crear notas cortas antes de un bloque de código, o bien para
explicar líneas del mismo. Si solo quieres incluir pocas palabras,
ubicar dos diagonales (//) seguidas de tu comentario. Todo lo que
aparezca del lado derecho de las diagonales será ignorado al
correr el programa. También puedes usar el símbolo (#) para
cumplir con el mismo objetivo.
echo "Este mensaje será mostrado al usuario."; //
Este es usado en el final de linea
echo “Esto será mostrado.”; # Este es lo mismo que la linea
anterior
// echo “Esto no será mostrado al usuario.”;
# echo “Esto tampoco.”;
/* Esto es un comentario
multilinea */
La orden echo es muy similar a la de
shell Bash. Recibe como primer y único parámetro una cadena. Esa
cadena, si está entre comillas simples, se imprimirá literalmente.
Si por el contrario deseamos que se sustituyan las variables que
contenga por sus valores hay que usar comillas dobles.
Por ejemplo, $cant=8; echo 'Son $cant euros';
dará como resultado Son $cant euros. Pero $cant=8; echo "Son $cant
euros"; imprimirá Son 8 euros. Como se observa, las ordenes PHP
van terminadas por el carácter (;)
Ejercicio 2
Por el contrario, la orden print recibe sus
parámetros entre paréntesis. Es una orden que admite muchos más
parámetros y opciones. Una de sus principales diferencias es que
evaluar su parámetro y después lo imprime. Por ejemplo echo
"doble(8)" da doble(8), pero print(doble(8)) da 16.
las variables string se definen con $variable como $nombre_alum
Las variables siempre deberían tener un nombre descriptivo sobre
lo que ellas van a almacenar. Por tanto, al nombre de una variable
en PHP le colocaremos el símbolo $.
Tipos
de datos en PHP
Dependiendo de la información que contenga, una variable puede
ser considerada de uno u otro tipo:
Variables numéricas
Este tipo de variables almacena cifras, números, que pueden
tener dos clasificaciones distintas:
Enteros $entero=2002; Numeros sin decimales
Reales $real=3.14159; Numeros con o sin decimal
Solo el valor que llevan cada variable no se ha definir tipo de
dato numerico.
Variables alfanuméricas
Este tipo de datos almacena textos compuestos, cadenas de
caracteres, que pueden contener letras, símbolos y números o
cifras.
Este tipo de variables almacena un valor lógico, que puede valer
verdadero o falso. Es muy común en la programación este tipo de
variables boleanas.
Boleano verdadero $verdadero = true;
Boleano falso $falso = false;
Matrices, tablas o arrays
Es un tipo de datos en el que, en lugar de tener
un dato, podemos almacenar un conjunto de ellos, a los que
accedemos a través de índices. Cada una de las casillas de un
array o los datos de nuestra matriz a su vez almacenan
informaciones numéricas y/o alfanuméricas, pudiendo mezclar tipos
de variables de manera arbitraria entre sus distintas casillas.
Arrays Son las variables que guardan las tablas
$sentido[1]="ver"; $sentido[2]="tocar";
Más adelante encontrarás capítulos enteros dedicados a los
arrays en PHP.
Objetos
Se trata de conjuntos de variables y funciones
asociadas. Presentan una complejidad mayor que las variables
vistas hasta ahora pero su utilidad es más que interesante.
Entraremos con detalle en los objetos más adelante, ya que su
complejidad hace difícil explicarlas ahora.
Estan 2 variables string $ini = "Hola ";
y $fin = " a todos"; y se
concatenan en $todo = $ini.$fin; las
2 cadenas cadenas con el operador punto (.) e imprimir su
resultado con echo.
A diferencia de otros lenguajes, PHP posee una gran
flexibilidad a la hora de operar con variables. Cuando definimos
una variable asignándole un valor, el ordenador le atribuye un
tipo. Si por ejemplo definimos una variable entre comillas, la
variable será considerada de tipo cadena:
$variable="5"; //esto es una cadena
Sin embargo, si pedimos en nuestro script realizar una
operación matemática con esta variable, no obtendremos un
mensaje de error sino que la variable cadena será asimilada a
numérica (PHP hará todo lo posible por interpretar nuestra
operación, aunque técnicamente no tenga mucho sentido hacer
determinadas operaciones):
<?php
$cadena="5"; //esto es una cadena
$entero=3; //esto es un entero
echo $cadena+$entero
?>
Este script dará como resultado "8". La variable
cadena ha sido asimilada en entero (aunque su tipo sigue siendo
cadena) para poder realizar la operación matemática. Del mismo
modo, podemos operar entre variables tipo entero y real. No
debemos preocuparnos de nada, PHP se encarga durante la ejecución
de interpretar el tipo de variable necesario para el buen
funcionamiento del programa.
PHP es sensible
a las mayúsculas y minúsculas
PHP entiende de manera distinta las mayúsculas y minúsculas.
En el caso del nombre que le damos a una variable, no es lo
mismo escribirla con mayúscula o minúscula, o mezclando
mayúsculas y minúsculas de distinta manera. Por tanto, hay que
tener mucho cuidado a la hora de escribir los nombres de
variables, y no cambiar mayúsculas por minúsculas, ya que PHP
entenderá dos variables distintas aunque nosotros podamos
intentar referirnos a la misma.
Cuando estamos empezando quizás sea un buen consejo trabajar
asignando nombres a las variables siempre en minúsculas, para
evitar este tipo de malentendidos a veces muy difíciles de
localizar.
En el caso que tengamos una variable con un nombre compuesto
de varias palabras, en PHP es una práctica común colocar la
variable toda en minúscula y separar las palabras por guiones
bajos.
<?php $mi_variable = "me gusta PHP" ?
Variables asignadas por referencia
En PHP también podemos asignar variables por
referencia, aunque a decir verdad no es una caracerística que se
use mucho. En ese caso no se les asigna un valor, sino otra
variable, de tal modo que las dos variables comparten espacio en
memoria para el mismo dato.
La notación para asignar por referencia es
colocar un "&" antes del nombre de la variable.
<?php
$foo = 'Bob'; // Asigna el valor 'Bob' a $foo
$bar = &$foo; // Referencia $foo vía $bar.
$bar = "Mi nombre es $bar"; // Modifica $bar...
echo $foo; // $foo también se modifica.
echo $bar;
?>
Esto dará como resultado la visualización dos veces del string
"Mi nombre es Bob". Algo como:
Mi nombre es BobMi nombre es Bob
PHP no requiere que indiquemos el tipo que va a
contener una variable, sino que lo deduce del valor que asignemos
a la variable. Asimismo, se encarga de actualizar automáticamente
el tipo de la variable cada vez que le asignamos un nuevo valor.
Esto es básicamente lo que se llama "tipado dinámico" o "tipado
débil", característica no sólo de PHP, sino de muchos otros
lenguajes.
Por ello, para cambiar el tipo de una variable
simplemente le asignamos un valor con un nuevo tipo.
$var1 = 'esto es una cadena';
$var = 34 //La variable $cadena cambió de tipo
Forzado
Variar el tipo de datos que contiene una
variable con el tiempo es una cosa que no siempre es aconsejable,
porque si no tenemos certeza de si una variable contiene un dato
de un tipo u otro, a veces los resultados obtenidos pueden no ser
los esperados.
Para evitar problemas en muchas ocasiones se puede realizar el
forzado de una variable a un tipo en concreto, de manera
explícita, lo que nos permitirá saber que cuando llega el flujo
del programa a un punto dado, aquella variable tendrá el tipo de
datos esperado.
En PHP existen diversas maneras de forzar una variable a un
tipo.
Podemos forzar una variable para que cambie de tipo con la
función settype().
settype($variable,"nuevo_tipo");
la función setType() actualiza el tipo de $variable a
"nuevo_tipo" y devuelve un boleano
indicando si hubo éxito o no en la conversión.
Entre "nuevo_tipo" tenemos:
"integer"
"double"
"string"
"array"
"object"
Casting de variables
Hay otra manera de realizar un forzado, para que
una variable se comporte como un tipo determinado. Ahora vamos a
ver otro mecanismo de forzado que es similar al de otros lenguajes
como C o Java.
$variable = "23"; $variable
= (int) $variable;
Los forzados permitidos son:
(int), (integer) - fuerza a entero (integer)
(real), (double), (float) - fuerza a número con decimales (coma
flotante)
(string) - fuerza a cadena (string)
(array) - fuerza a array (array)
(object) - fuerza a objeto (object)
(unser) - fuerza a null
(binary) - fuerza a "binary string"
Variables
En este ejercicio usaremos lo visto anteriormente con las
variables asignadas de tipo numérico, un aspecto interesante es "<br>", puedes deducir que hace
aquí ?
Mostrar en pantalla una tabla de 10 por 10 con los números del
1 al 100
A menudo, cuando escribe código, desea que el mismo bloque de
código se ejecute una y otra vez una determinada cantidad de
veces. Entonces, en lugar de agregar varias líneas de código
casi iguales en un script, podemos usar bucles.
Los bucles se utilizan para ejecutar el mismo bloque de código
una y otra vez, siempre que se cumpla una determinada condición.
en este caso es muy similar a los descritos en C++/C,
Javascript, la única variación es la forma de definir la
variables:
for (expresion1, expresion2, expresion3) {
// bloque de codigos
}
Asi trabaja:
expresion1 es evaluada
expression2 realiza evaluación antes de cada iteración
expression3 es evaluada después de cada iteración
el código se explica por si solo, ya que hemos un entendimiento
de C++, HTML y JavaScript, y son muy similares con algunos cambios
en el manejo de las variables, en este ejercicio están 2
instrucciones for anidadas, al igual que la etiquetas <table
border=1> <tr> </tr> y <td> </td>,
recodemos tablas en HTML, y aquí están entre ("") para ser usadas
desde php.
Identico al anterior pero ahora marca las filas alternando gris
y blanco. Además, el tamaño será una constante: $val1=10; (aunque
es una variable no la modifico para que se comporte como constante
mas adelante trataremos ese punto.
La estructura if ejecuta un código evaluando si la condición es
verdadera, y agregamos adicionalmente else { } para en caso que no
sea verdadera la condición anterior.
Sintaxis
if (condicion) {
// codigo a realizar si la condición es verdadera;
}
Se utilizan principalmente en nuestras condiciones para comparar
dos variables y verificar si cumple o no la propiedad del
operador.
== Comprueba si son iguales
!= Comprueba si son distintos
=== Comprueba si son iguales y de exactamente el mismo
!== Comprueba si son distintos o de distinto tipo
<> Diferente (igual que !=)
< Menor qué, comprueba si un valor es menor que otro
> Mayór qué
<=< code=""> Menor o igual
>= Mayor o igual
<=> Comparador de orden. (PHP 7)
?? uno o el otro (PHP 7)
Los operadores lógicos también se usan generalmente en
expresiones que vas a usar para evaluar en estructuras de control.
Su operación tiene sentido generalmente cuando trabajamos con
valores boleanos (sí o no) o expresiones que una vez evaluadas
producen valores boleanos.
and Operación lógica "y", será
verdadero si ambos son verdaderos.
or Operación lógica "o", será
verdadero si uno de ellos es verdadero
xor Operación lógica "xor", será
verdadero si uno de ellos es verdadero, pero no ambos.
! Operación de negación, si era
verdadero pasa a falso y viceversa.
&& Operación lógica "y"
|| Operación lógica "o"
$val1=10;
Actua
como valor constante en este código que indica el numero de
columnas y filas para la tabla que se va formando conforme
se va ejecutando el codigo
En este ejercicio presentan cuadros de color "gris" ,
modifiquen el código para que las otras celdas sean de algún otro
color, conservando el gris.
y nombrelo como ejercicio5-php_e1.php, y envielo adicionalmente a las evidencias.
Funciones
En PHP las funciones hay que definirlas antes de invocarlas. Los
parámetros se indican con su nombre ($cantidad) si son por valor y
antecedidos de & (&$cantidad) si son por referencia.
mostrar una tabla de 4 por 4 que muestre las primeras 4
potencias de los números del uno 1 al 4 (hacer una función que las
calcule invocando la función pow).
ejercicio6-php.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta http-equiv="content-type"
content="text/html" charset="UTF-8">
<meta charset="utf-8">
<meta name="description" content="Ejemplo"
de="PHP">
<meta name="keywords" content="CECATI"
no.="89",ciudad=" Celaya, Guanajuato=">
<title>Conociendo PHP ejercicio
6</title>
</head>
<body>
<?php
// establecemos variable para controlar for con la cantidad de
columnas y filas
$tabla=4;
# aqui se
declara la funcion, debe ser antes de llamar la función
function potencia ($v1, $v2)
{
$rdo= pow($v1, $v2);
return $rdo;
}
echo "<table border=1>";
for ($n1=1; $n1<=$tabla=4; $n1++)
{
echo "<tr>";
for ($n2=1; $n2<=$tabla=4; $n2++)
// a continuacion se hace la llamda a la función "potencia"
echo "<td>". potencia($n1,$n2). "</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
en la linea echo "<td>". potencia($n1,$n2). "</td>";
observe que la etiquetas HTML van separadas de la llamada a la
función con un punto antes y después.
Resultado:
En Windows
Instrucción WHILE
La instrucción WHILE realiza un ciclo evaluado si es verdadera
la condición que se evalua
La revisaremos con el siguiente ejemplo, no difiere mucho de
C/C++
Instrucciones
opendir y closedir
La función opendir() abre un
identificador de directorio.
Sintaxis
opendir(ruta,
contexto)
Valores paramétricos
Descripción de parámetros
ruta Requerido. Especifica la ruta
del directorio que se abrirá.
contexto Opcional. Especifica el
contexto del identificador del directorio. El contexto es un
conjunto de opciones que pueden modificar el comportamiento de una
secuencia.
Devuelve el recurso de identificador de
directorio en caso de éxito. FALSO en caso de fallo. Genera un
error de nivel E_WARNING si la ruta no es un directorio válido o
si el directorio no se puede abrir debido a restricciones de
permisos o errores del sistema de archivos. Puede ocultar la
salida de error de opendir() agregando '@' al frente del nombre de
la función
La función closedir() cierra un
identificador de directorio.
Sintaxis
closedir(dir)
Valores paramétricos
Descripción de parámetros
Directorio Opcional. Especifica el recurso de
identificador de directorio abierto previamente con opendir(). Si no se especifica este
parámetro, se asume el último enlace abierto por opendir()
readdir(dir)
Valores paramétricos
Descripción de parámetros
directorio Opcional. Especifica el recurso de identificador de
directorio abierto previamente con opendir().
Si no se especifica este parámetro, se asume el último enlace
abierto por opendir()
hacer un programa que muestre en una tabla de 4
columnas todas las imágenes del directorio "fotos". Suponga
que en el directorio sólo existen fotos. Este directorio deberá
estar en la misma ubicación que el código que hace la llamada a
las fotos (pueden ser de cualquier tipo, pueden ser mas de 4 )
<?php
if ($gestor
= opendir('fotos'))// realiza
apertura del directorio
{
echo "<table
border=1>";
echo "<tr>";
$i=0;
while
(false !== ($archivo = readdir($gestor)))
{
if
($archivo!="." && $archivo!="..") // evita que estas
entradas al directorio sean consideradas en la lectura
{
if ($i==4) // solo
leera 4 archivos
{
$i=0;
echo
"</tr>";
echo
"<tr>";
} // termina if del
contador para 4 cuadros
echo "</tr>";
echo "</table>";
closedir($gestor); // cierra el directorio
} //termina if inicial de $gestor
?>
</body>
</html>
Resultado:
En Windows, nos puede presentar el siguiente
problema, mostrando un cuadro adicional, y esto es debido a que
windows crea un archivo llamado desktop.ini ( se puede observar en
el DOM del lado derecho) aunque generalmente no se observa pero
estará presente, por esa razón intenta mostrar esto, pero seria
cuestión de modificar el código para que ignore este archivo,
donde podríamos cambiar esto en el código de PHP?
Indica que pudiera el usuario cambiar la cantidad de
fotografias a revisar, etc.
Idéntico al anterior, pero que muestre las fotos en 100x100 y
que al pulsar abra la foto entera. Compruebe que sólo muestra
fotos con extensión .jpg, .png, .bmp .jpeg .gif (haga una
función que lo compruebe con preg_match) preg_match() devuelve
un numero, este número será 0 (no existe coincidencia) o 1 (si
existe coincidencia), ya que preg_match() detendrá la búsqueda
después de la primera coincidencia. Por el contrario,
preg_match_all() continuará hasta llegar al final de asunto .
preg_match() devuelve FALSE si ocurre un error.
Descripción
int preg_match ( string $patron ,
string $asunto [, array &$coincidencias [, int $banderas [, int $desplazamiento ]]] )
Busca en asunto por una coincidencia con la expresión regular dada
en patron .
Lista de parámetros
patron
El patrón a buscar, como una cadena.
asunto
La cadena de entrada.
coincidencias
Si se entrega el parámetro coincidencias ,
entonces éste es llenado con los resultados de la búsqueda.
$coincidencias[0] contendrá el texto que coincidió con el patrón
completo, $coincidencias[1] tendrá el texto que coincidió con el
primer sub-patrón en paréntesis capturado, y así sucesivamente.
banderas
banderas puede ser la siguiente bandera:
PREG_OFFSET_CAPTURE
Si es pasada esta bandera, entonces para cada
coincidencia encontrada también será devuelto el desplazamiento de
la cadena anexa. Note que esto modifica el valor de retorno a una
matriz en donde cada elemento es una matriz que consiste de la
cadena coincidente en el índice 0 y su desplazamiento de cadena al
interior de asunto en el índice 1.
desplazamiento
Normalmente, la búsqueda comienza desde el
principio de la cadena. El parámetro opcional desplazamiento puede
ser usado para especificar el lugar alterno desde donde empezar la
búsqueda (en bytes).
Donde $patron y $asunto son obligatorias, las otras son
opcionales, antes de usarlas debemos conocer las características a
aplicar a las expresiones regulares, el caracter o caracteres que
se buscarán se deben estar entre barras diagonales, ( /.../), por
ejemplo para validar un campo que solicita un correo electronico
debemos saber si lo realizo la cptura correctamente entonces,
$email es la variable que capturo el usuario, y necesita validar
si agrgo la '@', debemos de buscar este en el string de $email : preg_match("/@/", $email), esto indica que debe
buscar @ en la variable #email, ya que preg_match regresa un
valor 1 o 0, nos servimos de if para realizar la evaluación:
if ( preg_match("/@/", $email) ){
print ("<p>Casilla correcta</p>");
} else {
print ("<p>A su casilla le falta la arroba</p>");
}
También consideremos estos elementos :
El caracter "i" después del delimitador del patrón indica una
busqueda insensible a mayúsculas/minúsculas, "/.jpg/i"
Para obtener el nombre de host de una URL
preg_match('@^(?:http://)?([^/]+)@i',"http://www.php.net/index.html",
$coincidencias);
Buscar entre dos \b, esto servirá para que la coincidencia sea
de palabra completa, usando una variable : "/\b$prohibido\b/i" o con un texto: "/\b.jpg/i\b".
Si lo que queremos es encontrar si los
caracteres pertenecen a un rango determinado, podemos envolver ese
rango entre corchetes, separando el valor inicial y final con
guiones. Por ejemplo, si el valor permitido para cada dígito de un
campo son sólo números presentes en el rango que va del 0 al 9, lo
podemos expresar de la siguiente manera:
if (preg_match("/[^0-9]/", $numero) )
{
....
}
Del mismo modo, es posible validar que el texto contenga
únicamente letras de la a a la z:
if ( preg_match("/[^a-z]/", $alfanumerico) )
{
...
}
Un complemento sumamente útil que podemos
agregar para finalizar, es la posibilidad de verificar que una
casilla de correo electrónico sea la correcta. Para evitar el uso
de complejas expresiones regulares, PHP incorpora una función
denominada filter_var, que permite realizar esta validación de una
forma sumamente sencilla:
<?php
$casilla="pepe@ gmail.com";
if ( flter_var($casilla,FILTER_VALIDATE_EMAIL)){
echo "<p>Casilla correcta</p>";
} else {
echo "<p>No es correcta la casilla</p>";
}
?>
muestra que hay un error se dejo un "espacio" en el nombre del
correo.
ahora nuestro ejemplo, ejercicio8-php.php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html"
charset="UTF-8">
<title>ejercicio 8</title>
</head>
<body>
<?php
echo "<h1>Tabla de Fotos con Enlace</h1>";
function valida_foto($fotos)
{
$rdo=0;
if (preg_match("/.jpg/i",
$fotos))
$rdo=1;
if (preg_match("/.png/i", $fotos))
$rdo=1;
if (preg_match("/.bmp/i", $fotos))
$rdo=1;
if (preg_match("/.gif/i", $fotos))
$rdo=1;
if (preg_match("/.jpeg/i", $fotos))
$rdo=1;
if ($foto!="." && $foto!=".." &&
valida_foto($foto)) // "." y ".." se refieren a la entrada del
directorio el actual y el superior y llama a la funcion para
validar las imágenes / fotos
<a href='fotos/$foto'>"; // con <a href
permite enalzar "link" con la foto, y realizando un click se
accede a la foto
Resultado:
Al hacer clic en una imagen se mostraran asi:
En Windows
Interacción con los clientes
Todos los ejemplos vistos anteriormente trabajan
de manera independiente del usuario. No existe ninguna interacción
a nivel de programa. En esta seccion comenzaremos a interactuar.
Para ello el elemento clave es el formulario HTML (o XHTML Extensible
Hypertag Markup Language es un lenguaje utilizado por muchas
aplicaciones de Internet para intercambiar información.
Permite que los diseñadores creen sus propias etiquetas,
permitiendo la definición, transmisión, validación e
interpretación de datos entre aplicaciones ).
El administrador interactúa con el
back-end, y el usuario, con el front-end.
Los formularios HTML están delimitados por las marcas
<FORM> y </FORM>. Los formularios que usaremos, en
principio, tienen las siguientes características:
Tienen que contener (entre sus marcas) toda la información
necesaria para operar posteriormente. Si hay varios
formularios en la página estos no pueden estar anidado y, por
lo tanto, serán independientes.
La marca <FORM> tiene que incorporar dos
parámetros (por ahora). Uno es constante, e indica cómo se
enviarán los datos: METHOD=POST y otro indica la página PHP
que procesará la información del formulario:
ACTION=pagina.php. Es importante que la dirección del atributo
ACTION sea relativa, porque si es absoluta (de la forma
ACTION=http://www.dominio.com/pagina.php o
ACTION=/directorio/pagina.php) sólo funcionará en un servidor
(o una estructura de directorios) determinado.
Todo formulario incluirá un elemento tipo SUBMIT, que será
el que permita al usuario ordenar el procesado de la
información.
Todo elemento del formulario necesitará un
nombre para que pueda ser procesado posteriormente (y se
recomienda que también incorpore un VALUE).
Los elementos principales que se pueden incluir
dentro de un formulario son los siguientes (si desea una
referencia más completa puede dirigirse al estándar en
http://www.w3c.org), pondre de color y en mayusculas las
instrucciones que estudiaremos, pero en la practica de preferencia
son en minusculas:
Cajas de texto: el atributo VALUE
indica el valor por defecto, SIZE el tamaño en pantalla y
MAXLENGTH la cantidad de caracteres que se podrán escribir en
ella.
Botones de selección:
permiten elegir uno (y sólo uno) de los elementos agrupados. Es
importante que todos los elementos agrupados tengan exactamente el
mismo nombre (para que sean excluyentes) y distintos valor en
VALUE (que será lo que identifique el seleccionado). Además, si se
desea obligar al usuario a que seleccione uno de los elementos hay
que poner el atributo CHECKED en alguno de ellos (pues en otro
caso no se presentaria ninguno seleccionado por defecto).
Cajas de selección: similares a los
botones de selección, pero se pueden seleccionar los elementos que
desee (uno, varios o ninguno). En este caso son independiente, por
lo que casa uno tiene su nombre y el valor CHECKED si deseamos que
por defecto aparezca marcado.
<INPUT TYPE=”checkbox”
NAME=”publicidad” VALUE="1"/> Marque si desea
publicidad.
Cajas de texto multilínea:
son similares a las cajas de texto, pero especifican sus
dimensiones con COLS (columnas) y ROWS (filas). Además la marca
tiene que cerrarse y el valor por defecto se especifica entre la
marca que abre y la que cierra (porque puede ser multilínea).
<TEXTAREA NAME=”comentario”
COLS=”20” ROWS=”4”>
Ponga aquí su comentario
u opinión
</TEXTAREA>
Campos ocultos:
sirven para que el formulario envíe datos que el usuario no vea en
pantalla (pero que podría ver en el código fuente de la página, no
están ocultos realmente). Se suele usar en las modificaciones de
registros de bases de datos. El valor que envían se especifica en
VALUE.
Listas desplegables: permite elegir
entre uno o varios valores mostrados. Entre la marca de apertura y
la de cierre puede haber tantos elementos de selección como se
desee. Existe el atributo SIZE que indica las opciones que se
verán simultáneamente en pantalla y MULTIPLE que indica si es
posible realizar una selección de más de un valor (con el atributo
MULTIPLE su función es similar a la de las cajas de selección y
sin él a la de los botones de selección).
<SELECT NAME=”ciudad”>
<OPTION VALUE=”1” CHECKED>Celaya
<OPTION VALUE=”2”>Salamanca
</SELECT>
Botón de envío: es un botón que
realiza la petición a la página indicada en el atributo ACTION del
FORM. El texto que tiene es el del VALUE.
<INPUT TYPE=”submit”
VALUE=”Procesar”>Una vez en
cliente ha introducido los valores adecuados en los elementos y ha
pulsado el botón SUBMIT, la página indicada en el atributo ACTION
del FORM se ejecutará.
Para trabajar con los valores de los elementos
del formulario se debe poner la función
import_request_variables("gp","f_"). Tras ejecutar esta función
por cada elemento del formulario de nombre "edad" existirá una
variable "$f_edad" con su valor.
Se requieren 2 paginas (una con el formulario y otra que
procese).
Repasemos de nuevo la asiganción de variables en PHP
Variables PHP
Una variable puede tener un nombre corto (como $x y $y) o un
nombre más descriptivo ($edad, $carname, $total_volume).
Reglas para variables PHP:
Una variable comienza con el signo $, seguido del nombre de la
variable.
El nombre de una variable debe comenzar con una letra o un
carácter de subrayado.
El nombre de una variable no puede comenzar con un número
El nombre de una variable solo puede contener caracteres
alfanuméricos y guiones bajos (A-z, 0-9 y _).
Los nombres de las variables distinguen entre mayúsculas y
minúsculas ($age y $AGE son dos variables diferentes)
PHP admite los siguientes tipos de datos:
Cadena
Entero
Flotante (números de coma flotante, también llamados dobles)
Booleano
Formación
Objeto
NULO
Se puede asignar de forma multiple
$x = $y = $z = "Fruta";
La función var_dump() devuelve el tipo de datos y el valor:
comenzaremos a usar la separación entre html y
php, pero con la salvedad que los 2 se pueden utilizar para lograr
un efecto muy importante en la paginas web que se puede denominar
paginas web dinámicas, y es por la razón que podemos hacer mas
paginas web interactivas y eficientes para almacenar datos y
transporte de información hacia y desde las bases de datos, y una
ventaja que se puede hacer con esto es que los accesos a las
pagina que contienen código PHP no se pueden observar durante el
proceso con ello podemos "ocultar" mas información que no deseamos
que se muestre, pero este no solo es único elemento, para
conservar y proteger la información, etan los servicion de
seguridad en el caso de LINUX esta SELinux, en windows esta los
servicios de active directory de windows server. Como sea el
proceso de protección de PHP ayuda con ello, para comenzar a
realizar esto usaremos un ejemplo muy simple:
<p>Estoy en HTML y enviare hacia PHP:</p>
<form action="ejercicio8a_php.php"
method="post">
<!-- debo de indicar a que archivo
solicitar con php con su nombre completo ruta relativa -->
<select name="genero">
<option value
="Masculino">Masculino</option>
<!-- presentar la opciones del la
informacion a enviar -->
<option value =
"Femenino">Femenino</option>
</select>
<input type="submit"
Value="Enviar">
<!-- forma
de enviar los datos hacia el procesamiento hacia PHP -->
</body>
</html>
<!-- inicio de php -->
<?php
echo "<p> Ya pase a php </p>";
if ($_POST ["genero"]
== "Masculino")
{
echo " Hola eres Hombre ";
}
else
{
echo "Hola eres Mujer ";
}
?>
</body>
</html>
Como podemos apreciar la estructura if (es un condición de
verdadero - falso, si es verdadero se ejecuta el código después de
la instrucción if, en caso contrario usando else es cuando es
falsa la comparación) el doble signo de == es para realizar la
comparación, si fuera '=' es la asignacion de un valor, por lo que
no sera la adecuado y los resultados seria muy extraños.
<p>Estoy en HTML y enviare hacia PHP:</p>
<form name="datosenviar" action="ejercicio8b_php.php"
method="post">
<!-- debo de indicar a que archivo solicitar con php con su
nombre completo ruta relativa -->
Tu edad es : <input type="text" name="edad"
value=""><br>
<input type="submit" name="submit"
value="¡Enviarme!"/> <!-- botón con el
titulo ¡Enviarme! -->
</form>
</body>
</html>
<!-- inicio de php -->
<?php
echo "<p> Ya pase a php </p>";
$edad_=$_POST['edad'];
echo "Mi edad es de : ";
echo $edad_;
echo " por lo tanto soy : ";
if ($edad_ >= 18
)
//obseve la variable y el valor a comparar
{ echo " mayor de edad"; }
else {
echo " no soy mayor de edad ";
}
?>
$Pi = 3.141593;
$volumen = $Pi*$radio*$radio*$altura;
echo "<br> El volumen del cilindro es de ".$volumen."
metros cúbicos";// observe que se pueden colocar varios textos y
valores separados por .
?>
</body>
</html>
En este ejemplo vea la forma de usar la variables tipo numérico,
espero tus comentarios.
Ya estamos en la codificación de PHP y ahora como me regreso al
anterior, puede ser con el botón de regreso del navegador o bien
con este código en JavaScript al final de las instrucciones de PHP
y antes de </body> y </html>
<h4><center>
<input name="name" value="Regreso a la pagina anterior"
onclick="history.back()"
type="button"> <br>
</center>
</h4>
$Pi = 3.141593;
$volumen = $Pi*$radio*$radio*$altura;
echo "<br> El volumen del cilindro es de
".$volumen." metros cúbicos";// observe que se pueden colocar
varios textos y valores separados por .
?>
<h4><center> <input
name="name" value="Regreso a la pagina anterior"
onclick="history.back()"
type="button"> <br>
</center>
</h4>
</body>
</html>
con ello nos podemos regresar, esto es un metodo sencillo y
facil, para el usuario.
ejercicio9_php.html y
ejercicio9_php.php
Como se vio anteriormente los formularios HTML (se pueden usar
GET y POST) cuando se envía un formulario a un script de PHP, la
información de dicho formulario pasa a estar automáticamente
disponible en el script. Existen algunas formas de acceder a esta
información, solamente existen dos maneras de acceder a datos
desde formularios HTML ahora veremos un ejemplo que usa varios
elementos que usa POST, los cuales usaremos para enviar datos a
MySQL.
Los métodos disponibles actualmente son:
Acceso a datos de un formulario HTML sencillo con POST
requerimos en HTML un formulario para recolectar la informacion,
tenemos los metodos
Cajas de texto, Cajas de texto para
claves, Botones de selección, Cajas de selección, Cajas de texto
multilínea, Campos ocultos, Listas desplegables y Botón de envío
<p>Estoy en HTML y enviare hacia PHP llena los
siguientes datos:</p>
<form action="ejercicio9_php.php"
method="post">
<!-- debo de indicar a que archivo
solicitar con php con su nombre completo ruta relativa -->
Nombre usuario: <input type="text" name="nombre" value="tu
nombre .." size=8 maxlength=20/><br>
<!-- input de tipo text y nombre de
la variable a enviar name="nombre" con valor por defecto
de tamaño 8 y longitud 20 del campo -->
Email: <input type="text" name="email" />
<br><br>
<!-- input de tipo text y nombre de la
variable a enviar name="email"-->
Password: <input type="password" NAME="pass" size=8
maxlength=20/>
<!-- input de tipo password y nombre de
la variable a enviar name="pass" de tamaño 8 y longitud 20 del
campo -->
<br>
<br>Preferencia Musical:<input type="radio" name="musica"
value="1" checked/>Jazz
<br>Preferencia Musical:<input type="radio" name="musica"
value="2"/>Pop
<br>Preferencia Musical:<input type="radio" name="musica"
value="3"/>Rock
<!-- input de tipo boton circular
"radio" y nombre de la variable a enviar name="musica" con
1 elemento marcado inicial, envia el valor 1 2 ó 3 -->
<!-- vea la forma de capturar el dato y como se entrega a PhP
-->
<br>
<br>
Deseas recibir noticias de esta publicación ... <input
type="checkbox" name="publicidad" value="1"/>
<!-- input de tipo botón cuadrado
"check" y nombre de la variable a enviar name="publicidad"
con valor 1 o 0 -->
<!-- si no se checa el checkbox sera 0 -->
<br>
<br>
<textarea name="comentario" cols="20" rows="4">
Ponga aquí su comentario u opinión
</textarea>
<!-- input de tipo area de texto y nombre de la variable
a enviar name="comentario" -->
<br>
<br>
<input type="hidden" name="identificador" value="8"/>
<!-- input de tipo hiden "oculto" y nombre de la variable
a enviar name="comentario" -->
<br>
<br>
<select name="ciudad">
<option value="1" checked>Celaya
<option value="2">Salamanca
<option value="3">Irapuato
</select>
<!-- input de tipo lista desplegable y
nombre de la variable a enviar name="ciudad" -->
<br>
<br>
<input type="submit" name="submit"
value="¡Enviarme!"/> <!-- botón con el titulo ¡Enviarme! -->
</form>
</body>
</html>
ejercicio9_php.php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html"
charset="UTF-8">
<title>ejercicio9_php.php</title>
</head>
<body>
<?php
echo "<p> Ya pase a php </p>";
echo "<p> puedo usar $ _POST $ _REQUEST para mostrar la
variables enviadas desde HTML </p>";
echo "Nombre : ";
echo $_REQUEST['nombre'];
echo"<br>";
echo "Correo : ";
echo $_POST['email'];
echo"<br>";
echo "Password : ";
echo $_POST['pass'];
echo"<br>";
echo "Preferencia Musical :";
//recibo de HTML la seleccion de musica y lo evaluo con switch se
debe de asignar a una variable
// observe como recibe el valor de música aqui
$music=$_POST['musica'];
switch ($music) {
case 1:
echo "Tu musica preferida es el Jazz";
break;
case 2:
echo "Tu musica preferida es el Pop";
break;
case 3:
echo "Tu musica preferida es el Rock";
break;
default:
echo "No tienes un estilo de los indicados ";
}
//recibo de HTML la seleccion de
'publicidad'y lo evaluo con switch si hay clic es 1 sin no, es 0
echo"<br>";
echo "Recibe publicidad :";
$publ=$_REQUEST['publicidad'];
switch($publ) {
case 0:
echo "NO recibe publicidad ! ";
break;
case 1:
echo "SI recibe publicidad ! ";
break;
default:
echo "No hay decisición ";
}
echo"<br>";
echo "Comentario sobre el tema: ";
$comentt=$_REQUEST['comentario'];
echo $comentt;
echo "<br>";
echo "Comentario oculto: ";
$identificador=$_REQUEST['identificador'];
echo $identificador;
echo "<br>";
//recibo de HTML la seleccion de ciudad y lo evaluo con switch
echo "Ciudad: ";
$ccd=$_REQUEST['ciudad'];
switch($ccd) {
case 1:
echo "Celaya ";
break;
case 2:
echo "Salamanca ";
break;
case 3:
echo "Irapuato ";
break;
default:
echo "No hay decisición ";
}
echo "<br>";
?>
<h4><center> <input name="name" value="Regreso a la
pagina anterior"
onclick="history.back()"
type="button"> <br>
</center>
</h4>
</body>
</html>
Resultado:
En Windows la otra parte es idéntico que LINUX
Ahora subiremos unas fotografias / imagenes al directorio
fotos, para ello debemos tomar en consideracion unos aspectos, en
el ejemplo anterior usamos la forografias pero las colocamos
directamente en el directorio, ahora veamos como subirlos al
directorio desde html - php.
Primer consideración: En el caso de LINUX (CentOS, Rocky,
Debian, etc) /UNIX/BSD/ el directorio donde se establece el
servicio de WEB (según el caso /var/www/html, /var/html) el
directorio que contendría las fotografías/imágenes debera
tener derechos de escritura / lectura, este directorio estará en
html o www cambiar los derechos con chmod 775, y asignar un
permiso al sistema de seguridad de SELinux : setsebool -P
httpd_unified 1 , esto es cuanto se refiere a LINUX ya que es un
directorio con derechos de administración (root)
Segunda Consideración: Aunque uno piensa que las
fotografías / imágenes son inofensivas no es así, algunas tienen
códigos ocultos en ellas y son potencialmente peligrosas sobre
todo en directorios con derechos, y mas aun en los servidores
Windows.
debo de indicar a que archivo solicitar con php
con su nombre completo ruta relativa (action="ejercicio10_php.php"),
con enctype="multipart/form-data" ,
esto significa que cuando un formulario contiene un control de
entrada de archivo (imagen, archivo tipo .PDF, .EXE, .Com etc.) ,
el atributo enctype siempre debe ser "multipart/form-data", que
especifica que el formulario se enviará como un mensaje MIME (
Multipurpose Internet Mail Extensions o MIME (en español
"extensiones multipropósito de correo de internet")) de varias
partes. Este mensaje se divide en dos partes, una para cada
control de formulario, en MIME SE PUEDEN LOCALIZAR ESTOS TIPOS:
El campo oculto MAX_FILE_SIZE (medido en bytes) debe preceder
al campo de entrada del archivo y su valor es el tamaño de
archivo máximo aceptado por PHP. Este elemento de formulario
siempre debe utilizarse, ya que evita a los usuarios la molestia
de esperar a que se transfiera un archivo grande y descubrir que
era demasiado grande y la transferencia falló.
Los elementos <input> de tipo oculto (type="hidden") permiten a
los desarrolladores web incluir datos que los usuarios no pueden
ver ni modificar cuando se envía un formulario. Por ejemplo, el
ID del contenido que se está ordenando o editando actualmente, o
un token de seguridad único. Las entradas ocultas son
completamente invisibles en la página renderizada y no hay forma
de hacerlas visibles en el contenido de la página.
Con la etiqueta HTML label puedes mejorar la
usabilidad de tu página web y conseguir un acceso sin
restricciones. label se puede utilizar, entre otras cosas, para
campos de entrada, casillas de verificación y botones, y funciona
con atributos globales y de evento, facilita la navegación por una
página web a los visitantes que tienen problemas con pequeñas
áreas: siendo más fácil pulsar sobre ella, dado que se amplía la
zona en la que se puede hacer clic. Para los usuarios que utilizan
un lector de pantalla, la etiqueta HTML label también garantiza
que el pie de foto pueda ser leído en voz alta. Esto mejora la
usabilidad para todos los visitantes de tu página web.
Hay dos maneras de utilizar la etiqueta label en HTML. El atributo
for te permite vincular la etiqueta directamente al campo de
entrada. También puedes incluir el formulario directamente dentro
de la propia etiqueta HTML label.
En el caso de LINUX el directorio que recibe
las imágenes / fotografías (fotos) estará en /var/www/html/fotos,
y deberá de tener los derechos de rwxrwxrwx, para windows es
diferente aplicar los permisos el directorio fotos debiera se en
Propiedades .. permitir escritura / lectura para todos, deberá
funcionar igual, pero si por alguna cuestión de derechos de
escritura o lectura marcara error debemos revisar cual son estos
permisos, si el servidor wamp en windows y esta bien configurado
debiera de hacer lo mismo sin problemas.
ejercicio10_php.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html"
charset="UTF-8">
<title>ejercicio10_php.html</title>
</head>
<body>
<h3> AVISO: EL FORMATO DE LA FOTOGRAFIA DEBERA SER .jpeg .gif
.jpg DE OTRA FORMA NO SE ACEPTARA LA IMAGEN</h3>
<h3> Y EL TAMAÑO MENOR A 3 Mb </h3>
<left>
<form method="post"
action="ejercicio10_php.php"
enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE"
value="3000000" />
<label for="fotografia">Fotografia/Imagen
</label><input type="file" name="fotografia"
id="fotografia"></input>
echo "Nombre: ".$_FILES['fotografia']['name'] . "<br>";
echo "Tipo: ".$_FILES['fotografia']['type'] . "<br>";
echo "Tamaño: ".($_FILES['fotografia']['size'] / 1024) . "
kB<br>";
// se forma una carpeta temporal:
".$_FILES['fotografia']['tmp_name']; esta se crea en
losdirectorios temporales del sistema
}
//ahora con la funcion move_uploaded_file lo
guardaremos en el destino que queramos
move_uploaded_file($_FILES['fotografia']['tmp_name'],'fotos/'.$_FILES['fotografia']['name']);
echo " este archivo sube al directorio
",'/var/www/html/fotos/'.$_FILES['fotografia']['name'];
// este archivo sube a
.$_FILES['fotografia']['tmp_name'],'fotos/'.$_FILES['fotografia']['name'];
en LINUX
//para windows se cambia por
// " este archivo sube al
directorio
",'c:\wamp64\www\fotos/'.$_FILES['fotografia']['name'];
}
else
{
echo "Archivo Invalido!!, comprueba las restricciones.";
}
?>
<h4><center> <input name="name" value="Regreso a la
pagina anterior"
onclick="history.back()"
type="button"> <br>
</center>
</h4>
</body>
</html>
Revisemos como es el proceso, al iniciar la pagina de
ejercicio10_php.html se vera de la siguiente manera: (puedes
descargar la imagen de ejemplo aquí)
cuando aplicamos el botón Seleccionar archivo, buscamos la
fotografía/imagen en formato .jpeg .gif .jpg:
cuando es "subida" la fotografia/imagen al directorio en PHP
envia esto (también muestro el DOM)
En el directorio se observa lo siguiente, ahora bien la
imagen que "subimos" tiene un candado eso es porque estoy viendo
el directorio como un usuario sin privilegios en ese lugar, es
decir los derechos de ese directorio no son aplicables a mi como
usuario, de esta forma es muy complicado que pueden acceder a
los directorios desde LINUX.
esto es aplicable a cualquier documento .pdf, xlsx, .docx, solo
hay que cambiar las extensiones y algunos valores según documento
se trate
las instrucciones que tiene PHP son de gran
utilidad pero son muchas y realmente son muchas, les proporcionare
información sobre esto en un correo con links, y documentos para
que los consulten, no lo agrego aquí porque están cambiando y
mejorando PHP estas instrucciones se aplican para la versión 8, y
como seguirán cambiando solo es cuestión de seguir los cambios en
la pagina de PHP:
En Windows
JIT
Justo a tiempo (Just in Time)
La última tendencia en compilación es la introducción de un
compilador "Justo a tiempo", o JIT. Un compilador JIT comienza con
el lenguaje intermediario simplificado y, en lugar de
interpretarlo, lo convierte en the-fly al código de máquina,
almacena ese código de máquina en la memoria y lo ejecuta.
Los compiladores JIT son muy complicados, porque para obtener un
buen rendimiento de ellos generalmente es necesario ser selectivo
en qué partes del lenguaje intermediario se compilan en código de
máquina yque no lo son. No siempre es más rápido convertir a
código de máquina, dependiendo de los detalles específicos de el
código y el idioma en cuestión. Además, el proceso de conversión
del código simplificado.
al código de máquina nativo puede llevar más tiempo que
simplemente ejecutar el código simplificado una vez y terminar con
eso.
Por esa razón, la mayoría de los compiladores
JIT analizan el código mientras se ejecuta para identificar qué
partes dar el mejor valor y luego compilar sólo esos bits. El
resultado neto, en teoría, es que el programa literalmente se
vuelve más rápido a medida que se ejecuta y a medida que el
compilador JIT en la máquina virtual aprende qué partes del código
optimizara.
Java fue el primer lenguaje extendido que incluyó un JIT en su
máquina virtual, y Javascript, lo más importante de los motores de
busqueda ahora también lo hacen. Y, a partir de PHP 8.0, se ha
unida esa lista.
El
JIT de PHP
El nuevo JIT de PHP ha tardado en llegar. De hecho, ha estado en
desarrollo durante varios años.
Y casi se incluye la VERSION anterior en PHP 7.4. El trabajo para
hacer que PHP fuera compatible con JIT fue el ímpetu que llevó a
la importante reescritura del motor que le dio al 7.0 su enorme
impulso de rendimiento.
PHP JIT está construido como una extensión del caché de código de
operación. Eso significa que se puede habilitar y deshabilitar, Ya
sea al compilar PHP o en tiempo de ejecución, a través de php.ini.
También significa que el opcache debe estar
habilitado, para que funcione. El opcache está
habilitado de forma predeterminada para solicitudes web, pero no
para comandos CLI. Habilítelo en los comandos CLI, o agregue una
línea al archivo php.ini de su CLI:
opcache.enable_cli = 1
O específicamente de forma explicita en la linea de comando:
php -dopcache.enable=1 myscript.php
Cómo
configurar el JIT
De forma predeterminada, JIT está habilitado,
pero el "tamaño del búfer" está establecido en 0, lo que tiene el
mismo efecto que desactivado. Para activarlo, establezca la
configuración opcache.jit_buffer_size en un valor distinto de
cero. eso controla cuánto espacio en la memoria puede llenar el
JIT con su código de máquina optimizado. Es mejor, ya que el JIT
también podría hacer perder tiempo compilando código que realmente
no sea necesario.
La otra configuración principal es opcache.jit, que controla el
nivel de agresividad de JIT. puede aceptar
Ya sea una cadena o un código numérico para uso avanzado.
Las opciones de cadena son:
disable (apagado)
off (aún se puede
habilitar en tiempo de ejecución)
tracing (la opción más agresiva y la predeterminada)
function (una opción menos agresiva que no optimiza el
código a través de los límites de la función)
Para uso avanzado, opcache.jit también puede
aceptar una secuencia numérica de 4 dígitos, aunque no es un
número. Cada número representa una configuración de agresividad
diferente: nivel de optimización, disparador, asignación de
registros e indicadores de optimización específicos de la CPU. La
documentación PHP los describe todos con más detalle, por lo que
no entraré en más detalles aquí, aparte de señalar que el rastreo
y la función. Los ajustes preestablecidos ya son bastante
agresivos. En la práctica, probablemente solo necesitarás usar
esas configuraciones para escalar JIT en caso de errores, para no
forzarlo más.
Hay varias otras configuraciones de opcache.jit_* para ajustar aún
más la configuración JIT, pero son principalmente para depuración
o uso muy avanzado, por lo que me remitiré a la documentación
oficial.
No existe una configuración universalmente mejor para el JIT. Como
suele ser el caso con herramientas avanzadas como para ello,
deberá experimentar con su propia aplicación y ajustarla
adecuadamente
PHP +
MySQL (mariaDB)
Una de las principales razones de la popularidad de PHP es su
capacidad para comunicarse con el sistema gestor de bases de datos
MySQL (mariaDB).
(NOTA: como administrador
es muy sensible que usemos la cuenta de root para activar la
conexion entre PHP y MariaDB, se sugiere agregar un usuario con
restricciones para conectar entre WEB-PHP-MariaDB)
Una vez se tiene una conexión y una base de
datos seleccionada se puede interactuar con el sistema de bases de
datos.
A continuación describiremos brevemente los
comandos SQL más usados para las cuatro operaciones más
usadas: altas, bajas, modificaciones y listados sobre una tabla
con escritores:
MySQL es un sistema gestor de bases de datos libre que funciona
sobre una gran cantidad de sistemas operativos (tanto tipo
UNIX/Linux/BSD como Windows) y plataformas hardware. Entre sus
principales características destacan su bajo consumo de recursos
manejando grandes cantidades de datos. Está soportado por la
empresa MySQL Los pasos para trabajar con una base de datos son
los siguientes:
Nota Importante: Cuando se use Windows 10 y 11,
debemos hacer los siguientes pasos antes de continuar
1.- Ingresar a phpmyadmin con root y el
servidor de MySQL
2.- Crear contraseña para root en el
servidor MySQL
3.- Crear una cuenta con el nombre que
sera usada para la autorización del acceso a la base de datos,
en nuestro ejemplo usaremos usuario y la contraseña password.
4.- Debemos crear la base
de datos con sus tablas respectivas, usaremos una base de datos
simple en nuestro primer ejemplo php-mysql, usemos phpmyadmin,
usando en el curso de Gestión de Base de datos.
Iniciamos creando una Base de datos llamada autores
creamos una tabla en esa base de datos llamada:
autores_registros
la estructura de la tabla es la siguiente:
Es necesario iniciar con una pagina en html para "capturar" los
datos de los "autores" nos valdremos de los formularios y después
los enviamos a PHP y este los almacene en mariaDB / MySQL, (en
windows quedaría en MySQL) en una pagina HTML se realiza un
formulario hay que presentarlo de la forma mas sencilla.
<form method="post" action="altas.php" name="form"
accept-charset="UTF-8" enctype
="multipart/form-data">
<!-- debo de
indicar a que archivo solicitar con php con su nombre completo
ruta relativa -->
<fieldset>
<label for="Nombre"> Nombre </label> <input
type="text" name="Nombre" id="Nombre" size="35"
maxlength="35"/>
<br class="clear" />
<label for="Apellido"> Apellido </label><input
type="text" name="Apellido" id="Apellido" size="35"
maxlength="35"/>
<br class="clear" />
<label for="Nacionalidad">Nacionalidad
</label><input type="text" name="Nacionalidad"
id="Nacionalidad" size="35" maxlength="35"/>
<br class="clear" />
</fieldset>
<input type="submit" name="submit" value="Procesar" />
<br class="clear" />
</form>
</body>
</html>
<fieldset> </fieldset> esta etiqueta se usa para
agrupa los campos del formulario según sea necesario.
Se requiere realizar una conexión con el sistema de bases de
datos. Para ello se usa la función mysql_connect.
Esta función recibe cuatro cadenas como parámetros:
dirección IP del servidor, usuario, clave(password de MariaDB /
MySQL) y la base de datos (nombre). Devuelve un manejador de
conexión (o cero si se ha producido un error).
host Especifica el nombre del host, su
direccion IP, en nuestro caso puede ser "localhost" o
127.0.0.1 o en el sentido WEB el servidor con un IP en
particular
username Especifica el nombre del usuario de
MySQL (mariaDB)
password Especifica el password de MySQL
(mariaDB)
dbname Especifica la base de datos a usar.
port Opcional.
Especifica el numero del puerto a usar con el sevidor MySQL.
socket Opcional.
Especifica el socket o nombre de conexión (entubamiento) que sera
usado
el proceso es el siguiente:
altas.php (Nota: según este configurado el
servidor la IP puede ser 127.0.01 o localhost) y posiblemente
que no funcione hasta el 2do. intento estando todo bien)
<?php
// mysqli
// Realiza el intercambio de variables desde el formulario:
// lado izquierdo tal como esta en la Base de Datos
// lado derecho como se capturaran en el formulario
if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." .
PHP_EOL;
echo "error de depuración: " .
mysqli_connect_error() . PHP_EOL;
exit;
}
echo " \n";
echo " Se realizó una conexión apropiada a la base de datos ! "
. PHP_EOL;
echo "Información del host: " . mysqli_get_host_info($enlace) . PHP_EOL;
$insertar = mysqli_query($enlace, "INSERT INTO
autores_registro (Nombre,Apellido,Nacionalidad)
VALUES ('$Nombre','$Apellido','$Nacionalidad')");
<h2>Registro realizado </h2>
<center> <input name="name" value="Regreso a la
pagina anterior"
onclick="history.back()"
type="button"> <br>
</center>
</body>
</html>
Son los campos de la tabla:
Nombre,Apellido,Nacionalidad
Resultado:
Cuando hacen click en Procesar y también se
mostrara un cuadro de Alerta indicando que se realizo la
inserción de datos, esta parte es opcional (JavaScript):
Y en MariaDB atravez de PhpMyAdmin:
Tomemos en consideración que sabemos el ID del
autor con ello nos ayudamos a localizarlo en la tabla, pero
agregare mas registros para aumentar el tamaño de la tabla,
veamos los datos, tenemos 4 y cuyo ID, es el que nos interesa:
<form method="post" action="consultas.php"
name="form" accept-charset="UTF-8" enctype
="multipart/form-data">
<!-- debo de
indicar a que archivo solicitar con php con su nombre completo
ruta relativa -->
<h3> Consulta de Autores </h3>
<h3>Numero de identificación del autor </h3>
<fieldset>
if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo " \n";
echo " Se realizó una conexión apropiada a la base de datos ! " .
PHP_EOL;
echo "Información del host: " . mysqli_get_host_info($enlace) .
PHP_EOL;
?>
<?php
// Metodo para enviar variables en la misma pagina definimos la
variable a enviar
if(isset($_POST['submit']))
{
$Id_autor = $_POST['Id_autor'];
//envio de variable
}
?>
<!-- metodo para recibir datos desde la misma pagina a travez
de php
muestra el cuadro para colocar el valor de la variable
anterior -->
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];
?>">
<h3>Si requieres otro registro indicalo aqui abajo y botón
procesar </h3>
<label for="Id_autor">No. de Identificacion
</label><input type="text" name="Id_autor" id="Id_autor"
size="5"/><br>
<input type="submit" name="submit"
value="Procesar"><br>
</form>
<?php
$Id_autor = $_POST["Id_autor"];
$enlace = mysqli_connect("localhost", "usuario", "password",
"autores");
//servidor,usuario,contrseña_MySQL,
nombre_base_de_datos
// Realizar una consulta SQL se requiere que todos los campos sean
especificados, no funciona con *
$consulta = "SELECT Id_autor, Nombre, Apellido, Nacionalidad FROM
autores_registro WHERE
Id_autor=$Id_autor";
Siendo de consulta solo es permitido "ver" los registros, ya
podemos pasar a modificar los datos de la base de datos a travez
de PHP, el procedimiento es muy similar, en este caso tenemos un
html y 2 php, html se "enlaza" con un php que solicita la
información y la muestra, de un registro en particular, y llama a
otro php para que haga el registro en la base de datos, la razon
de esto es:
1.- Ofrecer un método de almacenamiento de datos oculto
(código).
2.- Mantener el código disponible para realizar modificaciones
rápidas sin tener que manipular códigos grandes que llevan a
confusión y errores.
Deberán de realizar un mapa para ubicar los
archivos que usen para cada situación, cada desarrollo es
particular. (Funciona muy bien diagrama de flujo de los archivos
que se ejecutan y en que orden), en el ejemplo a continuacion las
tres hojas tiene un titulo, es para identificar en que paso
estamos realizando, pero cuandose haga en proceso de trabajo no es
prudente poner el titulo de la pagina, en todos caso vacio o algo
que no se relaciones con lo que se esta realizando, primero
revisemos nuestra base de datos:
consulta.html (como podría ser el
inicio de la consulta es sugerencia) puedes descargar
desde aquí img1, img2
las imágenes, de los ejercicios que se muestran a
continuación o puedes usar otras que te agraden
<!DOCTYPE html>
<html>
<head>
<!-- Autor: Miguel Santos Montoya Ver 0.5 -->
</head>
<body style="background-color: rgb(255, 255, 204);"
alink="#ee0000" link="#0000ee" vlink="#551a8b">
<center>
<div align="center"><big><font
color="#000000"><big><big>Modifica Datos de
Autores</big></big></font></big><br>
<br>
</div>
<img style="border: 0px solid ; width: 246px; height: 205px;"
alt="" src="images/modifi_datos.png"></a><br>
<font color="#330099"><br>
<br>
<!-- este paso puede ser diferente según lo que se este
buscando esta parte puede ser un código de barras EAN-18, 128
etc, o simplemente un código alfa-numérico -->
<h2> Nota: Se requiere el Número Identificador del autor
para acceder al registro, revisa en la pagina consultas sus
datos </h3>
<h3>Modifica los campos necesarios el ID no se puede
modificar</h3>
</center>
<br>
</font>
<?php
// Metodo para enviar variables en la misma pagina definimos la
variable a enviar se define que variable se va a tomar esto en
PHP
if(isset($_POST['submit']))
{
$Id_autor = $_POST['Id_autor'];
//envio de variable
}
?>
<!-- metodo para recibir datos desde la misma pagina a travez
de PHP muestra el cuadro para colocar el valor de la variable
anterior -->
$enlace1 =
mysqli_connect("localhost", "usuario", "password",
"autores");
if (!$enlace1) {
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
exit;
}
else
{
echo " <span style='color: red;'>Se realizó una conexión
apropiada a la base de datos de datos </span>" . PHP_EOL;
echo "Información del servidor " .
mysqli_get_host_info($enlace1) . PHP_EOL;
echo " \r\n";
echo " <br>";
// Realizar una consulta SQL se requiere que todos los campos
sean especificados, no funciona con *
}
$consulta1 = "SELECT Id_autor,Nombre,Apellido,Nacionalidad FROM
autores_registro WHERE Id_autor=$Id_autor";
$resultado1 = $enlace1 ->
query($consulta1);
$fila = $resultado1 -> fetch_array();
NOTA: En el caso de que se pase una
declaración a mysqli_query() que sea más larga que la
max_allowed_packet del servidor, los códigos de error devueltos
son diferentes dependiendo de si está utilizando el controlador
nativo MySQL ( mysqlnd) o la biblioteca cliente MySQL (
libmysqlclient). El comportamiento es el siguiente:
mysqlnden Linux devuelve un código de error de 1153. El mensaje
de error significa que tengo un paquete más grande que
max_allowed_packetbytes .
mysqlnden Windows devuelve un código de error 2006. Este mensaje
de error significa que el servidor ha desaparecido .
libmysqlclienten todas las plataformas devuelve un código de
error 2006. Este mensaje de error significa que el servidor ha
desaparecido .
$resultado1 = $enlace1 ->
query($consulta1); **** este es un proceso
por objetos no procedimental y es la ejecucion del query
$fila = $resultado1 -> fetch_array();
mysql_query()
envía una consulta única
(no se admiten consultas múltiples) a la base de datos
actualmente activa en el servidor asociado con el
archivolink_identifier.
Parámetros ¶
query
Una consulta SQL
La cadena de consulta no debe terminar con
punto y coma. Los datos dentro de la consulta deben tener
escapes adecuados .
link_identifier
La conexión MySQL. Si no se especifica el
identificador del enlace, se asume el último enlace abierto por
mysql_connect() . Si no se encuentra dicho enlace, intentará
crear uno como si se hubiera llamado a mysql_connect() sin
argumentos. Si no se encuentra o establece ninguna conexión,
E_WARNING se genera un error de nivel.
fetch_array(); Obtiene una fila de resultados
como una matriz numérica y como una matriz asociativa
actualiza.php (realiza la escritura en la
tabla y registro asociado)
<!DOCTYPE html>
<html>
<head>
<!-- Autor: Miguel Santos Montoya Ver 0.5 -->
if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "error de depuración: " . mysqli_connect_error() .
PHP_EOL;
exit;
}
echo " \n";
echo " Se realizó una conexión apropiada a la base de datos ! " .
PHP_EOL;
echo "Información del host: " . mysqli_get_host_info($enlace) .
PHP_EOL;
$actualizar= "UPDATE autores_registro SET Nombre =
'$Nombre',Apellido = '$Apellido', Nacionalidad = '$Nacionalidad'
WHERE Id_autor = '$Id_autor'";
//actualizar
$actualiza = mysqli_query($enlace, $actualizar);
echo "<p> Numero de Identificacion $Id_autor
ACTUALIZADO <p>";
<hr>
<h2>Registro realizado </h2>
<center> <input name="name" value="Regreso a la
pagina anterior"
onclick="history.back()"
type="button"> <br>
</center>
</body>
</html>
Y en la base de datos quedaría asi
Almacenar y
recuperar una imagen de una base de datos MySQL mediante PHP
Generalmente, cuando subimos un archivo de
imagen en PHP, la imagen subida se almacena en un directorio del
servidor y almacenamos el nombre del archivo en la base de datos.
realizaremos un cambio a la base de datos y tabla anterior
como demostracion de este proceso, agregaremos un campo llamado
fotografia de tipo varchar (35), en la siguiente imagen vemos los
campos a usar en esta tabla :
Ahora haremos el procedimiento para "subir" la fotografia /
imagen al servidor relacionándola con la base de datos, debemos
crear oro directorio en /var/www/html con el nombre de fotos, en
el caso de LINUX, en el caso de windows c:/wamp64/www/fotos (la
ruta deberas de cambiarla segun sea el caso en los siguientes
códigos, las imagenes en las paginas
que usare en los ejemplo puedes cambiarlos según te agrade.
width: 80px; height: 80px;" alt=""
src="images/cam_old.jpg"
align="middle"></a><br></div>
<!-- primero debo de
"subir" la fotografia por eso requiero la pagina
sube_foto.html-->
<form method="post" action="altas_f.php" name="form"
accept-charset="UTF-8" enctype
="multipart/form-data">
<!-- debo de indicar a que archivo
solicitar con php con su nombre completo ruta relativa -->
<fieldset>
<label for="Nombre"> Nombre </label> <input
type="text" name="Nombre" id="Nombre" size="35"
maxlength="35"/>
<br class="clear" />
<label for="Apellido"> Apellido </label><input
type="text" name="Apellido" id="Apellido" size="35"
maxlength="35"/>
<br class="clear" />
<label for="Nacionalidad">Nacionalidad
</label><input type="text" name="Nacionalidad"
id="Nacionalidad" size="35" maxlength="35"/>
<br class="clear" />
<label
for="fotografia">Foto</label><input type="text"
name="fotografia" id="fotografia" size="35" maxlength="35"
value="fotografia.jpg" />
<br class="clear" />
</fieldset>
<input type="submit" name="submit"
value="Procesar" />
<br class="clear" />
</form>
</body>
</html>
value="fotografia.jpg"
es el nombre que sera del campo por defecto pero este nombre
puede combaiarse por el nombre de la persona, clave,
identificador de su credencial de la empresa cualquier de
estos factores.
sube_foto.html
<!DOCTYPE html>
<html>
<head>
<!-- Autor: Miguel Santos Montoya Ver 0.5 -->
<font
color="#33ff33"><br><br><big><font
color="#990000">PAGINA DE REGISTRO INSERCION
FOTOGRAFIA</font></font></big><br>
</center>
<br>
<h3> AVISO: EL FORMATO DE LA FOTOGRAFIA DEBERA SER .jpg
.gif .jpeg DE OTRA FORMA NO SE ACEPTARA LA IMAGEN</h3>
<h3> Y EL TAMAÑO MENOR A 3 Mb </h3>
<left>
<form method="post" action="uploader.php"
enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000"
/>
<label for="fotografia">Fotografia
</label><input type="file" name="fotografia"
id="fotografia"></input>
<font
color="#33ff33"><br><br><big><font
color="#990000">PAGINA DE REGISTRO INSERCION IMAGEN /
FOTOGRAFIA</font></font></big><br>
</center>
<br>
<!-- NOTA: importante en caso que muestre
un error al subir la fotografia al directorio realizar esto:
esto se aplica en el caso que salga el error de : Undefined
array key PHP
pueden ser cualquiera de estas soluciones:
1.- cambiar a la funcion isset: if (isset($_POST['usuario']))
2.- operador de fusión de null en este ejemplo si alguno
de los valores esta vacío, la variable tendrá el valor null.
Luego en el if verificamos en positivo, para menos confusiones
$fotografia = $_POST["fotografia"]?? null;
3.- Operador Ternario
puedes usar un operador ternario
$usuario =!empty($_POST['txtusuario']) ? $_POST['txtusuario'] :
null;
-->
echo "Nombre: ".$_FILES['fotografia']['name'] . "<br>";
echo "Tipo: ".$_FILES['fotografia']['type'] . "<br>";
echo "Tamaño: ".($_FILES['fotografia']['size'] / 1024) . "
kB<br>";
//echo "Carpeta temporal: ".$_FILES['fotografia']['tmp_name'];
}
//ahora con la funcion move_uploaded_file lo guardaremos en el
destino que queramos
move_uploaded_file($_FILES['fotografia']['tmp_name'],'fotos/'.$_FILES['fotografia']['name']);
echo " este archivo sube al directorio
",'/var/www/html/fotos/'.$_FILES['fotografia']['name'];
//echo " este archivo sube a
".$_FILES['fotografia']['tmp_name'],'fotos/'.$_FILES['fotografia']['name'];
}
else
{
echo "Archivo Invalido!!, comprueba las restricciones.";
}
?>
<!-- como ejemplo para permitir el acceso
al directorio en linux
semanage fcontext -a -t httpd_sys_rw_content_t
'/var/www/html/fotos'
restorecon -v '/var/www/html/fotos'
-->
<center> <input name="name" value="Regreso a la pagina
anterior"
onclick="history.back()"
type="button"> <br> </center>
</body>
</html>
Usamos el botón Seleccionar archivo, y ubicamos la fotografia a
utilizar :
Al aplicar el botón Subir fotografia, la informacion que se
muestra, es para nuestros propositos de seguimiento del proceso
pero en el caso de producción esto no es necesario y peligroso de
mostrar, en esta imagen se observa como se "sube" la fotografia
desde uploader.php :
Aplicamos el botón Regreso a la pagina anterior y en la anterior
de nuevo Regreso a la pagina anterior segun sea necesario.
terminado de llenar los datos adicionales y aplicando el botón
Procesar llevando los datos a la BD usando el atchivo de php
altas_f.php
<?php
// mysqli
// Realiza el intercambio de variables desde el formulario:
// lado izquierdo tal como esta en la Base de Datos
// lado derecho como se capturaran en el formulario
if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "error de depuración: " . mysqli_connect_error()
. PHP_EOL;
exit;
}
echo " \n";
echo " Se realizó una conexión apropiada a la base de datos ! " .
PHP_EOL;
echo "Información del host: " . mysqli_get_host_info($enlace) .
PHP_EOL;
echo $fotografia;
$insertar = mysqli_query($enlace, "INSERT INTO autores_registro
(Nombre,Apellido,Nacionalidad,fotografia)
VALUES
('$Nombre','$Apellido','$Nacionalidad','$fotografia')");
<center>
<br>
<big><font color="#990000">PAGINA DE CONSULTA DE
DATOS / ACTUALIZACIONES
</font></big></font><br>
<big><big><br></big></big>
</center>
<br>
if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo " \n";
echo " Se realizó una conexión apropiada a la base de datos ! "
. PHP_EOL;
echo "Información del host: " . mysqli_get_host_info($enlace) .
PHP_EOL;
?>
<?php
// Metodo para enviar variables en la misma pagina definimos la
variable a enviar se define que variable se tomara
if(isset($_POST['submit']))
{
$control_id = $_POST['control_id'];
//envio de variable
}
?>
<!-- metodo para recibir datos desde la misma pagina a travez
de php
muestra el cuadro para colocar elvalor de la variable
anterior -->
// Realizar una consulta SQL se requiere que todos los campos
sean especificados, no funciona con *
$consulta = "SELECT
Id_autor,Nombre,Apellido,Nacionalidad,fotografia FROM
autores_registro WHERE Id_autor=$control_id";
$resultado = $enlace -> query($consulta);
$fila = $resultado -> fetch_array();
//pasa los campos a las variables
echo "<span style='color: blue;'>Extracción de la fila
-</span> <br><br>";
echo "Numero de control " . $fila["Id_autor"] .
"<br>";
<center> <input name="name" value="Regreso a la pagina
anterior" onclick="history.back()" type="button"> <br>
</center>
</body>
</html>
readonly="readonly"
solo permitimos la modificacion los datos no podemos modificar
su ID, por ese razón de esta instruccion en ese campo, la
fotografia seria igual, en caso de que se cambie debara ser
con el mismo nombre y usar la pagina correspondiente para
"subir" de nuevo la fotografia.
modificar.php (este ya lo habiamos
realizado anteriormente)
<!DOCTYPE html>
<html>
<head>
<!-- Autor: Miguel Santos Montoya Ver 0.5 -->
<h2> Nota: Se requiere el Número Identificador del autor
para acceder al registro</h3>
<h3>Modifica los campos necesarios el ID no se puede
modificar</h3>
</center>
<br>
</font>
<?php
$enlace = mysqli_connect("localhost", "usuario", "password",
"autores");
if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo "\n";
echo "Se realizó una conexión apropiada a la base de datos de
datos " . PHP_EOL;
echo "Información del servidor " .
mysqli_get_host_info($enlace) . PHP_EOL;
?>
<?php
// Metodo para enviar variables en la misma pagina definimos la
variable a enviar se define que variable se va a tomar
if(isset($_POST['submit']))
{
$Id_autor = $_POST['Id_autor'];
//envio de variable
}
?>
<!-- metodo para recibir datos desde la misma pagina a travez
de php
muestra el cuadro para colocar el valor de la variable
anterior -->
<form method="post" action="<?php echo
$_SERVER['PHP_SELF']; ?>">
<label for="Autor_id">Identificador autor</label>
<input type="text" name="Autor_id" id="Autor_id"
size="5"/><br>
<br>
<input type="submit" name="submit"
value="Comenzar"><br>
</form>
<?php
$Id_autor = $_POST["Id_autor"];
$enlace = mysqli_connect("localhost", "usuario", "password",
"autores");
// Realizar una consulta SQL se requiere que todos los campos
sean especificados, no funciona con *
$consulta = "SELECT
Id_autor,Nombre,Apellido,Nacionalidad,fotografia FROM
autores_registro WHERE Id_autor=$Autor_id";
$resultado = $enlace -> query($consulta);
$fila = $resultado -> fetch_array();
//pasa los campos a las variables
echo "<span style='color: blue;'>Extracción de la fila
-</span> <br><br>";
echo "Numero de Identificacion " . $fila["Id_autor"] .
"<br>";
$Id_autor = $fila["Id_autor"];
$Nombre = $fila["Nombre"];
$Apellido = $fila["Apellido"];
$Nacionalidad = $fila["Nacionalidad"];
$fotografia = $fila["fotografia"]:
?>
<?php
// Metodo para enviar variables en la misma pagina definimos la
variable a enviar se define que variable se va a tomar
if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." .
PHP_EOL;
echo "error de depuración: " .
mysqli_connect_error() . PHP_EOL;
exit;
}
echo " \n";
echo " Se realizó una conexión apropiada a la base de datos ! "
. PHP_EOL;
echo "Información del host: " . mysqli_get_host_info($enlace) .
PHP_EOL;
$actualizar= "UPDATE autores_registro
SET Nombre = '$Nombre',Apellido = '$Apellido',
Nacionalidad = '$Nacionalidad' WHERE Id_autor = '$Id_autor'";
//actualizar
$actualiza = mysqli_query($enlace, $actualizar);
echo "<p> Numero de Identificacion $Id_autor
ACTUALIZADO <p>";