Inicio

domingo, 9 de octubre de 2011

Clases en PHP

Lo que comenzó siendo un lenguaje de scripts, con el tiempo se ha convertido en un potente lenguaje de programación orientado a objetos POO. Este tipo de lenguajes utiliza los elementos clases y objetos como punto de partida de su estructura.
Para que podamos entender dichos conceptos pensemos en un programa que tenga que averiguar el dígito de seguridad de una cuenta corriente, formado por dos cifras.Lo más corriente es crear una función con un parámetro al que se le pase como argumento el número de la cuenta, y le devuelva los dígitos buscados.
Un desarrollo orientado a objetos pensaría en cada problema como una entidad única.Si pensamos que la cuenta corriente va asociado a una persona física o jurídica, podemos crear un procedimiento que identifique a esa persona y dentro de este proceso idear un método que calcule dichos dígitos.
Definición de clase
Una clase es un tipo de dato que contiene, en una misma estructura, variables y funciones.Es como una plantilla que nos permites construir objetos del mismo tipo. Sintáxis:

class blogg

{
function getTitulo()
   {

       return $this->titulo;
  }

}

Ejemplo de clase
Vamos a crear una clase para poder realizar una conexión a MySQL. Para comenzar vamos a crear una primera página (conexionclass.php) que contiene el módulo de clase, al que llamaremos desde otra página.
Código de la página conexionclass.php:

<?php
define ("SERVIDOR","localhost");
define ("USUARIO","root");
define ("PASS","");
define ("BASE","directorio");
class Conexion{
private $conn;
public function __construct()
    {
$this->conn=mysql_connect(SERVIDOR,USUARIO,PASS)
                    or die("Imposible conectar con ". SERVIDOR);
mysql_select_db(directorio,$this->conn) or die(directorio." no existe...");
    }
public function __destruct()
    {
mysql_close($this->conn);
    }
    public function consulta($sql)
    {
return mysql_query($sql,$this->conn);
    }
    public function elemento($id)
    {
$line=mysql_fetch_array($id);
return $line;
}
public function mensajeError()
    {
return mysql_error($this->conn);
}
public function numeroError(){
return mysql_errno($this->conn);
}
}
?>

Para comenzar declaramos las constantes con define para el servidor, usuario, password y base de datos.
A continuación creamos dos funciones la primera :

public function __construct()
    
Nos permite conectarnos a nuestra base de datos con los parámetros de la conexión. La segunda cierra la conexión
public function __destruct()


Creamos cuatro  más una para consulta, otra que nos devuelve la línea asociada al id que le pasemos, y dos más para el control de errores.

La segunda página invoca la clase y realiza la consulta sql:


<?php
include ("conexionclass.php");
$a=new Conexion();
$sql="select id,nombre,edad from example";
    $consu=$a->consulta($sql);
    $linea=$a->elemento($consu);
    while ($linea)
    {
          echo $linea[id]." ".$linea[nombre]." "."<br/>\n";
          $linea=$a->elemento($consu);
    }



?>


Para que el código funcione, necesitamos crear el objeto conexion esto se hace mediante la sentencia new Conexion(). En esa línea hemos creado por tanto una variable $a que contiene todas las funciones y propiedades de la clase conexion.Siempre que vayamos a llamar a una función de esa variable por ejemplo una consulta (recogida a su vez en $consu) tenemos que emplear el operador ->

$consu=$a->consulta($sql);
 $linea=$a->elemento($consu);




viernes, 30 de septiembre de 2011

Trabajando con los datos

Si se conoce un poco el estándar SQL , verá que no es complicado trabajar a través de PHP para efectuar consultas filtradas, actualizaciones, eliminación de datos, etc.

Por ejemplo supongamos que deseamos sacar datos ordenados por un criterio específico, digamos la edad. La solicitud en la línea de $query quedaría así:
$query = "SELECT * FROM example ORDER BY edad";

También pudiera darse la necesidad unos datos que ya están grabados. Para hacerlo, utilizamos el comando UPDATE. La sintaxis para esto es,


UPDATE "nombre_tabla" , SET "columna_1" = [nuevo valor] , WHERE {condición}

Así si desamos cambiar el nombre de Patxi por PATXI podríamos hacerlo de la forma siguiente:
<?php
require("conexion.php");
$peticion=mysql_query("UPDATE example SET nombre = 'PATXI' WHERE nombre = 'Patxi'");

if (!$peticion)
{
    die('No se ha podido realizar la actualización solicitada: ' .mysql_error());
}
$peticion=mysql_query("SELECT * FROM example WHERE nombre LIKE 'Patxi' AND edad LIKE '26'");

echo " Actualización realizada con éxito.";

echo "<table border='1'>";
echo "<tr><th>Id</th> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($peticion)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['id'];
    echo "</td><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
  
echo "</table>";

mysql_close();
?>

domingo, 18 de septiembre de 2011

Consulta a datos con buscador

Una forma más usual y asequible para el usuario de poder localizar datos en la BD, sería mediante un buscador. Para ello vamos a seguir con nuestro ejemplo pero añadiéndole algunas modificaciones. Primero crearemos una página htm que nos sirva para recoger la petición y otra php (yo la he llamado buscar.php) que nos permita presentar los datos. En principio lo vamos a realizar de una forma fácil, evidentemente se le puede ir añadiendo otras funcionalidades para depurar mejor el código.
Primero el formulario:
<html>
<head<
<title><h2>Busqueda de datos</h2><hr></title>
</head>
<body>
<form action="buscar.php" method="post">
<label>Nombre:</label>
<input type="text" name="nombre">
<input type="submit"><input type="reset">
</form>
</body>
</html>

 Guárdelo con el nombre que desee. Y a continuación la página php:
<?php
require("conexion.php");
$nom=$_POST['nombre'];
$consulta="SELECT*FROM example WHERE nombre LIKE '$nom'";

$resultado=mysql_query($consulta) or die(mysql_error());
$num_rows = mysql_num_rows($resultado);
echo "Se han encontrado en total $num_rows nombres<br>";?>
<table>
      <tr>
        <th>Nombre</th>
        <th>Edad</th>
      </tr>
      <?php while ($rsEmp = mysql_fetch_assoc($resultado)) { ?>
      <tr>
        <td><?php echo $rsEmp['nombre']; ?></td>
        <td><?php echo $rsEmp['edad']; ?></td>
      
      </tr>
      <?php } ?>
    </table>
 Como podrá observar las únicas modificaciones las tenemos en las líneas en negrita, en donde recogemos en una variable $nom el valor que nos remite el formulario, este se lo pasamos a la petición $consulta siendo el resto como ya comenté en posts anteriores.Pruebe también los comodines como J% y verá que funciona perfectamente.

viernes, 16 de septiembre de 2011

Consulta con WHERE y LIKE

Siguiendo con los tipos de consulta que podemos realizar a nuestra BD , puede surgir la necesidad de filtrar la misma bajo ciertos criterios. Supongamos que deseamos recuperar aquellas entradas de nuestro ejemplo que cuyos nombre comiencen por la letra J. Necesitamos echar mano de la sintáxis SQL y emplear los operadores WHERE (donde) y LIKE(como). Veamos el ejemplo:
<html>
<head>
       <title>Petición a BD con WHERE</title>
</head>

<body>
Solicitud de nombre de personas que empiecen por la letra "J".<br>
<?php
//realizando la conexión
mysql_connect("localhost","root") or die(mysql_error());
mysql_select_db("directorio") or die(mysql_error());

//obteniendo un resultado específico de la tabla example
$resultado=mysql_query("SELECT * FROM example WHERE nombre Like 'J%'" ) or die(mysql_error());
$num_rows = mysql_num_rows($resultado);
echo "Se han encontrado en total $num_rows nombres<br>";
while($row = mysql_fetch_array($resultado)){
// Presentando los resultados

echo $row['nombre']." -> ".$row['edad']."<br>";
}

?>
</body>
</html>

He resaltado la sentencia en negrita para explicarla. Con la misma solicitamos todos aquellos datos de la tabla "donde" nombre sea "como" J más los datos que sigan.
Un resumen de estos comodines:
EjemploDescripción
LIKE 'A%'Todo lo que comience por A
LIKE '_NG'Todo lo que comience por cualquier carácter y luego siga NG
LIKE '[AF]%'Todo lo que comience por A ó F
LIKE '[A-F]%'Todo lo que comience por cualquier letra comprendida entre la A y la F
LIKE '[A^B]%'Todo lo que comience por A y la segunda letra no sea una B
Por último con la sentencia que reescribo más abajo contamos el número de filas que devuelve  la consulta:
$num_rows = mysql_num_rows($resultado);

Recuperando listado de datos

Supongamos ahora que deseamos realizar un listado por pantalla de todos los datos que tengamos en una tabla. Para ello y, utilizando los datos de nuestro ejemplo, vamos a presentar un ejemplo de como podemos hacerlo:
</head>
<body>
<?php
print "<p>".strftime("%A, %d de %B de %Y")."</p>";
mysql_connect("localhost", "root") or die(mysql_error());
echo "Conectado a  MySQL<br />";
mysql_select_db("directorio") or die(mysql_error());
echo "Conectado a BD directorio";
echo"<br>";
echo"<hr>";
echo"Datos de la petición a las ".date("H:i:s")."<br>";
// realizando la conexión
$query = "SELECT * FROM example";

$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($result)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
   
echo "</table>";

?>
</body>
</html>

He incluido algunos complementos para hacer la tabla más presentable.Por ejemplo la fecha actual en la cabecera:
print "<p>".strftime("%A, %d de %B de %Y")."</p>";
Después los códigos para la conexión a la base de datos y tabla del ejemplo:

mysql_connect("localhost", "root") or die(mysql_error());
echo "Conectado a  MySQL<br />";
mysql_select_db("directorio") or die(mysql_error());
echo "Conectado a BD directorio";

Conformamos la tabla de presentación, realizamos la petición con while... y presentamos los resultados:
$result = mysql_query($query) or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Nombre</th> <th>Edad</th> </tr>";

while($row = mysql_fetch_array($result)){
    // Presentamos los contenidos en una tabla
    echo "<tr><td>";
    echo $row['nombre'];
    echo "</td><td>";
    echo $row['edad'];
    echo "</td></tr>";
}
   
echo "</table>";

El resultado sería este:

 

sábado, 10 de septiembre de 2011

Insertando datos desde un formulario

El siguiente paso después de haber visto como acceder y leer datos de una BD en MySQL será estudiar como conseguir insertar datos mediante un formulario HTML. Para ello necesitaremos dos ficheros, el primero un archivo con el formulario necesario para recoger los datos puede ser este:
<html>
<head>
<title>Formulario HTML</title>
</head>
<body>
<form action="insert.php" method="post">
<label>Nombre:</label>
<input type="text" name="nombre_form">
<label>Edad: </label>
<input type="text" name="edad_form">
<input type="submit"><input type="reset">
</form>
</body>
</html>

El fichero insert.php nos va a hacer todo el procesamiento de insertar los datos generando los mensajes de errores pertinentes si hay algún fallo:
<?php
// Crear conexión a la Base de Datos
$conexion = mysql_connect("localhost","root");
if (!$conexion) {
die("Fallo la conexión a la Base de Datos: " . mysql_error());
}
//Seleccionar la Base de Datos a utilizar
$seleccionar_bd = mysql_select_db("directorio", $conexion);
if (!$seleccionar_bd) {
die("Fallo la selección de la Base de Datos: " . mysql_error());
}
//Tomar los campos provenientes del Formulario
$nombre = $_POST['nombre_form'];
$edad = $_POST['edad_form'];
// Insertar campos en la Base de Datos
$insertar = mysql_query("INSERT INTO example (nombre, edad)
VALUES ('{$nombre}', '{$edad}')", $conexion);
if (!$insertar) {
die("Fallo en la insercion de registro en la Base de Datos: " . mysql_error());
}
// Cerrar conexión a la Base de Datos
mysql_close($conexion);
echo "Se ha insertado el siguiente dato NOMBRE: ".$nombre." EDAD: ".$edad." años."
?>

Es similar al código visto en post anterior salvo que recogemos los valores de las variables $_POST.

Recuperando datos de una tabla

En el presente post vamos a ver como recuperar datos de una tabla de nuestra base de datos. La lógica sigue siendo la misma sólo que con algunos añadidos. Primero debemos conectarnos a MySQL, después seleccionar la base que nos interesa. Realizamos la petición con una sentencia SQL presentamos los datos por pantalla.

Ejemplo:

<?php
// Conexión a MySQL
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("directorio") or die(mysql_error());

// Recuperando datos de la tabla example
$resultado = mysql_query("SELECT * FROM example")
or die(mysql_error()); 

//almacenamos la petición en la variable $row
$row = mysql_fetch_array( $resultado );
// Presentamos los datos

echo "Nombre: ".$row['nombre'];
echo " Edad: ".$row['edad'];

?>


Crear una tabla

Una vez que ya tenemos creada nuestra base veamos como podemos insertar una tabla con los campos correspondientes, para ello usaremos la sintáxis siguiente:
CREATE TABLE nombre_tabla
(
columna_nombre1 tipo_dato,
columna_nombre2 tipo_dato,

....
)

Ejemplo: vamos a crear una tabla a la que llamará "example" en la BD DIRECTORIO.
<?php
// Conexión a MySQL
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("DIRECTORIO") or die(mysql_error());

// Creando una tabla en nuestra BD
mysql_query("CREATE TABLE example(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
 nombre VARCHAR(30),
 edad INT)")
 or die(mysql_error()); 

echo "Tabla creada!";

?>

Podrá comprobar que una vez efectuada la conexión, debemos seleccionar la base de datos sobre la que vamos a actuar. Una vez que le hemos selecionado mysql_select_db("DIRECTORIO") or die(mysql_error()); procedemos a crear la tabla con una petición o query en la sintáxis SQL. 
mysql_query("CREATE TABLE example( argumentos serían los campos , el campo id es de tipo integer (int) no nulo y tipo autoincremento. Además ya hemos indicado que es nuestra llave primaria. El campo nombre es de tipo varachar al que necesariamente le debemos indicar entre paréntesis su longitud. Bien en el siguiente post analizaremos como insertar datos en una tabla y como hacerlo además mediante un formulario.

Crear una nueva base de datos

Es muy importante tener los privilegios necesarios para acceder a MySQL y poder conectar,crear y modificar bases de datos. Para ello desde menú general accedemos a la petaña Privilegios:
 Posteriormente editaremos los privilegios de nuestra cuenta:


Marcaremos las opciones que nos interese y finalizaremos con Continuar.

El código asociado para crear una base de datos sería el siguiente:

<?php
$con = mysql_connect("localhost","root");
if (!$con)
  {
  die('No se pudo conenectar a la base de datos ' . mysql_error());
  }

if (mysql_query("CREATE DATABASE my_db",$con))
  {
  echo "Bases de datos creada";
  }
else
  {
  echo "Error creando base de datos" . mysql_error();
  }

mysql_close($con);
?>


Como podrá comprobar el código no ostenta mucha complicación, una vez conectado si no ha habido errores, creamos nuestra base de datos con la línea:

mysql_query("CREATE DATABASE my_db",$con)

El resto no  es más que un bucle que nos manda un mensaje en caso de error.

lunes, 5 de septiembre de 2011

Conexión a MySQL

Buena parte de la efectividad de MySQL tiene que ver con la seguridad que ofrece. MySQL ofrece la posibilidad de administrar permisos a usuarios individuales o a grupos. Por lo pronto no vamos a entrar en explicar este punto, sino que vamos a entrar a comprender y trabajar con la interrelación de PHP y MySQL.
Lo primero que debemos hacer a la hora de programar es establecer una CONEXION con el servidor.Para ello necesitamos enviar como parámetros la dirección de nuestro servidor, el usuario y la contraseña. Veamos:

<?
$miservidor='localhost';
$miusuario='';
$micontraseña='';
$bd="ejemplo";
//conexión al servidor
$conexion=mysql_connect($miservidor,$miusuario,$micontraseña);
//selección de mi base de datos
mysql_select_db($bd,$conexion);
//cierra la conexion
mysql_close($conexion);
?>


El código es fácil de comprender, en principio nos apoyamos en la función mysql_connect(servidor,usuario,contraseña) con esos argumentos, después hemos de indicarle al navegador la base de datos con la que vamos a trabajar. Por último con mysql_connect cerramos la conexión.

Podemos diseñar una clase reutilizable para todos nuestros proyectos en que precisemos conectarnos a nuestra BD:

<?
class sevidor_BD
{
private $servidor;
private $usuario;
private $pass;
private $BD;
private $conexion;
function_construct($servidor,$usuario,$pass,$BD)
{
    $this->sevidor=$sevidor;
    $this->usuario=$usuario;
    $this->pass=$pass;
    $this->BD=$BD;
    $this->conectar_BD();
}
private function conectar_BD();
{
    $this->conexion=mysql_connect($this->servidor,$this->usuario,$this->pass);
    mysql_select_db($this->BD,$this->conexion);}
}
}
$servidor="localhost";
$usuario="";
$pass="";
$BD="ejemplo";
$usuario=new;
$servidor_BD($servidor,$usuario,$pass,$BD);
?>

jueves, 1 de septiembre de 2011

Subiendo ficheros al servidor

Una de las tareas que más pueden presentarse a la hora de programar con PHP es la de subir archivos al servidor. la función que nos va a permitir esta tarea es upload().
Para el correcto aprendizaje utilizaremos un ejemplo, en él que subiremos un archivo. Este solo puede ser de extencion .zip y ocupar menos de 30 kb, definiendo así las opciones del upload con php.

Primero empezaremos con el formulario html, encargado de enviar el archivo al servidor.



action="subir.php" method="post" name="miformulario" enctype="multipart/form-data">




Este formulario tiene un parametro nuevo llamado enctype, con el valor "multipart/form-data", informando que envía datos y archivos, opción indispensable para subir correctamente el fichero.


El fichero al que enviamos el formulario, encargado de procesarlo se llama subir.php.
Cómo vimos en el formulario, el campo de archivo se llama archivo:



De acuerdo a este nombre sera que trabajaremos en el lado del servidor, o sea en el script.
El archivo se guarda en la carpeta temporal del servidor, dato que hay que tenerlo en cuenta ya que no todos los servidores cuentan con esta opción y ponen el tamaño de dicha carpeta a 0, imposibilitando subir archivos.

Para referirnos al archivo en el script lo hacemos por medio de: $archivo

Otras propiedades que tendremos a nuestra disposicion es el tamaño (en bytes) y el nombre del archivo.
$archivo_name - Nombre del archivo (ej: instaladores.zip, miarchivo.zip)
$archivo_size - Tamaño del archivo en bytes (si son 10kb serian 10000 bytes)

Nota: A este punto cuándo nos referimos al archivo lo hacemos siempre con $archivo, debido a que en el formulario lo denominamos de esta forma().

La explicacion la hago suponiendo un conocimiento basico de php por parte del lector.

Primero mostrare el script, luego explicare linea por linea el script:


<?
$extension = explode(".",$archivo_name);
$num = count($extension)-1;
if($extension[$num] == "zip")
{
if($archivo_size < 30000)
{
if(!copy($archivo, "archivos/".$archivo_name))
{
echo "error al copiar el archivo";
}
else
{
echo "archivo subido con exito";
}
}
else
{
echo "el archivo supera los 30kb";
}
}
else
{
echo "el formato de archivo no es valido, solo .zip";
}
?>


Lo primero que haremos sera comprobar que la extencion del archivo es la permitida (.zip).
Para ello utilizamos la funcion de php explode, la cual guardará en un array el nombre del archivo segun el primer parametro (el punto):

$extension = explode(".",$archivo_name);
Para mejor entendimiento, si el archivo se llama ficheros.zip el explode pondria en este caso en la variable $extencion el nombre en dos partes: $extension[0] y $extension[1] los cuales contienen:
$extension[0] --> "ficheros"
$extension[1] --> "zip"
Ahora obtendremos la longitud del array, en este caso seria de 2 (ya que contiene 2 elementos "ficheros" y "zip"), a ese numero le mermamos 1 y lo asignamos a una variable llamada $num:
$num = count($extension)-1;

Nota: Le hemos mermado 1 a la longitud por que cuando queramos llamar al array $extension[$num] debemos de hacerlo teniendo en cuenta que los elementos van desde 0, por lo que aunque contenga 2 elementos no podemos llamar al segundo con $extension[2], si no que tenemos que llamarlo por su posicion $extencion[1].


Ahora haremos el condicional. Si la extencion del archivo es zip continuaremos con el proceso de upload, de lo contrario mostraremos mensaje de error.

if($extension[$num] == "zip")
{
...
}
else
{
echo "el formato de archivo no es valido, solo .zip";
}


Ahora, continuaremos con el upload, suponiendo que el archivo era el correcto.

Lo siguiente a hacer es comprobar el tamaño del archivo; para ello utilizaremos la variable antes mencionada $archivo_size. Si el tamaño es menor a los 30kb (recuerde, debe especificarlo en bytes, por lo que serian 30000) continuaremos con el upload, de lo contrario mostraremos un mensaje de error:

if($archivo_size < 30000)
{
...
}
else
{
echo "el archivo supera los 30kb";
}


Ahora, continuaremos con el upload, suponiendo que el tamaño del archivo es correcto.
Utilizaremos la función copy() de php, la cual copiara el archivo a la carpeta que especifiquemos.

Nota: El archivo que hemos subido por medio del formulario se guarda en la carpeta temporal del servidor y se accede a él por medio de la variable $archivo, este archivo será borrado de la carpeta temporal cuando el script finalize su ejecución, este proceso es automatico y lo realiza el servidor, usted no tiene que preocuparse por este aspecto.


En este caso copiaremos el archivo a una carpeta del servidor llamada archivos. Notese que la ruta de copiado debe de ser relativa, no absoluta, y es relativa al script.
Osea, si el script se ejecuta en:
http://www.servidor.net/cuenta/carpeta/subir.php

La funcion en este caso intentara copiarlo a:
http://www.servidor.net/cuenta/carpeta/archivos/

Lo hemos puesto en un if y con signo de negación(!), para que en caso de no poder copiar el archivo nos salga mensaje de error:

if(!copy($archivo, "archivos/".$archivo_name))
{
echo "error al copiar el archivo";
}
else
{
echo "archivo subido con exito";
}


En este caso el archivo ha sido copiado a la carpeta archivos y con el mismo nombre que tenía, osea, si el archivo se llamaba "ficheros.zip", el archivo ha quedado en la carpeta con el mismo nombre "archivos/ficheros.zip".

Notese que esto no es obligatorio, y podemos ponerle el nombre que queramos, si hubieramos querido que el archivo se llamara "jlmm.zip", simplemente pondriamos en el copy() lo siguiente:
copy($archivo, "archivos/jlmm.zip")

MANEJO DE FICHEROS

PHP ofrece una extensa gama de funciones para acceso a ficheros:
fopen(): se utiliza para abrir ficheros.
fclose():para cerrar ficheros.
La primera además cuenta con una serie de argumentos:
modo Descripción
'r' Apertura para sólo lectura; ubica el apuntador de archivo al comienzo del mismo.
'r+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo del mismo.
'w' Apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud de cero. Si el archivo no existe, intenta crearlo.
'w+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud cero. Si el archivo no existe, intenta crearlo.
'a' Apertura para sólo escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'a+' Apertura para lectura y escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'x' Creación y apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna.
'x+' Creación y apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna.

Ejemplo:
<?php
$gestor 
fopen("/home/rasmus/archivo.txt""r");$gestor fopen("/home/rasmus/archivo.gif""wb");$gestor fopen("http://www.example.com/""r");$gestor fopen("ftp://usuario:contrasenya@example.com/un_archivo.txt""w");?>


Para crear un nuevo directorio usaremos la función mkdir():

<?
$nuevodir="x";
mkdir($nuevodir);
?>
   

martes, 30 de agosto de 2011

MySQL Primeros pasos

MySQL no es una base de datos (BD), es un GESTOR DE BASES DE DATOS. Como tal nos permite crear bases de datos, insertar tablas, modificar, eliminar datos, definir usuarios y asignar permisos, realizar copias de seguridad, etc. Está escrita en PHP y se ejecuta desde el navegador, si está inserta en la carpeta phpmyadmin, desde la barra de direcciones escribimos : http://localhost/phpmyadmin/, le aparecerá una imágen como esta:
A partir de aquí si todo ha salido bien, el siguiente paso será crear una BD. Lo podemos hacer directamente desde la página anterior, o con PHP.

CREANDO UNA BD DESDE MySQL
Desde la interfaz del gestor aparece una caja de texto con una etiqueta CREAR BASE DE DATOS. Si observa en el menú de la izquierda ya aparecen unas BD de plantilla creadas, pero por ahora nos centraremos en crear la nuestra propia. Insertamos el nombre que queramos y seleccionamos el cotejamiento utf8_unicode_ci ; en Cotejamiento de las conexiones MySQL también ponemos utf8_unicode_ci y finalmente pinchamos en crear. Nos tiene que devolver una frase del tipo: La base de datos bd se creó.
En el recuadro de la izquierda, nos tiene que aparecer el nombre de nuestra BD recién creada.
Evidentemente, en esa base no hay nada, así que el siguiente paso será crear las tablas que precisemos con sus campos correspondientes. Supongamos que desamos crear una tabla para clientes.


Volvemos a nuestro phpMyAdmin, y buscamos la pestaña SQL, pinchamos en ella y en el recuadro en blanco escribimos lo siguiente:

CREATE TABLE clientes (
codigo int(11) NOT NULL auto_increment,
nombre_titular varchar(40) default NULL,
numero_pers int(4) default 1,
localidad varchar(60) default NULL,
fecha_llegada varchar(60) default NULL,
fecha_salida varchar(60) default NULL,
recorrido int(11) default NULL,
forma_pago int(11) default NULL,
telefono int(11) default NULL,
mail varchar(50) default NULL,
PRIMARY KEY (`codigo`)
)
Si todo se ha hecho de forma correcta, nos debe aparecer un mensaje "Su consulta se ejecutó con éxito ( La consulta tardó 0.0389 seg )".



MySQL

Hablar de PHP es hablar de APACHE pero también hablar de MySQL, uno de los gestores de base de datos más populares por su potencialidad, funcionalidad y facilidad de uso, que existen.
A lo largo de los siguientes posts iré explicando las diferentes formas de instalar este gestor de bases de datos.  Ahora doy por sentado que están utilizando XAMPP o algún otro IDE parecido, que integra PHP y MySQL. Por lo tanto activar el gestor de BD es facilísimo, tan sólo (en el caso de XAMPP) desde el panel de control es activar en Star y ya está.
Si desea instalar MySQL en Windows de forma independiente aquí tiene un tutorial que explica paso a paso como debe hacerlo.
Instalación de MySQL 5.1 en Windows
MySQL es un motor de base de datos Open Source. Es usado en una gran cantidad de aplicaciones, cuenta con excelente documentación oficial y no oficial y es una de las grandes opciones a elegir como base de datos personal.
Esta es una breve guía para la descarga e instalación de la versión MySQL Community Server 5.1 proporcionada por SUN Microsystems Oracle en el sitio Web del producto.
Siga las indicaciones especificadas a continuación:
1. Ingrese al sitio Web de descargas de MySQL en la dirección http://dev.mysql.com/downloads/ y seleccione el enlace “MySQL Community Server”:

2.Deslícese hasta que encuentre el enlace de la versión para Windows.

3.Seleccione la opción “Download” de “Windows Essentials”:

4. Guarde el archivo en su computador como se lo indique su navegador (Google Chrome en este caso):

5. Ejecute el archivo descargado (mysql-essential-5.1.32-win32.msi) para comenzar con la instalación:

6. Aparece la pantalla de inicio del instaladar. Seleccione “Next” para continuar:

7. Seleccione el tipo de instalación “Complete” y presione “Next”:

8. Presione el botón “Install” para comenzar con la copia de archivos:

9. Así comienza el proceso de instalación:

10. A continuación aparecen 2 pantallas de MySQL Enterprise, presione “Next” en cada una para continuar:


11. En la siguiente pantalla seleccione la opción “Configure The MySQL Server Now” y presione “Next”:

12. La siguiente pantalla es la de configuración de la instancia del MySQL Server. Presione “Next” para comenzar:

13. Seleccione la opción “Standard Configuration” para su instalación y presione “Next”:

14. Seleccione las opciones “Install As Windows Service“ e “Include Bin Directory in Windows Path”. No siempre se desea que el motor arranque automáticamente cuando inicie el sitema operativo, para eso deseleccione la opción “Launch the MySQL Server Automatically”, si lo hace, siempre deberá iniciar el servidor manualmente. No hay problema si se deja seleccionada la opción. Presione “Next” para continuar.
15. Ingrese la contraseña para el usuario root (el administrador del motor). Si previamente tuvo instalado MySQL aparece un campo para ingresar la clave actual.
  • Si desea administrar el motor de forma remota, seleccione la opción “Enable root access from remote machines”.
  • Si desea una cuenta anónima (sin usuario ni clave) seleccione la opción “Create an Anonymous Account”.
Presione “Next” para continuar.
16. Presione “Execute” para realizar la configuración:

17. Si previamente tuvo instalado MySQL es probable que tenga problemas al iniciar el servicio, la mejor solución es usar la instalación previa para eliminar la instancia y desinstalar el producto completamente. Sin embargo esto no siempre se puede hacer ya sea porque se desinstaló sin eliminar la instancia o porque el producto falló. En estos casos, se puede solucionar de la siguiente forma:
  • Borrar la carpeta C:\Documents and Settings\<usuario_actual>\Datos de programa\MySQL.
  • Borrar la carpeta C:\Archivos de programa\MySQL.
Tenga cuidado, esto eliminará bases de datos anteriores. Hágalo sólo si está seguro que no se están usando.
18. Al finalizar el proceso de configuración la pantalla deberá indicar que los pasos se ejecutaron correctamente. Presione “Finish” para finalizar el proceso.
19. Si la instalación fue exitosa, aparecerá en el menú inicio una opción como la que se muestra en la imagen:
20. Para comenzar a utilizar MySQL seleccione la opción del menú inicio MySQL → MySQL Server 5.1 → MySQL Command Client. Ingrese la contraseña que utilizo en el paso 15 de la instalación.
21. Puede probar ejecutando algunos comandos básicos como “show databases”, “connect”, “show tables”:
22. Si todo le resultó como se indica en esta guía, quiere decir que el proceso de instalación fue exitoso.

jueves, 25 de agosto de 2011

PHP include() Function

Podemos incluir el contenido de un fichero PHP dentro de otro, antes de que el servidor lo ejecute con las funciones include() o require(). Ambas tienen la misma manera de actuar salvo en lo referente al tratamiento de errores.
  • include() genera una llamada de atención pero el script continúa ejecutándose.
  • require() genera un error crítico que hace que el script se detenga.
Las dos funciones se utilizan para la ejecución y generación de funciones, cabeceras, pies que pueden ejecutarse y reutilizarse en otros ficheros.
Esto comporta un importante ahorro de carga al servidor: podemos crear una página estándar o un menú de ficheros para nuestras páginas web.
Ejemplo:

Primero creo el fichero header.php que va a contener las etiquetas de cabecera simples de html.
<html>
<head>
<title>Ejemplo de include()</title>
</head>
<body>

El fichero footer.php
Todos los derechos reservados
</body>
</html>

El cuerpo del documentoal que le llamo cuerpo.php
<?php include("header.php");
echo"Como puede ver hemos incluido el fichero header y footer ";
echo"<br>";
include("footer.php");
?>








Funciones de calendario

Como ya les comenté son muy extensas las bibliotecas de funciones predefinidas que tiene PHP. En este post y muy resumidamente les expongo las funciones de calendario, que nos permite obtener múltiples configuraciones al respecto:

Función Descripción PHP
cal_days_in_month() Devuelve el número de días en un mes para un determinado año 4
cal_from_jd() Convierte a Julian un día de determinada fecha del calendario 4
cal_info() Devuelve información sobre un calendario 4
cal_to_jd() Convierte una fecha en díasJulian 4
easter_date() Devuelve el timestamp de Unix para la medianoche del día de Pascua de un año específico 3
easter_days() Devuelve el número de días a partir de 21 de marzo de Semana Santa de un año específico 3
FrenchToJD() Convierte una fecha calendario republicano francés a la fecha de Julian 3
GregorianToJD() Convierte una fecha gregoriana a una fecha Julian 3
JDDayOfWeek() Devuelve el día de una semana 3
JDMonthName() Devuelve un nombre del mes 3
JDToFrench() Convierte dia Julian en día republicano francés 3
JDToGregorian() Convierte fecha Julian a fecha Gregoriana 3
jdtojewish() Convierte un día Julian a un dia judío 3
JDToJulian() Convierte un dia Julian a una fecha del calendario juliano 3
jdtounix() Convierte un dia Julian a un timestamp de Unix 4
JewishToJD() Convierte una fecha judío a una fecha Julian 3
JulianToJD() Convierte una fecha del calendario juliano a una Julian 3
unixtojd() Convierte un timestamp de Unix a un día Julian 4

Ejemplo:
<?php
$dias=unixtojd(mktime(0,0,0,9,11,2001));
print_r(cal_from_jd($dias,CAL_GREGORIAN));
echo"<br>";
print_r(cal_from_jd($dias,CAL_JULIAN));
echo"<br>";
print_r(cal_from_jd($dias,CAL_JEWISH));
echo"<br>";
print_r(cal_from_jd($dias,CAL_FRENCH));
?>
El resultado sería:

Array ( [date] => 9/11/2001 [month] => 9 [day] => 11 [year] => 2001 [dow] => 2 [abbrevdayname] => Tue [dayname] => Tuesday [abbrevmonth] => Sep [monthname] => September )
Array ( [date] => 8/29/2001 [month] => 8 [day] => 29 [year] => 2001 [dow] => 2 [abbrevdayname] => Tue [dayname] => Tuesday [abbrevmonth] => Aug [monthname] => August )
Array ( [date] => 13/23/5761 [month] => 13 [day] => 23 [year] => 5761 [dow] => 2 [abbrevdayname] => Tue [dayname] => Tuesday [abbrevmonth] => Elul [monthname] => Elul )
Array ( [date] => 0/0/0 [month] => 0 [day] => 0 [year] => 0 [dow] => 2 [abbrevdayname] => Tue [dayname] => Tuesday [abbrevmonth] => [monthname] => )


miércoles, 24 de agosto de 2011

Funciones específicas de Apache

Tenemos una serie de funciones predefinidas que nos dan una serie de información de PHP sobre servidor Apache.

apache_get_modules: información sobre los módulos Apache cargados en el servidor.
apache_get_version: información de la versión.
apache_request_headers:devuelve una matriz asociativa de todas las cabeceras HTTP en la petición actual. Esta función está disponible únicamente cuando PHP se ejecuta como un módulo de Apache.

Ejemplo:
<?php
$headers = apache_request_headers();
$version = apache_get_version();
echo "$version\n";   
echo "<br><hr>";
foreach ($headers as $header => $value) {
    echo "$header: $value <br />\n";
   
   
}
?> 

 

viernes, 19 de agosto de 2011

Funciones de cadenas

La función substr() permite leer parte de una cadena de texto y toma como mínimo dos parámetros: la cadena a analizar y el punto desde donde queremos que comienze a leer.
Sintáxis: substr ( string $string , int $start [, int $length ] )
Ejemplo:
<?php
$rest1 = substr("Enrique", -1);    // devuelve "e"
$rest2 = substr("Enrique", -2);    // devuelve "ue"
$rest3 = substr("Enrique", -3, 1); // devuelve "q"

echo $rest1 ."<br>";
echo $rest2 ."<br>";
echo $rest3;
?>





La función chr() toma una función ASCII y devuelve el carácter equivalente. La función ord() hace exactamente lo contrario.
Ejemplo:
<?php
echo (chr(69));
?>
 

La función strlen() devuelve la longitud de la cadena que se ha utilizado como argumento:
<?php
 echo "Enrique tiene ". strlen(Enrique)." letras.";
?>

 

Función Rand()

Para generar números aleatorios se puede usar esta función que lleva como argumentos opcionales el número más bajo y el más alto. Así si desea generar números entre el 1 y el 49 podría ejecutar el siguiente código:
<?php
echo "Combinación para apuesta: <br>";
echo rand(1,49) . "\n";
echo rand(1,49) . "\n";
echo rand(1,49) . "\n";
echo rand(1,49) . "\n";
echo rand(1,49) . "\n";
echo rand(1,49) . "\n";
?>

Si no le damos argumentos a la función esta generará números entre el 0  y el por defecto: getrandmax() que es el 32768.
Otra función opcional a la descrita es mt_rand ( int $min , int $max ), que genera números aleatorios de una forma más rápida y fiable.

FUNCIONES II (Parámetros)

Como ya comenté en un anterior post, las librerías de funciones en PHP son unos de los mejores recursos que tenemos en este lenguaje.
Hemos definido cómo es la sintáxis de una función, y hemos hecho mención a los parámetros. Los parámetros (o argumentos) son variables y/o constantes que establecen una "comunicación" entre partes del código, y que se tratarán como variables locales dentro de la función. Es posible que la lista de parámetros de una función esté vacía, es decir, que no aparezca ningún parámetro dentro de los paréntesis ().

PHP admite pasar valores por valor o por referencia. Esto que quiere decir:

Cuando creás una variable y le asignámos un valor tenemos dos cosas:

- el valor asignado
- la dirección de memoria en la que se almacena dicho valor.

La variable en realidad no contiene datos, sino que "sabe" la dirección de memoria en la que esos datos están almacenados.

Así, cuando se pasa por valor se copian los datos: se toman de la memoria y se almacenan en otro lugar, luego se asigna a la variable la referencia a esos nuevos datos.

Y cuando se pasa por referencia se copia, justamente, la referencia a la posición de memoria. Así, como la variable de la función apunta a la misma memoria, apunta a los mismos datos y por lo tanto puede modificar la variable original.

Supongamos que tenés la variable

$x = 5;

y la pasás a una función

mi_funcion($x);

Si el paso es por valor, la función tendrá una firma como la siguiente

function mi_funcion($parametro)

Y al momento de ejecutarse se creará la variable $parametro, a la que se asignará el valor de $x. Es decir, los datos almacenados en la dirección de memoria a la que apunta $x serán copiados a otra posición de memoria, y a esa nueva posición apuntará $parametro.

Si el paso es por referencia, la función tiene una firma como esta:

function mi_funcion(&$parametro)

Esto implica que al momento de ejecutarse la función, tanto $x como $parametro terminan apuntando a los mismos datos (claro está, $parametro solamente existe mientras la función se ejecuta). Normalmente la función no puede modificar la variable original, pero sí puede hacerlo si el paso es por referencia.

Este procedimiento para pasar parámetros por referencia desde la llamada de la función ha quedado en desuso y provocará Warnings en las configuraciones por defecto de PHP. 

martes, 16 de agosto de 2011

Funciones

Podría decirse que las funciones son el aspecto más atractivo y poderoso de PHP. De hecho existen más de 700 funciones predefinidas que se pueden agrupar en las siguientes categorías:

Para crear una función en PHP emplearemos la sintáxis siguiente:
function functionName()
{
código a ejecutar;
}


Es aconsejable nombrar la función con una palabra que identifique adecuadamente lo que hace. Podemos emplear con una letra incluso con guión bajo, pero no con números. En el siguiente ejemplo definimos una función que escribe mi nombre cuando la invoco:

html>
<body>
<?php
//defino la función
function minombre()
{
echo "Enrique Manuel Cabello Portero";
}
//llamada a la función
echo "Hola me llamo ";
minombre();
?>
</body>
</html>

Adicionalmente y, al objeto de darle más funcionalida ,podemos añadirle parámetros a nuestras funciones. 
Veamos otro ejemplo en el que calculamos el factorial de 4.
<?php
function factorial($n) {

if ($n<0) {
return "Sólo se puede calcular con números positivos";
}
else if ($n==0)
return 1;
else {
$a=1;
for($i=2 ;$i<=$n;$i++) {
$a=$a*$i;
}
return $a;
}
}
echo " El factorial de 4 se escribe 4! y es igual a ".factorial(4)
?>
En principio evaluamos la posibilidad que se intoduzca como parámetros el 0 o un número negativo. Posteriormente y, valiendonos de un bucle for realizamos la operación matemática.  Observe que cuando la función ha de devolver una cadena debe hacerlo con la expresión return.


Estructuras repetitivas For...each

"Por cada", literalmente es lo que significa. Con lo que es fácil de intuir la manera de ejecutarse el bucle, cuya sintáxis es la siguiente:
foreach ($array as $value)
  {
código a ejecutar;
  }
Por ejemplo el siguiente programa nos presenta por pantalla el nombre de tres personas usando este bucle:
<html>
<body>

<?php
$x=array("Pepe","Luis","Ana");
foreach ($x as $value)
  {
  echo $value . "<br />";
  }
?>

</body>
</html> 





Otro ejemplo:
<?php

// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach (range(0, 12) as $numero) {
    echo $numero;
}

// El parametro paso fue introducido en 5.0.0
// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
foreach (range(0, 100, 10) as $numero) {
    echo $numero;
}

// Uso de secuencias de caracteres introducidas en 4.1.0
// array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');
foreach (range('a', 'i') as $letra) {
    echo $letra;
}
// array('c', 'b', 'a');
foreach (range('c', 'a') as $letra) {
    echo $letra;
}
?>

lunes, 15 de agosto de 2011

Estructuras repetitivas Do,,,while

La estructura do...while recorre las instrucciones del bucle hasta que o mientras no se cumpla la condición, que le hayamos señalado. Ejemplo:
Este código funcionará hasta que la variable i deje ser menor que 10.
<?php
$i = 0;
echo 'Este código correrá al menos una vez ya que i=0.<br/>';
do {
echo 'El valor de i es ' . $i . '. <br/>';
++$i;
} while ($i < 10);
?>

jueves, 11 de agosto de 2011

Estructuras repetitivas

Vaya por delante una definición previa “son las que nos permiten repetir la ejecución de ciertas líneas de código de acuerdo a una condición dada y que es muy importante que esta condición sea finita”.
Esas estructuras en PHP son las siguientes:
  • for
  • while
  • do-while 
  • foreach
 FOR
Para utilizar el for es necesario primero declarar un valor desde donde  comenzar (generalmente el 0 o el 1) luego que condición debe cumplirse para ejecutar el código (misma que debe ser finita) y al final como se va a comportar la variable, si va a aumentar o a disminuir (esto depende de la condición y del valor de inicio).
Por ejemplo vamos a presentar por pantalla los 25 primeros dígitos.

<head>
  <title>Ejemplo de la estructura For</title>
</head>

<body>

<?php
for ($x=1;$x<=25;$x++)
{
        echo $x;
        echo"<br>";
}
?>

</body>

</html>

He señalado en azul la estructura de código de la instrucción for para poder analizarla. Si observa sus argumentos comienzan con la declaración de una variable contador, que en este caso comienza en uno. Seguidamente le marcamos el límite "hasta 25", y le decimos que lo aumente de uno en uno.

    Switch

    Switch es una instrucción que comprueba si una variable coincide con algún valor en concreto. De ser cierto ejecuta una serie de órdenes y, en caso contrario, ejecuta las órdenes que le hallamos marcado por defecto.
     Su sintaxis es como sigue:

    switch (expresión_1) {
        case valor_1:
            bloque_de_sentencias_1;
            break;
        case valor_2:
            bloque_de_sentencias_2;
            break;
        ...
        case valor_n:
            bloque_de_sentencias_n;
            break;
    }
    Veamos un ejemplo:
    Código del ejemplo switch.php
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
      <title>Ejemplo de switch</title>
    </head>
    
    <body>
      <form action= "switch2.php" method="post">
     Ingrese usuario:<input type="text" name="usuario">
    <input type="submit" name="OK" value="Enviar">
     </form>
     <br><br>
    <?php
    if   ($OK=="Enviar") {
    
    
    switch($usuario){
    		case 'Juan':
              echo "Hola Juan";
              break;
            case 'Ana':
              echo "Hola Ana";
              break;
            default:
             echo"Lo siento no estás registrado" ;
    
    
       }
       }
    ?>
    
    </body>
    
    </html>
     
    El código en sí no es complicado de entender, le hemos añadido una condicional if
    al comienzo que nos permite que no aparezca la instrucción por defecto nada más 
    cargar la página. 
    
    

    miércoles, 10 de agosto de 2011

    PHP dinámico

    Hasta ahora hemos visto una serie de scripts pero sin entrar a fondo en el aspecto dinámico como tal de PHP.
    Cuando se trata de páginas estáticas la comunicación está muy restringida. El cliente hace una petición (escribe el nombre de una página en la barra de direcciones del navegador) y el servidor se limita a devolver los contenidos de esa página. Un primer paso para mejorar es esa comunicación será que el cliente especifique algo más en su petición y que el servidor interprete esa información complementaria.
    Para poder profundizar en lo expuesto, previamente abordaremos algunos conceptos.
    La función isset
    isset() es una función de PHP que nos permite comprobar si una variable está definida, devolviendo true si lo estuviese. Esta función es muy común cuando deseamos comprobar que los campos de un formulario hayan sido rellenados, o incluso para mostrar un formulario completo y una vez que sea presionado el botón enviar, nos muestre otra cosa y el formulario sea enviado.
    Su sintaxis es la siguiente: isset($variable)
     Veamos un ejemplo:
    Escriba el siguiente código y guárdelo como formulario.html
    <html xmlns="http://www.w3.org/1999/xhtml">


    <body>
    <form action="formulario.php" method="post" name="form" id="form">
    <input type="text" name="nombre" />
    <input type="submit" name="enviar" />
    </form>

    </body>
    </html>

    Escriba ahora este otro y guárdelo como formulario.php
    <?php
    if (isset($nombre) && $nombre!="") {
    echo "Hola $nombre, bienvenido a PHP";}
    else {
                echo "No has escrito nada"; }


    ?>

    isset verifica si la variable está o no definida, literalmente se puede leer tras la etiqueta php si la variable nombre está definida (existe) y su valor no está vacío saca el mensaje "Hola lo que sea, etc" si no "No has escrito nada"

    La función unsset
    unset() destruye las variables especificadas.Modifique para probarlo el código anterior de la siguiente forma:

    <?php


        unset($nombre);


    if (isset($nombre) && $nombre!="") {
    echo "Hola $nombre, bienvenido a PHP";}
    else {
                echo "No has escrito nada"; }


    ?>

    Como comprobará aunque escriba lo que sea en la caja de texto, el servidor siempre le responderá lo mismo "No has escrito nada", y ello porque unset ha eliminado la variable y por tanto su contenido.

    viernes, 5 de agosto de 2011

    Arrays asociativas y multidimensionales

    En PHP no necesariemente tenemos que trabajar con índices. Podemos usar un esquema que nos relaciona elementos no numéricos. Por ejemplo imaginemos que desamos tener una variable que nos recoga verduras y otra para las frutas. De esta manera podíamos escribir lo  siguiente:

    ALIMENTO:

    VERDURAS-->tomates,lechuga,pepinos
    FRUTA-->naranjas,plátanos, melocotones.

    Ajustado a nuestro código podríamos escribir lo siguiente:
    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>
      <title>Ejemplo de array asociativo</title>
    </head>

    <body>

    <?php
    $capital=array("ES"=>"Madrid","UK"=>"Londres","FR"=>"París");

    echo $capital["ES"];//Muestra la capital de España
    ?>

    </body>

    </html>

    Un array multidimensional es simplemente un array en el que al menos uno de sus valores es, a su vez, un array:


    <?php

     
      $agenda = array("domicilio" => "calle tal cual",
                      "telefono"  => $telefonos,
                      "trabajo"   => "empresa tal cual");
      
      $telefonos = array("trabajo" => "7296489",
                         "casa"    => "5689524",
                         "movil"   => "9558987");

     
    ?>


    Y podemos acceder a dichos valores añadiendo un par de corchetes:


    <?php
     $agenda['telefono']['casa'] = "5689524";

    ARRAYS

    Las arrays o matrices son de mucha utilidad cuando precisamos almacenar varios valores en una sola variable. Pensemos por ejemplo que precisamos presentar por pantalla el día de la semana, o los nombres de una lista de productos, etc.
    A la hora de definir nuestra array lo podemos hacer de una forma desarrollada o abreviada. Por ejemplo, de forma desarrollada sería:
    <?php
    $a[0]="Pepe";
    $a[1]="Juan";
    $a[2]="Luis";
    //Mostrar sólo Luis
    echo $a[2];
    ?>

    La forma abreviada

    <?php
    $a=array("Pepe","Juan","Luis");

    //Mostrar sólo Luis
    echo $a[2];
    ?>

    Otra de las cuestiones que nos pueden insteresar es conocer cuántos elementos componen una array. Para ello existe la función count()- Veamos como funciona con un ejemplo:

    <?php
    $a=array("Pepe","Juan","Carla","Luis","Andrea");
    $numelementos=count($a);
    echo "Nuestro array tiene <b> $numelementos<b>  elementos";
    ?>

    jueves, 4 de agosto de 2011

    Trabajando con fechas

    Para mostrar la fecha completa en PHP tenemos dos opciones, que podremos manejar despues convenientemente para presentar otros formatos según las necesidades.
    La más práctica si es que vamos a escribir en español, es registrar las variables locales a nuestro idioma con la línea siguiente:

    setlocale(LC_ALL,"es_ES@euro","es_ES","esp");

    Así podemos escribir la fecha larga directamente:
    <?php
    setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
    echo "Sevilla, ".strftime("%A %d de %B del %Y");
    ?>
    Una alternativa sería declarar sendas arrays para los dias de la semana y de los meses. Y variables para el resto de conceptos por ejemplo:
    <?php
    $dia=array("domingo","lunes","martes","miércoles","jueves","viernes","sábado");
    $mes=array("enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre");
    $numdia=date(w);//muestra el día de la semana
    $nummes=date(n);
    $diames=date(j);//muestra el día del mes
    $anho=date(Y);
    echo "Hoy es $dia[$numdia],$diames de $mes[$nummes] del $anho  ";

    ?>

    A partir de aquí se puede formar multitud de combinaciones


    modificadoresejemploresultado
    d - día del mes, número, dos dígitos <?php $ahora_es date(d);  ?> $ahora_es = 04
    j - día del mes, número, dos dígitos sin cero inicial <?php $ahora_es date(j);  ?> $ahora_es = 4
    D - dia semana abreviado letras <?php $ahora_es date(D);  ?> $ahora_es = Thu
    l - día de la semana, en texto, completo <?php $ahora_es date(l);  ?> $ahora_es = Thursday
    w - día de la semana, en numero
    (comienza en 0 = domingo)
    <?php $ahora_es date(w);  ?> $ahora_es = 4

    Jugando con fechas: el mes

    modificadoresejemploresultado
    m - mes, número, dos dígitos <?php $ahora_es date(m);  ?> $ahora_es = 08
    n - mes, número, dos dígitos sin cero inicial <?php $ahora_es date(n);  ?> $ahora_es = 8
    M - mes, tres letras <?php $ahora_es date(M);  ?> $ahora_es = Aug
    F - mes, texto completo <?php $ahora_es date(F);  ?> $ahora_es = August
    t - total dias en el mes <?php $ahora_es date(t);  ?> $ahora_es = 31

    Jugando con fechas: el año

    modificadoresejemploresultado
    Y - año, cuatro cifras <?php $ahora_es date(Y);  ?> $ahora_es = 2011
    y - año, dos cifras <?php $ahora_es date(y);  ?> $ahora_es = 11
    L - bisiesto? <?php $ahora_es date(L);  ?> $ahora_es = 0
    0 = no; 1 = si
    z - día del año <?php $ahora_es date(z);  ?> $ahora_es = 215
    W - semana del año <?php $ahora_es date(W);  ?> $ahora_es = 31

    Jugando con fechas: la hora

    modificadoresejemploresultado
    h - hora, de "01" a "12" <?php $ahora_es date(h);  ?> $ahora_es = 02
    g - sin ceros, de "1" a "12" <?php $ahora_es date(g);  ?> $ahora_es = 2
    H - hora, de "00" a "23" <?php $ahora_es date(H);  ?> $ahora_es = 14
    G - sin ceros, de "0" a "23" <?php $ahora_es date(G);  ?> $ahora_es = 14
    a - "am" o "pm"
    A - "AM" o "PM"
    <?php $ahora_es date(a);  ?> $ahora_es = pm

    Jugando con fechas: minutos

    modificadoresejemploresultado
    i - de "00" a "59" <?php $ahora_es date(i);  ?> $ahora_es = 24

    Jugando con fechas: segundos

    modificadoresejemploresultado
    s - de "00" a "59" <?php $ahora_es date(s);  ?> $ahora_es = 16

    Jugando con fechas: fechas completas

    modificadoresejemploresultado
    U segundos desde EPOCH
    epoch = 1 enero 1970
    <?php $ahora_es date(U);  ?> $ahora_es = 1312493056
    r - formato RFC 2822 <?php $ahora_es date(r);  ?> $ahora_es = Thu, 04 Aug 2011 14
    c - formato ISO 8601 (solo en PHP 5) <?php $ahora_es date(c);  ?> N/A

    Jugando con fechas: varios

    modificadoresejemploresultado
    S sufijo en texto, 2 caracteres; por ejemplo, "th", "nd" <?php $ahora_es date(jS);  ?> $ahora_es = 4th
    I - horario de verano <?php $ahora_es date(I);  ?> $ahora_es = 1
    0 = no 1 = si
    O - diferencia con hora Greenwich <?php $ahora_es date(O);  ?> $ahora_es = -0700
    T - zona horaria del server <?php $ahora_es date(T);  ?> $ahora_es = PDT
    Z diferencia en segundos zona horaria <?php $ahora_es date(Z);  ?> $ahora_es = -25200
    B swatch internet time <?php $ahora_es date(B);  ?> $ahora_es = 933

    Comprobando fechas

    checkdate(nMes nDia nAño) nos permite chequear si una fecha dada es posible: es decir, que no se trata del dia 32 del mes 13.
    checkdate tiene en consideración años bisiestos, y es valido para un rango de años desde 0 a 32767

    Y para mas flexibilidad, strftime()

    la función date(), tan flexible como es, presenta dos problemas: no admite localización a idiomas distintos del inglés. Y si quieres emplear caracteres adicionales debes salvarlos
    :
    <?php
    print date("j \de F \de Y");  // como la "d" equivale al  "dia" en número, 
                                  // si queremos que imprima una letra d y no el numero de mes,
                                  // debemos emplear la barra \. 
                                  // no serviria escribir "j de F de Y"
    ?>
    Sin que tampoco hayamos ganado mucho en estetica, ya que "4 dAmerica/Los_Angeles August dAmerica/Los_Angeles 2011" no queda muy bien. La solución pasa por indicar el mes en número y no en letra ... o usar strftime:
    Hoy es jueves, 4 de agosto de 2011.
    <?php
    setlocale
    (LC_TIME,"es_ES");
    echo 
    strftime("Hoy es %A, %e de %B de %Y." ,time());  ?>
    y estas son las opciones de formato. A la derecha añadimos las equivalentes de date():
    opciones de strftimeopciones de date
    %a dia semana (abreviado) a "am" o "pm"
    %A dia semana (completo) A "AM" o "PM"
    %b nombre mes (abreviado) b -
    %B nombre mes (completo) B Swatch Internet time
    %c representación preferida de dia y hora segun idioma del server c -
    %C año en numero (00 - 99) C -
    %d numero dia del mes (01 a 31) d numero dia del mes (01 a 31)
    %D fecha abreviada, segun idioma server (%m/%d/%y, %y/%m/%d or %d/%m/%y) D dia de la semana, tres letras
    %e dia del mes en numero (' 1' - '31') %e -
    %F - F mes, en texto, completo; por ejemplo, "January"
    %g - g hora, sin ceros, de "1" a "12"
    %G - G hora, sin ceros; de "0" a "23"
    %h igual que %b h h - hora, de "01" a "12"
    %H hora, de "00" a "23" H hora, de "00" a "23"
    %I hora como un número de 01 a 12 I -
    %i - i minutos; de "00" a "59"
    %j día del año como un número de 001 a 366 j día del mes sin cero inicial; de "1" a "31"
    %l - l día de la semana, en texto, completo; por ejemplo, "Friday"
    %L - L "1" o "0" segun el año sea bisiesto o no
    %m mes como un número de 01 a 12 m mes: de "01" a "12"
    %M minuto en numero M mes, en texto, 3 letras; por ejemplo, "Jan"
    %n nueva linea n mes sin cero inicial; de "1" a "12"
    %N - N -
    %p 'am' o 'pm', según la hora dada, o las cadenas correspondientes en el idioma actual p
    %r hora am pm r -
    %R hora en formato 24 horas R -
    %S segundos en número S sufijo ordinal en inglés, en texto, 2 caracteres; por ejemplo, "th", "nd"
    %s - s segundos en numero
    %t tabulador t número de días del mes dado; de "28" a "31"
    %T Hora actual T -
    %U segundos desde epoch U segundos desde epoch
    %w día de la semana en número (el domingo es el 0) w día de la semana, en número (el domingo es el 0)
    %W número de la semana en el año, empezando con el primer lunes como el primer día de la primera semana W -
    %x representación preferida de la fecha sin la hora x -
    %X representación preferida de la hora sin la fecha X -
    %y año en número de 00 a 99 y año en número de 00 a 99
    %Y año en número de cuatro cifras Y año en número de cuatro cifras
    %z - z día del año; de "0" a "365"
    %Z nombre o abreviatura de la zona horaria Z diferencia horaria en segundos (de "-43200" a "43200")