Custom Search
Bloggers Activos
Emacs como IDE para CakePHP aarkerio
La Negación del Viaje Lunar tonathiu
Porque los mononeurones si tenemos madre! blacksoul
BrunoFerías thot
The Art vendaval
Aclimatación extraterrestre ¿para qué? ahuramazdah
¿A que le tienes miedo? teosho
Sobre nazis, terror y medios tonathiu
Amenazas a la cuarta dimensión ¿de veras? ahuramazdah
Tarjeta Broadcom BCM94311MCG rev 02 teosho
Last Download
Segunda Fundación
Segunda Fundación
Pidiendo OpenSolaris 2008.5
vendaval
Sospechosismo
aarkerio
Slackware 12.1 Final
vendaval
Jaime Maussan da por auténtico video trucado del chupacabras hecho en Blender 3D
asarch
Linux hot girl
aarkerio
Calderón puede ser sujeto a juicio político, sostiene Carrancá
tonathiu
La desnutrición en México
aarkerio
Sistema Infalible
ordbal
Histórico
aarkerio
Nietzsche en la FCPyS
aarkerio
Google Groups Karamelo
Visit this group
GNU/Linux
GNU/Linux
Hacktivismo
Hacktivismo
Debian
Debian
NetBSD
NetBSD
WWW
WWW
Guia Linux
Guia Linux
Server Side
Server Side
Ofimatica
Ofimatica
Despabilando...
Despabilando...
Mundo Maya
Mundo Maya
Literatura
Literatura
Agora
Agora
Psicologia
Psicologia
Economia
Economia
Ambientalismo
Ambientalismo
Desarrollo
Desarrollo
Biologia
Biologia
Asesorías Gratuitas
Asesorías Gratuitas

Hacktivism

LinuxChix button

WWW \ Tutorial de PHP
WWW
Tutorial de PHP

Este artículo ha sido consultado en 1,644 ocasiones.

PHP + PostgreSQL

PHP se ha convertido en el lenguaje de facto de Internet y no es difícil saber porqué: es un lenguaje con una de las curvas de aprendizaje más gentiles que existen, posee librerías de conexión para practicamente todas las bases de datos, una gran cantidad de poderosas funciones, abundante documentación general y ejemplos específicos: no importa cuan inusual sea la cuestión, si es en PHP, seguramente alguien ya lo hizo y dejó documentación sobre el caso.

Además, PHP es un lenguaje rápido y que no sobrecarga de procesos al servidor. Las extensiones PEAR son un conjunto de librerías que expande las funcionalidades nativas de PHP, haciendolo aún más sencillo y poderoso. La nueva versión 5 de PHP mejora substancialmente el soporte para clases.

Este tutorial asume que usted conoce los rudimentos de HTML.


El trio dinámico

PHP

PHP es un lenguaje que desde su concepción fue diseñado para el entorno Web, esto implica que debe ejecutarse como parte de un Webserver, en la mayoría de los casos este webserver es Apache. La versión de PHP que se encuentra en los repositorios es la 4, e instalarla en Debian es bastante sencillo, además de php4 y Apache instalaremos las extensiones PEAR y el soporte para PostgreSQL:

# apt-get install php4 php4-pear php4-pgsql apache-perl mc

Si esta usando NetBSD puede instalarlo desde /usr/pkgsrc/lang/php4.

¿Porqué instalar Apache-Perl en lugar de Apache? Apache-Perl ofrece integración entre Perl y el Web sin necesidad de los pesados CGIs. Es muy probable que usted (tarde o temprano) ejecute código Perl en el Web, y Apache-perl es la mejor opción.

Una vez descargado, debemos editar el archivo /etc/apache-perl/httpd.conf y comprobar que el usuario y el grupo que ejecuta Apache es www-data. Además, revise que la línea:

AddType application/x-httpd-php .php

no esté comentada. Asímismo debemos asegurarnos que la línea:

LoadModule php4_module /usr/lib/apache/1.3/libphp4.so

exista en el archivo /etc/apache-perl/modules.conf. Luego de comprobar esto reiniciamos apache:

# /etc/init.d/apache-perl restart

Asignamos un nuevo password al usuario www-data:

# passwd www-data

Creamos el directorio /var/wwwhome

# mkdir /var/wwwhome

Editamos el archivo /etc/passwd:

# mcedit /etc/passwd

Buscamos la linea del usuario www-data y donde dice :/var/www/: que es el HOME del usuario, la cambiamos por :/var/wwwhome/: guardamos con F2 y salimos con F10.

Bien, ahora nos aseguramos que el usuario y el grupo www-data sean los dueños de los directorios /var/www y /var/wwwhome :

# chown -R www-data.www-data /var/www
# chown -R www-data.www-data /var/wwwhome

¿Porqué hemos cambiado el directorio home del usuario www-data? por seguridad: al usar ftp, mc, wget, links, etcétera, se crean archivos temporales y ocultos que se podrían ver desde Internet, dado que /var/wwwhome se ecnuentra fuera del directorio raíz de apache-perl cambiando el home evitamos ese riesgo. Ahora cree el archivo info.php:

# mcedit /var/www/info.php

En el interior de ese archivo sólo debe haber las siguientes líneas:

<?PHP
phpinfo();
?>

Con mozilla colóquese en esa página (http://127.0.0.1/info.php) para cerciorarse de que todo está bien, la función phpinfo() arrojará mucha información sobre php y el sistema.

Entorno de desarrollo

El servidor FTP

VSFTPD (Very secure FTP Daemon) es un servidor FTP que (a diferencia de otros servidores FTP) fue hecho pensando en la seguridad. VSFTPD no envia los password en texto plano y controla la lista de comandos remotos disponibles. Es el servidor FTP usado por Kernel.org, Redhat, SUSE y OpenBSD. Para instalarlo:

# apt-get install vsftpd

Edite el archivo /etc/vsftpd.conf y asegúrese que las variables listen, local_enables y write_enable poseen un valor de Yes. Una vez hecho esto, salve el archivo y ejecute:

# /etc/init.d/vsftpd restart

Jedit.org

Generalmente los archivos PHP están en un servidor y se trabajan desde un WorkStation. No, en GNU/linux no hay nada como DreamWeaver y esa es una razón más para usar GNU/Linux como equipo de escritorio. Si usted ya ha desarrollado dependencia tecnológica a los vistosos productos de Macromedia aún puede salvarse: portese como hombrecito y borre ese afeminado programa de su disco duro. Jedit.org es un excelente editor para programadores viriles. Posee coloreado de sintaxis para Java, Perl, Python, XHTML, CSS y por supuesto, PHP:

Jedit.org

Es necesario tener instalado la java runtime environment (JVM) si se desea ejecutar Jedit.org. Para instalar Jedit.org descargue el Java-based installer del sitio de Jedit.org y ejecútelo:

$ java -jar ./jedit42install.jar

El instalador le hará las preguntas habituales al caso. Una vez instalado ejecute el archivo $HOME/jedit/bin/jedit para iniciar el programa. Una vez inicializado, seleccione el menu Plugins->Plugin Manager.. pulse en Install y seleccione el plugin FTP para editar archivos remotos. (Aproveche y de un vistazo a los muchos plugins de Jedit.org, si usted además de PHP, programa en java o en Python encontrará a varios de ellos interesantes.) Después de instalar los plugin debe reiniciar Jedit.org para que los cambios surtan efecto.

Pronóstico de la muerte con PHP
(o mi primer formulario)

Una vez reiniciado jedit.org, corte y pegue el siguiente código en una archivo nuevo:

<?PHP

$titulo = "Mi primer formulario";

?>
<html>
<head><title> <?= $titulo ?> </title></head>
<body>
<h1 align="center">Formulario</h1>
<form action="calcula.php" method="post">
<p align="center">Fecha de nacimiento:
<input type="text" name="dia" value="00" size="2" maxlength="2">
<select name="mes">
<option value="1">Ene</option>
<option value="2">Feb</option>
<option value="3">Mar</option>
<option value="4">Abr</option>
<option value="5">May</option>
<option value="6">Jun</option>
<option value="7">Jul</option>
<option value="8">Ago</option>
<option value="9">Sep</option>
<option value="10">Oct</option>
<option value="11">Nov</option>
<option value="12">Dic</option>
</select>
<input type="text" name="year" value="19??" size="4" maxlength="4">
</p>

<p align="center"> Sexo: <select name="sexo">
<option value="h">Hombre</option>
<option value="m">Mujer</option>
</select>
</p>

<p align="center"> ¿Usted fuma?: <input type="checkbox" name="fuma" value="1"></p>

<p align="center"><input type="submit" name="boton" value="Enviar"></p>

</form>
</html>

Cómo verá, el código PHP se coloca entre los símbolos (<?) y (?>) al código que está entre estos símbolos se le conoce como bloque. Usted puede abrir y cerrar tantos bloques como lo desee: todo lo que este fuera de los bloques será considerado como HTML normal. Dese cuenta, además, que las líneas de PHP terminan con un punto y coma (;), si usted las olvida, el compilador de PHP le enviará un mensaje de error, indicándole la línea donde este se produjo.

Salve este archivo como formulario.php. Este formulario nos servirá para enviar cinco valores (dia, mes, year, sexo y fuma) a la pagina calcula.php a través del protocolo HTTP, usando el método POST. En el formulario hemos usado campos tipo text, select y checkbox:

<input type="text" name="dia" value="00" size="2" maxlength="2">
<select name="mes">
<input type="checkbox" name="fuma" value="1">



GET y POST. En el ambiente Web, existen dos métodos para enviar información: GET y POST. El método GET utiliza el mismo URL del navegador para enviar la información (seguramente usted se habrá percatado que muchas veces el URL del navegador está lleno de símbolos extraños). GET, además, está limitado a 1024 caracteres. El método POST, por otra parte, utiliza su propio socket para enviar información a Apache, y debido a ello las variables no se muestran en el URL. POST no está limitado a 1024 y puede enviar (además de carácteres) datos binarios como imágenes o archivos comprimidos. En general, al tratarse de formularios, utilice el método POST.

A continuación, corte y pegue el siguiente código en una archivo nuevo de Jedit.org:

<?PHP
$titulo = "Pronóstico";

// Tomo las variables que envio el formulario
$dia=$_POST['dia'];
$mes=$_POST['mes'];
$year=$_POST['year'];
$sexo=$_POST['sexo'];

//Saludo para dama o caballero
if ( $sexo == "h" ) {
$saludo = "Estimado caballero";
$ev = 71; // Esperanza de vida hombre
} else {
$ev = 76; // Esperanza de vida mujer
$saludo = "Distinguida dama";
}


//lo ponemos todo en días
$FechaNac = ($year * 365) + ($mes * 30) + $dia;

//los valores actuales
$AA=date("Y"); //el año actual
$MA=date("m"); //el mes actual
$DA=date("d"); //el dia actual

//En dias
$FechaHoy = ($AA * 365) + ($MA * 30) + $DA;

echo "La Fecha de Nacimiemto en dias es " . $FechaNac . " y la fecha de hoy en dias es " . $FechaHoy. "<br />";

//Restamos los dias
$FF = ( $FechaHoy - $FechaNac );

//Lo convertimos a años y lo restamos a la esperanza de vida
$AREST = $ev - ( $FF / 365 );

//Si fuma, restamos 6 años a los años que le restan por vivir
if ( isset($_POST['fuma']) ) {
$AREST = ($AREST - 6);
}

//Le damos formato de dos digitos
$AREST = number_format($AREST, 2);

?>

<html>
<head><title> <?= $titulo ?> </title></head>
<body>
<h2 align="center"><?= $titulo ?></h1>

<p align="center"> <b><?= $saludo ?></b>: le informamos que ha vivido <?= $FF ?> días y que según el INEGI de México, <br />
a usted le restan <?= $AREST ?> años de vida. Aprovéchelos!!!</p>
<?
if ( isset($_POST['fuma']) ) {
echo '<p align="center">Y por favor, deje de fumar.</p>';
}

?>

<p align="center"><a href="formulario.php"><< Regresar</a></p>

</body>
</html>

Guardelo como calcula.php. Obtendrá algo como esto. En Jedit.org seleccione View->Line numbers:.

Jedit.org
El archivo calcula.php

Tenga presente que PHP es sensible a las mayúsculas y minúsculas. Es decir la variable $Edad no es la misma que la variable $edad.


Veamos en detalle. En la línea 2 la variable título guarda el título de la página. En la linea 4 hay un comentario de una sola línea que comienza con una doble diagonal (//), siempre comente sus programas, no sólo para que otras personas puedan entederlos fácilmente sino para que usted mismo, luego de varios meses sin ver el código, no olvide porque hizo lo que hizo (si usted es programador, sabe de lo que estoy hablando).

La doble diagonal, sólo sirve para hacer comentarios de una sola líena. Si desea escribir un comentario de varias líneas deberá colocarlo entre una diagonal asterisco (/*) y una asterisco diagonal (*/).

De la línea 5 a la 8, tomamos los valores de las variables que enviamos desde el formulario usando $_POST[], (si un formulario lo enviamos por el método GET debemos usar $_GET[]). Los valores los recuperamos usando los nombres que colocamos en el tag name de cada campo del formulario. Anteriormente, esto no era necesario, con sólo escribir la variable en algún lugar del script, PHP le asignaba su valor sin necesidad de tomarla con $_GET y $_POST. Esto era así porque la opción de variables globales estaba elegida por omisión al instalar PHP. Sin embargo, desde la versión 4.3.1 de PHP, se decidió deshabilitarla por motivos de seguridad. Esto ha provocado que muchos ejemplos y código de PHP que hay en internet no funcione, para desesperación de muchos aprendices.

Bien, de la línea 11 al 17 encontramos un bloque if, que asigna valores diferentes las variables $saludo y $ev dependiendo del sexo. Note que es posible escribir un comentario en una misma línea que contenga comandos de PHP siempre que coloquemos la doble diagonal después de los comandos.

En la línea 21 convertimos la información del formulario en días y colocamos el resultado en la variable $FechaNac. Recuerde que (como usted aprendió en el bachillerato) los paréntesis indican el orden de ejecución de una operación, es decir, primero se resolverán las operaciones internas y luego las que están fuera de los paréntesis.

De la línea 24 a la 26 usamos la función date() para conocer el año actual ($AA), el mes actual ($MA) y el día actual ($DA). En la línea 29 también lo convertimos a días. En la línea 31 imprimimos los valores de las variables con el comando echo, en el argot de la programación a esto se le conoce como pintar a la pantalla. Como usted se habrá dado cuenta, es posible imprimir una variable fuera de los bloques de PHP sin usar echo usando <?= $variable $> , lo cual es muy cómodo.

Ahora sólo falta restar los días de la fecha de nacimiento a los días de la fecha actual para conocer la cantidad de días que han transcurrido desde que nació, lo cual hacemos en la línea 34. Sólo basta convertir esos días en años (dividiéndolos entre 365) y restar el resultado a la esperanza de vida, que, como ya vimos, depende sel sexo que le persona introdujo en el formulario, para hacer un pronóstico de cuantos años le quedan por vivir.

Jedit.org
El archivo calcula.php

Además, debemos restar seis años si la persona fuma (líneas 40 a 42). En la líena 40 y 58 usamos la función isset() que determina si una variable está colocada o no. Si se seleccionó la casilla (o checkbox) ¿Usted fuma? del formulario, la variable $_POST['fuma'] estara presente, de otro modo la función isset() enviará false y la condición if ( isset($_POST['fuma']) ) no se cumplirá.

Luego de este (un tanto macabro) ejercicio, podemos ver la integración entre PostgreSQL y PHP.



PostgreSQL

Bien, pasemos a PostgreSQL, lo primero es instalarla:

# apt-get install postgresql

Postgres le hará unas preguntas, conteste a todas con un enter. Ahora agregue la siguiente línea al archivo /etc/postgresql/pg_hba.conf:

local postgres all trust

Asigne un password al usuario postgres:

# passwd postgres

Reinicie la base de datos:

# /etc/init.d/postgresql restart

Cambie al usuario postgres:

# su postgres

Cree la base de datos DBTEST e ingrese en ella con psql, (el cliente de PostgreSQL):

$ createdb DBTEST && psql DBTEST

Cree la tabla tb_usuarios y agregue algunos registros:

DBTEST>create table tb_usuarios (id serial, nombre varchar(50), email varchar(30));

DBTEST>INSERT INTO tb_usuarios (id, nombre, email) VALUES (NEXTVAL('tb_usuarios_id_seq'), 'Ian Murduck' , 'ianmur@debian.org');

DBTEST>INSERT INTO tb_usuarios (id, nombre, email) VALUES (NEXTVAL('tb_usuarios_id_seq'), 'Debora Murduck' , 'debmur@debian.org');

DBTEST>INSERT INTO tb_usuarios (id, nombre, email) VALUES (NEXTVAL('tb_usuarios_id_seq'), 'Bruces Perens' , 'bperens@debian.org');



<?php

//Importamos la libreria PEAR
require_once 'DB.php';

//Datos de la BD
$user='postgres';
$pass='mexik004';
$host='localhost';
$db_name='DBTEST';
$conn = "pgsql://$user:$pass@$host/$db_name";

$conn = DB::connect($conn, true);

$action=$_REQUEST['action'];

if ( $action == "agregar" ) {

$nombre=$_POST['nombre'];

$email=$_POST['email'];

$sql="INSERT INTO tb_usuarios (id, nombre, email) VALUES (NEXTVAL('tb_usuarios_id_seq'), '$nombre', '$email')";

// echo $sql . "<br />";

$conn->query($sql);

echo "
<SCRIPT language='JavaScript'>
<!--
alert('¡Usuario agregado!');

document.location.href = 'pgsql.php';
--> </script>
";

}

if ( $action == "borrar" ) {

$id=$_GET['id'];

$sql="DELETE FROM tb_usuarios WHERE id=$id;";

$conn->query($sql);

echo "
<SCRIPT language='JavaScript'>
<!--
alert('¡Registro borrado!');

document.location.href = 'pgsql.php';
-->
</script>
";

}
?>

<html>
<head>
<title> :: PHP PGSQL ::</title>
</head>
<body bgcolor="#f4ffe5">

<?

echo '<h2 align="center">PHP y PostgreSQL</h2>';


echo '<h3 align="center">Lista de usuarios</h3>';
echo '<table align="center" border="1" width="50%">';

echo '<tr><td><b>Nombre</b></td><td><b>Email</b></td><td> </td></tr>';

//Query
$sql="SELECT * FROM tb_usuarios";

$result = $conn->query($sql);

//Checamos que no haya error
if (DB::isError($result)) {

die ($result->getMessage());

}
// Se hace un loop a través del result

$filas = $result->numRows();

for ($i=0; $i < $filas; $i++){

$estaFila = $result->fetchRow();

$id = $estaFila[0];

$nombre = $estaFila[1];

$email = $estaFila[2];

?>

<tr><td><?= $nombre ?></td><td><?= $email ?>
</td><td><a href="pgsql.php?action=borrar&id=<?= $id ?>">Borrar</a></td></tr>

<?
} //Fin del loop
?>

</table>
<br /><br />
<h3 align="center">Agregar usuario</h3>
<form action="pgsql.php" method="post">
<input type="hidden" name="action" value="agregar" />
<table align="center" border="1" width="50%">
<tr>
<td><input type="text" name="nombre" value="Pancho López" /></td>
<td><input type="text" name="email" value="correo@gmail.com" /></td>
<td><input type="submit" value="Agregar" /></td></tr>
</table>
</form>

<?
// Cierro la conexión con Postgresql
$conn->disconnect();
?>
</body>
</html>


Cambie mexik004 por el password del usuario postgres y sálve este archivo con el menú Plugins->FTP->Save to FTP server...:

Jedit.org FTP

Guardelo en el directorio /var/www, asigne el nombre pgsql.php. Al salvarlo notará que Jedit.org resalta la sintaxis de acuerdo al tipo de archivo, en este caso PHP. Compruebe con Mozilla que puede ver la tabla, agregar y borrar usuarios.

De esta manera hemos hecho nuestra primera tabla de altas y bajas usando Apache, PostgreSQL y PHP, fue fácil, ¿no? Si algo no sale o tienes una duda deja un comentario abajo.

Manuel Montoya Autor
Manuel Montoya es psicólogo y vive en la Ciudad de México. Desde 1998 se dedica a la consultoría de sistemas abiertos. Ha desarrollado aplicaciones Web para American Express, Bancomext, Aeroméxico y Ford. Actualmente trabaja en el Instituto de Investigaciones Biomédicas de la UNAM usando Python, PostgreSQL y PHP sobre NetBSD, además prepara el café de las mañanas. Jedit.org y WindowMaker son su editor y escritorio favoritos.


La coloración del código es fácil con:
Jedit.org
y su code2HTML plugin.


Última actualización: 2007-04-29 10:57:00-05

Printable version

Add comment:



Captcha




Que estas haciendo?
teoshoteosho está:
Preparandome para el viaje a Puerto Vallarta... que triste...
3 hours, 5 minutes ago

scarecrowscarecrow está:
Du hast?
7 hours, 8 minutes ago

der_teufelder_teufel está:
Ich habe einen Kater, aber nicht so schlecht...
14 hours, 42 minutes ago

rnstuxrnstux está:
Y yo un Abrazo.
1 day, 14 hours ago

saidjosesaidjose está:
Dandole su habrazote a mi santa madre que me soporta
1 day, 16 hours ago

dsquiddsquid está:
esperando a que este el pozole
1 day, 17 hours ago

Que estuvimos haciendo >>
Chipotle Software

En tu equipo tienes:
Sólo Windows
Windows y Linux
Sólo Linux
Linux y un BSD
Solaris, linux y BSD
Sólo MacacOS
Rapiditas
Problemas de Lenguaje en niños
10410 lecturas
Sexualidad infantil y juvenil
9167 lecturas
Anticoncepción de Emergencia
7840 lecturas
Rompiendo cualquier clave WEP en unos pocos minutos
6921 lecturas
Sinapsis y exocitosis
6227 lecturas
Mi primer CakePHP, mmmmm cakeee
5264 lecturas
Evolución filética en las hepáticas
4699 lecturas
BASH y Primeros Comandos
4012 lecturas
CakePHP II Active Record
3742 lecturas
Cómo convertirse en hacker
3619 lecturas
Add to Technorati Favorites

ir arriba
Cuando leemos, nutrimos nuestras mentes con las reflexiones hechas por siglos, por miles de personas. Alfonso Reyes

The Queen is here Mozilla Firefox The Best DataBase CakePHP Framework XHTML GNU Hacker Chipotle Software

Too Cool for Internet Explorer