Unidad 5

PHP - MySql - mariaDB

Introducción

Inclusión_de_código_PHP_en_una_página_HTML

Primeros_programas_en_PHP

Los_comentarios

La_orden_echo

Tipos_de_datos_en_PHP

PHP_tiene_tipado_dinámico

PHP_es_sensible_a_las_mayúsculas_y_minúsculas

Variables_asignadas_por_referencia

Forzado

Variables

Instrucción_for

Instrucción_if_..._else

Funciones

Instrucción_WHILE

Instrucciones_opendir_y_closedir

Interacción_con_los_clientes

JIT

El_JIT_de_PHP

Cómo_configurar_el_JIT

PHP__MySQL_mariaDB

Almacenar y recuperar una imagen de una Base de Datos




Introducción

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&aacute; usando Internet Explorer<br>";}
else {
    echo "No est&aacute; usando Internet Explorer";
   
}


?>
  </body>
</html>
 
&acute; 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 ñ
&Ntilde; para Ñ
&ntilde; 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.

Cadenas Almacenan variables alfanuméricas $cadena="Hola amigo";

Boleanas

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";

$sentido[3]="oir"; $sentido[4]="gusto"; $sentido[5]="oler";

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.

ejercicio2-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 2</title>
  </head>
 <body>
<?php
$ini = "Hola ";
$fin = " a todos";
$todo = $ini.$fin;
echo $todo;
?>

</body>
</html>

Resultado:



En Windows



PHP tiene tipado dinámico

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í ?

ejercicio3-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 3</title>
  </head>
 <body>

<?php
$n1=1;
$n2=2;
$suma=$n1+$n2;
echo "suma = ".$suma. "<br>";
echo "$n1+$n2";
?>


</body>
</html>


Resultado:




En Windows


Instrucción for

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

for ($n2=1; $n2<=10; $n2++)
          {
            echo "<td>", $n, "</td>";
         $n=$n+1;
        }

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.

ejercicio4-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 4</title>
  </head>
 <body>

<?php
echo "<table border=1>";
$n=1;
for ($n1=1; $n1<=10; $n1++)
{
echo "<tr>";
         for ($n2=1; $n2<=10; $n2++)
          {
            echo "<td>", $n, "</td>";
         $n=$n+1;
        }
echo "</tr>";

}
echo "</table>";
?>


</body>
</html>


Resultado:



En windows



Instruccion if ... else

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

ejercicio5-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 5</title>
  </head>
 <body>
<?php
$val1=10;
echo "<table border=1>";
$n=1;
  for ($n1=1; $n1<=$val1; $n1++)
  {
    if ($n1 % 2 == 0)
      {echo "<tr bgcolor=#bdc3d6>";}
   else
      echo "<tr>";

        for ($n2=1; $n2<=$val1; $n2++)
         {
          echo "<td>", $n, "</td>";
          $n=$n+1;
          }
     echo "</tr>";
}
echo "</table>";
?>


</body>
</html>


Resultado:



En Windows



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 )

ejercicio7-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 7</title>
  </head>
 <body>
 
<?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

        $i++;
          echo "<td>";
           echo "<a href=fotos/$archivo><img src=fotos/$archivo></a>";
           echo "</td>";

         }  // termina if dentro de while

       } // termina while

      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;

  
 return $rdo;
}

$i=0;
echo "<table border=1>";
$puntero = opendir('fotos');
$i=1;
while (false !== ($foto = readdir($puntero)))
{
if ($foto!="." && $foto!=".." && valida_foto($foto))
{
if ($i==1)
echo "<tr>";
echo "<td><a href='fotos/$foto'>";
echo "<img src='fotos/$foto' width=100 height=100></img>";
echo "</a></td>";
if ($i==4)
{echo "</tr>"; $i=0;}
$i++;
}
}
closedir($puntero);
echo "</table>";
?>

</body>
</html>

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:

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.


<INPUT TYPE="text" NAME="ciudad" VALUE=”pepe” SIZE=8 MAXLENGTH=20>

Cajas de texto para claves: idénticas a las cajas de texto, pero el texto que se escribe no está visible al usuario.


<INPUT TYPE="password" NAME="ciudad" SIZE=8 MAXLENGTH=20>

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).


<BR><INPUT TYPE="radio" NAME="musica" VALUE="1" checked>Jazz

<BR><INPUT TYPE="radio" NAME="musica" VALUE="2">Pop

<BR><INPUT TYPE="radio" NAME="musica" VALUE="3">Rock

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.

<INPUT TYPE=”hidden” NAME=”identificador” VALUE=”8”>

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:


$x = 5;
var_dump($x);

Regresara:

int(5)

Por ejemplo:

<!DOCTYPE html>
<html>
<body>

<pre>

<?php
var_dump(5);
var_dump("Jose");
var_dump(3.14);
var_dump(true);
var_dump([2, 3, 56]);
var_dump(NULL);
?>

</pre>

</body>
</html>

el resultado sera:

int(5)
string(4) "Jose"
float(3.14)
bool(true)
array(3) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(56)
}


ejercicio8a_php.html  y ejercicio8a_php.php

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:

ejercicio8a_php.html 

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio 8a html</title>
</head>
<body>

<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>



En estos ejemplos son idénticos en Windows

ejercicio8a_php.php

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio 8a php</title>
</head>
<body>

<!-- 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.

consideremos la siguiente tabla:


Operador

  Nombre

Ejemplo

Es cierto cuando:

==

Igual

$a == $b  

$a es igual a $b

===

Idéntico

$a === $b

$a es idéntico (en valor y tipo) a $b

!=, <>

Distinto

$a != $b

$a es distinto a $b

!==

No idéntico

$a !== $b

$a es distinto en valor o tipo a $b

<

Menor que

$a < $b

$a es menor que $b

>

Mayor que 

$a > $b

$a es mayor que $b

<=

Menor o igual    

$a <= $b

$a es menor o igual que $b

>=

Mayor o igual

$a >= $b 

$a es mayor o igual que $b


ejercicio8b_php.html 

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio 8b html</title>
</head>
<body>

<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>


ejercicio8b_php.php

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio 8b php</title>
</head>
<body>

<!-- 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 ";
   }
?>

</body>

</html>


Observe el valor de la comparación

ejercicio8c_php.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio 8c html</title>
</head>
<body>

<p>Estoy en HTML y enviare  hacia PHP:</p>

<form name="ejercicio8c" method="post" action="ejercicio8c_php.php">

<p> CÁLCULO DEL VOLUMEN DE UN CILINDRO </p>

<br>

Introduzca el diámetro en metros: <input type="text" name="diam" value="">

<br> <br>

Introduzca la altura en metros: <input type="text" name="altu" value="">

<br> <br>

<input value="Calcular" type="submit" />

</form>

</body>
</html>

ejercicio8c_php.php

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio 8c php</title>
</head>
<body>

<!-- inicio de php -->

<?php
echo "Estoy en PHP";
$diametro = $_POST['diam'];
$altura = $_POST['altu'];
$radio = $diametro/2;

$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>

veamos este efecto

ejercicio8c_php.php


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio 8c_php</title>
</head>
<body>

<!-- inicio de php -->

<?php
echo "Estoy en PHP";
$diametro = $_POST['diam'];
$altura = $_POST['altu'];
$radio = $diametro/2;

$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

<?php
echo $_POST['nom_variable'];
echo $_REQUEST['nom_variable'];
?>

veamos este ejemplo:

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

ejercicio9_php.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio 9 html</title>
</head>
<body>

<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.

Explicaremos las siguientes lineas:

<form method="post" action="ejercicio10_php.php"  enctype="multipart/form-data">

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:

text/plain

text/html

image/jpeg

image/png

audio/mpeg

audio/ogg

audio/*

video/mp4

application/octet-stream

<input type="hidden" name="MAX_FILE_SIZE" value="3000000" />

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.

<label for="fotografia">Fotografia/Imagen  </label><input type="file" name="fotografia" id="fotografia"></input>

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.


Para las casillas de verificación:


<input type="checkbox" name="read" id="read" value="Si" />

<label for="read">Lee las condiciones de uso</label>


Es importante que el atributo for utilizado en la etiqueta HTML label tenga el mismo valor que el atributo id del campo de entrada.

Para los botones:

<input type="radio" id="radio" value="De acuerdo" />
<label for="read">De Acuerdo</label>

Con la segunda opción, se incluye el pie de foto.

<label>

<input type="checkbox" name="read" value="Si" />

He leido las condiciones

</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>


<input type="submit" name="submit" value="Subir fotografia"></input>

</form>

</body>
</html>

ejercicio10_php.php

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<title>ejercicio10_php.php</title>
</head>
<body>
<?php
$fotografia = $_POST["fotografia"];
// $fotografia se recibe desde el HTML, $_POST se lo entrega a la variable $fotografia
if ((($_FILES["fotografia"]["type"] == "image/gif")
  || ($_FILES["fotografia"]["type"] == "image/jpeg")
  || ($_FILES["fotografia"]["type"] == "image/jpg"))
  && ($_FILES["fotografia"]["size"] < 3000000))
{

// revisa y es uno de lo tipos de formato de imagen que se solicitan y el tamaño

if ($_FILES['fotografia']['error'] > 0)
{
echo "Error: " . $_FILES['fotografia']['error'] . "<br>";
}
else {

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:

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.

Paso 1:

altas.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta "charset=UTF-8">

<style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 5px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;   
}
</style><title>ejercicio altas html</title>
</head>
<body>


<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).

Parametros:

mysqli_connect(host, username, password, dbname, port, socket)

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)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta "charset=UTF-8">
<title>ejercicio altas php</title>
</head>
<body>

<?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

$Nombre = $_POST["Nombre"];
$Apellido = $_POST["Apellido"];
$Nacionalidad = $_POST["Nacionalidad"];

$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 ! " . 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')");

echo "<p> REGISTRO DE $Nombre  $Apellido <p>";

mysqli_close($enlace);


?>

<script language="JavaScript">
alert("Registro almacenado");
</script>

<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:

consultas.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta "charset=UTF-8"><title>ejercicio consultas html</title>
</head>
<body>


<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>

<label for="Id Autor"> Id_autor </label> <input type="text" name="Id_autor" id="Nombre" size="5" maxlength="5"/>
<br class="clear" />

</fieldset>
<input type="submit" name="submit" value="Procesar" />
<br class="clear" /> 

</form>

</body>
</html>

consultas.php

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta "charset=UTF-8">
<style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 5px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;   
}
</style>

<title>ejercicio cambios php</title>
</head>
<body>
<big><font color="#990000">PAGINA DE CONSULTA DE DATOS DE AUTORES</font></big></font><br>

<?php
$enlace = mysqli_connect("localhost", "usuario", "password", "autores");
//servidor,usuario,contrseña_MySQL, nombre_base_de_datos

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";

//autores_registro es la tabla a usar

$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 "Id del autor " . $fila["Id_autor"] ."<br>";

$Id_autor = $fila["Id_autor"];
//"identificador del autor"   "
$Nombre = $fila["Nombre"];
//"Nombre"
$Apellido = $fila["Apellido"];
//"Apellido"
$Nacionalidad = $fila["Nacionalidad"];
//"Nacionalidad";
?>

<?php
if(isset($_POST['submit']))
{
$Id_autor = $_POST['Id_autor'];
//envio de variable
}
?>

<!-- en las etiquetas siguientes solo son de lectura readonly="readonly" -->

<fieldset>
<label for="Id_autor">Id Control</label><input type="text" name="Id_control" size="5" id="Id_autor"  readonly="readonly" value="<?php echo $Id_autor ?>" />
<br class="clear" />
<label for="Nombre"> Nombre </label><input type="text" name="Nombre" size="35" id="Nombre"  readonly="readonly" value="<?php echo $Nombre ?>" />
<br class="clear" />
<label for="Apellido"> Apellido </label><input type="text" name="Apellido" size="35" id="Apellido"  readonly="readonly" value="<?php echo $Apellido ?>" />
<br class="clear" />
<label for="Nacionalidad"> Nacionalidad </label><input type="text" name="Nacionaliadad" size="35" id="Nacionalifdad"  readonly="readonly" value="<?php echo $Nacionalidad ?>" />
<br class="clear" />
</fieldset>
<br>
<center> <input name="name" value="Anterior" onclick="history.back()" type="button"> <br>
</center>


</body></html>


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 -->
 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta "charset=UTF-8">

  <title>Solicita consulta</title>
 </head>
 <body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 204);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
 
<center>
<big><font color="#990000">PAGINA DE CONSULTAS / MODIFICACION DE DATOS</font></big></font><br>
<br>
<center>
<div style="text-align: left;"><big><big>Consultar Datos de Autores</big></big> <a href="modificar.php">
<img style="border: 2px solid ; width: 80px; height: 80px;" alt="" src="images/modifi_datos.png" align="middle"></a><br>
</div>
<br>
<br>
</center>

<br>

<center> <input name="name" value="Regreso a la pagina anterior" onclick="history.back()" type="button"> <br>
</center>
</body>
</html>



modificar.php (proceso de consulta /modificación de los datos de la tabla de la BD)

<!DOCTYPE html>
<html>
<head>
<!-- Autor: Miguel Santos Montoya Ver 0.5 -->
 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta "charset=UTF-8">
  <title>Solicita modificacion</title>
 </head>

  <style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 5px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;   
}
</style>

</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 -->

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label for="Id_autor">Identificador autor</label>
<input type="text" name="Id_autor" id="Id_autor" size="5"/><br>
<br>
<br>
<input type="submit" name="submit" value="Comenzar"><br>
</form>


<?php

$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();

//pasa los campos a las variables

$Id_autor = $fila["Id_autor"];
$Nombre = $fila["Nombre"];
$Apellido = $fila["Apellido"];
$Nacionalidad = $fila["Nacionalidad"];

echo "<span style='color: blue;'>Extracción de la fila -</span> <br><br>";
echo "Numero de Identificacion " .  $fila["Id_autor"] . "<br>";

?>

<form method="post" enctype ="multipart/form-data" accept-charset="UTF-8" action="actualiza.php">
<fieldset>
<label for="Id_autor">Identificador autor </label><input type="text" name="Id_autor" size="5" id="Id_autor" readonly="readonly"  value="<?php echo $Id_autor ?>" />
<br class="clear" />
<label for="Nombre">Nombre</label><input type="text" name="Nombre" size="35" id="Nombre" value="<?php echo $Nombre ?>" />
<br class="clear" />
<label for="Apellido">Apellido</label><input type="text" name="Apellido" size="35" id="Apellido" value="<?php echo $Apellido ?>" />
<br class="clear" />
<label for="Nacionalidad">Nacionalidad</label><input type="text" name="Nacionalidad" id="Nacionalidad" size="35" value="<?php echo $Nacionalidad?>" />
<br class="clear" />
<input type="submit" name="submit" value="Procesar" />

<br>
<br>
</body>
</html>


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 -->
 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta "charset=UTF-8">
 <title>Realiza Actualizacion en BD</title>
 </head>

  <?php

$Id_autor = "";
$Nombre = ""; 
$Apellido = "";
$Nacionalidad = "";

// Realiza el intercambio de variables desde el formulario:

$Id_autor = $_POST["Id_autor"];
$Nombre = $_POST["Nombre"]; 
$Apellido = $_POST["Apellido"];
$Nacionalidad = $_POST["Nacionalidad"]; 
 
$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 ! " . 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>";

mysqli_close($enlace);

?>
<script language="JavaScript">
alert("Registro almacenado Autores");
</script>

<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.

altas_f.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta "charset=UTF-8">
<style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 5px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;   
}
</style>
<title>ejercicio altas fotos html</title>
</head>
<body>

<div style="text-align: left;"><big>Subir foto nombre_imagen.jpg, y el nombre pasarlo al campo foto</big></div>

<div> <a href="sube_foto.html"><img style="border: 2px solid ;

 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 -->
 
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> Sube Fotografia</title>
   
<style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 15px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;   
}
</style></head>
<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 204);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<center>


<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>

<input type="submit" name="submit" value="Subir fotografia"></input>
</form>

<!--
Para linux
Establecer el directorio como usuario y grupo apache
 y chmod 775

drwxrwxr-x. 2 apache apache    46 mar  3 20:50 photo

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/fotos'
(permite la escritura en el directorio)

si no funciona use:

ausearch -c 'httpd' --raw | audit2allow -M my-httpd
semodule -i my-httpd.pp
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/fotos'
setsebool -P httpd_unified 1
service httpd restart

-->

<br>
<br>
<center> <input name="name" value="Regreso a la pagina anterior"
       onclick="history.back()" type="button"> <br>
    </center>

</body>
</html>

uploader.php (aquí lo muestro ya que es necesario para el siguiente paso)

<!DOCTYPE html>
<html>
<head><!-- Autor: Miguel Santos Montoya Ver 0.5 -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> Insercion de Datos Fotografia uploader</title>
   
<style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 5px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;   
}
</style></head>
<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 204);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<center>

<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;
-->


<?php
$fotografia = $_POST["fotografia"];
//echo $fotografia;
if ((($_FILES["fotografia"]["type"] == "image/gif")
  || ($_FILES["fotografia"]["type"] == "image/jpeg")
  || ($_FILES["fotografia"]["type"] == "image/jpg"))
  && ($_FILES["fotografia"]["size"] < 3000000))
{


if ($_FILES['fotografia']['error'] > 0)
{
echo "Error: " . $_FILES['fotografia']['error'] . "<br>";
}
else {

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


altas_f.php


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta "charset=UTF-8">
<title>ejercicio altas php</title>
</head>
<body>

<?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

$Nombre = $_POST["Nombre"];
$Apellido = $_POST["Apellido"];
$Nacionalidad = $_POST["Nacionalidad"];
$fotografia =$_POST["fotografia"];

$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 ! " . 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')");

echo "<p> REGISTRO DE $Nombre  $Apellido <p>";

mysqli_close($enlace);

?>
<script language="JavaScript">
alert("Registro almacenado");
</script>

<h2>Registro realizado </h2>
 <center> <input name="name" value="Regreso a la pagina anterior"
       onclick="history.back()" type="button"> <br>
    </center>

</body>
</html>






Ahora para mostrar / modificar los datos anteriores:

modificar.html

<!DOCTYPE html>
<html>
<head>
<!-- Autor: Miguel Santos Montoya Ver 0.5 -->
 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Modificacion Datos</title>
   
<style type="text/css"></style>
</head>
<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 204);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<div align="center"><big><font color="#cc0000"><big><big>MODIFICACION DE DATOS </big></big></font></big><br>
<br>
</div>

<br>
<big><font color="#990000">PAGINA MODIFICACION DE DATOS </font></big></font><br>
</big>
<div style="text-align: left;"><big><big>Modificacion de Datos Autores</big>.</big><a href="consulta_datos.php">
<img style="border: 2px solid ; width: 85px; height: 105px;" alt="" src="images/modifi_datos.png" align="middle"></a><br>
</div>
<br>
<br>
<center> <input name="name" value="Regreso a la pagina anterior" onclick="history.back()" type="button"> <br>
</center>
</body>
</html>


consulta_datos.php

<!DOCTYPE html>
<html><head>
<!-- Autor: Miguel Santos Montoya Ver 0.5 -->
 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Cecati 89 Consulta de Datos de Personal</title>

  <style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 5px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;  
}
</style>
</head><body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 204);" alink="#ee0000" link="#0000ee" vlink="#551a8b">

<center>
<br>
<big><font color="#990000">PAGINA DE CONSULTA DE DATOS / ACTUALIZACIONES </font></big></font><br>
<big><big><br></big></big>
</center>
<br>

<?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 ! " . 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 -->

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label for="id_control">Identificacion Autor </label>
<input type="text" name="control_id" id="control_id" size="5"/><br>
<input type="submit" name="submit" value="Comenzar"><br>
</form>


<?php

$Id_autor = $_POST["control_id"];
$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=$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>";


$Id_autor = $fila["Id_autor"];
//echo "Id_autor             " . $fila["Id_autor"] . "<br>";
$Nombre = $fila["Nombre"];
//echo "Nombre:                  " . $fila["Nombre"] . "<br>";
$Apellido= $fila["Apellido"];
//echo "Apellido:                  " . $fila["Apellido"] . "<br>";
$Nacionalidad= $fila["Nacionalidad"];
$fotografia = $fila["fotografia"];

?>

<?php
if(isset($_POST['submit']))
{
$Id_autor = $_POST['control_id'];
//envio de variable
}
?>
<?php
$foto="fotos/";
$ruta=$foto.$fotografia;
//echo $fotografia;
//echo $ruta;
  
?>

<img src="<?php echo $ruta ?>" width="150px"> Imagen fotografia de <?php echo $Nombre." ".$Apellido; ?><br>

<form method="post" accept-charset="UTF-8" enctype ="multipart/form-data" action="actualiza.php">
<fieldset>
 
<label for="Id_autor">Id_autor</label><input type="text" name="Id_autor" size="5" id="Id_autor"  readonly="readonly" value="<?php echo $Id_autor ?>" />
<br class="clear" />
<label for="Nombre">Nombre</label><input type="text" name="Nombre" size="35" id="Nombre" value="<?php echo $Nombre ?>" />
<br class="clear" />
 <label for="Apellido">Apellido</label><input type="text" name="Apellido" size="35" id="Apellido"  value="<?php echo $Apellido ?>" />
<br class="clear" />
<label for="Nacionalidad">Nacionalidad</label><input type="text" name="Nacionalidad" size="35" id="Nacionalidad"  value="<?php echo $Nacionalidad ?>" />
<br class="clear" />
<label for="fotografia">Fotografia</label><input type="text" name="fotografia" size="15" id="fotografia" value="<?php echo $fotografia ?>"/>
<br class="clear" />
<input type="submit" name="submit" value="Procesar" />
<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 -->
 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta "charset=UTF-8">
 <title>Solicita modificacion</title>
 </head>

  <style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 5px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;   
}
</style>

</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>

<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(isset($_POST['submit']))
{
$Id_autor = $_POST['Autor_id'];
//envio de variable
}
?>
<?php
$foto="fotos/";
$ruta=$foto.$fotografia;
//echo $fotografia;
//echo $ruta;
?>

<img src="<?php echo $ruta ?>" width="100px"> Imagen fotografia de <?php echo $Nombre." ".$Apellido; ?><br>


<form method="post" enctype ="multipart/form-data" accept-charset="UTF-8" action="actualiza.php">
<fieldset>
<label for="Id_autor">Identificador autor </label><input type="text" name="Id_autor" size="5" id="Id_autor" readonly="readonly"  value="<?php echo $Id_autor ?>" />
<br class="clear" />
<label for="Nombre">Nombre</label><input type="text" name="Nombre" size="35" id="Nombre" value="<?php echo $Nombre ?>" />
<br class="clear" />
<label for="Apellido">Apellido</label><input type="text" name="Apellido" size="35" id="Apellido" value="<?php echo $Apellido ?>" />
<br class="clear" />
<label for="Nacionalidad">Nacionalidad</label><input type="text" name="Nacionalidad" id="Nacionalidad" size="35" value="<?php echo $Nacionalidad?>" />
<br class="clear" />
<input type="submit" name="submit" value="Procesar" />

<br>
<br>
</body>
</html>

actualiza.php

<!DOCTYPE html>
<html>
<head>
<!-- Autor: Miguel Santos Montoya Ver 0.5 -->
 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta "charset=UTF-8">
 <title>Realiza Actualizacion en BD</title>
 </head>

  <style type="text/css">
form label {
    float: left;
    width: 180px;
    margin-bottom: 5px;
    margin-top: 5px;
}
.clear {
display: block;
    clear: both;
    width: 100%;   
}
</style>

<?php

$Id_autor = "";
$Nombre = ""; 
$Apellido = "";
$Nacionalidad = "";

// Realiza el intercambio de variables desde el formulario:

$Id_autor = $_POST["Id_autor"];
$Nombre = $_POST["Nombre"]; 
$Apellido = $_POST["Apellido"];
$Nacionalidad = $_POST["Nacionalidad"]; 
 
$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 ! " . 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>";

mysqli_close($enlace);

?>
<script language="JavaScript">
alert("Registro almacenado Autores");
</script>

<hr>
<h2>Registro realizado </h2>
 <center> <input name="name" value="Regreso a la pagina anterior"
       onclick="history.back()" type="button"> <br>
    </center>
</body>
</html>


Si has perdido la contraseña de tu usuario root, no te preocupes, es posible restablecerla siguiendo estos pasos.

Si el servidor se encuentra en una maquina remota debemos de ingresar a esta mediante SSH 

inicias como administrador  (su -)

Lo primero que debemos de hacer es detener el servidor.

> mysql.server stop

> service mysqld stop

> mysqld stop

Una vez el servidor se encuentre detenido, debemos de reiniciarlo en un modo seguro.

  mysqld_safe --skip-grant-tables --skip-networkin

--skip-grant-tables Permite conectarnos al servidor sin la necesidad de un password, además de otrogar todos los privilegios a la sesión.

--skip-networkin Detiene la escucha de peticiones TCP/IP

Ahora, en una nueva pestaña, debemos de conectarnos al servidor utilizando el usuario root

mysql -u root

Una vez dentro del servidor, debemos de trabajar con la base de datos MySQL

USE mysql;

Con el cambio de base de datos haremos la actualización.

UPDATE user SET password=PASSWORD('tu_password') WHERE user='root';

Si la actualización fue exitosa debemos de salir del servidor

FLUSH PRIVILEGES;

exit

El paso final es detener el servidor en modo seguro. Iniciamos el servidor como te costumbre y nos autenticamos, la contraseña ya estará funcionando.

mysql -u root -p