Web Dinámicas: php, mysql

Por Paco Aldarias Raya

Impreso: 18 de abril 2007

Email: pacolinux arroba inicia punto es

Web: http://aldarias.es/pacodebian

Con Linux Debian. En Valencia (España)

El documento tiene version .html, y .pdf, cambiando en el navegador la parte final podrás acceder a ambos.

Este documento es de libre reproducción siempre que se cite su fuente.

Realizado con: LATEX

Índice General

1 Versiones


2 Introducción

Vamos a ver la forma de poder crear páginas web de forma dinámica.

Aquí se describe el proceso de instalación y puesta en marcha, además de un ejemplo.

Php en un lenguaje incluido dentro de las páginas web, que permite consultar bases de datos y construir las páginas web.

Mysql es un motor de base de datos relacionales. Aquí se almacenará la información.

La gestión de datos de mysql lo haremos mediante web usando phpmyadmin.

Las páginas webs con php deben abrirse con apache, a su vez, php construye la página en el servidor web, y devuelve al cliente los resultados. Por lo cual, el cliente nunca ve como está hecha la página en php.

3 Instalación

Los requisitos software son:

  1. Servidor Web Apache
  2. Php4
  3. Mysql

Partiendo que dispongo de Linux Debian Woody. Desde consola y como root:
apt-get install apache apache-common php4 php4-mysql phpmyadmin mysql-server mysql-common mysql-client php4-mysql

4 Configurar mysql

Vamos a cambiar la contraseña de root.

Desde consola como root:

Arrancamos mysql:
/etc/init.d/mysql start

Entramos en mysql:
mysql -u root mysql

Dentro de mysql cambiamos la clave de root:
UPDATE user SET Password=PASSWORD('miclave') WHERE user='root'
FLUSH PRIVILEGES;

Nos salimos:
quit

Nota: La próxima vez q entremos como root en mysql:
mysql -u root -p mysql

5 Gestión de mysql

Desde consola como root.

Arrancamos apache:
/etc/init.d/apache start

Pondremos en el navegador web:
http://localhost/phpmyadmin/

Pondremos:
Username:root
Password: miclave

6 Uso de Mysql

6.1 Como empezar mysql

- Arrancar el servidor:

su -c "/etc/rc.d/myslqd start"

- Entrar:
1) /usr/bin/mysql
coge el usuario por defecto
2) /usr/bin/mysql -u root mysql
entramos como usuario root en la bd mysql

6.2 Cambiar el password de root

1) Opcion 1

shell> mysql -u root mysql\\

mysql> UPDATE user SET Password=PASSWORD('new_password')
           WHERE user='root';
mysql> FLUSH PRIVILEGES;
2) Opcion 2:
shell> mysqladmin -u root password new_password

6.3 Operacines básicas

- Ver BD: SHOW DATABASES;
- Usar BD: USE PACO;
- Crear BD: CREATE DATABASE web;
- Para ejecutar scritps de creacion de tablas ...:

                mysql -u root -h localhost -p -D web < nuke.sql\\

6.4 Como crear una bd y usuarios

1. Crear la bd.
su
mysql -p
entrar pass de root
create table ejemplodb

2. Dar privilegios de la bd ejemplodb al usuario paco:

        GRANT ALL ON ejemplodb.* TO paco;

6.5 Como ver los usuarios

mysql> SELECT Host,User FROM mysql.user WHERE User='';

6.6 Como entrar a la base de datos desde consola

 mysql --user=paco -p ejemplodb

Nota: Una herramienta visual para mysql es: mysqlnavigator
Al entrar debemos poner:
host: localhost

6.7 Asignar todos los permisos a un usuario

# mysql -u root -p
   CREATE DATABASE moodle; 
   GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON moodle.* 
           TO moodleuser@localhost IDENTIFIED BY 'yourpassword'; 
   quit 
# mysqladmin -p reload

6.8 Como dar de alta usuarios

Para poder acceder al servidor Linux y acceder a MySQl no basta con lo anterior, sino que tenemos que dar privilegios a los usuarios para que puedan acceder a las Base de Datos y Tablas que contiene MySQL

Para hacer esto necesitaremos acceder a la consola del servidor y acceder a MySQL

Para empezar accederemos como root a la Tabla mysql, donde se dan todos los privilegios de acceso a todos los usuarios

shell> mysql -user=root mysql Ahora indicamos que desde la IP 192.168.0.2 el usuario: gigi, con el password: gigi, va a poder acceder a la Base de datos MySQL

mysql> INSERT INTO user (Host,User,Password)
VALUES('192.168.0.2','gigi',PASSWORD('gigi'));

Ahora indicamos que desde la IP 192.168.0.2 el usuario: gigi, puede acceder a la tabla: mytabla con los privilegios de: Seleccionar, Insertar, Modificar, Borrar, Crear, y Borrar

mysql> INSERT INTO db
       (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
        Create_priv,Drop_priv)
       VALUES
       ('192.168.0.2','mytabla','gigi','Y','Y','Y','Y','Y','Y');
Por ultimo le indicamos que empiece a aplicar estos privilegios en este momento
mysql> FLUSH PRIVILEGES;

Fijaros que las instrucciones siempre terminan con punto y coma (;)

6.9 Hacer copia de seguridad

 mysqldump -u   -p > archivo.backup.sql

6.10 Como recuperar la contraseña de root perdida

1) Paramos el servicio:

/etc/init.d/mysql stop

2) Ejecutamos:

mysqld_safe --skip-grant-tables &

(he perdido mucho tiempo porque en la solución venía "safe_mysqld", supongo que sería el nombre del comando en versiones más viejas).

3) Ponemos un nuevo password a root:

mysqladmin -u root flush-privileges password "nuevopassword"

4) Reiniciamos el servicio:

/etc/init.d/mysql start

7 Uso de Php

7.1 Ver si funciona

Veamos una Web que permite comprobar si funciona el php en apache.

Copiar este esto en un fichero q se llame phptest.php y abrirlo con el navegador así: http://127.0.0.1/phptest.php

<html>
        <body>
        <?php
                phpinfo();
        ?>
        </body>
</html>

8 Ejemplo de php

En este ejemplo se puede: Listar, Alta, Baja, Modificaciones registros.

8.1 Estructura de la tabla incidencias

 CREATE TABLE `incidencias` (
 `cod` CHAR(5) NOT NULL AUTO_INCREMENT PRYMARY,
`fecha` DATE NOT NULL,
`hora` CHAR(5) NOT NULL,
`profesor` VARCHAR(30) NOT NULL,
`aula` TINYINT(15) NOT NULL,
`pc` TINYINT(6) NOT NULL,
`solucionado` CHAR(2) NOT NULL,
`des` VARCHAR(50) NOT NULL
 )
 COMMENT = 'Incidencias de los pcs';

8.2 Inserción de un registro

INSERT INTO `incidencias`
(`fecha`, `hora`, `profesor`, `aula`, `pc`, `solucionado`, `des`)
VALUES ('2003-12-31', '20:30', 'Paco', '1', '1', 'S', 'PRUEBA');

8.3 Menú principal: incidencias.htm

<HTML>
<HEAD>
   <TITLE>INCIDENCIAS</TITLE>
</HEAD>
<center>
<H1>Gestión de Incidencias</H1>
<hr>
<table border=1 >
<tr><td>
<A HREF="listado.php" TARGET=Der>Listado</A><BR>
</td></tr>

<tr><td>
<A HREF="nuevo.html" TARGET=Der>Nuevo</A><BR>
</td></tr>

<tr><td>
<A HREF="borrar.html" TARGET=Der>Borrar</A><BR>
</td></tr>

<tr><td>
<A HREF="modificar.html" TARGET=Der>Modificar</A><BR>
</td></tr>

<tr><td>
<A HREF="borrartodos.php" TARGET=Der>Borrar todos</A><BR>
</td></tr>

</table>
<hr>

8.4 Listado de registros: listado.php

<HTML>
<HEAD><TITLE>LISTADO</TITLE></HEAD>

<FONT COLOR='blue'>

<CENTER>

<H1>LISTADO</H1>

 <TABLE BORDER=1 WIDTH=90%>
  <TR><TD ALIGN='center'><FONT COLOR='blue'>COD</FONT></TD>
   <TD ALIGN='center'><FONT COLOR='blue'>FECHA</FONT></TD>
   <TD ALIGN='center'><FONT COLOR='blue'>HORA</FONT></TD>
   <TD ALIGN='center'><FONT COLOR='blue'>PROF</FONT></TD>
   <TD ALIGN='center'><FONT COLOR='blue'>AULA</FONT></TD>
   <TD ALIGN='center'><FONT COLOR='blue'>PC</FONT></TD>
   <TD ALIGN='center'><FONT COLOR='blue'>DES</FONT></TD>
   <TD ALIGN='center'><FONT COLOR='blue'>SOLUCIONADO</FONT></TD>


<?php
  $bd='alumnos';
  $tabla='incidencias';

   echo "<H2 align=center> Tabla: $tabla.
   Ordenado por aula,pc,fecha,hora
   <hr></H2>";
   echo "</center>";
  //Establecimiento de la conexión
  $conex = mysql_connect("localhost", "root", "miclave")
           or die("NO se pudo realizar la conexión");
  // Selección de la base de datos
  mysql_select_db($bd, $conex);
  //Preparación y ejecución de la consulta
  $cons = "SELECT cod, fecha,hora,profesor,aula,pc,des,solucionado
    FROM $tabla ORDER BY aula,pc,fecha,hora";
  $resultado = mysql_query($cons,$conex);
  //Obtención del número de filas del resultado
  $Num_filas = mysql_num_rows($resultado);
  echo "Número de filas en el resultado: $Num_filas <BR><HR>\n";

  //Obtención del número de atributos
  $Num_campos = mysql_num_fields($resultado);

// echo "<table border=1 with=1";

  //Recorrido del cursor de fila en fila
  while ($fila = mysql_fetch_row($resultado))
     {
     echo "<TR>";
     //Recorrido de los atributos de una fila
     for ($i = 0; $i < $Num_campos; $i++)
        echo "<TD> $fila[$i]  </TD>";
     echo "</TR>";
     }

  // Liberamos los recursos de las consultas
  mysql_free_result($resultado);
  // Se cierra la conexion
  mysql_close($conex);

  $today = date("F j, Y, g:i a");
  echo "$today";
  echo "<hr>";

?>
</BODY>
</HTML>

8.5 Añadir registros: nuevo.htm y nuevo.php

8.5.1 Fichero: nuevo.html

<!--
 CREATE TABLE `incidencias` (
 `cod` CHAR(5) NOT NULL AUTO_INCREMENT PRYMARY,
`fecha` DATE NOT NULL,
`hora` CHAR(5) NOT NULL,
`profesor` VARCHAR(30) NOT NULL,
`aula` TINYINT(15) NOT NULL,
`pc` TINYINT(6) NOT NULL,
`solucionado` CHAR(2) NOT NULL,
`des` VARCHAR(50) NOT NULL
 )
 COMMENT = 'Incidencias de los pcs';


INSERT INTO `incidencias`
(`fecha`, `hora`, `profesor`, `aula`, `pc`, `solucionado`, `des`)
VALUES ('2003-12-31', '20:30', 'Paco', '1', '1', 'S', 'PRUEBA');
-->

<HTML>
<HEAD> <TITLE>NUEVO</TITLE>
<H1 ALIGN=CENTER>NUEVO</H1>
<H2 ALIGN=CENTER>Tabla: Incidencias</H2>
</HEAD>
<BODY>
<HR>


<FORM ACTION="nuevo.php" METHOD="POST">
   <TABLE>
   <TR>
   <TD ALIGN=RIGHT>Fecha: (ejemplo: 2003-12-31)</TD>
     <TD><INPUT TYPE="DATE" NAME="fecha" VALUE="2003-12-31"
     SIZE=10 MAXLENGTH=10 ></TD>
   </TR>
<TR>
   <TD ALIGN=RIGHT>hora (ejemplo: 12:30 )</TD>
     <TD><INPUT TYPE="TEXT" NAME="hora" VALUE="12:30"
     SIZE=5 MAXLENGTH=5 ></TD>
   </TR>

<TR>
   <TD ALIGN=RIGHT>Profesor:</TD>
     <TD><INPUT TYPE="TEXT" NAME="profesor" VALUE="PACO"
     SIZE=30 MAXLENGTH=30 ></TD>
   </TR>


   <TR>
          <TD ALIGN=RIGHT>Aula:</TD>
          <TD><INPUT TYPE="NUMBER" NAME="aula" VALUE=1
	  SIZE=3 MAXLENGTH=3></TD>
     </TR>

      <TR>
          <TD ALIGN=RIGHT>Pc:</TD>
          <TD><INPUT TYPE="NUMBER" NAME="pc" VALUE=1
	  SIZE=6 MAXLENGTH=6></TD>
      </TR>

      <TR>
          <TD ALIGN=RIGHT>Descripcion:</TD>
          <TD><INPUT TYPE="TEXT" NAME="des" VALUE="NO VA DISQUETERA"
	  SIZE=50 MAXLENGTH=50></TD>
      </TR>

      <TR>
          <TD ALIGN=RIGHT>Solucionado (S/N) </TD>
          <TD><INPUT TYPE="TEXT" NAME="solucionado" VALUE="N"
	  SIZE=1></TD>
      </TR>

     <TD><INPUT TYPE="Submit" VALUE="Enviar"></TD>
     <TD><INPUT TYPE="Reset" VALUE="Borrar"></TD>
     </TR>
   </TABLE>
</FORM>
</BODY>

<HR>

</HTML>

8.5.2 Fichero: nuevo.php

<H1>RESULTADO DE NUEVO</H1>
<HR>
  <?php

  $tabla='incidencias';
  $bd='alumnos';
  echo "<H2>Tabla: $tabla</H2>";

  $conex = mysql_connect("localhost", "root", "miclave")
           or die("NO se pudo realizar la conexión");
  // Selección de la base de datos
  mysql_select_db($bd, $conex);

  $cons = "INSERT INTO $tabla
  (fecha,hora,profesor,aula,pc,solucionado,des)
  VALUES
  ('$fecha','$hora','$profesor','$aula','$pc','$solucionado','$des')
  ";

   $res1 = mysql_query($cons, $conex);
   echo "<br><b>  $cons  <br> \n";
   echo " resultado:  $res1 <br> \n";
  if ($res1)
       echo "<BR>Tupla insertada <BR>";

   echo mysql_errno() . ": " . mysql_error();

  // Liberamos los recursos de las consultas
  //mysql_free_result($res);
  // Se cierra la conexion
  mysql_close($conex);


?>

 <BR>
 <HR>
</BODY>
</HTML>

8.6 Borrar registros: borrar.html y borrar.php

8.6.1 Fichero: borrar.html

<HTML>
<HEAD>
   <TITLE>BORRAR</TITLE>
</HEAD>
<BODY>

<H1 ALIGN=CENTER>BORRAR</H1>
<H2 ALIGN=CENTER>Tabla: Incidencias</H2>
<HR>
<FORM ACTION="borrar.php" METHOD="POST">
   <TABLE>
   <TR>
   <TD ALIGN=RIGHT>Codigo:</TD>
     <TD><INPUT TYPE="NUMBER" NAME="cod" SIZE=3></TD>
   </TR>

<TR>
     <TD><INPUT TYPE="Submit" VALUE="Enviar"></TD>
     <TD><INPUT TYPE="Reset" VALUE="Borrar"></TD>
     </TR>

   </TABLE>
</FORM>
</BODY>

<HR>

</HTML>

8.6.2 Fichero: borrar.php

 <H1>RESULTADO DEL BORRADO</H1>
<HR>
<?php
  $tabla='incidencias';
  $bd='alumnos';
  //Establecimiento de la conexión
  $conex = mysql_connect("localhost", "root", "miclave")
           or die("NO se pudo realizar la conexión");
  // Selección de la base de datos
  mysql_select_db($bd, $conex);

  $cons = "SELECT * from $tabla where cod='$cod' ";
  echo " cons: $cons <br> \n";
  $res = mysql_query($cons, $conex);
  echo " resultado:  $res <br> \n ";
  if (!$res)
  // No Existe el valor
       echo "ERROR: No existe el valor: $cod <br>\n";
 else {
  $cons = "DELETE FROM  $tabla
	WHERE  cod = '$cod' ;";

   $res1 = mysql_query($cons, $conex);
    echo "<br><b>  $cons  <br> \n";
   echo " resultado:  $res1 <br> \n";
  if ($res1)
       echo "<BR>Tupla Borrada<BR>";
  else
 	echo mysql_errno() . ": " . mysql_error();

   // Se cierra la conexion
  mysql_close($conex);
}

?>

 <BR>
 <HR>
</BODY>
</HTML>

8.7 Modificar registros: modificar.html y modificar.php

8.7.1 Fichero: modificar.html

<HTML>
<HEAD> <TITLE>NUEVO Incidencias</TITLE>
<H1 ALIGN=CENTER>MODIFICAR Incidencias</H1>
<H2 ALIGN=CENTER>Tabla: Incidencias</H2>
</HEAD>
<BODY>
<HR>


<FORM ACTION="MODIFICAR.php" METHOD="POST">
   <TABLE>

   <TR>
   <TD ALIGN=RIGHT>Cod: (ejemplo: 1)</TD>
     <TD><INPUT TYPE="NUMBER" NAME="cod" VALUE="1"
     SIZE=10 MAXLENGTH=3 ></TD>
   </TR>


   <TR>
   <TD ALIGN=RIGHT>Fecha: (ejemplo: 2003-12-31)</TD>
     <TD><INPUT TYPE="DATE" NAME="fecha" VALUE="2003-12-31"
     SIZE=10 MAXLENGTH=10 ></TD>
   </TR>
<TR>
   <TD ALIGN=RIGHT>hora (ejemplo: 12:30 )</TD>
     <TD><INPUT TYPE="TEXT" NAME="hora" VALUE="12:30"
     SIZE=5 MAXLENGTH=5 ></TD>
   </TR>

<TR>
   <TD ALIGN=RIGHT>Profesor:</TD>
     <TD><INPUT TYPE="TEXT" NAME="profesor" VALUE="PACO"
     SIZE=30 MAXLENGTH=30 ></TD>
   </TR>


   <TR>
          <TD ALIGN=RIGHT>Aula:</TD>
          <TD><INPUT TYPE="NUMBER" NAME="aula" VALUE=1
	  SIZE=3 MAXLENGTH=3></TD>
     </TR>

      <TR>
          <TD ALIGN=RIGHT>Pc:</TD>
          <TD><INPUT TYPE="NUMBER" NAME="pc" VALUE=1
	  SIZE=6 MAXLENGTH=6></TD>
      </TR>

      <TR>
          <TD ALIGN=RIGHT>Descripcion:</TD>
          <TD><INPUT TYPE="TEXT" NAME="des" VALUE="NO VA DISQUETERA"
	  SIZE=50 MAXLENGTH=50></TD>
      </TR>

      <TR>
          <TD ALIGN=RIGHT>Solucionado (S/N) </TD>
          <TD><INPUT TYPE="TEXT" NAME="solucionado" VALUE="N"
	  SIZE=1></TD>
      </TR>

     <TD><INPUT TYPE="Submit" VALUE="Enviar"></TD>
     <TD><INPUT TYPE="Reset" VALUE="Borrar"></TD>
     </TR>
   </TABLE>
</FORM>
</BODY>

<HR>

</HTML>

8.7.2 Fichero: modificar.php

<?php
  $tabla='incidencias';
  $bd='alumnos';
  //Establecimiento de la conexión
  $conex = mysql_connect("localhost", "root", "miclave")
           or die("NO se pudo realizar la conexión");
  // Selección de la base de datos
  mysql_select_db($bd, $conex);

  $cons = "SELECT * from $tabla where cod='$cod' ";
  echo " cons: $cons <br> \n";
  $res = mysql_query($cons, $conex);
  echo " resultado:  $res <br> \n ";
  if ($res)  // Encontrada
  {
  $cons = "UPDATE $tabla
        SET fecha='$fecha' , hora ='$hora'  ,
	profesor='$profesor' , aula='$aula' ,pc = '$pc' ,
	solucionado='$solucionado', des='$des'
	where cod='$cod'
  	";
   $res = mysql_query($cons, $conex);
   echo "<br><b>  $cons  <br> \n";
   echo "resultado:  $res <br> \n";

  if ($res)
       echo "<BR>Tupla modificada <BR>";
  else
  	echo mysql_errno() . ": " . mysql_error();

  }
  else // Encontrada
  echo "ERROR: No existe el valor: '$cod' <br>\n";


  // Liberamos los recursos de las consultas
  mysql_free_result($res);
  // Se cierra la conexion
  mysql_close($conex);


?>

 <BR>
 <HR>
</BODY>
</HTML>

8.8 Borrar todos: borrartodos.php

 <H1>RESULTADO DE  BORRA TODOS</H1>
<?php
  $tabla='incidencias';
  $bd='alumnos';
  echo "<h2> Tabla: $tabla </h2><HR>";
  //Establecimiento de la conexión
  $conex = mysql_connect("localhost", "root", "miclave")
           or die("NO se pudo realizar la conexión");
  // Selección de la base de datos
  mysql_select_db($bd, $conex);

  $cons = "DELETE from $tabla;  ";
  echo " cons: $cons <br> \n";
  $res = mysql_query($cons, $conex);
  echo " resultado:  $res <br> \n ";

   // Se cierra la conexion
  mysql_close($conex);
 echo "Han sido borrados todas las entradas";
?>

 <BR>
 <HR>
</BODY>
</HTML>


9 Mysql-navegator

Mysql-navigator. Permite manipular las tablas y consultas en sql.

10 Bibliografía

10.1 Internet

  1. Ubicación de este documento:
    http://aldarias.es/pacodebian

  2. Página oficial de mysql. http://www.mysql.com

  3. Php. En castellano.
    http://www.programacion.com/php/

  4. Php. Manual Oficial.
    http://es.php.net/manual/en/index.php

  5. SQL. Manual Oficial.
    http://www.mysql.com/doc/en/index.html

10.2 Libros

  1. Fco Javier Gil. Creación de sitios web con php4. Osborne-McGrawhill. 2001. 1ra edicion. isbn 84-481-3209-2.

  2. Luke Welling and Laura Thomson PHP and MySQL Web Development, Second Edition ISBN: 067232525X Formato: Paperback, 871pp Pub. Date: February 2003 Publisher: Sams Edition Number: 2 (Hay versión en español)

Índice de Materias

mysql
2
mysql-navegator
9
php
2
web dinámicas
2

Sobre este documento...

Web Dinámicas: php, mysql

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html mysql -split 0 -local_icons 1 -show_section_numbers -no_auto_link -no_navigation

The translation was initiated by paco on 2007-04-18


paco 2007-04-18