Vous êtes sur la page 1sur 30

PHP SINTAXYS

Cdigo PHP para el envo de boletines a emails almacenados en una base de datos
Ahora est muy de moda el envo de boletines para informar de las novedades en las webs. El nico problema es que para hacerlo, la mayora de webmasters tienen que depender de alguna empresa (o servidor) que les gestione la base de datos y les enve los emails cuando lo requieran. En este artculo explicar paso a paso como crear la tabla (en la base de datos MySQL) necesaria para el almacenamiento de los emails y posteriormente, cmo enviar un boletn electrnico a todos ellos, con el aliciente de que no aparezcan todos los destinatarios en el campo Para: del mensaje.

Creacin de tabla en la base de datos


Mediante su gestor de la base de datos MySQL (seguramente phpMyAdmin) debe crear una nueva tabla en su base de datos. Aqu le facilitamos el archivo de texto para ello:

CREATE TABLE usuarios ( id bigint(7) NOT NULL auto_increment, nick varchar(100) NOT NULL, passowrd varchar(100) NOT NULL, nombre varchar(255) default NULL, email varchar(100) default NULL, KEY id (id) )
Y quedar as en su phpMyAdmin:

Tras esto usted ya tiene la tabla necesaria para almacenar los datos dentro de una base de datos MySQL. Podra explicar como introducir los datos en esta tabla mediante formularios de registro pero eso ya lo dejo a gusto del webmaster.

Envo del boletn


Para enviar el boletn solo debe cambiar los datos del siguiente archivo php por los de su base de datos y tendr listo su archivo. Para enviar el boletn solo tiene que ejecutar este archivo en su servidor:

<?php $mi_conexion=mysql_connect(servidor, nombre_de_usuarior or die ( ,contrasea)

No se puedo conectar

con la base de datos!);

/* Servidor: aqu debe poner la direccin de su servidor, en la mayora de las compaas es localhost Nombre_de_usuario: debe poner su nombre de usuario en el servidor. Contrasea: su contrasea. */

mysql_select_db(base_de_datos,$mi_conexion);

/* Base_de_datos: nombre base de datos. */

$query_Tabla = SELECT email FROM usuarios ORDER BY id ASC; $Tabla = mysql_query($query_Tabla, $mi_conexion) or die(mysql_error());

/* Email: es el nombre del campo que requerimos, si ha seguido nuestras instrucciones creando nuestra misma tabla en la base de datos no debe cambiar esto. Usuarios: es el nombre de la tabla donde est el campo email, si ha seguido nuestras

instrucciones creando nuestra misma tabla en base de datos no debe cambiar esto. */

//elaboramos cadena de emails

$losemails="; while ($row_Tabla=mysql_fetch_assoc($Tabla)) { $losemails.=($row_Tabla[email]., ); }

$largo=strlen($losemails); if ($largo>2) {

//quitamos ultimos ,

$losemails=substr($losemails,0,$largo-2); } else { echo No hay destinatarios!; die(); };

// se definen los argumentos de mail( ):

$asunto=Prueba de email desde PHP; $mensaje=<html> <head> <title>Titulo de la Pagina</title> </head> <body> <p>Esta es una prueba de emails en formato HTML</p>

Precios de nuestros productos: <table> <tr> <th>PRODUCTO<th>PRECIO <th>PROMOCION</th> </tr> <tr> <td>Refresco Grande</td>

<td>25,50</td><td>23,00</td> </tr> <tr> <td>Helado Napolitano</td> <td>27,50</td><td>25,00</td> </tr> <tr> <td>Patatas</td> <td>18,50</td> <td>15,00</td> </tr> </table> </body> </html>;

/* Aqu poner email en HTML */

$envia=enviante; $remite=email_remitente;

/* Enviante: Nombre del enviante Email_remitente: email a mostrar como remitente. */

/// Envo del email:

mail(null, $asunto, $mensaje, MIME-Version: 1.0 Content-type: text/html; charset=iso-8859-1 From: $envia <$remite> Bcc: $losemails . rn) or die(Error al Enviar Email); echo Mensaje Enviado!; // mysql_free_result($Tabla); mysql_close($mi_conexion); ?>
Ya tenemos nuestro sistema de envo de boletines, no tendremos que depender de nadie. El nico problema que presenta este sistema es que al no aparecer nada en el campo Para: del email, algunos gestores de email lo colocan como correo no deseado.

Diseo de menus y submenus con CSS


En este tutorial voy a explicar como hacer mens con submens como ste, es decir, vamos a ver como hacer menus desplegables o multinivel con CSS y HTML. A nivel de html, las opciones principales del men son items de una lista desordenada(unordered list), y los submens son a su vez listas desordenadas. Vamos primero a escribir el html sin las reglas de css. Si analizan detenidamente el cdigo html vern que todo el men est dentro de una lista <ul>, y cada opcin principal es un list item <li>, el cual a su vez contiene otra lista <ul> con las subopciones, y as sucesivamente. La clave est en que la lista <ul> correspondiente a un submen debe de estar dentro de un list item <li>, es decir, los tags <ul> </ul> de la lista que corresponden a un submen deben de estar antes del tag que cierra el list item </li> de la opcin:

<ul><li><a href='#'>Opcin 3</a>

<ul>

<li><a href='#'>Subopcin</a></li><li> <a href='#'>Subopcin</a></li>

<ul> <li><a href='#'>Algo ms</a></li>

<li><a href='#'>Algo ms</a></li></ul>

</li><li><a href='#'>Subopcin</a></li>

<li><a href='#'>Subopcin</a></li></ul>

</li></ul>
Ahora agregamos estas reglas de css:

<style type="text/css"> #menu

position: relative; list-style-type:none;

}#menu a{

font-famiy:Arial,sans-serif; font-size:11pt;

color: #369;display: block;

padding:0.2em 0.5em; text-align:center;

text-decoration: none}

#menu a:hover{

background-color: #4487C2; color:#FFF;

}</style>
Estamos definiendo el id menu que asignaremos a la lista principal que contiene todas las opciones y dems submens. Especificamos que los items no tengan vietas u otro estilo (liststyle-type:none), y en la pseudo-clase hover definimos que cambie el color del fondo y de letra. Tambin hay que resaltar que en el selector a estamos especificando la propiedad display. Ya se ve un poco mejor, sin embargo los items de todas las listas estn desplegados de manera vertical (que es el default). Lo que haremos ahora ser especificar que los items de la lista del men principal se desplieguen de manera horizontal. Esto lo haremos definiendo una clase que llamaremos menuitem y algunos ids que sern en los que especificaremos la posicin absoluta en la que queremos que se despliegue cada una de las opciones del men principal:

.submenu li {position:relative} .subsubmenu

position: absolute;

top: 0;

left: 9.95em;

width: 10em;

display: none;

.submenu li:hover > .subsubmenu{

display: block;

}
En la primera regla definimos que la posicin ser relativa para los elementos <li> que estn contenidos dentro de un elemento que tenga la clase submenu (que en nuestro caso sern los elementos <ul class=submenu>). Esto nos sirve para que los mens de los siguientes niveles de submens se desplieguen a la misma altura que se encuentra la opcin del men al que pertenecen. Despus de esto, definimos la clase .subsubmenu, en donde especificamos, entre otras cosas, que la posicin ser absoluta con relacin al elemento que lo contiene (que en nuestro caso seran los elementos <li> que a su vez estn contenidos en los elementos <ul class=submenu>), y definimos su offset a la izquierda. En la tercer regla definimos la pseudoclase hover para que al pasar el mouse por una opcin que tenga submens los despliegue. Chequen que esta regla de css se aplicar a los elementos que tengan la clase .subsubmenu y que sean hijos de un elemento <li>, los cuales a su vez deben de tener o pertenecer a un elemento que tenga la clase .submenu. A nivel de html, a cada lista de los submens principales que vayan a contener uno o ms niveles de submens se le tiene que asignar la clase submenu: <ul class=submenu>, y a las listas que contengan las opciones de los submens se les tiene que asignar la clase subsubmenu: <ul class=subsubmenu>. Ahora s ya tenemos un verdadero men con varios niveles de submens. Lo que resta es ponerle bordes para que se vea ms presentable. Le estuve checando y probando, y la manera como me funcion esto de los bordes es de una manera artesanal, con este cdigo de css:

.b_top {border-top:1px solid #369} .b_right {border-right:1px solid #369} .b_bottom {border-bottom:1px solid #369} .b_left {border-left:1px solid #369}
A cada opcin del men, dentro del elemento <a> le asignamos las clases que necesitemos separadas por espacios. Por ejemplo, para la segunda opcin del men principal el html

quedara: <a class=b_top b_right b_bottom href=#'>, y para una opcin que a nivel de diseo sea la ltima de la lista: <a class=b_right b_bottom b_left href=#'>. Esto es un poco tedioso, pero generalmente slo lo tendremos que hacer una vez al realizar el diseo del men, ya que despus de que est funcional, las modificaciones sern mnimas, quizs al aumentar una nueva opcin, o un nuevo submen, dependiendo de las necesidades que surgan. Yo tuve algunos problemas para que todos los bordes se vieran alineados, porque algunos en lugar de que se sobreescribieran, a nivel de diseo se vean ms gruesos; es por eso que tuve que jugar con las posiciones absolutas de los id #m. As termina este tutorial, espero que les sea de utilidad. Ah, se me olvidada comentar, con MS IExplorer no va a funcionar porque este browser no tiene soporte total de CSS2, podra funcionar con algunos truquitos y simulando el efecto hover de los list items con Javascript, pero mejor utilicen un browser que cumpla con los estndares, tal como Mozilla, Firefox, Netscape, Opera, etc.

Manual PHP. PHPLIB. Control de sesiones y de identidad de usuarios

PHPLIB. Control de sesiones


Ya en este punto estamos en disposicin de utilizar la librera PHPLIB. Para ello lo mejor es poner el directorio pages de la distribucin en algn lugar desde el que el servidor de web pueda acceder a l y a travs de un navegador acceder a la pgina index.php3. Si prueba el lector a recargar la pgina ver que el contador que aparece va aumentando. Lo que est ocurriendo es que la primera vez que se accedi a esta pgina se cre una cookie para el control de la sesin. A partir de este momento est cookie con el identificador de sesin es enviado al servidor de web por el cliente cada vez accede a la pgina permitiendo el control del estado de la sesin. De hecho este control se realiza utilizando la base de datos phplib que creamos anteriormente. Si vemos las tablas que hay en la base de datos phplib encontramos:

active_sessions auth_use

active_sessions_split db_sequence

auth_user_md5

En la tabla active_sessions es donde se almacena la informacin de sesin y cada vez que se crea una nueva sesin, se crea un registro en esta tabla para su control. Supongamos que queremos controlar el acceso a un conjunto de pginas por nuestros clientes. Con PHPLIB es tan sencillo como incluir al comienzo de cada pgina con control de sesin la llamada:

page_open(array("sess" => "Sesin de control"));


De esta forma PHPLIB verifica si el usuario tiene ya creada la cookie. Si no la tiene se la crea y si la tiene nos permite acceder a todos los datos de la sesin. Gracias al control de sesiones podemos almacenar diferentes variables asociadas a esta sesin. Desde el momento que se abre una sesin, se abren todas las variables de dicha sesin. Para asociar una variable a una sesin utilizamos una llamada de PHPLIB:

$sess->register("s");

Al final de una pgina con control de sesin, tenemos que realizar una llamada a PHPLIB para cerrar la sesin. En esta llamada todas las variables asociadas a la sesin se guardan para que no se pierdan:

page_close();
Es por todos conocido lo poco que gustan las cookies a la gente por el ataque hacia su privacidad que supone. Con PHPLIB el control de sesiones se puede realizar tambin utilizando el mtodo GET de envo de datos, es decir, adjuntando a la URL de acceso a la pgina el identificador de la sesin. Esto se controla si en la pgina con control de sesiones ponemos todos los enlaces a otras pginas de la siguiente forma:

$sess->purl("showoff.php3");
Ya hemos visto pues una de las principales ventajas de utilizar PHPLIB: el sencillo control de sesiones. con este control el implementar una bolsa de la compra donde se vayan almacenando todos los artculos de una compra es trivial. O el almacenamiento de una barra de navegacin con todas las pginas por las que ha ido accediendo el usuario.

PHPLIB. Control de Identidad de Usuarios


Junto con el control de sesiones es el control de acceso a pginas una de las principales necesidades en las aplicaciones web. Y de nuevo con PHPLIB tenemos solucionado de forma sencilla este control. Es cierto que con Apache tenemos mecanismos para el control de acceso a pginas, pero es un control de acceso o no acceso. Normalmente necesitamos ir ms all. Necesitamos que segn la persona que acceda dar acceso a unas partes u otras, poder crear grupos de usuarios con privilegios etc. Adems PHPLIB asocia este control de identidad de usuarios al control de sesiones, algo que nos permite asociar de forma automtica una sesin a un usuario identificado. Cuando queremos que una pgina solo pueda ser accedida por un usuario identificado incluimos en la primera lnea de esta pgina:

page_open(array("sess" => "Example_Session", "auth" => "Example_Auth",

"perm" => "Example_Perm", "user" => "Example_User"));


Es en la tabla auth_user de la base de datos phplib donde se almacena toda la informacin sobre los usuarios. Y en esta tabla tambin se incluye un campo perms donde se pueden detallar los permisos que tiene un usuario. Supongamos que hay una parte de administracin a la que slo pueden acceder los usuarios con permiso de administrador. Para ello en el campo perms del registro del usuario debe aparecer admin. Con PHPLIB lo nico que hay que hacer para realizar este control es incluir la llamada:

$perm->check("admin");
Si el usuario no est an autenticado se le presentar una pgina para que inserte un identificador y una clave de entrada. En el ejemplo inicial de PHPLIB el identificador es kris y la clave es test. Una vez introducidos podemos volver a acceder a esta pgina y ya se nos volver a pedir el identificador.

APACHE+PHP+MYSQL Mantenimiento Sencillo

Crear los archivos que se detallan a continuacin con su contenido, esto es un ejemplo simple y sencillo para que puedan visualizar como dar mantenimiento a una tabla en MySQL con PHP.

Archivo: conexion.php <?php $dbhost="localhost:3306"; // host del MySQL (generalmente localhost) $dbusuario="root"; // aqui debes ingresar el nombre de usuario // para acceder a la base $dbpassword="usbw"; // password de acceso para el usuario de la // linea anterior $db="demo"; // Seleccionamos la base con la cual trabajar $conexion = mysql_connect($dbhost, $dbusuario, $dbpassword); mysql_select_db($db, $conexion); ?>

Archivo: cerrar_conexion.php <?php mysql_close($conexion); ?>

Archivo: ver.php <html> <head>

<title>Listado de Usuarios</title> <script language="javascript"> function nuevo() { window.open("guardar.php","_parent"; } </script> </head> <body> <h2>Listado de usuarios</h2> <?php include "conexion.php"; $result=mysql_query("SELECT * FROM usuarios ORDER BY nombre",$conexion); echo "<table border=1> <tr> <td><b>Nombre</b></td> <td><b>Apellido</b></td> <td><b>DNI</b></td> <td><b>Opciones</b></td> </tr>"; while($row=mysql_fetch_row($result)) { echo "<tr> <td>$row[0]</td> <td>$row[1]</td> <td>$row[2]</td>

<td><a href="actualizar.php?dni=$row[2]">Actualizar</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="borrar.php?dni=$row[2]">Eliminar</a></td> </tr>"; } echo"</table>"; include "cerrar_conexion.php"; ?> <input type="button" value="Nuevo" onclick="nuevo()" /> </body> </html>

Archivo: actualizar.php <?php include "conexion.php"; $accion=$_GET[accion]; if (!isset($accion)) { $dni=$_GET[dni]; $result=mysql_query("SELECT * FROM usuarios WHERE dni=$dni",$conexion); $row=mysql_fetch_row($result); echo " <html> <head> <title>Actualizar Usuario</title> <script language="javascript"> function cancelar()

{ window.open("ver.php","_parent"; } </script> </head> <body> <h3>Actualizar Usuario</h3> <form action="actualizar.php?accion=guardar" method="POST"> Nombre:<br> <input type="text" value="$row[0]" name="nombre"><br> Apellido:<br> <input type="text" value="$row[1]" name="apellido"><br> DNI:<br> <input type="text" value="$row[2]" name="dni"><br> <input type="hidden" name="dniAnt" value="$row[2]"> <input type="submit" value="Actualizar"> <input type="button" value="Cancelar" onclick="cancelar()" /> </form> </body> </html>"; }elseif($accion=="guardar" { $nombre=$_POST[nombre]; $apellido=$_POST[apellido]; $dni=$_POST[dni]; $dniAnt=$_POST[dniAnt];

$result=mysql_query("UPDATE usuarios SET nombre="".$nombre."",apellido="".$apellido."", dni=".$dni." WHERE dni = ".$dniAnt,$conexion); echo " <html> <head> <title>Actualizar Usuario</title> </head> <body> <h3>Los datos han sido actualizados</h3> <a href="ver.php">Ir a listado</a> </body> </html>"; } include "cerrar_conexion.php"; ?>

Archivo: borrar.php <?php include "conexion.php"; $accion=$_GET[accion]; if (!isset($accion)) { $dni=$_GET[dni]; $result=mysql_query("SELECT * FROM usuarios WHERE dni=$dni",$conexion);

$row=mysql_fetch_row($result); echo" <html> <head> <title>Borrar Usuario</title> <script language="javascript"> function cancelar() { window.open("ver.php","_parent"; } </script> </head> <body> <h3>Borrar Usuario</h3> <form action="borrar.php?accion=guardar" method="POST"> Nombre:<br> <input type="text" value="$row[0]" name="nombre" readonly="readonly"><br> Apellido:<br> <input type="text" value="$row[1]" name="apellido" readonly="readonly"><br> DNI:<br> <input type="text" value="$row[2]" name="dni" readonly="readonly"><br> <input type="submit" value="Borrar"> <input type="button" value="Cancelar" onclick="cancelar()" /> </form> </body> </html>";

}elseif($accion=="guardar" { $dni=$_POST[dni]; $result=mysql_query("DELETE FROM usuarios WHERE dni = ".$dni,$conexion); echo" <html> <head> <title>Borrar Usuario</title> </head> <body> <h3>El registro se ha borrado</h3> <a href="ver.php">Ir a listado</a> </body> </html>"; } include "cerrar_conexion.php"; ?>

Archivo: guardar.php <?php include "conexion.php"; $accion=$_GET[accion]; if (!isset($accion)) { echo " <html>

<head> <title>Crear Nuevo Uusario</title> <script language="javascript"> function cancelar() { window.open("ver.php","_parent"; } </script> </head> <body> <h3>Crear Nuevo Uusario</h3> <form name="form1" method="post" action="guardar.php?accion=guardar"> Nombre:<br> <input type="text" name="nombre"><br> Apellido:<br> <input type="text" name="apellido"><br> DNI:<br> <input type="text" name="dni"><br> <input type="submit" value="Crear"> <input type="button" value="Cancelar" onclick="cancelar()" /> </form> </body> </html>"; }elseif($accion=="guardar" { $nombre=$_POST[nombre];

$apellido=$_POST[apellido]; $dni=$_POST[dni]; $result=mysql_query("INSERT INTO usuarios(nombre, ("".$nombre."","".$apellido."",".$dni."",$conexion); echo " <html> <head> <title>Crear Nuevo Uusario</title> </head> <body> <h3>Los datos han sido guardados</h3> <a href="ver.php">Ir a listado</a> </body> </html>"; } include "cerrar_conexion.php"; ?> apellido, dni) VALUES

aqu est el cdigo para la base de datos y tabla y puedan realizar pruebas.

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; CREATE SCHEMA IF NOT EXISTS `demo` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;

USE `demo`; -- ------------------------------------------------------ Table `demo`.`usuarios` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `demo`.`usuarios` ( `nombre` VARCHAR(75) NOT NULL , `apellido` VARCHAR(75) NOT NULL , `dni` DOUBLE NOT NULL , PRIMARY KEY (`dni`) ) ENGINE = MyISAM; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Manual PHP. La cesta de la compra


PHPLIB. Carro de la compra
Ya dijimos que gracias al control de sesiones sera trivial construir una cesta de la compra. PuesPHPLIB incluye una clase llamada "Cart" que es precisamente esto, una cesta de la compra. El comercio electrnico siempre obliga a que a la hora de comprar el cliente vaya teniendo su carro de compra con los productos que ha ido adquiriendo. El mecanismo por el que se suele mantener este estado del cliente es mediante cookies, aunque ya vimos que PHPLIB poda evitar el uso de "cookies" utilizando el mtodo GET. La cesta de la compra en PHPLIB es un conjunto de artculos que se almacenan en la base de datos. PHPLIB nos proporciona una API sencillo para aadir, consultar o borrar la lista de artculos en la bolsa de la compra. Para crear nuestra cesta de la compra necesitaremos en general realizar una nueva clase de cesta de la compra basada en "Cart", principalmente para controlar la visualizacin de los productos, tal y como se muestra a continuacin:

class Mi_Cesta extends Cart { var $classname = "Mi_Cesta"; // Base de datos donde guardamos los artculos var $database_class = "DB_Article"; var $database_table = "articles"; var $db; var $sum = 0; function show_cart_open() {

printf("<table class=cart_table>n"); $this->sum = 0; } function show_cart_close() {

printf("</table>n"); printf("That's a total of %s.n", $this->sum);} function show_item($art, $num) { if (!is_object($this->db)) { $class = $this->database_class;

$this->db = new $class; } $query = sprintf("select * from %s where artid = '%s'", $this->database_table, $art);

$this->db->query($query); while($this->db->next_record()) { printf(" <tr class=cart_row>n <td class=cart_cell>%s</td>n", $this->db->Record["name"]); printf(" <td class=cart_cell>%s</td>n",

$this->db->Record["price"]); printf(" <td class=cart_cell>%s</td>n",

$num); $rowsum = $num * $this->db->Record["price"]; $this->sum += $rowsum; printf(" <td class=cart_cell>%s</td>n", }

$rowsum); printf(" <tr>n");} }

Para utilizar la clase "Cart" vamos a necesitar crear una tabla ms donde se encuentren la descripcin de todos los artculos que vendamos en nuestra tienda. Esta tabla la podemos crear dentro de una base de datos propia para cada uno de nuestros clientes, base de datos que tambin deber tener la informacin de "active_sessions" y "auth_user". Un ejemplo sencillo podra ser:

# # Estructura de la tabla de 'articles' # CREATE TABLE articles ( name text, price float(8,2),

artid int(11) DEFAULT '0' NOT NULL auto_increment, PRIMARY KEY (artid) );

En la documentacin de PHPLIB se encuentran todos los detalles necesarios para un uso completo de esta clase. Su descripcin completa desbordara el espacio del que disponemos para este artculo.

Vous aimerez peut-être aussi