Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - WarezD@rK

Páginas: [1]
1
Los Retos PHPeros / Reto #4 - Practicando con clases en PHP
« en: 19 de Febrero de 2010, 00:55:44 am »
A raíz del tutorial sobre clases y de la clase MySQL, una forera me ha pedido que ponga un ejercicio sencillo acerca de este tema, así que lo publico como reto.

Dificultad: Fácil
Se valorará: Estructuración, sintaxis y comentarios en el código. Se valorará también el control de errores.
Premio: La satisfacción de haber aportado algo a la comunidad.

Reto: Crear una clase "Calcular" la cual tendrá su constructor y 5 métodos (funciones) que serán: Sumar, restar, multiplicar, dividir y resultado.

Su ejecución deberá ser algo parecido a esto:

Código: [Seleccionar]
<?php
$operacion 
= new Calcular();
$operacion->operanteUno(5);
$operacion->operanteDos(3);
$operacion->multiplicar();
echo 
$operacion->resultado();
?>

La clase, variables y métodos se podrán llamar como queráis, siempre y cuando tengan un nombre coherente (una clase para realizar una operación que se llame "DrHouse" o "Pokemon" no es muy coherente, la verdad).

Ayuda:

Tutorial sobre clases: http://www.phperos.net/foro/index.php/topic,5093.0.html
Clase MySQL: http://www.phperos.net/foro/index.php/topic,5095.0.html

La gracia es que lo hagáis a partir de la información que hay exclusivamente en el foro y os aseguro que hay de sobras.
Si tenéis alguna duda acerca del reto o sobre su programación, exponedla en este hilo y a poder ser no copiéis, os estaréis engañando a vosotros mismos, yo dormiré igual de bien que siempre.



NOTA: No tengo problema en ir publicando retos más difíciles, solo depende de vuestras ganas de aprender.



Un saludo :)

2
PHP / [CLASE] Consultas a MySQL
« en: 11 de Febrero de 2010, 15:04:20 pm »
He creado una clase para enviar consultas a una base de datos MySQL.

Su funcionamiento es muy sencillo y permite enviar varias consultas a la vez.
También he incluído tratamiento de errores.


1. Consulta simple:

Código: [Seleccionar]
<?php
require_once("mysqlClass.php");

$consulta = new mysqlQuery("SELECT nombre FROM tabla");
$consulta->send();
$filas $consulta->getRows();

if(
$filas)
{
    while(
$datos $consulta->getArray())
    {
        echo 
$datos[&#39;nombre&#39;]."\n";
    
}
}
?>

2. Consulta múltiple:

Código: [Seleccionar]
<?php
$consultas 
= new mysqlQuery(array("UPDATE tabla SET nombre = &#39;WarezD@rK&#39;",
                                                 
"UPDATE tabla SET apellidos = &#39;PHPeros&#39;",
                                                 
"UPDATE tabla SET edad = &#39;22&#39;",
                                                 
"UPDATE tabla SET pais= &#39;España&#39;",
                                                 
"UPDATE tabla SET ciudad = &#39;Barcelona&#39;"));
$consultas->send();
?>

La clase incluye control de errores, por lo que si queremos ver algún posible mensaje de error, debemos llamar a la siguiente función:

Código: [Seleccionar]
<?php
$consulta 
mysqlQuery("SELECT nombre FROM tabla_falsa");
$consulta->send();
$filas $consulta->getRows();
$consulta->showError();
?>

Por otro lado, si la consulta no devuelve ningún error, mostrará este mensaje: "Consulta realizada con éxito".

Aqui tenéis la clase:

Código: [Seleccionar]
<?php
class mysqlQuery
{
private $queries;
private $result;

// Creamos un constructor para obtener
// las consultas al crear el objeto.

function __construct($xQueries)
{
$this->queries $xQueries;
}

// Creamos una función para enviar
// las consultas. Comprueba el número
// de consultas a enviar al servidor.

public function send()
{
// Si la consulta es un Array.

if(is_array($this->queries))
{
// Por cada consulta, la enviamos
// individualmente al servidor.

foreach($this->queries as $query)
{
$this->result = @mysql_query($query);
}
}
else
{
// Si la consulta no es un Array,
// la enviamos entera y sin tratar.

$this->result = @mysql_query($this->queries);
}
}

// Creamos una función para
// obtener el número de filas.

public function getRows()
{
return @mysql_num_rows($this->result);
}

// Creamos una función para
// crear un Array con los resultados.

public function getArray()
{
return @mysql_fetch_array($this->result);
}

// Creamos una función para
// mostrar posibles errores.

public function showError()
{
// Almacenamos los posibles errores.

$mysqlError mysql_error();

// Si existe algún error, lo mostramos
// sino, mostramos un mensaje de éxito.

if($mysqlError)
{
echo "Error: ".$mysqlError;
}
else
{
echo "Consulta realizada con éxito.";
}
}
}
?>



Un saludo :)

3
Debido a que un par de foreros me lo han pedido, voy a hacer un pequeño tutorial sobre clases en PHP.

La programación orientada a objetos (POO u OOP en inglés) se usa en muchos lenguajes y en PHP desde su versión 5, cosa que deja una puerta abierta hacia su futuro como lenguaje. Desde mi punto de vista, este tipo de programación es muy importante, teniendo en cuenta que cada vez se utiliza más e ignorar su existencia nos complicaría la vida bastante al querer encontrar trabajo en este campo puesto que estos conocimientos son a veces requeridos.

Las clases agrupan en una misma estructura variables y funciones las cuales pueden ser públicas, privadas o protegidas. Este tutorial pretende ser una introducción, por lo que nos centraremos solo en las públicas y privadas.

La estructura de una clase es muy sencilla:

Código: [Seleccionar]
<?php
class miClase // Nombre de la clase.
{
    
// Variables a usar en nuestra clase.
    
var $variable;

    
// Funciones de nuestra clase.
    
public function mostrarVariable()
    {
        
$this->variable "Hola mundo\n";
        return 
$this->variable;
    }
}
?>

Y su ejecución (debemos guardar la clase, por ejemplo, como "miClase.php"):

Código: [Seleccionar]
<?php
// Yo utilizo require_once para incluir solo una vez la clase,
// ya que a veces puede ser que necesitemos llamar a una
// clase desde una función y si la ejecutamos más de una vez,
// nos lanzaría un error.

require_once("miClase.php");

$consulta = new miClase(); // Declaramos la variable del tipo "miClase".
echo $consulta->mostrarVariable(); // Mostramos el resultado obtenido de la función.
?>

Si os fijáis, cuando tratamos dentro de nuestra clase las variables, les hacemos referencia con $this->variable, ("variable" es el nombre de nuestra variable sin "$"). Esto es muy útil cuando trabajamos con variables privadas, ya que estas solo pueden ser modificadas internamente, por lo que desde la misma clase controlamos su contenido.

Para declarar una variable privada, solo debemos cambiar "var" por "private" (solo se pueden declarar como privadas las variables de la clase, no las que declaramos dentro de las funciones, puesto que estas por defecto solo son visibles dentro).

Entonces, si son privadas, ¿cómo las podemos modificar?. Pues para ello debemos crear una función para modificar esa variable, por ejemplo, basándonos en el código anterior:

Código: [Seleccionar]
<?php
class miClase
{
    private 
$variable;

    public function 
cambiarVariable($xNuevoValor)
    {
        
$this->variable $xNuevoValor;
    }

    public function 
mostrarVariable()
    {
        return 
$this->variable;
    }
}
?>

Y su ejecución:

Código: [Seleccionar]
<?php
require_once("miClase.php");

$consulta = new miClase();
$consulta->cambiarVariable("Contenido nuevo");
echo 
$consulta->mostrarVariable();
?>

Es muy importante tener en cuenta que las funciones de la clase deben ser públicas (public) para poder utilizarlas fuera de ella y decir también que si no indicamos que es pública o privada, por defecto PHP las establece como públicas. Yo personalmente siempre indico el tipo, de esta forma veo con más facilidad qué tipo de funciones estoy creando.

Otra cosa imprescindible en una clase es un constructor. Esto sirve para definir unos valores por defecto al hacer referencia a nuestra clase. El constructor es una función con un nombre estático "__construct" (doble guión bajo):

Código: [Seleccionar]
<?php
class coche
{
    private 
$marca;
    private 
$modelo;
    private 
$color;
    private 
$precio;

    
// La función _construct se ejecuta automáticamente
    // al crear el nuevo objeto.

    
function __construct()
    {
        
// Estos valores serán los valores
        // por defecto de nuestros coches.

        
$this->marca "Sin marca";
        
$this->modelo "Sin modelo";
        
$this->color "Transparente";
        
$this->precio 0;
    }

    public function 
establecerValores($xMarca$xModelo$xColor$xPrecio)
    {
        
$this->marca $xMarca;
        
$this->modelo $xModelo;
        
$this->color $xColor;
        
$this->precio $xPrecio;
    }

    public function 
mostrarCoche()
    {
        echo 
"Marca: ".$this->marca."\n";
        echo 
"Modelo: ".$this->modelo."\n";
        echo 
"Color: ".$this->color."\n";
        echo 
"Precio: ".$this->precio." euros\n";
    }
}
?>


Y su ejecución:

<?php
require_once("claseCoche.php");

$coche = new coche();

// Si mostramos ahora nuestro coche,
// obtendríamos los valores por defecto.

$coche->mostrarCoche(); // Esto devuelve:

// Marca: Sin marca
// Modelo: Sin modelo
// Color: Transparente
// Precio: 0 euros

$coche->establecerValores("Opel""Astra""Blanco"24000);

// De esta forma, hemos modificado los valores por defecto.

$coche->mostrarCoche(); // Esto devuelve:

// Marca: Opel
// Modelo: Astra
// Color: Blanco
// Precio: 24000 euros
?>

Tal vez parezca algo laborioso para mostrar unas simple variables, pero esto es solo un ejemplo sencillo para entender su funcionamiento. Ahora os pondré un ejemplo más elaborado de cómo utilizar las clases:

Código: [Seleccionar]
<?php
// Crearemos una clase para modificar el tamaño
// de una imagen usando la librería GD.

class imagenGD
{
    
// Definimos las variables
    // a usar en nuestra clase.

    
private $imagen;
    private 
$ancho;
    private 
$alto;
    private 
$calidad;

    
// Creamos el constructor para los valores
    // por defecto. Al introducir un argumento,
    // obligamos que al llamar a nuestra clase,
    // se introduzca directamente.

    
function __construct($xImagen)
    {
        
// Obtenemos el tipo de imagen.

        
$tipoImagenexif_imagetype($xImagen);
        
        
// Filtramos el tipo de imagen
        // para crear la nueva a partir de
        // la indicada.

        
if($tipoImagen == IMAGETYPE_JPEG)
        {
            
$this->imagen imagecreatefromjpeg($xImagen);
        }
        elseif(
$tipoImagen == IMAGETYPE_GIF)
        {
            
$this->imagen imagecreatefromgif($xImagen);
        }
        elseif(
$tipoImagen == IMAGETYPE_WBMP)
        {
            
$this->imagen imagecreatefromwbmp($xImagen);
        }
        elseif(
$tipoImagen == IMAGETYPE_PNG)
        {
            
$this->imagen imagecreatefrompng($xImagen);
        }
        else
        {
            
$this->imagen imagecreatefromjpeg($xImagen);
        }

        
// Establecemos los valores por defecto
        // del resto de atributos.

        
$this->ancho 50;
        
$this->alto 50;
        
$this->calidad 100;
    }

    
// Creamos una función para cambiar el tamaño.

    
public function nuevoTamano($xAncho$xAlto)
    {
        
$this->ancho $xAncho;
        
$this->alto $xAlto;
    }

    
// Creamos una función para cambiar la calidad.

    
public function nuevaCalidad($xCalidad)
    {
        
$this->calidad $xCalidad;
    }

    
// Creamos una función para mostrar
    // la imagen sin guardarla.

    
public function dibujar()
    {
        
// Creamos la imagen.
        
        
$thumb imagecreatetruecolor($this->$ancho$this->alto);

        
// La mostramos sin guardarla.

        
imagejpeg($thumb);

        
// Liberamos la memoria usada.

        
imagedestroy($this->imagen);
    }

    
// Creamos una función para guardar
    // la imagen en la ruta indicada.

    
public function guardar($xDestino)
    {
        
// Creamos la imagen.

        
$thumb imagecreatetruecolor($this->$ancho$this->alto);

        
// Cambiamos su tamaño.

        
imagecopyresampled($thumb$this->imagen0000$this->ancho$this->altoimagesx($this->imagen), imagesy($this->imagen));

        
// La guardamos en la ruta especificada.

        
imagejpeg($thumb$xDestino$this->calidad);

        
// Liberamos la memoria usada.

        
imagedestroy($this->imagen);
    }
}
?>

De esta forma, ya tenemos una clase imagenGD con distintos tipos de ejecución que os pondré a continuación:

1. Mostrar una imagen modificada con tamaño por defecto:

Código: [Seleccionar]
<?php
require_once("claseGD.php");

$miImagen = new imagenGD("carpeta/mi_imagen.jpg");
$miImagen->dibujar();

// Con solo estas dos líneas ya obtendríamos nuestra imagen
// tratada con ancho = 50; alto = 50; y calidad = 100;
// sin introducir nada más que la imagen a tratar y la función
// que la muestra (dibujar).
?>

2. Guardar una imagen modificada con tamaño por defecto:

Código: [Seleccionar]
<?php
require_once("claseGD.php");

$miImagen = new imagenGD("origen/mi_imagen.jpg");
$miImagen->guardar("destino/nueva_imagen.jpg");
?>

3. Mostrar una imagen modificada por completo:

Código: [Seleccionar]
<?php
require_once("claseGD.php");

$miImagen = new imagenGD("origen/mi_imagen.jpg");
$miImagen->nuevoTamano(500300);
$miImagen->nuevaCalidad(85);
$miImagen->dibujar();
?>

4. Guardar una imagen modificada por completo:

Código: [Seleccionar]
<?php
require_once("claseGD.php");

$miImagen = new imagenGD("origen/mi_imagen.jpg");
$miImagen->nuevoTamano(500300);
$miImagen->nuevaCalidad(85);
$miImagen->guardar("destino/nueva_imagen.jpg");
?>

Solo con una clase hemos obtenido distintos comportamientos y esto solo es un pequeño ejemplo.
Las clases pueden ser mucho más complejas y funcionales y sobretodo, reciclables en otros proyectos. Todo el trabajo que empleéis en construir una clase, si la programáis bien, os lo ahorraréis cuando la necesitéis de nuevo.

Yo os he abierto una puerta, el resto es cosa vuestra.



Un saludo :)

4
PHP / [POO - CLASE] Subir archivos al servidor
« en: 10 de Febrero de 2010, 02:40:27 am »
Hola chicos.

Estaba aburrido y para pasar el rato he creado una clase para subir archivos y pasársela a un amigo.
Ya no me acordaba de PHPeros, pero me ha venido un flash y he pensado compartirla.

Es muy sencilla, no me ha tomado mucho tiempo, pero con tal de aportar algo.

Su uso es simple:

Código: [Seleccionar]
<?php
$file 
= new fileUpload($_FILES[&#39;file_input&#39;]); // Nombre del campo.
$file->setSizeLimit(2048); // Límite en KiloBytes.
$file->setTypeLimit(array("zip""rar""tar")); // Archivos permitidos.
$file->upload("carpeta/destino"); // Carpeta de destino.
$file->showResult(); // Resultado de la carga.
?>

Y aquí la clase (también la adjunto en ZIP):

Código: [Seleccionar]
<?php
class fileUpload
{
private $upFile;
private $sizeLimit;
private $typeLimit;
private $result;

function __construct($xFile)
{
$this->upFile $xFile;
$this->sizeLimit 2048;
$this->typeLimit = array("zip""rar""tar");
$this->result "Subiendo archivo";
}

public function setSizeLimit($xSizeLimit)
{
$this->sizeLimit $xSizeLimit;
}

public function setTypeLimit($xTypeLimit)
{
$this->typeLimit $xTypeLimit;
}

public function upload($xPath)
{
if(is_uploaded_file($this->upFile[&#39;tmp_name&#39;]))
{
if($this->upFile[&#39;size&#39;] / 1024 <= $this->sizeLimit)
{
$fileType $this->upFile[&#39;type&#39;];
$typeOK false;

for($i 0$i <= count($this->typeLimit) - 1$i++)
{
if(strpos(strtolower($fileType), strtolower($this->typeLimit[$i])))
{
$typeOK true;
break;
}
}

if($typeOK)
{
if(!file_exists($xPath."/".$this->upFile[&#39;name&#39;]))
{
if(is_writable($xPath))
{
if(copy($this->upFile[&#39;tmp_name&#39;], $xPath."/".$this->upFile[&#39;name&#39;]))
{
$this->result "Archivo subido.";
}
else
{
$this->result "Error: Ya existe un archivo con el mismo nombre.";
}
}
else
{
$this->result "Error: La carpeta de destino no tiene permisos.";
}
}
else
{
$this->result "Error: Ya existe un archivo con el mismo nombre.";
}
}
else
{
$this->result "Error: No se permiten este tipo de archivos.";
}
}
else
{
$this->result "Error: El archivo es demasiado grande.";
}
}
else
{
$this->result "Error: El archivo no se puede subir.";
}
}

public function showResult()
{
echo $this->result;
}
}
?>

Ya subiré más objetos que vaya creando, aunque estoy abierto a sugerencias.

Un saludo :)

5
Hola,

No sé si este foro es el adecuado, pero se podria habilitar una sección llamada alojamiento o hosting, ya que todas las webs necesitan uno y no estaría de más un tema para recomendar el mejor alojamiento web.

He encontrado uno, que la verdad me parece casi falso: http://www.dreamhost.com/hosting.html

Uno de sus planes es:

-Espacio en disco: 478 GB (Además cada mes te aumentan 2.5 GB O.o)
-Bando de ancha: 4.7875 TB (TeraBytes... Joder... Encima cada mes te aumentan 40 GB O.o)
-40.000 cuentas FTP, E-MAIL etc... Bla,bla,bla...

-Y el preciooo: $79.95 al mes

Y no es un servidor dedicado, es alojamiento... El dedicado son 500 GB de espacio y 5 TB de bando de ancha...

¿Alguien a contratado alguna vez ahí o sabe si es verdad? A ver si esque cuando pillas el alojamiento te va más lento que el caballo del malo xD

6
Exposición de Diseños / Mi diseño
« en: 06 de Enero de 2007, 12:06:01 pm »
http://www.mundowarez.es

Es un diseño sencillo, pero no me gusta cargar mucho las webs porque despues es incomodo de ver.

Saludos.

7
PHP / Función esconder IP
« en: 30 de Diciembre de 2006, 22:10:57 pm »
Aquí una sencilla función para esconder parte de una IP como por ejemplo: 83.53.234.XXX

function Esconder_IP($ip){
$ip_array explode(".",$ip); //Separamos los valores de la Ip
$x strlen($ip_array[3]); //Contamos el ultimo valor de numeros
$x_num = array("","X","XX","XXX"); //Creamos un array para mostrar una X por cada numero
$ip $ip_array[0].".".$ip_array[1].".".$ip_array[2].".".$x_num[$x]; //Recompilamos la Ip con los valores cifrados
return $ip//Devolvemos el resultado de la función
}


Podéis probarlo:

echo Esconder_IP($_SERVER[&#39;REMOTE_ADDR&#39;]);

Un saludo.

Páginas: [1]