PHP – MySQL
Abrimos una nueva máquina
virtual Debian, y comenzamos la instalación.
#
apt-get update
#
apt-get upgrade
# apt-get install ssh
Instalaremos el servidor Apache
#
apt-get install apache2
Paquetes necesarios para la ejecución de páginas web escritas en
PHP
# apt-get install php5
libapache2-mod-php5 php5-cli php5-mysql
Servidor de bases de datos
#
apt-get install mysql-server
Instalar estos otros paquetes
#
apt-get install mysql-client mysql-admin mysql-query-browser
libmysqlclient15-dev
Adminsitrador gráfico para MySQL phpMyAdmin
# apt-get install phpmyadmin
ó
# aptitude install phpmyadmin
Acceso a phpmyadmin
# ln -s /usr/share/phpmyadmin /var/www/phpmyadmin
Comprobamos el usuario y
contraseña de acceso a la Base de Datos
# mysql -h localhost -u root -p
# mysql -h localhost -u root -p
Nos conectamos remotamente
desde el navegador de nuestra máquina real a nuesto phpmyadmin para crear la
Base de datos y la tabla con la que vamos a comenzar a trabajar.
http://192.168.1.198/phpmyadmin
Ya podemos comenzar a trabajar
con PHP y MySQL !!!
Para conectar con la BD:
conectar.php
// Crear conexion
$con=mysqli_connect("localhost","root","root","bd_mjesus");
// Confirmas conexion
if (mysqli_connect_errno())
{
echo "Fallo
en la conexion a BD: " . mysqli_connect_error();
}else{
echo
"Conexion realizada correctamente";
}
?>
Página index del formulario:
index.html
BASE DE DATOS DE PERSONAS
NOMBRE:
APELLIDOS:
EDAD:
DATOS:
Conexión a BD e inserción
de datos: insertar.php
//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");
// Comprueba conexion
if
(mysqli_connect_errno())
{
echo "Fallo
al conectar a la BD: " . mysqli_connect_error();
}
//Inserta desde formulario
$sql="INSERT INTO personas (nombre, apellidos, edad, fecha,
datos)
VALUES
('$_POST[nombre]','$_POST[apellidos]','$_POST[edad]',now(),'$_POST[datos]')";
if
(!mysqli_query($con,$sql))
{
die('Error: ' .
mysqli_error($con));
}
echo "Datos de Persona introducida en la Base de Datos
correctamente";
echo "";
echo "Volver a INICIO
>>";
mysqli_close($con);
?>
Conexión a BD y consulta
de datos: vertodo.php
//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");
// Comprueba conexion
if (mysqli_connect_errno())
{
echo "Fallo
al conectar a la BD: " . mysqli_connect_error();
}
echo "
PERSONAS GUARDADAS EN LA BASE DE DATOS
";
//Consulta de TODOS los datos de la BD
$result =
mysqli_query($con,"SELECT * FROM personas");
//Muestra los resultados de la consulta
while($row =
mysqli_fetch_array($result))
{
echo
"NOMBRE: " . $row['nombre'] .
"";
echo
"APELLIDOS: " . $row['apellidos'] .
"";
echo
"EDAD: " . $row['edad'] .
"";
echo
"FECHA: " . $row['fecha'] .
"";
echo "DATOS:
" . $row['datos'] .
"";
echo
"
";
";
}
mysqli_close($con);
echo "Volver a INICIO
>>";
?>
Conexión a BD y consulta
de datos: buscar.php
//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");
// Comprueba conexion
if
(mysqli_connect_errno())
{
echo "Fallo
al conectar a la BD: " . mysqli_connect_error();
}
echo "
BUSCAR PERSONAS
";
//Consulta de NOMBRE mediante formulario en la BD
echo "
";
echo "NOMBRE a buscar:
";
";
echo "";
echo
"
";
$result =
mysqli_query($con,"SELECT * FROM personas WHERE
nombre='$_POST[nombre]'");
//Muestra los resultados de la consulta
while($row =
mysqli_fetch_array($result))
{
echo
"NOMBRE: " . $row['nombre'] .
"";
echo
"APELLIDOS: " . $row['apellidos'] .
"";
echo
"EDAD: " . $row['edad'] .
"";
echo
"DATOS: " . $row['datos'] . "";
echo
"
";
";
}
mysqli_close($con);
echo "Volver a INICIO
>>";
?>
Conexión a BD y borrar
datos: borrar.php
//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");
// Comprueba conexion
if
(mysqli_connect_errno())
{
echo "Fallo
al conectar a la BD: " . mysqli_connect_error();
}
//Inserta desde formulario
$sql="DELETE FROM personas";
if
(!mysqli_query($con,$sql))
{
die('Error: ' .
mysqli_error($con));
}
echo "
SE HA BORRADO TODOS LOS DATOS DE LA BASE DE DATOS
";
echo "";
echo "Volver a INICIO
>>";
mysqli_close($con);
?>
Conexión a BD y borrar
datos por persona: borrar.php
//Conecta con BBDD
$con=mysqli_connect("localhost","root","root","bd_mjesus");
// Comprueba conexion
if
(mysqli_connect_errno())
{
echo "Fallo
al conectar a la BD: " . mysqli_connect_error();
}
echo "
BUSCAR PERSONAS
";
//Consulta de NOMBRE mediante formulario en la BD
echo "
";
echo "NOMBRE a buscar:
";
";
echo "";
echo
"
";
$result =
mysqli_query($con,"DELETE FROM personas WHERE
nombre='$_POST[nombre]'");
echo "
SE HA BORRADO TODOS LOS DATOS DE LA PERSONA $_POST[nombre]
";
mysqli_close($con);
echo "Volver a INICIO
>>";
?>
Redis y Sesiones en PHP.
Vamos a usar ahora PHP
con conexión a una Base de Datos, pero no va a ser MySQL, en este caso
usaremos Redis.
También veremos en este caso el
uso de sesiones.
Como funcionan las sesiones, …
El protocolo HTTP es stateless
(sin estado).
Esto significa que no guarda la
sesion del usuario que se encuentra en el momento conectado.
Esto es al menos en teoría,
pero en la práctica esa no es nuestra experiencia cuando entramos en una web
como usuarios.
POr ejempo, al navegar en un
shopping site, el website "recuerda" que productos pusimos en la
cesta.
¿Cómo trabaja, entonces ...?
La información adicional es
salvada y enviada con nuestra petición al web server mediante el uso de
cookies.
El uso de cookies se basa en
variables key/value, es decir variables que pueden almacenarse en el
sistema cliente y enviarse en una próxima petición al server.
Una cookie (o galleta
informática) es una
pequeña información enviada por un sitio web y almacenada en el navegador del
usuario, de manera que el sitio web puede consultar la actividad previa del
usuario.
Sus principales funciones son:
- Llevar
el control de usuarios: cuando un se introduce un nombre de usuario y contraseña, se
almacena una cookie para que no tenga que estar introduciéndolas para cada
página del servidor.
Sin embargo, una cookie no identifica solo a una persona, sino a una combinación de computador-navegador-usuario.
Conseguir información sobre los hábitos de navegación del usuario, e intentos de spyware (programas espía), por parte de agencias de publicidad y otros.
Esto puede causar problemas de privacidad y es una de las razones por la que las cookies tienen sus detractores.
Originalmente, sólo podían ser almacenadas por petición de un CGI desde el servidor, pero Netscape dio a su lenguaje Javascript la capacidad de introducirlas directamente desde el cliente, sin necesidad de CGIs.
En un principio, debido a errores del navegador, esto dio algunos problemas de seguridad.
Las cookies pueden ser borradas, aceptadas o bloqueadas según desee, para esto sólo debe configurar convenientemente el navegador web.
El mecanismo
Cuando estamos en el server, estos son los pasos a tener en cuenta
al escribir código PHP.
1. Una petición llega desde el cliente, sin cookie(s)
2. Se envía la respueta, incluyendo cookie(s).
3. Llega la próxima petición. Puesto que cookie(s)
fueron ya enviadas ellas han sido
devueltas a nosotros en esta posterior petición.
4. Se envía la próxima respuesta, también con cookie(s)
(cambiadas o no).
5. Pasos 3-4 son repetidos indefinidamente.
La cuestión importante de recordar es que , para una primera
visita, desde un nuevo cliente (o alguien que limpia sus cookies), "no
habrá cookies".
Otra cosa a tener en cuenta es que las cookies son devueltas al
server desde el cliente en siguientes peticiones por "convención". No
todos los clientes harán esto automáticamente.
Lo más importante de recordar acerca de cookies es que no puedes
"confiar" en los datos.
Cuando una cookie es enviada al cliente, este la almacena en plain
text en aquel sistema, luego los usuarios pueden editar cookies a su antojo,
como agregar y elminar cookies facilmente.
Trabaja con cookies en PHP
Puesto que PHP está diseñado para resolver problemas Web, entonces
tiene algunas grandes caracterísitcas para trabajar con cookies. Para 'set' una
cookie usa la función 'setcookie()' :
setcookie("visitado",true);
...
?>
El array 'superglobal' $_COOKIE contiene las keys y valores
de las cookies que fueron enviadas en las peticiones.
En nuestro script PHP del lado servidor, nos interesa chequear los
valores de $_COOKIE y usar la función setcookie.
Veamos las cookies enviadas por el server
Usando el cliente curl podemos crear la petición.
Curl además de mostrar la respuesta del server, le podemos indicar
de forma sencilla donde guardar las cookies recibidas y luego por ejemplo,
decidir editar dicha información.
$ curl -c cookie.txt
http://localhost/quiz/index.html
Con la opción -b puedes enviar cookies junto con la
petición.
Así que puedes probar realizar peticiones a tu script del quiz
salvando las cookies, copiarlas a un nuevo fichero, editarlo, realizar cambios
y lanzar una nueva petición teniendo en cuenta ese fichero, sería:
$ curl -b cookie.back
http://localhost/quiz/index.html
Pero como todavía puedes no tener trabajando al quiz puedes
practicarlo con un script que registre visitas, podría ser:
if(!isset($_COOKIE['visitado'])) {
echo " Es tu primer visita
" ;
" ;
$j=1;
}
else {
$j=$_COOKIE['visitado'];
echo
" Visita número " . ++$j .
"
" ;
}
setcookie("visitado",$j);
?>
$ curl -c cookie.txt
http://localhost/2_mecanismo_cookie1.php
Vamos a instalar REDIS:
Nos descargamos a través del repositorio git la
version de la Base de Datos REDIS inestable desde: https://github.com/antirez/redis/tree/unstable
Instalamos el servidor de Base de Datos a través
del repositorio y no a través de apt-get install. Lo hacemos así porque
queremos, porque se podría haber hecho
por apt-get install.
Para ver que versión se ha descargado: $ apt-cache showpkg redis-server
Te aconseja también cual te descargaría, o que
actualizaciones te haría.
Para ver la versión de mi Ubuntu: $ uname -a
Vemos que versión pertenece en la URL: http://packages.ubuntu.com/search?keywords=redis-server
Ahora construyo, …
1)
NO HACE FALTA el ./configure
2)
make → este es el que compila. Se ha
creado entre otros, src/redis.server
3)
$ ./redis-server → vemos la versión(CTR-C)
4)
nano redis.conf
demonize yes
demonize yes
5)
cd src
./redis-server ../redis.conf
./redis-server ../redis.conf
**NOTA:
2.9.11 → desde repositorio(la de desarrollo)
2.9.11 → desde repositorio(la de desarrollo)
2.8.3 → tar.gz para construir. ESTABLE
2.2.12 → desde repositorio(la de
desarrollo). ESTABLE
ACTIVIDAD:
- conectar con el servidor redis
- conectar con un set
$
./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set miset nombre
OK
127.0.0.1:6379>
get miset
"nombre"
Pongo este código a la cabecera de mi
bienvenida.php
#conectar con la base de datos
$db = new
Redis();
$db->connect('localhost',6379);
$db->sadd('miset',$_POST['nombre']);
?>
Ahora añado al codigo de cabecera del PHP de la
conexión a la Base de datos lo siguiente, quedando así:
#conectar con la base de datos
$db = new
Redis();
$db->connect('localhost',6379);
$db->sadd('miset',$_POST['nombre']);
if($db->sismember('nombres',$name))
{
echo "
....existente en la BD no graba...
";
....existente en la BD no graba...
";
}
else {
$db->sadd('nombres',$name);
echo
"
....grabado...
";
....grabado...
";
}
?>
Compruebo que se ha guardado el dato y se ha
creado la variable miset
$ cd
/home/mjesus/redis/src/
$
./redis-cli
> keys *
1) "foo"
2) "miset"
> smembers miset
> sismember miset pepe
(integer) 1
Ahora, lo primero que debemos hacer es
inicializar el servidor Redis, entrar en este y crear un usuario:
$ cd ~/redis/src
$ ./redis-server
../redis.conf
$ ./redis-cli
> sadd miset "pepe"
session_start();
if
(!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
echo $_SESSION['count'];
}
if (!isset($_GET['login'])
and !isset($_SESSION['login'])) {
echo "Debes hacer login";
exit;
}
if(!isset($_SESSION['login'])){
if(isset($_GET['login'])){
echo
"Conectado con la base de datos\n";
$db = new Redis();
$db->connect('localhost',6379);
$name=$_GET['login'];
if
($db->sismember('miset',$name)){
echo "OK, login realizado";
$_SESSION['login']=$name;
}else{
echo "usuario NO encontrado";
exit;
}
}
}
if(isset($_GET['logout'])){
unset($_SESSION['login']);
}
?>
Como
usar pygments en PHP
Pygment
es una función de PHP que proporciona una interfaz fácil de comando resaltador
de sintaxis. Pygmentize es una interfaz de línea de comandos a la
biblioteca Pygments, escrito en Python. Esto hace que sea fácil de Copy'n'Paste
de código en bruto en los documentos HTML + PHP.
# sudo apt-get
install python-pygments
ejemplo:
pygmentize print
($ some_python_code,
$ language = "python", $ style = "monokai",
$ TabWidth = 4, $ extra_opts = "-O linenos = mesa, hl_lines = '7 8 9 '");
$ TabWidth = 4, $ extra_opts = "-O linenos = mesa, hl_lines = '7 8 9 '");
?>
$code = '# Look for string:\ngrep -i string
sample.php';
/ / La lista de ~ 197
idiomas soportados se puede ver mediante la ejecución de "pygmentize
-L"
$language =
"bash";
/ / La lista de los 18
estilos admitidos se puede ver mediante la ejecución de
"pygmentize-L"
$style =
"fruity";
$tabwidth=4
/ / Esta cadena se pasa
directamente en la línea de comandos.
/ / Debe comenzar con
"O", de acuerdo a los docs pygmentize.
/
/$extra_opts="-O linenos=table,linenostart=57,hl_lines='69'"
$extra_opts=""
/ / Tenga en cuenta que
sólo se requieren los tres primeros argumentos.
Dejamos
$html = pygmentize(
$code, $language, $style );
print $html;
/ / imprimirlo en la página
... o lo que sea. Es sólo una cadena de
HTML y CSS.
?>
Comentarios
Publicar un comentario
Si te ha gustado, haz un comentario, ..., GRACIAS