Ejemplo de Multiplicacion

Para este ejemplo es a petición de un usuario que necesita un cotizador
deben de crear una pagina con un formlulario cuyo codigo debe quedar mas o menos así:


'<'Html'>'

'<'Title'>'Ejemplo'<'/Title'>'

' <'body'>'

' <'form name="ejemplo" action="calcula.php"'>'
Dias '<'input name="dias" type="Textbox" / '>' '<'br'>'
Precio '<'Input name="Precio" Type="TextBox" / '>'<'br'>'
'<'input value="Enviar" Type="Submit" /'>'

' <'/form'>
<'/body'>

'<'/html'>


Depues debe de crear una pagina donde cacharemos los datos la cual se llamara calcula.php que es la que tenemos definida en el action donce podemos colocar el siguiente codigo y con eso obtendriamos el resultado de multilpicar el numero de dias por el precio de arriendo. espero les sea de utilidad hasta la proxima

'<'?php
$d = $_GET['dias'];
$p = $_GET['Precio'];
echo "El resultado es= ".$d*$p;

?'>'

Buscador de palabras

Muchas páginas llevan su buscador propia de elementos dentro de la web. Cón este código se puede hacer un buscador senzillo que busca una palabra dentro de una Tabla con muchas noticias y cuando la encuentra las muestra por pantalla.

La palabra o texto a buscar se lo enviamos desde otra página usando una variable que llamaremos $palabra.


FORM ACTION="busca.php>

<INPUT TYPE="TEXT" NAME="palabra">

<INPUT TYPE="SUBMIT" NAME="Buscar">"


Busca.php

< ?

$conexio = mysql_connect("nombre_servidor", "usuario", "contraseña");

mysql_select_db ("nombre_BBDD", $conexio) OR die ("No se puede conectar");


// SQL para la búsqueda

$sql="SELECT * FROM documentos WHERE documento LIKE '%".$palabra."%' ";

$result=mysql_query($sql,$conexio);

// Si hay resultados crea una tabla y los muestra

if ($row= mysql_fetch_array($result))

{

echo "<TABLE BORDER='0'>";

DO

{

echo "$row["documento"]";

}

WHILE ($row=mysql_fetch_array($result));

echo "</TABLE>";

}

mysql_close ($conexio);

?>

Como mostrar la fecha de actualización de tu pagina

Si quieres indicar cuando fue actualizada la página, puedes usar:

print "Actualizada el ";
print (
date("d-m-Y", filemtime(basename($_SERVER["PHP_SELF"]))));
?>

Hosting Gratuito PHP y MYSQL

Hola que tal mis queridos educando hace varias semanas me encontraba buscando hosting gratuito sin publicidad y para ser sinceros no encontré alguno que lo ofreciera y pues la verdad es algo entendible ya que nadie te puede dar algo sin ganar algo a cambio pase por varios servidores de hosting gratuitos y aquí les dejo 3 de los cuales yo actualmente estoy usando y el que mas me agrado fue el de PhpNet , y es que a pesar de que este hospedaje al igual que todos te pone publicidad en tu pagina esta es casi nula ya que la publicidad que te pone es un banner al final de la misma no como otros servicios de hosting que te llenan de popups y te poner un superbanner en la parte superior , este alojamiento te permite crear hasta tres bases de datos mysql, tienes acceso ftp, un panel de administración del sitio , puedes direccionar tu dominio hacia ese hosting la verdad este muy bien sin contar con el espacio que te proporciona y el ancho de banda este demasiado bien actualmente tengo alojada una pagina ahí Tus Series On Line y la verdad que no me puedo quejar.

Los otros dos sitios de alojamiento que también tengo habilitados son iespana y lycos estos sitios igual proporcionan hospedaje con soporte para php y mysql la desventaja de ellos es que solo te permite una base de datos y el nombre de la misma te la proporcionan ellos y la verdad están bastante raros los nombre pero paro los que quieran hacer pruebas con php cualquiera de estos tres sitios de hospedajes les vendrá muy bien

.

PHP6

Está previsto el lanzamiento en breve de la rama 6 de PHP, cuando se lance esta nueva versión, quedarán solo dos ramas activas en desarrollo (PHP 5 y 6) puesto que se ha comunicado que PHP 4 será discontinuado el 13 de Julio de 2007.

Las diferencias que encontraremos frente a PHP 5 son:

  • Soportará Unicode
  • Limpieza de funcionalidades obsoletas como register_globals, safe_mode...
  • PECL
  • Mejoras en orientación a objetos
  • Lista completa aquí

PHP orientado a objetos

Cuando a principios de los años 80 se empezó a experimentar la Programacion Orientada a Objetos (POO) esta ha ido suplantando la programacion tradicional, por esta razon y aunque PHP no sea orientado a objetos, PHP incorpora sus principales características para que podamos trabajar con clases y objetos.

Clases y Objetos
Para entender la programacion orientada a objetos debemos primero entender lo que es una clase, pero primero diremos que un objeto es un conjunto de atributos y metodos agrupados.

Una clase es un grupo de objetos que comparten los mismos atributos y métodos, veamos como podemos crear una clase llamada Imagen:


class Imagen {
// Aqui el codigo de la clase
}
?>


Metodos y atributos
Esta clase contendrá un seguido de atributos, que definiremos con la palabra reservada var, y metodos, que programaremos como funciones usando function.

Para crear un objeto de tipo imagen se ejecutará el constructor de la imagen que será el metodo con el mismo nombre que la clase o en PHP5 el metodo llamado __construct(), veamos un ejemplo:


class Imagen {
var $src; // Estos són los atributos
var $border; // de los objetos asociados
// Esta funcion es el constructor
function Imagen($src,$border) {
$this->src=$src;
$this->border=$border;
}
}
// Creamos un objeto imagen
$logo = new Imagen("logo.gif",3);
?>


Tambien podemos crear mas metodos ademas del constructor, vamos a completar el ejemplo con un método que imprima la imagen en el navegador del visitante:


class Imagen {
var $src;
var $border;
function Imagen($src,$border) {
$this->src=$src;
$this->border=$border;
}
// Esta funcion es un método de Imagen
function Imprimir() {
echo " echo $this->src;
echo "\" border=\"";
echo $this->border;
echo "\">";
}
}
$logo = new Imagen("logo.gif",3);
// Llamamos el nuevo método
$logo->Imprimir();
?>


Puedes ver cómo efectivamente este ejemplo funciona y es un magnifico ejemplo de cómo nos puede simplificar algo rutinario como la creacion de multiples imagenes.

Heréncia de clases
Si resulta que hemos creado una clase pero que ademas vemos que hay unos determinados objetos de esta clase que comparten otras cualidades por lo que queremos englobarlos en una clase distinta, lo que podemos hacer es ponerlos en una subclase, los objetos de la subclase, mantendran todos los métodos y atributos de la clase padre y ademas compartiran los de la clase derivada.

Vamos a ver cómo podemos definir una subclase de la clase Imagen definida en la pagina anterior para imagenes de tamaño 468 x 60, esta subclase se llamará Banner y será de la siguiente manera:


// Definimos la subclase de Banner
class Banner extends Imagen {
// Esta es la nueva funcion Imprimir para banners
function Imprimir() {
echo " echo $this->src;
echo "\" border=\"";
echo $this->border;
echo "\" width=\"468\" height=\"60\">";
}
}
?>


Y finalmente crearemos el objeto $banner_1 y lo imprimiremos:



$banner_1 = new Banner("anunciante1.gif",0);
$banner_1->Imprimir();
?>


Tener en cuenta que en el codigo de la subclase falta el código de la clase Imagen, sino no funcionará.

Vemos que no declaramos constructor para banner, podemos crearle un constructor especifico, pero si no lo hacemos cuando hagamos new Banner, llamaremos al constructor de la clase padre Imagen.

Cuando hacemos Imprimir() del objeto perteneciente a la base derivada Banner, se llama al metodo Imprimir de Banner y no al de Imagen aunque se llamen igual.

En PHP5, las cosas son un poco distintas, porque el motor Zend Engine 2, está preparado para trabajar con Objetos a fondo, esto implica una gran cantidad de cambios a nivel interno y los siguientes cambios externos:

Constructores y destructores
Si trabajamos con PHP5, para definir un costructor, usamos el método __construct, vamos a ver un ejemplo:


class Imagen {
var $src; // Estos són los atributos
var $border; // de los objetos asociados
// Esta funcion es el constructor
function __construct($src,$border) {
$this->src=$src;
$this->border=$border;
}
}
// Creamos un objeto imagen
$logo = new Imagen("logo.gif",3);
?>


Ademas tenemos la opcion de crear un destructor que se ejecutará cuando el objeto va a ser eliminado de´la memória, el constructor se define con el método __destruct.

Encapsulamiento
Este es un concepto nuevo en PHP5, el encapsulamiento permite el uso de variables y métodos internos a un objeto que no pueden ser accedidos internamente, de esta manera existen tres tipos de objetos:

public - Son accesibles desde todo el código.
protected - Son accesibles desde la clase actual y las clases derivadas.
private - Son accesibles desde la clase actual

Vamos a ver el ejemplo de antes pero con atributos protejidos:


class Imagen {
protected $src; // Estos són los atributos
private $border; // de los objetos asociados
// Esta funcion es el constructor
function __construct($src,$border) {
$this->src=$src;
$this->border=$border;
}
}
// Creamos un objeto imagen
$logo = new Imagen("logo.gif",3);
?>


Y estos son los cambios principales de PHP5, ademas de incorporat un constructor de copia



__clone


y algunas otras opciones

Programando sin register_globals

Antes de la versión 4.2.0 de PHP, en el archivo php.ini, el parámetro de configuración register_globals aparecía por defecto como ON, lo que convertía todas las variables de los llamados Arrays Superglobales en variables de código.

De esta manera, la variable pasada por URL $_GET['nombre'] estaría disponible también como $nombre, de manera que podriamos modificar variables del interior del código PHP pasandolas por URL, veamos un ejemplo:

000
001
002
003
004
005
006

if ( $usuario ) {
echo "Usuario correcto";
} else {
echo "Usuario incorrecto";
}
?>


En este ejemplo, el visitante malintencionado podia pasar por URL (http://www.example.com/?usuario=1) la variable usuario y entrar al sistema sin contraseña.

Pero esto suponía un problema en la seguridad de nuestros scripts y paso a tener como valor por defecto OFF a partir de la versión 4.2.0.

Sin register_globals activado, deberemos modificar nuestra forma de trabajar con PHP, pues así ademas mejoraremos la seguridad de nuestros algoritmos, y para ello usaremos los llamados Arrays Superglobales, y el mismo código anterior pasará a ser:

000
001
002
003

setcookie ("nombre", "Eloi", time () + 7*24*60*60);
echo 'El valor de la cookie es: '.$_COOKIE["nombre"];
?>


De esta manera, además que el valor de 'nombre' no podrá ser enviado por URL (pagina.php?nombre=Benito), podremos trabajar con mas de una variable nombre ($nombre, $_COOKIE["nombre"], $_GET["nombre"]...).

Saber si una tabla de una BD existe

No hay una función específica para saber si una tabla de una base de datos existe o no, pero si que hay una función que te devuelve una matriz con todos los nombres de las tablas 'mysql_list_tables("base de datos")'.
Después sencillamente se hace un bucle en el que a cada paso se le va signando un nombre de la matriz $tablas, si en un paso se encuentra con una tabla con el mismo nombre que el que hemos pasado (el if), es que esta tabla existe por lo que se devuelve 1 (true), si el bucle finaliza con normalidad, significa que no ha encontrado el nombre de la tabla y no devolverá nada (false).
Al principio y al final hemos incluido las funciones de conexión y desconexión de la base de datos, necesarios para trabajar con ellas.
Esta función recibe dos parámetros; el nombre de la tabla y el nombre de la base de datos.



Código:
//Copyright © McAnam.com

$lincador = mysql_connect("servidor","usuario","contraseña");

function tabla_existe($nombre_tb,$base_datos) {

$tablas = mysql_list_tables($base_datos);

while (list($tabla) = mysql_fetch_array($tablas)) {
if ($nombre_tb == $tabla){
return true;
break;
}
}
return false;
}

//Ejemplo de utilización de la función:
if (tabla_existe("nombre tabla","nombre base de datos"))
echo "La tabla que has seleccionado existe en tu base de datos";
else
echo "La tabla que has seleccionado NO existe en tu base de datos";

//Fin ejemplo
mysql_close($lincador);
?>

Fecha de un día pasado de la semana

Este artículo es útil para ver el funcionamiento combinado de "date" y "mktime" y muestra una función que devuelve la fecha en formato "dd/mm/yyyy" del último día pasado.
Si se quiere cambiar el formato de la fecha devuelta, habría que cambiar la siguiente línea por el formato deseado:

return(date("d/m/Y", $fecha));

Por ejemplo si quisiéramos 'mm-dd-aa':

return(date("m-d-y", $fecha));

La función recibe un día de la semana ($dia_semana), siendo 1 lunes, 2 martes, etc. hasta el domingo que puede ser 7 ó 0. Si recibe un valor mayor que 7 o menor que 0 devuelve error (-1).
Recibe también las semanas transcurridas de forma que si se le pasa un 1 buscará el último día de la semana pasado, un 2 buscará el día de la semana anterior y así sucesivamente. Debe recibir un número positivo que no sea 0 o devolverá error (-1)



Código:
//Copyright © McAnam.com

function fecha_pasada($dia_semana, $semanas_transcurridas){

$sale = 0;
$cont = 0;

if (($dia_semana > 7) || ($dia_semana < 0) || ($semanas_transcurridas < 1)) return -1;

if ($dia_semana == 7) $dia_semana=0;

while (!$sale){
$fecha = mktime(0,0,0,date("m"), date("d") - $cont++, date("Y"));
$dia = date("w", $fecha);
if ($dia == $dia_semana){
if ($semanas_transcurridas > 1)
$semanas_transcurridas--;
else
$sale = 1;
}
}

return(date("d/m/Y", $fecha));

}

//Ejemplos de utilización
echo "Último lunes: ".fecha_pasada(1,1);
echo "
";
echo "Hace 2 domingos: ".fecha_pasada(7,2);

?>

Cambiar tamaño y peso de imágenes

Para trabajar con imágenes en PHP se suele usar la biblioteca GD. Esta biblioteca se puede descargar desde su página web http://www.boutell.com/gd/.

Para saber si tenemos instalado las librerías GD y que versión, lo podemos ver con phpinfo() buscando "GD".

Esta función de ejemplo no funcionará sin la biblioteca GD. Esta función ha sido probada con la versión 2.0, por lo que alguna función puede (debe) devolver error en versiones anteriores, estas funciones susceptibles de ser problemáticas son las de tipo "imagexxxx". Si tuviéramos una versión anterior o nos dieran problemas estas funciones, podríamos reemplazar el "switch" que verifica el tipo de imagen y la asignación de cabecera previa, o sea este código:

:

/*
Se envía la cabecera de los datos de la imagen.
Cuando llegue aquí no debe de haber sido enviado NADA.
Si se ha enviado algo, aunque fuera un "intro" o espacio daría error
*/
header("Content-type: ".$sTipo);

// Se pinta la imagen según el tipo
switch($vDatosImg[2]){
case IMAGETYPE_GIF:
imagegif($imgDestino);
break;
case IMAGETYPE_JPEG:
imagejpeg($imgDestino);
break;
case IMAGETYPE_PNG:
imagepng($imgDestino);
break;
case IMAGETYPE_SWF:
case IMAGETYPE_PSD:
case IMAGETYPE_BMP:
case IMAGETYPE_TIFF_II:
case IMAGETYPE_TIFF_MM:
case IMAGETYPE_JPC:
case IMAGETYPE_JP2:
case IMAGETYPE_JPX:
case IMAGETYPE_JB2:
case IMAGETYPE_SWC:
case IMAGETYPE_IFF:
return -12;
break;
case IMAGETYPE_WBMP:
imagewbmp($imgDestino);
break;
case IMAGETYPE_XBM:
imagexbm($imgDestino);
break;
default:
return -13;
break;
}


Por este otro:

/*
Se envía la cabecera de los datos de la imagen.
Cuando llegue aquí no debe de haber sido enviado NADA.
Si se ha enviado algo, aunque fuera un "intro" o espacio daría error
*/
header("Content-type: image/png");

// Se pinta la imagen según el tipo
imagepng($imgDestino);


La función "iPintaImagenRedimensionada" recibe 5 parámetros:

$sDirImagen: Cadena que debe contener la dirección de la imagen que queremos cambiar el tamaño, esta dirección puede ser relativa, absoluta, de archivo ó URL, ejemplos:

Relativa:imagen.gif
Absoluta de archivo:c:\imagenes\imagen.gif
Absoluta de URL:http://www.tuweb.com/imagenes/imagen.gif


$bEscalable: Booleano, si esta activado (1 ó TRUE) la imagen cambiara de forma porcentual al valor pasado por alto y ancho, así por ejemplo si lo establecemos a TRUE y le pasamos como ancho y alto 0.5, la imagen será reducida a la mitad de su tamaño, con 0.25 a un cuarto de su tamaño, 2 al doble de su tamaño, 1 se quedaría en su tamaño ...
Mientras que si este valor es FALSE (0) lo que hará será dar a la imagen resultante el tamaño pasado por alto y ancho directamente.

$ancho y $alto: Pasan el ancho y alto de la imagen con las características que hemos comentado anteriormente con la variable $bEscalable. Si una de estas variables recibe un valor negativo, cogerá la medida proporcional correspondiente al otro valor, así por ejemplo si una imagen de 600px de ancho por 300px de alto recibe como valores $bEscalable 0, $ancho 300 y $alto -1; La imagen resultante tendrá 150px de alto, ya que el ancho se ha reducido a la mitad, el alto también se reduce.

$iTipo: Entero que pasa el tipo del contenido MIME de la imagen, este valor no suele ser usado por la función, ya que antes de coger el tipo MIME por esta variable, lo intenta coger de las propias cabeceras de la imagen. Por lo que no es imprescindible que este parámetro sea pasado correctamente. Los tipo mime pueden ser:

ValorDefinesalida cabecera MimeDescripción
1IMAGETYPE_GIFimage/gifImagen GIF (Dibujo)
2IMAGETYPE_JPEGimage/jpegImagen JPEG (Foto)
3IMAGETYPE_PNGimage/pngImagen PNG (muy usada en PHP)
4IMAGETYPE_SWFapplication/x-shockwave-flashAnimación flash
5IMAGETYPE_PSDimage/psdFormato digital de Photoshop
6IMAGETYPE_BMPimage/bmpImagen de mapa de Bits
7IMAGETYPE_TIFF_IIimage/tiffImagen Tiff con orden de bytes Intel
8IMAGETYPE_TIFF_MMimage/tiffImagen Tiff con orden de bytes Motorola
9IMAGETYPE_JPCapplication/octet-streamGráfico
10IMAGETYPE_JP2image/jp2Imagen JP2 (jpeg 2000)
11IMAGETYPE_JPXapplication/octet-streamImagen JPX (JPEG extendido)
12IMAGETYPE_JB2application/octet-streamImagen JB2, imágenes bitonales
13IMAGETYPE_SWCapplication/x-shockwave-flashComponente de shockwave flash
14IMAGETYPE_IFFimage/iffImagen IFF
15IMAGETYPE_WBMPimage/vnd.wap.wbmpImagen wap
16IMAGETYPE_XBMimage/xbmImagen xbm (pequeños iconos)

$iTipo podría recibir o bien el valor (1, 2, 3, 4) o el define (IMAGETYPE_XXX).

Esta función pintará una imagen redimensionada si no ocurre ningún error. Si todo ha funcionada correctamente, devolverá 1, en caso contrario un número negativo. Debido a que puede devolver diferentes errores, hemos añadido una función que los gestiona y presenta una imagen describiendo el error. Esta función recibe un parametro que debería ser lo que devuelve la función de "iPintaImagenRedimensionada" (como se ve en el ejemplo).
Esta función crea las imágenes con un tamaño fijo (400 x 40), para cambiar este tamaño modificar la línea:
$imagen = imagecreate (400, 40);

Y los colores que usa son los colores "McAnam" de fondo y el marrón oscuro para el texto. Para cambiar esto colores, modificar las líneas:
$cFondo = imagecolorallocate ($imagen, 255, 226, 169);
$cTexto = imagecolorallocate ($imagen, 153, 102, 0);

"imagecolorallocate" recibe la imagen donde se va a definir el color y los tres colores rojo, verde y azul (rgb) de 0 a 255.


Código:
//Copyright © McAnam.com
function iPintaImagenRedimensionada ($sDirImagen, $bEscalable, $ancho, $alto, $iTipo){

// Cogemos los datos de la imagen
$vDatosImg = @getimagesize($sDirImagen);

if (!$vDatosImg) return -8;

// Recogemos el Tipo Mime
if (isset($vDatosImg['mime']))
$sTipo = $vDatosImg['mime'];
else if(isset($vDatosImg[2]))
$sTipo = image_type_to_mime_type($vDatosImg[2]);
else if (isset($iTipo))
$sTipo = image_type_to_mime_type($iTipo);
else
return -10;

// Recogemos la imagen a partir de la dirección dada ($sDirImagen)
switch($vDatosImg[2]){
case IMAGETYPE_GIF:
$imgOrigen = imagecreatefromgif($sDirImagen);
break;
case IMAGETYPE_JPEG:
$imgOrigen = imagecreatefromjpeg($sDirImagen);
break;
case IMAGETYPE_PNG:
$imgOrigen = imagecreatefrompng($sDirImagen);
break;
case IMAGETYPE_SWF:
case IMAGETYPE_PSD:
case IMAGETYPE_BMP:
case IMAGETYPE_TIFF_II:
case IMAGETYPE_TIFF_MM:
case IMAGETYPE_JPC:
case IMAGETYPE_JP2:
case IMAGETYPE_JPX:
case IMAGETYPE_JB2:
case IMAGETYPE_SWC:
case IMAGETYPE_IFF:
return -11;
break;
case IMAGETYPE_WBMP:
$imgOrigen = imagecreatefromwbmp($sDirImagen);
break;
case IMAGETYPE_XBM:
$imgOrigen = imagecreatefromxbm($sDirImagen);
break;
default:
return -13;
break;
}

/*
Establecemos los tamaños:
- Si bEscalable viene como true.
Se multiplican los valores recibidos para ancho y alto
por el ancho y alto de la imagen,
así 0.5 sería la mitad de la imagen y 2 sería el doble
- Si bEscalable viene como false.
Los tamaños serán los pasados por ancho y alto directamente
- Si ancho o alto vienen como 0 o numero negativo,
el valor de esta propiedad será asignada proporcionalmente con
el valor de la otra.
- Si ancho y alto vienen como 0 o numero negativo, Error
*/

if (!(is_numeric($ancho)) || !(is_numeric($alto))) return -20;

if ($bEscalable){
if ($ancho > 0){
$ancho *= $vDatosImg[0];
if ($alto > 0) $alto *= $vDatosImg[1];
else $alto = $vDatosImg[1] * ($ancho / $vDatosImg[0]);
}else if ($alto > 0){
$alto *= $vDatosImg[1];
$ancho = $vDatosImg[0] * ($alto / $vDatosImg[1]);
}else{
return -21;
}
}else{
if (($ancho > 0) && ($alto < 1))
$alto = $vDatosImg[1] * ($ancho / $vDatosImg[0]);
else if (($alto > 0) && ($ancho < 1))
$ancho = $vDatosImg[0] * ($alto / $vDatosImg[1]);
else if (($alto < 1) && ($ancho < 1))
return -21;

}

// Se crea la nueva imagen redimensionada
if (function_exists("ImageCreateTrueColor"))
$imgDestino = ImageCreateTrueColor($ancho,$alto);
else
$imgDestino = ImageCreate($ancho,$alto);

ImageCopyResized ($imgDestino, $imgOrigen, 0, 0, 0, 0, $ancho, $alto, $vDatosImg[0], $vDatosImg[1]);

/*
Se envía la cabecera de los datos de la imagen.
Cuando llegue aquí no debe de haber sido enviado NADA.
Si se ha enviado algo, aunque fuera un "intro" o espacio daría error
*/
header("Content-type: ".$sTipo);

// Se pinta la imagen según el tipo
switch($vDatosImg[2]){
case IMAGETYPE_GIF:
imagegif($imgDestino);
break;
case IMAGETYPE_JPEG:
imagejpeg($imgDestino);
break;
case IMAGETYPE_PNG:
imagepng($imgDestino);
break;
case IMAGETYPE_SWF:
case IMAGETYPE_PSD:
case IMAGETYPE_BMP:
case IMAGETYPE_TIFF_II:
case IMAGETYPE_TIFF_MM:
case IMAGETYPE_JPC:
case IMAGETYPE_JP2:
case IMAGETYPE_JPX:
case IMAGETYPE_JB2:
case IMAGETYPE_SWC:
case IMAGETYPE_IFF:
return -12;
break;
case IMAGETYPE_WBMP:
imagewbmp($imgDestino);
break;
case IMAGETYPE_XBM:
imagexbm($imgDestino);
break;
default:
return -13;
break;
}

imagedestroy($imgOrigen);
imagedestroy($imgDestino);

return 1;

}

function ErrorPintaImagenRedimensionada($iRetorno){

$sTexto1 = "";
$sTexto2 = "";

switch($iRetorno){
case -8:
$sTexto1 = "La dirección de la imagen dada no es válida";
break;
case -10:
$sTexto1 = "No se ha encontrado el tipo mime de la imagen";
$sTexto2 = "ni en sus cabeceras ni pasadas por parámetro";
break;
case -11:
$sTexto1 = "El tipo de la imagen dado no se puede redimensionar";
$sTexto2 = "Se recomiendan los tipos jpg, gif ó png";
break;
case -12:
$sTexto1 = "No es posible crear una imagen con el tipo dado";
$sTexto2 = "Se recomiendan los tipos jpg, gif ó png";
break;
case -13:
$sTexto1 = "El tipo mime no esta implementado";
$sTexto2 = "Se recomiendan los tipos jpg, gif ó png";
break;
case -20:
$sTexto1 = "Error en los parámetros pasados ancho (3º) ó alto(4º)";
$sTexto2 = "Los valores deben ser numéricos enteros o decimales";
break;
case -21:
$sTexto1 = "Error en los parámetros pasados ancho (3º) y alto(4º)";
$sTexto2 = "al menos uno de estos parámetros deben de ser positivos";
break;
default:
if ($iRetorno < 0) $sTexto1 = "Error desconocido";
break;
}

if ($sTexto1 != ""){
$imagen = imagecreate (400, 40);
$cFondo = imagecolorallocate ($imagen, 255, 226, 169);
$cTexto = imagecolorallocate ($imagen, 153, 102, 0);
imagefilledrectangle ($imagen, 0, 0, 150, 30, $cFondo);
if ($sTexto2 == ""){
imagestring ($imagen, 3, 5, 15, $sTexto1, $cTexto);
}else{
imagestring ($imagen, 3, 5, 5, $sTexto1, $cTexto);
imagestring ($imagen, 3, 5, 20, $sTexto2, $cTexto);
}

header("Content-type: image/png");
imagepng($imagen);
imagedestroy($imagen);
}

}


$iError = iPintaImagenRedimensionada("imagen.jpg", TRUE, 0.5, -1, IMAGETYPE_JPEG);
ErrorPintaImagenRedimensionada ($iError)

?>

Leer líneas de un archivo con la función file

Una de las múltiples formas y de las mas sencillas para recoger información de un archivo con PHP es con la función file, que además pasa el valor del fichero a un array siendo cada elemento del array una línea del archivo a abrir, lo que puede ser útil sobre todo si queremos buscar o trabajar sólo con algunas líneas.
Puede recibir 2 parámetros (en la versión 5.0 puede recibir una tercera), de la siguiente forma:

$vLineas = file($sNombreArchivo, [iBuscarEnIncludes]);
Donde sNombreArchivo es la dirección del archivo a abrir, de forma absoluta ("http://www.tuweb.com/tudirectorio/tuarchivo.htm") o de forma relativa ("../tuarchivo.php") y iBuscarEnIncludes es un valor entero optativo e indica si se busca el archivo en el directorio de includes (pasándole como valor 1) o no (pasándole como valor 0 o nada).

El directorio de includes se define en el php.ini de la siguiente forma:

include_path="/directorio_de_includes/"

En este artículo comentaremos como descomprimir los ficheros que hemos comprimido con las funciones de Compresión de ficheros con PHP a GZIP.

Este ejemplo descomprimiría un archivo con formato gzip comprimido mediante gzencode, o cualquier aplicación que comprima ficheros a gzip (como el comando gzip de Unix) y hace los siguientes pasos:

  1. Inicializa variables, la primera ($iTamMaxDestino) es el tamaño máximo del fichero descomprimido, si el tamaño del fichero resultante fuera mayor, se truncaría, la segunda ($sNombre) es el nombre alternativo del archivo descomprimido. En caso de que el archivo sea del tipo nombre.ext.gz el nombre del fichero resultante sería nombre.ext independientemente del valor de esta variable
  2. Abre el fichero comprimido con gzopen / gzclose y recoge del fichero comprimido la cadena del fichero descomprimido con gzread
  3. Vuelca el resultado en un fichero en el mismo directorio que el original

Si el fichero que quisiéramos comprimir se hubiera creado con gzcompress ó gzdeflate, en vez de abrir el fichero como un fichero comprimido, deberíamos de abrirle en binario para recoger sus datos (realmente no es un fichero comprimido ya que le faltan las cabeceras indicadoras, realmente es un fichero con una cadena comprimida) y descomprimir estos con gzuncompress ó gzinflate según el caso, de forma que habría que reemplazar esta parte:

$iTamMaxDestino = 4000000; // 4 Megas
$sNombre = "McAnam.des";

if ( ! $fOrigen = @gzopen($sFichOrigen, "rb"))
return false;
$sDesBin = gzread($fOrigen, $iTamMaxDestino);
gzclose($fOrigen);



Para descomprimir un fichero comprimido con gzcompress:
$sNombre = "McAnam.des";

if ( ! $fOrigen = @fopen($sFichOrigen, "rb"))
return false;
$sOriGZ = fread($fOrigen, filesize($sFichOrigen));
fclose($fOrigen);

$sDesBin = gzuncompress($sOriGZ);


Para descomprimir un fichero comprimido con gzdeflate:

$sNombre = "McAnam.des";

if ( ! $fOrigen = @fopen($sFichOrigen, "rb"))
return false;
$sOriGZ = fread($fOrigen, filesize($sFichOrigen));
fclose($fOrigen);

$sDesBin = gzinflate($sOriGZ);

Acceso a un DB2 en un AS/400 con PHP (sobre Unix)

En el siguiente enlace explican como acceder a una base de datos DB/2 en un AS/400 desde un linux. Esto lo hace mediante el ODBC para Unix. Sobra decir que esto lo podremos implementar sin grandes problemas en cualquier Unix.

calculo de la edad de una persona con php

Muchas veces se ha planteado el como calcular la edad de una persona (en años) ... de forma eficiente, amigo de los códigos "cuanto-mas-pequeños-mejor", he escrito este pequeño script ... que nos devuelve la fecha, funcionando sin problemas para cualquier fecha (incluyendo las anteriores al 1970).

$aFecha = explode( '-', $nacimiento);
$edad = floor(( (date("Y") - $aFecha[2] ) * 372 + ( date("m") - $aFecha[1] ) * 31 + Date("d" ) - $aFecha[0] )/372) ;
?>

Trabajar con sumas y restas de unidades de tiempo

P:¿ Como obtener una fecha más una determinada cantidad de tiempo ?

R: Esta linea nos muestra una fecha dentro de 30 días:
echo date('r', time() + (60 * 60 * 24 * 30) );

Cómo convertir correctamente a mayusculas los acentos

Para realizar una correcta conversión podemos utilizar el Setlocale();
setlocale(LC_CTYPE, 'es');
echo strtoupper('áéíóú');
Otra forma (si no disponemos de los tipos europeos) es sustituyendo con strtr
$cadena = 'más veloz que la imaginación';
echo strtr(strtoupper($cadena),"àèìòùáéíóúçñäëïöü","ÀÈÌÒÙÁÉÍÓÚÇÑÄËÏÖÜ");

Instalando PHP 5 y MySQL sobre Windows XP

Configuración del servidor:


  • Windows XP
  • Apache 2.0.48
  • PHP 5.0 Beta 3 (con SAPI DLL php4apache2.dll ? PHP.ORG indica que el archivo se renombrará a php5apache2.dll cuando PHP 5 esté listo para producción)
  • MySQL 4.0.16

    Pasos a seguir:



  • Después de la instalación y configuración inicial de PHP 5, copiar todas las DLL's del directorio de PHP 'dlls' al directorio system32 (principalmente libSQL.dll).
  • Verificar que el tamaño del fichero libSQL.dll es el mismo que el que tenía en el directorio 'dlls' de PHP 5 (esto es lo que comenta nuestro colega que le produjo algunos problemas - por algún motivo, la librería libmySQL.dll no se movió normalmente al directorio system32 - fue sobredimensionada por PHP 4 e hipodimensionada por PHP 5).
  • Asegurarse de que php_mysql.dll está en la carpeta de PHP 5 que contiene las extensiones.
  • Editar el fichero php.ini observando que php_mysql.dll en la sección donde están las extensiones, no esté comentado.

    Se supone que de esta forma debería funcionar, sin embargo, si usas, como PHP.ORG ahora indica como 'antiguo estilo para las matrices de entrada' (por ejemplo, HTTP_GET_VARS o sus primas), necesitarás editar php.ini. Exactamente, tendrás que encontrar register_long_arrays y modificarlo el valor por defecto a ON.

  • Cookies con javascript

    En muchas ocasiones resulta necesario asignar un valor a una cookie sin tener que usar la función setcookie().


    echo '
    document.cookie = "variable = valor" ;
    ';



    Si quisiéramos usar variables de PHP, tanto para el nombre de la cookie como para su valor, sólo tendríamos que poner su contenido:


    echo '
    document.cookie = "'.$variable.' = '.$valor.'" ;

    Formularios en PHP

    Muy bien este es un Ejemplo de un Formulario en PHP les sera muy util para todos aquellos que quieren que desde su web manden mensajes a su Mail


    Aqui les pongo un ejemplo que uso para leer checkbox/selecmultiples de un formulario:

    El selecmultiple/chebox debe ser formado (como supongo que ya haces):

    <--! < inpu_t name="seleccionados[]" value="$id" type="checkbox"> ->

    Y donde los necesitas leer:

    while (list ($clave, $val) = each ($HTTP_POST_VARS)) {

    if ($clave == "seleccionados"){

    foreach ($seleccionados as $id) {

    // aqui tienes cada elemento del seleccmultiple/chekbox por separado en la variable $id. Aqui mismo puedes hacer la accion a relizar con esos checkbox/selecmultiples.

    echo "IDs seleccionados: ".$id;

    } } }

    (sustitulle POST por GET segun corresponda el envio de los datos del formulario metodo).

    De todas formas .. como veras, solo se revisa el array asociado al metodo de envio y dentro de el .. se selecciona el array del checkbox/selecmultiple que al fin y al cabo es un array que puedes obtener su total de registros con la funcion: count() .. count($HTTP_POST_VARS['seleccionados'])

    Como mostrar la ip de un usuario

    Lo único que utilizaremos es $REMOTE_ADDR esta pequeña variable esta por default en el servidor a si que lo único que tenemos que hacer es lo siguiente:

    //iniciamos
    echo
    //agregamos la variable echo para que nos ejecute el romte.
    $REMOTE_ADDR
    //agregamos la variable y cerramos
    ?>


    Y para que se vea bonito le agregamos una tabla:





    Tu
    ip es:

    //iniciamos
    echo
    //agregamos la variable echo para que nos ejecute el remote.
    $REMOTE_ADDR
    //agregamos la variable y cerramos
    ?>


    Bueno como pueden ver no es nada fuera de lo normal, demasiado fácil es solo utilizar el echo y el $REMOTE_ADDR

    Como crear un buscador de palabras

    Muchas páginas llevan su buscador propia de elementos dentro de la web. Cón este código se puede hacer un buscador senzillo que busca una palabra dentro de una Tabla con muchas noticias y cuando la encuentra las muestra por pantalla.

    La palabra o texto a buscar se lo enviamos desde otra página usando una variable que llamaremos $palabra.

    FORM ACTION="busca.php>

    "

    Busca.php
    < ?
    $conexio = mysql_connect("nombre_servidor", "usuario", "contraseña");
    mysql_select_db ("nombre_BBDD", $conexio) OR die ("No se puede conectar");

    // SQL para la búsqueda
    $sql="SELECT * FROM documentos WHERE documento LIKE '%".$palabra."%' ";
    $result=mysql_query($sql,$conexio);
    // Si hay resultados crea una tabla y los muestra
    if ($row= mysql_fetch_array($result))
    {
    echo "

    ";
    DO
    {
    echo "$row["documento"]";
    }
    WHILE ($row=mysql_fetch_array($result));
    echo "
    ";
    }
    mysql_close ($conexio);
    ?>

    Posible problema con los Themes (PHPNuke)

    Probando varios Themes he tenido un problema con alguno de ellos, por ejemplo con el NGI y el aqua3, todo funciona perfectamente, pero en la página inicial las noticias no se mostraban daba el siguiente error:
    "Fatal error: Call to undefined function: formataidheader() in c:apachehtdocs hemesNGI heme.php on line 185"
    Solo salía el título "Enviado por", en el servidor local daba....fallo y en el de lycos salía el usuario en línea encima de las noticias y cuando le dabas a comentarios salía otro fallo. Pues aquí está el problema, lógicamente veo que falta la función "formataidheader" pero ¿Donde esta esa función?.
    Estuve investigando, anoche, el código del Theme y me di cuenta de que había una diferencia con los Themes originales que vienen con el Nuke, el fallo era:
    En las funciones "themeindex" y "themearticle" hay una línea que pone "$posted .=formatAidHeader($aid);" y justamente esta es la línea que da problemas, por que esa función no existe, si cambiamos esas líneas por "$posted .=get_author ($aid);" se acabaron los problemas.
    Lo he probado en PHP-Nuke 5.6, tanto en local como en el server de lycos y funciona perfectamente, no creo que tenga problemas en la 6.0.
    Espero que sirva de ayuda para alguien. Saludos.

    Como recobrar la extensión de un fichero

    <--!
    function getext($filename) {
    $ext = substr($filename, strrpos($filename,".") + 1);
    return
    $ext;
    }
    // $filename = miarchivo.jpg;
    // $extension = getext($filename);
    // $extension == jpg
    ?> -->