Foros del Web » Programando para Internet » PHP »

FAQ's de PHP

Estas en el tema de FAQ's de PHP en el foro de PHP en Foros del Web. En esta ocasión voy a demostrarles cómo armar un rotador de banners con estadísticas de clicks e impresiones. Para poder hacer un buen rotador de ...

  #91 (permalink)  
Antiguo 07/11/2003, 08:55
ACHAVARRIA
Invitado
 
Mensajes: n/a
Puntos:
Como Rotar banners con estadísticas

En esta ocasión voy a demostrarles cómo armar un rotador de banners con estadísticas de clicks e impresiones.

Para poder hacer un buen rotador de banners con sus estadísticas correspondientes, vamos a hacer una tabla en una base de datos MySQL.

ban_id es índice y se auto incrementa con cada nuevo registro añadido, contiene la id de cada banner.
ban_url es donde almacenaremos las direcciones de los sitios.
ban_img es donde almacenaremos las direcciones de los banners.
ban_click es donde pondremos la cantidad de clicks de cada banner.
ban_impre es donde pondremos la cantidad de impresiones de cada banner.

Comencemos con lo más fácil, el rotador. Para el rotador usaremos el siguiente código:

banner.php
<?
if(@mysql_connect($serv,$user,$pass)) {
mysql_select_db($dbase);
} else {
echo "Hubo un error, disculpa las molestias";
exit();
}
$qbaney = mysql_query("SELECT * FROM tabla");
mt_srand(time());
$max = mysql_num_rows($qbaney);
$rand = mt_rand(1,$max);
$sqldo = mysql_query("SELECT * FROM tabla WHERE ban_id='$rand'");
while($ban = mysql_fetch_assoc($sqldo)) {
echo "<a href='click.php?id=".$ban['ban_id']."' target=_blank>”.
“<img src='".$ban['ban_img']."' width=468 height=60 border=0></a>";
}
mysql_query("UPDATE $table15 SET ban_impre=ban_impre+1 WHERE ban_id='$rand'");
?>


Vamos a traducir el código línea por línea:

1. Si se puede establecer una conexión al motor MySQL...
2. Se selecciona una base de datos.
3. De lo contrario...
4. Se imprime “Hubo un error, disculpa las molestias”.
5. Se sale del programa.
6. Se cierra el IF.
7. Se selecciona todo de la tabla.
8. Se crea la semilla del rotador (mejorado).
9. Se cuentan todos los banners y se los guarda en $max.
10. Se genera un número aleatorio entre 1 y el máximo ($max).
11. Se selecciona un banner de la tabla donde el campo ban_id sea igual al número aleatorio.
12. Mientras $ban sea un array asociativo...
13. Imprimir en la pantalla un link a click.php?id= id elegido en la tabla.
14. La imagen desde la dirección almacenada en la tabla, cerramos link.
15. Cerramos el while.
16. Actualizamos la tabla con una impresión más de la que ya había.

Ese fue el rotador de banners con contador de impresiones. Ahora nos falta el contador de clicks y redireccionador al sitio donde pertenece el banner. Para eso, guardamos el siguiente archivo:

click.php
<?
if(@mysql_connect($serv,$user,$pass)) {
mysql_select_db($dbase);
} else {
echo "Hubo un error, disculpa las molestias";
exit();
}
mysql_query("UPDATE tabla SET ban_click=ban_click+1 WHERE ban_id='{$_GET['id']}'");
$showurl = mysql_query("SELECT * FROM tabla WHERE ban_id='{$_GET['id']}'");
while($rowed = mysql_fetch_assoc($showurl)) {
header("Location: ".$rowed['ban_url']);
}
?>


Comenzaremos a leer desde la línea siete, ya que las seis primeras son iguales a las del archivo anterior.
7. Se actualiza la cantidad de clicks en el banner contenido en $_GET[‘id’].
8. Se muestra la información como un array asociativo.
9. La página es redireccionada al sitio del banner.

Para ver sus estadísticas pueden crear una página que muestre los datos de cada campo, eso es muy fácil de hacer, y les doy el ejemplo con el campo de ban_id

admin.php
<?
if(@mysql_connect($serv,$user,$pass)) {
mysql_select_db($dbase);
} else {
echo "Hubo un error, disculpa las molestias";
exit();
}
$sel = mysql_query("SELECT * FROM tabla");
echo "<table width=100%>";
while($show=mysql_fetch_assoc($sel)) {
echo "<tr>".
"<td>".$show['ban_id']."</td>".
"</tr>";
}
echo "</table>";
?>


Lo que haría es:
7. Seleccionar todo de la tabla
8. Imprimir el tag de la tabla HTML
9. Se muestra la información como un array asociativo
10. Se abre una fila
11. Se imprime la celda con el id
12. Se cierra la fila
13. Se cierra el while
14. Se cierra la tabla HTML

NOTA 1:
Un error común que todos hacemos es usar mysql_fetch_array() en vez de mysql_fetch_assoc(). Esto nos da un gasto de procesos innecesarios, ya que con array abrimos tanto un índice numeral como el índice asociativo (nombre del campo). Usando assoc directamente, nos ahorra tiempo si solo necesitamos usar los nombres de los campos para nuestras aplicaciones.

NOTA 2:
Colocando un @ antes de una función evita (no en todas las funciones) que se muestre un mensaje de error, en caso que algo salga mal. Es por eso que cuando algo salga mal en la conexión al motor MySQL, sólo se mostrará el mensaje que he colocado.

Espero que les haya sido tan útil como a mí este pequeño script y que lo disfruten mucho Cuenten muchos clicks e impresiones!
  #92 (permalink)  
Antiguo 07/11/2003, 08:56
ACHAVARRIA
Invitado
 
Mensajes: n/a
Puntos:
Como Utilizar cookies en PHP

En un artículo anterior explicamos qué son y cómo utilizar las cookies con ASP, para aquellos que no leyeron les comentaremos nuevamente de que se tratan las cookies.

¿Qué es una cookie?
Una cookie es un archivo de texto de peso sumamente bajo que se guarda en la PC del usuario, y son enviados por algunos servidores para almacenar datos para que puedan ser utilizados después. Algunos de los usos más frecuentes que se les suele dar a las cookies son:

• Guardar información como nombre de usuario y contraseña
• Guardar las preferencias del usuario
• Guardar el nombre del usuario, u otros datos
• Y muchísimos usos más

Función setcookie()
Se encarga de crear la cookie definiendo sus propiedades. La sintaxis es:

setcookie (nombre, contenido, expiracion (segundos), path, dominio, seguridad)

Toda cookie debe definirse antes de que comience la cabecera de la página (es decir, antes de la etiqueta <html>) ya que es una restricción que poseen, no tiene nada que ver con PHP. Todos los parámetros de la sintaxis anterior son opcionales menos nombre, el cual debe tener si o si un valor para poder crearla.

Escribir y recuperar una cookie
Para entender el funcionamiento de la función setcookie veremos el siguiente ejemplo:

Código PHP:
<?
// ESCRIBIMOS LA COOKIE
// Utilizamos la función setcookie() para crear una llamada nombre
// El time()+31536000 le da la fecha de expiración a la cookie, en este caso será en 1 año desde la fecha de creación (he de ahí el uso de time() que nos devuelve la fecha actual tipo Unix Time Stamp en segundos)

setcookie("nombre","Fabian Muller"time()+31536000);
?>
<HTML>
<HEAD>
<TITLE>WebExperto.com - Utilizando cookies en PHP - Ejemplo</TITLE>
</HEAD>

<BODY BGCOLOR="#FFFFFF">
<font face="Verdana" size="2">
<?
// RECUPERAMOS LA COOKIE
// Verificamos si la variable nombre tiene contenido
// Si es así, mostrará el valor de la cookie
// Y si no, dirá que la cookie está vacía.

if (isset($nombre))
{
echo 
"El contenido de la cookie es: ".$nombre;
}
else
{
echo 
"La cookie está vacía. Puede ser que recién se halla creado, clickee en Actualizar para ver su contenido.";
}
?>
</font>
</BODY>
</HTML>
Corrección 27/06/2006 por Fridureiks: El tiempo de expiración de la cookie se expresa en segundos.

Última edición por Cluster; 27/06/2006 a las 06:22
  #93 (permalink)  
Antiguo 07/11/2003, 09:47
 
Fecha de Ingreso: mayo-2003
Ubicación: Cuernavaca, Mor.
Mensajes: 117
Antigüedad: 21 años, 6 meses
Puntos: 2
Recomendar Sitio

Tema: Recomendar Sitio web
Pregunta: ¿Como recomendar mi sitio web a un amigo?
Respuesta: Con el siguiente ejemplo podremos crear nuestro Recomendador, ademas podrias agregar comprobaciones para que no queden sueltos algunos campos.


Código PHP:
<?php
////////////////////////////////////////////////////////////////////
//  Tellfriend ver. 1.0
//  Copyright (c)2000 Victor Simental
//  URL: http://www.Kurt-Cobain.info
//  This script is distributed as freeware.
//  It may be used and modified free of charge 
//  for personal, academic or non-profit use.
////////////////////////////////////////////////////////////////////

if ($sub != "") {

// Mensaje de confirmacion
$respuesta="Tu mensaje ha sido enviado con ex&iacute;to a $email2";
$recibido="From: $email1 n";
mail(
"$email2",
"$subjet",

//Modifica el texto deacuerdo a tu sitio, puedes usar $titulo para el nombre de tu sitio

"$nombre Algien te ha recomendado nuestro sitio dedicado a lo que sea ubicado en
 http://$titulo nn$msg"
,
$recibido
);
}

// Subjet del mensaje
//Se puede Modificar
$subjet="Hola $nom Te han recomendado nuestro sitio en tudominio.com";

// Mensaje de textarea
//Se puede Modificar

$mensaje="Visita nuestro fabuloso sitio http://www.misitio.com";

//Escribe el nombre de tu sitio y modifica unicamente $titulo
//no borres www
$titulo "  www.misitio.com";
$enviar "Recomendar".$titulo;
?>

<!-- Formulario -->

<table width="100%" border="0" align="center">
<tr> <td>
<div align="center"><font size="-1" face="Verdana, Arial, Helvetica,
sans-serif"><b><font size="-2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $respuesta?>
</font></b></font></div>

</td></tr>
<tr><td>
<div align="center">
<form name="form1" method="post" action="tellfriend.php">
<font size="1"> <font face="Verdana, Arial, Helvetica, sans-serif">
<input type="hidden" name="sub" value="si">
<input type="hidden" name="subjet" value="<? echo $subjet?>">
<br>
Escribe el nombre de tu amigo:<br>
<input type="text" name="nombre" value="">
<br>
Escribe tu e-mail:<br>
<input type="text" name="email1" value="">
<br>
El e-mail de tu amigo:<br>
<input type="text" name="email2" value="">
</font></font><font size="1" face="Verdana, Arial, Helvetica,
sans-serif"><br>
Agrega un mensaje (opcional):</font> <font size="1" face="Verdana, Arial,
Helvetica, sans-serif"><br>

<textarea name="msg" rows="5" cols="50"><? echo $mensaje?></textarea>
<br><br>
<input type="submit" name="Submit" value="<? echo $enviar?>">
<b><font size="1" face="Verdana, Arial, Helvetica, sans-serif"
color="#FF0000">
</font></b><br>
</font>
Tellfriend Ver.1.0 Powered by Victor Simental</form>
</div>
</td>
<tr><tr>
<td></td>
</tr></table>


<!-- Fin del script -->
creo que se entiende para que funciona este script, no?
Recomendar un sitio!

Última edición por vic_mx; 10/11/2003 a las 09:39
  #94 (permalink)  
Antiguo 25/11/2003, 08:10
 
Fecha de Ingreso: octubre-2000
Mensajes: 1.692
Antigüedad: 24 años
Puntos: 19
Tema: Error
Pregunta: Mi sitio esta publicado en un servidor(como ej:www.tripod.lycos.com/) y
en las paginas no me salen las advertencias de errores que suelo ver en mi PC.
¿Hay alguna menare de verlos?
Respuesta:

Todos los servidores de hosting desavilitan la muestra de errores como "undefinided variable cTextoVeta".
Nosotros en nuestra PC simplemente podemos modificar el php.ini donde editamos esta linea:

error_reporting= E_PARSE;

Pero no podemos editar la de un server. Por eso si queres ver detalles de error por diversos motivos, puedes agregar esta linea al principio de tu página:

<?
ini_set ('error_reporting', E_ALL);
?>

Y con esto podras ver todos las advertencias de errores.

Tambien existe una funcion especifica para cambiarlo:error_reporting(), de esta función pueden ver mas en www.php.net/error_reporting.
__________________
PD: Con amor, fe, amor a Dios y amistad podemos hacer un mundo mejor!!!!

Última edición por Trulala de cordoba; 01/12/2003 a las 07:44
  #95 (permalink)  
Antiguo 28/11/2003, 19:14
 
Fecha de Ingreso: octubre-2003
Mensajes: 37
Antigüedad: 21 años, 1 mes
Puntos: 0
TEMA: Cadenas y Loops
Pregunta: Como recorrer el abecedario de forma simple?

Utilizando un sencillo bucle FOR, ya que esta construcción permite usar caracteres como elementos de comparación e incremento.

Digamos que quieres recorrer de la a a la m

Código PHP:
for ($i="a" $i<"n" $i++) {
    echo 
$i;

Ahora si quieres recorrer de la a a la z, la lógica cambia un poquito, ya que cuando los caracteres se hacen dobles "aa" valen lo mismo que la z (true) así que el loop se vería así:

Código PHP:
for ($i="a" $i!="aa" $i++) {
    echo 
$i;

Salud!!
  #96 (permalink)  
Antiguo 02/12/2003, 14:48
Avatar de jsegundo  
Fecha de Ingreso: noviembre-2003
Mensajes: 65
Antigüedad: 21 años
Puntos: 0
De acuerdo Como hacer Reportes con la clase PDF de R&OS

Como generar un reporte PDF?

Bueno, primero que nada un agradecimiento a cadrogui y a cluster por sus tips y contribuciones a este usuario inexperto.

Con la inquietud de generar reportes para PHP, me recomendaron la clase PDF de R&OS (la cual la pueden encontrar en http://ros.co.nz/pdf) genere el siguiente script para una tabla MySQL.

A este reporte pueden modificar los headers de la tabla, las columnas las pueden formatear de acuerdo a sus necesidades, pueden modificar los encabezados y demas.

Ademas al final nos da un total por importe, anticipo y numero de registros.

Espero y les sea de utilidad como a mi.

Saludos

Jose de Jesus Segundo
Monterrey - Mexico

Código PHP:
<?php
//Aqui quito caracteres que estan demas en el filtro que viene de otra pagina
$sqlr str_replace("`"""$sqlr);
$sqlr str_replace("\'"'"'$sqlr);

require(
'qs_functions.php');  //esta funcion la pueden quitar, solo es para el formato de las fechas
error_reporting(E_ALL);
include(
'class.ezpdf.php');

$pdf = & new Cezpdf('letter','landscape');
$pdf->selectFont('./fonts/Helvetica');
// Se inicializa el contador de paginas en 1 y se especifica en que lugar se va a imprimir
$pdf->ezStartPageNumbers(500,18,10,'','Pagina : {PAGENUM} de {TOTALPAGENUM}',1);

// coloca una linea arriba y abajo de todas las paginas
$fechs date("d/m/y");
$all $pdf->openObject();
$pdf->saveState();
$pdf->setStrokeColor(0,0,0,1);
$pdf->line(20,30,750,30);
$pdf->line(20,585,750,585);
$pdf->addText(20,590,10,'Industrial Mexicana, SA de CV - Control de Contratos');
$pdf->addText(650,590,10,'Depto. Finanzas');
$pdf->addText(20,18,10,$fechs);
$pdf->restoreState();
$pdf->closeObject();
// termina las lineas
$pdf->addObject($all,'all');
//--------
//
$host 'localhost';
$user 'root';
$password '';

$database 'indmex';
// El siguiente query utiliza un filtro que viene de otra pagina
//$query = 'select producto,contrato,cliente,fechareg,fechacomp,tipo_cte,importe,oficina,anticipo,fechaant,factura_ant,pagado,fecha_pag,factura_pag,fecha_lib,vendedor from contratos where '.$sqlr.' order by producto,contrato';
// Este query esta sin filtro y va a utilizar todos los registros de la BD
$query 'select producto,contrato,cliente,fechareg,fechacomp,tipo_cte,importe,oficina,anticipo,fechaant,factura_ant,pagado,fecha_pag,factura_pag,fecha_lib,vendedor from contratos order by producto,contrato';
//--------

// abrir la conexion
$link mysql_connect($host,$user,$password);
//cambio de database
mysql_select_db($database);
//inicializa array
$data = array();
// hacer query
$result mysql_query ($query ) or die (mysql_error());
//
//Aqui se coloca el header de la Tabla
$cols = array('producto'=>'Prod',
              
'contrato'=>'Contrato',
              
'cliente'=>'Cliente',
              
'fechareg'=>'Registro',
              
'fechacomp'=>'Compromiso',
              
'tipo_cte'=>'Tipo Cte',
              
'importe'=>'Importe',
              
'oficina'=>'Ofna',
              
'anticipo'=>'Anticipo',
              
'fechaant'=>'Fech.Ant',
              
'factura_ant'=>'Fact Ant',
              
'pagado'=>'Pagado',
              
'fecha_pag'=>'Fech.Pag',
              
'factura_pag'=>'Fact Pag',
              
'fecha_lib'=>'Fech Lib',
              
'vendedor'=>'Vend');
//
$smc 0;
$tim 0;  // Total del Importe
$tan 0;  // Total Anticipo
while ($row mysql_fetch_row($result)) {
    
$pro $row[0];    // Producto
    
$con $row[1];    // Contrato
    
$cte $row[2];    // Cliente
    
if ($row[3]=="0000-00-00") {$fhr " "; }  // Fecha Registro
    
else {$fhr "" date("d/m/y",  qs_string_to_timestamp($row[3])) . ""; }
    if (
$fhr == "") {$fhr " "; }
    if (
$row[4]=="0000-00-00") {$fhc " "; }  //Fecha Compromiso
    
else {$fhc "" date("d/m/y",  qs_string_to_timestamp($row[4])) . ""; }
    if (
$fhc == "") {$fhc " "; }
    
$tct $row[5];    // Tipo de Cliente
    
$tim $tim $row[6];
    
$imp "" number_format($row[6],2,".",",") . "";  // Importe
    
if ($imp == "") {$imp " ";}
    
$ofn $row[7];  //Oficina
    
$tan $tan $row[8];
    
$ant "" number_format($row[8],2,".",",") . "";  // Anticipo
    
if ($row[9]=="0000-00-00") {$fan " "; }  // Fecha Registro
    
else {$fan "" date("d/m/y",  qs_string_to_timestamp($row[9])) . ""; }
    
$fca $row[10]; // Factura Anticipo
    
$pag $row[11]; // Pagado
    
if ($row[12]=="0000-00-00") {$ffp " "; }  // Fecha Registro
    
else {$ffp "" date("d/m/y",  qs_string_to_timestamp($row[12])) . ""; }
    
$fap $row[13]; // Factura Anticipo
    
if ($row[14]=="0000-00-00") {$flb " "; }  // Fecha Registro
    
else {$flb "" date("d/m/y",  qs_string_to_timestamp($row[14])) . ""; }
    
$vnd $row[15]; // Vendedor
    
$smc $smc 1;
    
// Aqui se agregan las variables formateadas al array
    
$data[] = array('producto'=>$pro,
                    
'contrato'=>$con,
                    
'cliente'=>$cte,
                    
'fechareg'=>$fhr,
                    
'fechacomp'=>$fhc,
                    
'tipo_cte'=>$tct,
                    
'importe'=>$imp,
                    
'oficina'=>$ofn,
                    
'anticipo'=>$ant,
                    
'fechaant'=>$fan,
                    
'factura_ant'=>$fca,
                    
'pagado'=>$pag,
                    
'fecha_pag'=>$ffp,
                    
'factura_pag'=>$fap,
                    
'fecha_lib'=>$flb,
                    
'vendedor'=>$vnd);
}
// Se agrega una linea en blanco como separador de datos y totales
    
$data[] = array('producto'=>'',
                    
'contrato'=>'',
                    
'cliente'=>'',
                    
'fechareg'=>'',
                    
'fechacomp'=>'',
                    
'tipo_cte'=>'',
                    
'importe'=>'',
                    
'oficina'=>'',
                    
'anticipo'=>'',
                    
'fechaant'=>'',
                    
'factura_ant'=>'',
                    
'pagado'=>'',
                    
'fecha_pag'=>'',
                    
'factura_pag'=>'',
                    
'fecha_lib'=>'',
                    
'vendedor'=>'');
$nreg 'Numero de Registros : '.$smc ;
$timp "" number_format($tim,2,".",",") . "";  // Importe
$tan "" number_format($tan,2,".",",") . "";  // Importe
// Se agrega la linea que contiene los totales de Registros, Importe y Anticipo
    
$data[] = array('producto'=>'',
                    
'contrato'=>'',
                    
'cliente'=>$nreg,
                    
'fechareg'=>'',
                    
'fechacomp'=>'',
                    
'tipo_cte'=>'',
                    
'importe'=>$timp,
                    
'oficina'=>'',
                    
'anticipo'=>$tan,
                    
'fechaant'=>'',
                    
'factura_ant'=>'',
                    
'pagado'=>'',
                    
'fecha_pag'=>'',
                    
'factura_pag'=>'',
                    
'fecha_lib'=>'',
                    
'vendedor'=>'');
$pdf->ezTable($data,$cols,'',array('fontSize'=>6,
'cols'=>array(
                
'producto'=>array('justification'=>'center')
                ,
'contrato'=>array('justification'=>'left')
                ,
'cliente'=>array('justification'=>'left')
                ,
'fechareg'=>array('justification'=>'center')
                ,
'fechacomp'=>array('justification'=>'center')
                ,
'tipo_cte'=>array('justification'=>'center')
                ,
'importe'=>array('justification'=>'right')
                ,
'oficina'=>array('justification'=>'center')
                ,
'anticipo'=>array('justification'=>'right')
                ,
'fechaant'=>array('justification'=>'center')
                ,
'factura_ant'=>array('justification'=>'left')
                ,
'pagado'=>array('justification'=>'center')
                ,
'fecha_pag'=>array('justification'=>'center')
                ,
'factura_pag'=>array('justification'=>'left')
                ,
'fecha_lib'=>array('justification'=>'center')
                ,
'vendedor'=>array('justification'=>'center'))
));
// salida
//
//
if (isset($d) && $d){
    
$pdfcode $pdf->ezOutput();
    
$pdfcode str_replace('\n','\n<br>',htmlspecialchars($pdfcode));
    echo 
'<html><body>';
    echo 
trim($pdfcode);
    echo 
'</body></html>';
} else {
    
$pdf->ezStream();
}
?>
Enseguida una imagen muestra del reporte generado:
  #97 (permalink)  
Antiguo 02/12/2003, 14:51
Avatar de jsegundo  
Fecha de Ingreso: noviembre-2003
Mensajes: 65
Antigüedad: 21 años
Puntos: 0
De acuerdo Como generar un reporte PDF? Parte 2

Aqui esta un volcado de ejemplo para que utilicen o tomen como ejemplo para este reporte.

# phpMyAdmin MySQL-Dump
# version 2.2.6
# http://phpwizard.net/phpMyAdmin/
# http://www.phpmyadmin.net/ (download page)
#
# servidor: 127.0.0.1
# Tiempo de Generacion: 02-12-2003 a les 12:50:55
# Version del Servidor: 3.23.49
# Version del PHP: 4.3.2
# Base De Datos : `indmex`
# --------------------------------------------------------

#
# Estructura de tabla para tabla `contratos`
#

DROP TABLE IF EXISTS contratos;
CREATE TABLE contratos (
id int(11) NOT NULL auto_increment,
contrato int(6) NOT NULL default '0',
cliente varchar(70) NOT NULL default '',
tipo char(1) NOT NULL default '',
serie varchar(6) NOT NULL default '',
modelo varchar(20) NOT NULL default '',
cantidad double NOT NULL default '0',
fechareg date NOT NULL default '0000-00-00',
fechacomp date NOT NULL default '0000-00-00',
importe double NOT NULL default '0',
listamat char(1) NOT NULL default '',
fechalm date NOT NULL default '0000-00-00',
anticipo double NOT NULL default '0',
fechaant date NOT NULL default '0000-00-00',
compras char(1) NOT NULL default '',
fechacompra date NOT NULL default '0000-00-00',
fechaprod date NOT NULL default '0000-00-00',
prod_c char(1) NOT NULL default '',
prod_p char(1) NOT NULL default '',
prod_d char(1) NOT NULL default '',
prod_s char(1) NOT NULL default '',
fechater date NOT NULL default '0000-00-00',
embarcado char(1) NOT NULL default '',
pagado char(1) NOT NULL default '',
terminado char(1) NOT NULL default '',
pedido varchar(25) NOT NULL default '',
descripcion varchar(50) NOT NULL default '',
vendedor varchar(15) NOT NULL default '',
producto int(4) NOT NULL default '0',
oficina int(4) NOT NULL default '0',
PRIMARY KEY (id),
KEY contrato (contrato,cliente,tipo,serie,modelo),
KEY listamat (listamat)
) TYPE=MyISAM;

#
# Volcar la base de datos para la tabla `contratos`
#

INSERT INTO contratos VALUES (1, 467, 'INGRIA. ESPECIALIZADA EN REFRIG., SA CV', 'R', '', 'BOMBA 1.5HP #300210', '1', '2003-11-13', '2003-12-25', '9173.39', '', '0000-00-00', '0', '0000-00-00', '', '0000-00-00', '0000-00-00', '', '', '', '', '0000-00-00', '', '', 'V', 'IERI-138-03', '1BOMBA 1.5HP', 'RAR', 605, 1);
INSERT INTO contratos VALUES (2, 468, 'CANCELADO (FRYVITEC)', 'R', '', 'SELLADOR BUTYLO', '2', '2003-11-13', '2003-11-14', '0', '', '0000-00-00', '0', '0000-00-00', '', '0000-00-00', '2003-11-13', '', '', '', '', '2003-11-14', '', '', 'C', 'S/N', 'SELLADOR BUTYLO', 'FLR', 605, 7);
INSERT INTO contratos VALUES (3, 469, 'CONDOMINIO WORLD TRADE CENTER CD. MEXICO', 'R', '', 'REFAC. VARIAS', '0', '2003-11-13', '2003-12-04', '17302.84', '', '0000-00-00', '0', '0000-00-00', '', '0000-00-00', '0000-00-00', '', '', '', '', '0000-00-00', '', '', 'V', 'S/N', 'REFAC. VARIAS', 'AFG', 605, 2);
INSERT INTO contratos VALUES (4, 470, 'FABRICAS MONTERREY, SA CV', 'R', '', 'BANDA Y POLEA', '0', '2003-11-17', '2003-12-15', '4542.92', '', '0000-00-00', '0', '0000-00-00', '/', '0000-00-00', '0000-00-00', '', '', '', '', '0000-00-00', '', '', 'V', '4500047080', 'BANDA Y POLEA', 'AFG', 605, 2);
INSERT INTO contratos VALUES (5, 471, 'RANCHO EL AGUATOCHE, SA DE CV', 'R', '', 'TORNILLERIA', '0', '2003-11-18', '2003-11-18', '1365', '', '0000-00-00', '0', '2003-11-19', '', '0000-00-00', '2003-11-18', '', '', '', '', '2003-11-18', 'X', '', 'T', '2403', 'TORNILLERIA', 'OFNA', 605, 1);
INSERT INTO contratos VALUES (6, 472, 'MANUFACTURAS ESPECIALIZADAS, SA', 'R', '', 'KG. TUBO COBRE 1/4"', '127', '2003-11-18', '2003-11-19', '20095.35', '', '0000-00-00', '0', '2003-11-19', 'X', '0000-00-00', '2003-11-18', '', '', '', '', '2003-11-19', 'X', '', 'T', 'OC-002731', '641 KG. TUBO COBRE', 'OFNA', 605, 1);
INSERT INTO contratos VALUES (7, 473, 'CIA. CERVECERA DE ZACATECAS, SA CV', 'R', '', 'LAINAS P/ACOPLAM.', '1', '2003-11-18', '2003-12-08', '390.92', '', '0000-00-00', '0', '0000-00-00', '/', '2003-11-24', '2003-11-19', '', '', '', '', '2003-11-26', '', '', 'T', '27703', '1 JG. LAINAS ACOPL.', 'LMS', 605, 3);
INSERT INTO contratos VALUES (8, 474, 'HEAVY DUTY, SA DE CV', 'R', '', 'REFAC. VARIAS', '0', '2003-11-19', '2003-12-31', '9657.6', '', '0000-00-00', '5591.37', '2003-11-20', '', '0000-00-00', '0000-00-00', '', '', '', '', '0000-00-00', '', '', 'V', 'S/N', 'REFAC. VARIAS', 'AFG', 605, 2);
INSERT INTO contratos VALUES (9, 475, 'FRYVITEC, SA DE CV', 'R', '', 'ROLLO SELLADOR', '10', '2003-11-19', '2003-11-20', '2110.1', '', '0000-00-00', '2435', '2003-11-19', '', '0000-00-00', '2003-11-19', '', '', '', '', '2003-11-20', 'X', 'X', 'T', '76-03', '10 ROLLO SELLADOR BUTYLO', 'FLR', 605, 7);
INSERT INTO contratos VALUES (10, 476, 'SERVICIOS BTF, SA CV', 'R', '', 'REFAC. VARIAS', '0', '2003-11-19', '2003-12-10', '2114.54', '', '0000-00-00', '0', '0000-00-00', '', '0000-00-00', '2003-11-19', '', '', '', '', '2003-11-20', '', '', 'T', 'S/N', 'REFAC. VARIAS', 'RAR', 605, 1);
INSERT INTO contratos VALUES (11, 477, 'GRUPO I.QU.A., SA DE CV', 'R', '', 'RELLENO Y BANDAS', '0', '2003-11-19', '2003-12-24', '115056.09', '', '0000-00-00', '57808.8', '2003-11-24', '', '0000-00-00', '2003-11-25', '', '', '', '', '0000-00-00', '', '', 'V', '181 / 182', 'RELLENO Y BANDAS', 'RAR', 605, 1);
INSERT INTO contratos VALUES (12, 478, 'PROCITRUS, SA DE CV', 'R', '', '2 VENT. #250092', '2', '2003-11-19', '2003-11-20', '1710.29', '', '0000-00-00', '2008.31', '2003-11-20', 'X', '0000-00-00', '2003-11-19', '', '', '', '', '2003-11-20', 'X', '', 'T', 'S/N', '2 VENT. #250092', 'RAR', 605, 1);
INSERT INTO contratos VALUES (13, 3703, 'EXISTENCIA ALMACEN', 'T', 'FXV', '1-FXV-422', '1', '2002-05-06', '0000-00-00', '0', '', '0000-00-00', '0', '0000-00-00', '', '0000-00-00', '2003-05-02', '', '', '', '', '0000-00-00', '', '', 'V', '', '1-FXV-422', '', 601, 1);
INSERT INTO contratos VALUES (14, 3818, 'INGROS. EN REFRIGERACION, SA CV', 'T', 'VC1', 'VC1-30', '1', '2003-10-14', '2003-12-09', '48304.2', 'X', '2003-11-07', '29102.93', '2003-10-29', '/', '2003-11-24', '2003-10-29', '', '', '', '', '0000-00-00', '', '', 'V', '', '', 'LMS', 603, 3);
INSERT INTO contratos VALUES (15, 3819, 'AQUASISTEMAS INTEGRALES, SA DE CV', 'T', 'FXT', 'FXT-142', '1', '2003-10-16', '2003-12-11', '51335', 'X', '2003-10-24', '31411.41', '2003-10-27', '/', '2003-10-23', '2003-10-21', 'X', 'X', '', '', '0000-00-00', '', '', 'V', 'AQS-1101', '', '669', 601, 5);
INSERT INTO contratos VALUES (16, 3820, 'ALTOPRO, SA DE CV', 'T', '33000', '33646', '1', '2003-10-29', '2003-12-26', '271074', 'X', '2003-11-06', '164374.25', '2003-10-31', '/', '2003-11-24', '2003-10-31', '', '', '', '', '0000-00-00', '', '', 'V', 'B32451', '', '639', 601, 2);
INSERT INTO contratos VALUES (17, 3821, 'MAYEKAWA DE MEXICO, SA DE CV', 'T', 'VC2', 'VC2-420', '1', '2003-10-22', '2003-12-17', '278705.8', 'X', '2003-11-10', '100741.71', '2003-11-07', '/', '2003-11-24', '2003-11-07', '', '', '', '', '0000-00-00', '', '', 'V', '10359', '', '671', 603, 7);
INSERT INTO contratos VALUES (18, 3822, 'PACSA SUMINISTROS Y APLICACIONES, SA DE CV', 'T', 'IL', 'IL-56-7-P3', '2', '2003-10-22', '2003-12-18', '190546', 'X', '2003-10-29', '100000', '2003-10-23', '/', '2003-11-24', '2003-10-28', '/', '', '', '', '0000-00-00', '', '', 'V', '1290', '', '650', 601, 2);
INSERT INTO contratos VALUES (19, 3823, 'JABIL GLOBAL SERVICES', 'T', 'JE', 'JE-31055', '1', '2003-10-30', '2003-12-25', '617780.8', 'X', '2003-11-14', '355223.96', '2003-11-11', '/', '0000-00-00', '2003-11-11', '', '', '', '', '0000-00-00', '', '', 'V', '22AS03424B', '1 JE-31055', '280', 601, 1);
INSERT INTO contratos VALUES (20, 3824, 'ALTOPRO, SA DE CV', 'T', 'VTL', 'VTL-079-K', '1', '2003-11-13', '2004-01-22', '76807.71', 'X', '2003-11-19', '43705.13', '2003-11-13', '/', '0000-00-00', '2003-11-13', '', '', '', '', '0000-00-00', '', '', 'V', 'B32788', '1 VTL-079-K', 'AFG', 601, 2);
INSERT INTO contratos VALUES (21, 3825, 'EATON CONTROLS, S DE RL DE CV', 'T', '33000', '33568', '2', '2003-11-05', '2004-01-02', '489277.12', 'X', '2003-11-12', '278352.75', '2003-11-14', '/', '2003-11-24', '2003-11-12', '', '', '', '', '0000-00-00', '', '', 'V', '5070-000988-00', '2 33568', 'RSG', 601, 1);
INSERT INTO contratos VALUES (22, 3826, 'INGROS. EN REFRIGERACION, SA CV', 'T', 'VC1', 'VC1-46', '1', '2003-11-05', '2003-12-31', '58771.89', 'X', '2003-11-10', '33442.38', '2003-11-10', '/', '2003-11-24', '2003-11-05', '', '', '', '', '0000-00-00', '', 'X', 'V', '364-2003', '1 VC1-46', 'LMS', 603, 1);
INSERT INTO contratos VALUES (23, 3827, 'PACE INDUSTRIES DE MEXICO, SA DE CV', 'T', 'FXT', 'FXT-87', '1', '2003-11-11', '2004-01-20', '51419.85', 'X', '2003-11-25', '29173.47', '2003-11-13', '/', '0000-00-00', '2003-11-13', '', '', '', '', '0000-00-00', '', '', 'V', '2028759', '1 FXT-87', 'GGA', 601, 1);
INSERT INTO contratos VALUES (24, 40798, 'CARRIER MEXICO, S.A. DE C.V.', 'M', '39L', '39LD35', '2', '2003-01-10', '0000-00-00', '7294', '', '0000-00-00', '0', '2020-00-01', '', '0000-00-00', '2020-00-01', '', '', '', '', '0000-00-00', '', '', 'T', '802297', '', '', 601, 1);
INSERT INTO contratos VALUES (25, 41110, 'CARRIER MEXICO, SA DE CV', 'M', '39N', '39NF50', '2', '2003-11-12', '2003-12-24', '161389.49', 'X', '2003-11-14', '0', '0000-00-00', '/', '2003-11-20', '2003-11-17', '', '', '', '', '0000-00-00', '', '', 'V', '803088', '2 39NF50', 'CARRIER', 613, 1);
INSERT INTO contratos VALUES (26, 41111, 'CARRIER MEXICO, SA DE CV', 'M', '39N', '39NF11', '1', '2003-11-18', '2003-12-30', '24144.01', 'X', '2003-11-20', '0', '0000-00-00', '/', '2003-11-26', '2003-11-18', '', '', '', '', '0000-00-00', '', '', 'V', '803105', '1 39NF11', 'CARRIER', 613, 1);
  #98 (permalink)  
Antiguo 23/12/2003, 12:38
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 22 años, 3 meses
Puntos: 8
Leer un a pagina web y sacar las imagenes

Tema: Expresiones regulares/Archivos HTML
Pregunta: ¿Como leer un a pagina web y sacar las imagenes
Con las siguiente funcion podemos hacerlo:
Código PHP:
/**
* Imagenes de un archivo HTML

* Examina un archivo HTML en busca de sus imagenes para
* luego devolver su direccion relativa.

* @author  fran86       <[email protected]>
* @param   string       $archivo      Path correspondiente al HTML a examinar.
* @param   bool         $norepetidos  Opcional para no repetir las imagenes.
* @return  array|false  Array con los paths relativos de las imagenes

*/
function imagenesHTML($archivo$norepetidos true)
{
    
$contenido file($archivo);
    
$contenido array_map("trim"$contenido);
    
$contenido implode(" "$contenido);

    if ( 
preg_match_all('/<img([^<>]+)>/i'$contenido$match) ) {
            foreach(
$match[1] as $atributos) {
                if ( 
preg_match('/src="([^"]+)"/i'$atributos$matchpaths) ) {
                    
$pathimgs[] = $matchpaths[1];
                } elseif ( 
preg_match('/src=([^ ]+)/i'$atributos$matchpaths) ) {
                    
$pathimgs[] = $matchpaths[1];        
                }
                unset(
$matchpaths);
            }
    }
    if ( !empty(
$pathimgs) ) {
        if (
$norepetidos) {
            return 
array_unique($pathimgs);
        } else {
            return 
$pathimgs;
        }
    } else {
        return 
false;
    }

Que la utilizamos de este modo:
Código PHP:
$paths imagenesHTML("http://www.forosdelweb.com/s/foro18.html");  // Ahora $paths es un array que contiene las direcciones (relativas) de todas las imagenes que aparecen en la pagina http://www.forosdelweb.com/s/foro18.html 
Explicacion breve:
  1. Leemos el archivo con file() hacia un array y lo transformamos a una cadema con implode() (*)
  2. Aplicamos el patron '/<img([^<>]+)>/i' con preg_match_all() para buscar todos los tags <img XXX >. Notar que se utiliza /i al final para realizar una busqueda que no distinga mayusculas/minusculas.
  3. Recorremos el array que resulta de la operacion anterior y aplicamos 2 patrones posibles que serviran para cazar el path del atributo SRC (dentro de <img>) este o no entre comillas.

(*)
Para abrir paginas "externas" (que empiezan con http://blablabla) es necesario setear allow_url_fopen = ON en el PHP.INI (http://ar2.php.net/manual/en/ref.fil...llow-url-fopen)

Última edición por jam1138; 21/10/2005 a las 12:03
  #99 (permalink)  
Antiguo 03/01/2004, 14:36
 
Fecha de Ingreso: octubre-2003
Mensajes: 46
Antigüedad: 21 años, 1 mes
Puntos: 0
Tema: Interacción PHP+Javascript+MySQL

Pregunta : ¿Cómo hacer una marquesina rotaria con resultados de una BD?

Respuesta:

Marquesina Rotaria de Noticias (o de lo que sea) (PHP+javascript+MySQL)

La idea de esta marquesina es hacer un include( ) en donde queramos de un archivo que llamaremos marquesina.php
Utiliza javascript para efectos de hacer la rotación de los titulares de las noticias (o lo que sea) y PHP para hacer que dicha marquesina algo dinámico facilmente actualizable.

Para efectos del ejemplo usaremos una tabla que contenga lo siguiente:

Tabla: noticias

Campos: idnot fecha titulo contenido

idnot (Tipo: tinyint / Atributos: UNSIGNED / Extra: Autoincrement)
fecha (Tipo: DATE)
titulo (Tipo: VARCHAR(50))
contenido (Tipo: longtext)

Luego definimos el javascript que genera la rotación de los titulares (este lo conseguí en la red, no manejo javascript)

Código:
<script language="JavaScript1.2">

var ancho=50
var alto=50
var velocidad=3
var contenido=' Aqui va el código html que queramos y es el que rotará para ello utilizamos PHP que está más adelante'

if (document.all)
document.write('<marquee direction="up" scrollAmount='+velocidad+' style="width:'+ancho+';height:'+alto+'">'+contenido+'</marquee>')

function regenerar(){
window.location.reload()
}
function regenerar2(){
if (document.layers){
setTimeout("window.onresize=regenerar",450)
inimarquee()
}
}

function inimarquee(){
document.cmarquee01.document.cmarquee02.document.write(contenido)
document.cmarquee01.document.cmarquee02.document.close()
thelength=document.cmarquee01.document.cmarquee02.document.height
scrollit()
}

function scrollit(){
if (document.cmarquee01.document.cmarquee02.top>=thelength*(-1)){
document.cmarquee01.document.cmarquee02.top-=velocidad
setTimeout("scrollit()",100)
}
else{
document.cmarquee01.document.cmarquee02.top=alto
scrollit()
}
}
window.onload=regenerar2
</script>
En la parte del “var contenido” del javascript insertaremos el siguiente código de PHP que genera el html desde la base de datos.
Código PHP:
<?php
//Definimos el select de la consulta, además definimos el formato de la fecha como mi_fecha
//Recogemos los datos de la tabla de noticias los ordenamo por fecha desde la más reciente
//a la más antigua y las últimas 5

$ssql=("SELECT *,DATE_FORMAT(fecha,'%d-%m-%Y') AS mi_fecha FROM noticias ORDER BY fecha desc limit 5");
//consulta la base de datos, defino las variables y genero los resultados.
$result=mysql_query($ssql,$conn);
while (
$row=mysql_fetch_array($result))

echo
"<a href=noticias/vernoticia.php?idnot=".$row['idnot'].">".substr($row[titulo],0,25)."...<br>(".$row[mi_fecha].")</a><br><br>";} ?>'
con esto se genera el html de los titulos de las noticias.
Por ejemplo si fuera la noticia idnot=1 , fecha=2004-01-01 , titulo=’Comienza el 2004’, contenido=’Comienza el 2004 y en la Alameda quedó la…..etc’
Se corta el título en 25 caractreres y le agrego puntos suspensivos. (substr($row[titulo],0,25)
El html generado sería:
<a href=noticias.php?idnot=1>Comienza el 2004…<br>01-01-2044</a><br>
y así hasta los 5 últimos titulares.

El código final quedaría así:

Código PHP:
<script language="JavaScript1.2">

var ancho=300
var alto=150
var velocidad=3
var contenido='<?    

$ssql
=("SELECT *,DATE_FORMAT(fecha,'%d-%m-%Y') AS mi_fecha FROM noticias ORDER BY fecha desc limit 5");
$result=mysql_query($ssql,$conn);
while (
$row=mysql_fetch_array($result)){ 
echo 
"<a href=vernoticia.php?idnot=".$row['idnot'].">".substr($row[titulo],0,20)."...<br>(".$row[mi_fecha].")</a><br><br>";} ?>'

if (document.all)
document.write('<marquee direction="up" scrollAmount='+velocidad+' style="width:'+ancho+';height:'+alto+'">'+contenido+'</marquee>')

function regenerar(){
window.location.reload()
}
function regenerar2(){
if (document.layers){
setTimeout("window.onresize=regenerar",450)
inimarquee()
}
}

function inimarquee(){
document.cmarquee01.document.cmarquee02.document.write(contenido)
document.cmarquee01.document.cmarquee02.document.close()
thelength=document.cmarquee01.document.cmarquee02.document.height
scrollit()
}

function scrollit(){
if (document.cmarquee01.document.cmarquee02.top>=thelength*(-1)){
document.cmarquee01.document.cmarquee02.top-=velocidad
setTimeout("scrollit()",100)
}
else{
document.cmarquee01.document.cmarquee02.top=alto
scrollit()
}
}
window.onload=regenerar2
</script>
Este código lo guardamos en un archivo marquesina.php y le hacemos un include(“marquesina.php”); dentro del index.php de nuestro sitio o donde sea. Otra opción es poner todo el código directamente en la página.

Luego para que funcione por completo debemos crear una página que reciba el idnot y muestre el contenido de la noticia.

Con el siguiente php (archivo “vernoticia.php”)

Código PHP:
<?php
include("conectar.php");
//defino la variable que viene por  get
$idnot=$_GET['idnot'];
//defino el Select de la consulta y luego hago la consulta
$ssql=("SELECT *,DATE_FORMAT(fecha,'%d-%m-%Y') AS mi_fecha FROM noticias  WHERE idnot=$idnot");
$result=mysql_query($ssql,$conn);
while (
$row=mysql_fetch_array($result))
{
echo 
$fecha=$row[mi_fecha]." - ";
echo 
"<b>".$row[titulo]."</b><br><br>";

$variable=$row['contenido'];
// Convertir links (URLs) usé este código que saque del foro para revisar el contenido y ver si hay //vínculos y linkear.
$variable eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)''<a href="\\1" target="_blank">\\1</a>'$variable);
$variable eregi_replace('([[:space:]()[{}])([url]www.[/url][-a-zA-Z0-9@:%_\+.~#?&//=]+)''\\1<a href="http://\\2" target="_blank">;\\2</a>;'$variable);
echo 
"<br>"$variable ."<br>";
}
          
?>
<hr size="1" noshade>
<a href="javascript:history.back()">Volver a Marquesina</a>
Finalemente puedo incluir esto en un archivo “notimivil.php”

Código PHP:
<?     

include("conectar.php");
include(
"marquesina.php");
    
 
?>
Pueden ver el resultado aquí http://usuarios.lycos.es/bonsaichile.../notimovil.php

La página tiene un poco de propaganda pero nada tan terrible.

Saludos Darkoi

Última edición por Cluster; 15/09/2004 a las 22:15
  #100 (permalink)  
Antiguo 09/01/2004, 10:56
ACHAVARRIA
Invitado
 
Mensajes: n/a
Puntos:
[B]Creación de Thumbnails de imágenes[/B]

Pregunta:¿Como Crear Thumbnails de imágenes?
Respuesta:


Un Thumbnails consiste en previsualizaciones de menor tamaño de una imagen original lo cual se utiliza mucho para galerías, mostrando una copia de la imagen original pero de menor tamaño.

Para el ejemplo utilizare una como formato de imagen el GIF, Primero presentare el codigo y luego la explicacion linea por linea al igual que como hacerlo con diferentes formatos de imagen.

Supongo que el nombre del archivo es imagen.php

Código PHP:
<?php 
//http://pagina.com/ 

/*Este Archivo Recibe Los Parametros $ruta, Que Es La Ruta Interna De La Imagen En El Servidor, Y Los Parametros $ancho y $alto Que Se Refiere Al Alto Y Ancho De La Previsualizacion.*/ 

$fuente = @imagecreatefromgif($ruta); 
$imgAncho imagesx ($fuente); 
$imgAlto =imagesy($fuente); 
$imagen ImageCreate($ancho,$alto); 

ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto); 

Header("Content-type: image/gif"); 
imageGif($imagen); 

?>
Lo primero es recordar que este archivo recibe los parametros
Código PHP:
$ruta 
que es la ruta interna de la imagen en el servidor, entonces si el fichero imagen.php se encuentra por ejemplo en:

http://www.servidor.com/cuenta/imagen.php

Y la imagen, en este caso supondremos el nombre "01.gif", se encuentra en:

http://www.servidor.com/cuenta/galeria/01.gif

A imagen.php Solo Le Pasaremos galeria/01.gif como valor de ruta:

http://www.servidor.com/cuenta/image...galeria/01.gif

Pero esto no es todo, recordemos que recibe otros dos parametros, los cuales son alto y ancho, Estos no se refieren al alto y ancho de la imagen original, se refieren al alto y ancho que queremos la previsualizacion(Thumbnail), entonces si queremos que nos devuelva la imagen 01.gif, ubicada en el directorio galeria y cuyo tamaño original es de 400 pixeles de anchura y 300 pixeles de altura pero queremos la previsualizacion de 200 pixeles de anchura y 150 pixeles de altura tendriamos que llamarla de esta manera:

http://www.servidor.com/cuenta/image...o=200&alto=150

Obviamente si lo llamamos para presentarlo como imagen dentro de un archivo al usuario(.html, .php, etc), lo llamamos mediante el tag IMG:

<IMG SRC="http://www.servidor.com/cuenta/imagen.php?ruta=galeria/01.gif&ancho=200&alto=150">

Ahora que ya sabemos como llamar a la imagen, vamos a ver como se hace la previsualizacion(Thumbnail), como es que se crea desde una imagen mas grande una imagen mas pequeña tanto en pixeles como en tamaño para su presentacion al usuario.

Primero creamos una copia de la imagen desde archivo, la igualamos a $fuente, ya que alli quedara un identificador de tipo ENTERO(INT) para dirijirnos a la imagen creada, esto es necesario ya que sera de esta imagen que haremos la Previsualizacion(Thumbnail).

Código PHP:
$fuente = @imagecreatefromgif($ruta); 
Recuerdemos que el @imagecreatefromgif() es para imagenes gif, si quiere crear jpeg o png solamente cambie el gif:
Código PHP:
 @imagecreatefromjpeg($rutaó @imagecreatefrompng($ruta
Ahora obtendremos la anchura y altura de la imagen original, esto es necesario para poder hacer la copia de la imagen, para ello utilizamos las funciones imageSX y imageSY, que reciben como parametro un identificador de imagen(en este caso
Código PHP:
 $fuente 
, que es el identificador de la imagen original) y devuelven la anchura y altura de la imagen respectivamente.

Código PHP:
$imgAncho imagesx ($fuente); 
$imgAlto =imagesy($fuente); 
Ahora creamos una imagen nueva en blanco con la anchura y altura que queremos para la previsualizacion(Thumbnail) y que sera la que se le devuelva al usuario cuando se le llame, ya sea directamente en el browser o por medio de la etiqueta IMG de html.

Código PHP:
$imagen ImageCreate($ancho,$alto); 
Ahora lo mas importante, copiaremos la imagen original a la imagen nueva, lo cual hara que al tener un menor tamaño(la imagen nueva), la copia de que hacemos de la original se ajustara al tamaño de esta.

Utilizamos la funcion
Código PHP:
ImageCopyResized() 
la cual sirve para copiar "partes" de una imagen a otra por medio de coordenadas, pero en nuestro caso no necesitamos un pedazo, necesitamos copiar toda la imagen en todo el espacio de la nueva imagen, por ello damos las coordenadas totales de las imagenes.

Esto puede sonar un poco confuso, por eso es mejor que mira la documentacion oficial en http://www.php.net/ para informacion sobre los parametros que recibe esta funcion.

Código PHP:
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto); 
Listo, ya tenemos nuestra imagen, ahora debemos indicarle al navegador que vamos a devolver una imagen de tipo gif, para ello enviamos la cabecera diciendo el tipo de contenido que enviaremos al navegador.

Código PHP:
Header("Content-type: image/gif"); 
Recuerdemos, que si el formato es jpeg o png solamente cambie el gif:
image/jpeg ó image/png

Ahora devolvemos la imagen directamente al browser(navegador) del usuario.

Código PHP:
imageGif($imagen); 
Recuerdemos, que si el formato es jpeg o png solamente cambie el gif: imageJpeg($imagen) o imagePng($imagen)

--------------------------------------------------------------------------------

Bien espero haya quedado claro, pero vamos a ver otro aspecto, que tal si no queriamos devolver la imagen, lo que queriamos era guardar la nueva imagen(Thumbnail) en el servidor, para su uso posterior?...

Al ponerle un segundo parametro al imageGif($imagen,"imagenPequena.gif"), Lo lograremos, en este caso guardaria la imagen que acabamos de crear en el servidor, especificamente en la misma carpeta con el nombre de "imagenPequena.gif".

Esto puede ser muy util, ya que si queremos crear thumbnails de todas las imagenes en un directorio, podemos hacer un loop que lea los archivos del directorio, y repita el proceso anterior(de crear imagen en blanco y copiar) y guarde las nuevas imagenes para su uso posterior, realmente es una herramienta con muchos usos.

Cabe recordar que su servidor tiene que tener soporte para manipular imagenes, segun el tipo que desee utilizar, en caso de no tenerlo el servidor le dara un mensaje de error como "Jpeg is no support..." dependiendo del formato de imagen.
  #101 (permalink)  
Antiguo 09/01/2004, 11:02
ACHAVARRIA
Invitado
 
Mensajes: n/a
Puntos:
Sitios multilingües

Pregunta: Como crear Sitios multilingües?
Respuesta:


http://www.programacionweb.net/index...ticulo&num=111

Última edición por josemi; 16/03/2004 a las 15:20
  #102 (permalink)  
Antiguo 17/01/2004, 22:10
 
Fecha de Ingreso: junio-2002
Ubicación: Uruguay
Mensajes: 427
Antigüedad: 22 años, 5 meses
Puntos: 0
Contabilizar visitas de páginas internas.

Pregunta: ¿Como hago para contabilizar en php y mysql las visitas que tienen mis páginas/secciones internas en mi web?

Respuesta:

Primero de todo crear esta base de datos MySQL con tu PhpMyAdmin:
Código PHP:
CREATE TABLE `secciones` ( 
`
idINT(4NOT NULL AUTO_INCREMENT PRIMARY KEY
`
paginaTEXT NOT NULL
`
contadorINT(4NOT NULL 
); 
Ya creada la base de datos, ir agregando filas segun páginas/secciones tengas haciendo click en insertar de tu PhpMyAdmin adentro de tu base de datos:
id pagina contador
1 /index.php 0
2 /noticias.php 0
3 /juegos.php 0
4 /chat.php 0

Despues, poner este codigo en todas tus páginas/secciones:
Código PHP:
<? 
$link
=mysql_connect("localhost""db","password"); 
mysql_selectdb("secciones",$link); 

$pagina=$_SERVER["PHP_SELF"]; 
$SQL="UPDATE secciones SET contador= contador +1 WHERE pagina ='$pagina'"

mysql_query($sql) or die (mysql_error()); 
?>
Para ver las estadisticas, lo podes hacer examinando tu base de datos, o creando una pagina .php que muestre los datos de esa base de datos de esta manera:
Código PHP:
<?php 
function Conectarse() 

   if (!(
$link=mysql_connect("localhost","db","password"))) 
   { 
      echo 
"Error conectando a la base de datos."
      exit(); 
   } 
   if (!
mysql_select_db("db",$link)) 
   { 
      echo 
"Error seleccionando la base de datos."
      exit(); 
   } 
   return 
$link

?>
<?
   $link
=Conectarse(); 
   
$result=mysql_query("select * from secciones",$link); 
?>
<TABLE style="border-collapse: collapse" border=1 align=center bordercolor=#666E7B CELLSPACING=1 CELLPADDING=1> 
<TR bgcolor=#292B37 bordercolor=#000000><TD bordercolor=#666E7B><center><b>ID:</b><center></TD><TD bordercolor=#666E7B><center><b>Página:</b><center></TD><TD bordercolor=#666E7B><center><b>Visitas:</b><center></TD></TR> 
<?php       

   
while($row mysql_fetch_array($result)) { 
      
printf("<tr><td>&nbsp;%s</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s</td></tr>"$row["id"],$row["pagina"], $row["contador"]); 
   } 
   
mysql_free_result($result); 
   
mysql_close($link); 
?>
Espero que les sea de utilidad.

Un saludo!

PD: Gracias a Vulcar por su ayuda para terminar este script en el foro de DataFull: http://foros.datafull.com/viewtopic....er=asc&start=0

Última edición por Cluster; 28/12/2004 a las 13:05 Razón: Sustituir caracteres } ` por ' en sentencia SQL. Reportaron problemas por esa causa.
  #103 (permalink)  
Antiguo 29/01/2004, 12:26
 
Fecha de Ingreso: mayo-2003
Ubicación: Cuernavaca, Mor.
Mensajes: 117
Antigüedad: 21 años, 6 meses
Puntos: 2
Pregunta: ¿Como hago para saber los usuarios en linea en mi web?
Respuesta: Con esta Clase PHP:
1.- Primero necesitamos usar una tabla que sera la que guarde los registros y esta debe ser su estructura:
Código:
CREATE TABLE `usuariosenlinea` (
`timestamp` int(15) NOT NULL default '0',
`ip` varchar(40) NOT NULL default '',
`location` varchar(100) NOT NULL default '',
KEY `timestamp` (`timestamp`),
KEY `ip` (`ip`),
KEY `location` (`location`)
) TYPE=MyISAM;
Ahora el script, llamalo class.online.php:
Código PHP:
<?php

class Usuariosenlinea
{
/*
    * @autor: victor simental
    * @uri: http://phpwebmasters.com
    * @param string $servidor el host para conectar, usualmente localhost
    * @param string $basededatos el nombre de la base de datos
    * @param string $nombredb el nombre de la tabla, preferentemente no editar
    * @param string $usuario usuario de la base de datos
    * @param string $pass la contraseña de la base de datos
*/

  
var $servidor 'localhost';
  var 
$basededatos 'nombre_de_la_base';
  var 
$nombredb 'usuariosenlinea';
  var 
$usuario 'root';
  var 
$pass 'contraseña';
  
## Fin de Conexion ##
  
  
var $e_rror;
  
//Segundos para borrar de la base de datos a los usuarios inactivos
  
var $segundos 120;
  var 
$ahora 0;

    
//CONSTRUCTOR
    
function Usuariosenlinea() {

    
$this->recargar();

    }
                    
    function 
cuantos() {

    return 
$this->ahora;

    }
                    
    function 
enlinea() {

        if(
$this->ahora == 1) {

    echo 
$this->ahora ." Usuario en linea";
        }
        else
        {
    echo 
$this->ahora ." Usuarios en linea";
        }
        
    }

        function 
ipreal(){

            if (
$real_ip getenv('HTTP_X_FORWARDED_FOR')){
            
                
$explode_real_ip explode(","$real_ip);
                return 
trim($explode_real_ip[0]);
            }
            else
            {
            return 
getenv('REMOTE_ADDR');
            }
        }
        
        function 
error(){

        return 
$this->e_rror mysql_error();

        }
        
        function 
recargar() {
            
            
$tiempo_actual time();
            
$tiempo_final $tiempo_actual $this->segundos;
            
$ip $this->ipreal();
   
        @
mysql_connect($this->servidor$this->usuario$this->pass)
        or die(
'Error al Intentar Conectar con la base de datos '.$this->error().'');

        @
mysql_select_db($this->basededatos)
        or die(
'Error Seleccionando la base de datos '.$this->error().'');
        
        
$result mysql_query("SELECT ip FROM $this->nombredb WHERE ip='$ip'")
        or die(
'Error de lectura en la base de datos '.$this->error().'');
        
        if(
mysql_num_rows($result) == 0){
        
        
mysql_query("INSERT INTO $this->nombredb VALUES ('$tiempo_actual','$ip','$_SERVER[REQUEST_URI]')")
        or die(
'Error al Insertar en la base de datos '.$this->error().'');
        
        }
        else
        
        {        
        
mysql_query("UPDATE $this->nombredb SET timestamp='$tiempo_actual' where ip='$ip'")
        or die(
'Error al Insertar en la base de datos '.$this->error().'');
        }

        
mysql_query("DELETE FROM $this->nombredb WHERE timestamp < $tiempo_final")
        or die(
'Error al intentar borrar en la base de datos '.$this->error().'');

        
$result mysql_query("SELECT ip FROM $this->nombredb")
        or die(
'Error de lectura en la base de datos '.$this->error().'');
                
        
$this->ahora mysql_num_rows($result);
             
        
mysql_close();
              
        }

}

?>
Y ahora la forma de uso:

Código PHP:
<?php
//Pon esta Líneas donde quires que se visualizen los usuarios online
include("class.online.php");

$enlinea = new Usuariosenlinea();
$enlinea->enlinea();
?>
  #104 (permalink)  
Antiguo 01/03/2004, 13:49
 
Fecha de Ingreso: febrero-2003
Mensajes: 12
Antigüedad: 21 años, 8 meses
Puntos: 0
Pregunta:Cómo Saber la MAC Address
Respuesta:

Script para saber la MAC Address de una máquina en una ethernet probado en un Solaris 9, IRIX y Windows

Vamos a interactuar un poco con el sistema operativo con los comandos ping y arp.

PING (Packet InterNet Groper):

El ping envía uno o más datagramas a un host destino esperando una respuesta, básicamente es utilizado
par ver si el host destino está activo.

Si tienes instalado un firewall(Cortafuegos) en tu red es necesario tener privilegios en el,para
poder ejecutar sin problemas este comando.

Sintaxis del ping:

UNIX:
Solaris 9 /usr/sbin/ping 192.168.0.44 5
Irix:/usr/etc/ping -w 1 192.168.0.44

Windows:
ping -w 1 192.168.0.44

La respuesta que obtenemos al ejecutar un ping varia dependiendo el OS

En Solaris 9: 192.168.0.44 is alive si esta activa y no answer from 148.215.12.1 si no lo esta

En IRIX y Windows:

Haciendo ping a 192.168.0.44 con 32 bytes de datos:

Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.

Estadísticas de ping para 129.168.0.44:
Paquetes: enviados = 4, recibidos = 0, perdidos = 4 (100% perdidos),
Tiempos aproximados de recorrido redondo en milisegundos:
mínimo = 0ms, máximo = 0ms, promedio = 0ms

lo que nos interesa es "recibidos = 0" si no esta activa y "recibidos = 4" si esta activa


Protocolo ARP (Address Resolution Protocol) : ARP asocia las direcciones físicas de Hardware a
cada dirección IP lógica asignada a una interfaz de red, una Máscara de Control de Acceso al
Medio: es un identificador de Hardware único que es asignado por el fabricante de la NIC.
Las MAC son adjuntadas a las cabeceras de IP origen y destino.

UNIX:
Solaris 9 /usr/sbin/arp 192.168.0.44 5
Irix:/usr/etc/arp 192.168.0.44

Windows:
arp -a 192.168.0.44

Esta es una pequeñísima descripción de ARP y PING.

Código PHP:
<?php
    
    $ip
="192.168.0.44";
    
$comando=`/usr/sbin/ping $ip 5`;
    
//Aquí cambia un poco la salida dependiendo del OS para Irix y Windows:
    // $activa=explode(",",$comando);
    //if (eregi ("0", $activa[1])) echo "La máquina con la IP <b>".$ip."</b> no está activa<br>";
    
if (eregi ("no"$comando)) echo "La máquina con la IP <b>".$ip."</b> no está activa<br>"
    else
    {
        
//Irix:/usr/etc/arp $ip en Window$:arp -a $ip
        
$comando=`/usr/sbin/arp $ip`;
        
ereg(".{1,2}-.{1,2}-.{1,2}-.{1,2}-.{1,2}-.{1,2}|.{1,2}:.{1,2}:.{1,2}:.{1,2}:.{1,2}:.{1,2}"$comando$mac);
            echo 
"La IP <b>".$ip."</b> tiene esta MAC Address <b>".$mac[0]."</b><br>";
    }
    
//By MiStYkO Redes Acatlán UNAM (México)
?>
  #105 (permalink)  
Antiguo 16/03/2004, 03:52
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años, 7 meses
Puntos: 1
Muchas veces nos preguntamos si el mail que nos ponen en un formualrio es valido, osea que existe, pues bien con esta funcion podemos comprobar si este mail existe, y si este esta escrito correctamente


Código PHP:
<?

function ValidarMail($email) { 
       global 
$HTTP_HOST
       
$resultado = array(); 
       if (!
eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,6}$",$email)) { 
         
$resultadoado[0]=false
         
$resultado['code']="702"
          return 
$resultado
       } 
       list ( 
$Username$dominio ) = split ("@",$email); 
         if (
getmxrr($dominio$MXHost))  $conecta_dominio $MXHost[0]; 
                  else  
$conecta_dominio $dominio
                  
        
$conectar fsockopen $conecta_dominio25 ); 

      if (
$conectar) { 

        if (
ereg("^220"$ver fgets($conectar1024))) { 

           
fputs ($conectar"HELO $HTTP_HOST\r\n"); 
           
$ver fgets $conectar1024 ); 
           
fputs ($conectar"MAIL FROM: <{$email}>\r\n"); 
           
$From fgets $conectar1024 ); 
           
fputs ($conectar"RCPT TO: <{$email}>\r\n"); 
           
$To fgets ($conectar1024); 
           
fputs ($conectar"QUIT\r\n"); 
           
fclose($conectar); 
           if (!
ereg ("^250"$From) || !ereg "^250"$To )) { 
               
$resultado[0]=false
               
$resultado['code']="700"
               return 
$resultado
            } 
        }    
           else { 
              
$resultado[0] = false
              
$resultado['code'] = "Død"
              return 
$resultado
            } 
      }  
        else { 
            
$resultado[0]=false
            
$resultado['code']="701"
            return 
$resultado
      } 

       
$resultado[0]=true
       
$resultado['code']="200"
       return 
$resultado
//fin funcion

/// la funcion superior se puede usar en unix pero en windows XP,200,NT 
//hay que utilizar la funcion que sigue pues windows no soporta la funcion getmxrr, (en win 9X no funcionaria )


/// esta funcion es aportada por irondan_2358

function getmxrr($hostname, &$mxhosts)
{
   
$mxhosts = array();
   
exec('nslookup -type=mx '.$hostname$result_arr);
   foreach(
$result_arr as $line
   {
     if (
preg_match("/.*mail exchanger = (.*)/"$line$matches)) 
         
$mxhosts[] = $matches[1];
   }
   return( 
count($mxhosts) > );

// la un
}
Espero que os sea de utilidad

Saludos
  #106 (permalink)  
Antiguo 31/03/2004, 10:47
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 6 meses
Puntos: 2
Funcion Genera Pasw Palabras Legibles - Gd+Sessiones

Código PHP:
<?php
function FUNC_generaPassw($num,$may){
    if(empty(
$num)){$num=5;}

    
$voc = array ("a","e","i","o","u");
    
$con = array ("b","c","d","f","g","h","j","k","l","m","n","ñ","p","q","r","s","t","w","x","y","z");
    
$psw "";
    
$vc  mt_rand(0,1);

        for (
$n=0$n<$num$n++){
            if (
$vc==1){
                
$vc=0;
                
$psw .= $con[mt_rand(0,count($con)-1)];
            }
            
$psw .= $voc[mt_rand(0,count($voc)-1)];
            
$psw .= $con[mt_rand(0,count($con)-1)];
        }

    
$psw ereg_replace ("q","qu",$psw);
    
$psw ereg_replace ("quu","que",$psw);
    
$psw ereg_replace ("yi","ya",$psw);
    
$psw ereg_replace ("iy","ay",$psw);

        if(empty(
$may)){
            
$psw strtoupper($psw);
        }

    
$psw substr($psw,0,$num);

    
session_name('codePaswSession');
    
session_start();
    
session_cache_limiter('nocache,private');
    
ini_set("session.cache_limiter","6400");

    if(empty(
$_SESSION['psw'])){
        
$_SESSION['psw'] = $psw;
    }else{
        
$psw $_SESSION['psw'];
    }
    
    return 
$psw;
}

function 
FUNC_imprimePasswImg($psw,$fontSize,$winSizeW,$winSizeH) {
    if(empty(
$psw)){$psw "ERROR PASSW";}
    if(empty(
$fontSize)){$fontSize=5;}
    if(empty(
$winSizeW)){$winSizeW=72;}
    if(empty(
$winSizeH)){$winSizeH=18;}

    
$width  ImageFontWidth($fontSize) * strlen($string);
    
$height ImageFontHeight($fontSize);
    
$img ImageCreate($winSizeW,$winSizeH);
    
$bgColor ImageColorAllocate($img,102,102,202);
    
$txColor ImageColorAllocate($img,220,220,220);
    
ImageFilledRectangle($img,0,0,$winSizeW,$winSizeH,$bgColor);
    
ImageString($img,$fontSize,0,0,$psw,$txColor);

    
header("content-type: image/png");
    
ImagePng($img);
    
Imagedestroy($img);

}

FUNC_imprimePasswImg(FUNC_generaPassw(8,1),5,72,18);

/*
1º= numero de letras = 8
2º= minusculas = 1 o mayusculas = 0
3º= size-text = 5
4º= sizeW-win = 72
5º= sizeH-win = 18

Para usarlo, crea un fichero xxx.html o xxx.php y le pones esto
1º= Si es HTML solo:
    <img src="func_codeletras.inc.php">

2º= Si ademas de HTML, quieres usar php:
     <img src="func_codeletras.inc.php">
    session_name('codePaswSession');
    session_start();
    session_cache_limiter('nocache,private');
    ini_set("session.cache_limiter","6400");

    echo $_SESSION['psw'];

*/
?>
es la misma de siempre, pero montada
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 31/03/2004 a las 10:50
  #107 (permalink)  
Antiguo 30/04/2004, 18:04
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 22 años, 10 meses
Puntos: 2
Pregunta ¿como configurar mi php y un pequeño servidor de correo en forma local?

Respuesta:

probando un monton de servidores de correo que ocupaban 15MB otros 20MB, me tope con una pequeña MARAVILLA de apenas 288 KB (SIIIII LEISTE BIEN KB) que me permitia sin configurarlo utilizar rapida y comodamente la BENDITA y FAMOSA funcion de PHP mail() para probar mis scripts les listo algunas caracteristicas que me gustaron

- Es muy pequeño 288KB
- Esta en ESPAÑOL
- Posee LOG de todos los eventos que ocurran para enviar un mail
- NO hay que configurar nada!!!
- Permite trabajar como servidor SMTP en un red LAN
- y esto es lo mejor............es FREEWARE!!!!!!!!!

bueno bueno no se desesperen aqui les dejo el link a la pagina oficial y abajo el link para bajarse la version 0.9.77c

pagina oficial de Mini-relay http://webs.ono.com/usr000/NetVicious/
Descarga Directa del Mini-relay 0.9.77chttp://netvicious.iespana.es/netvici.../miniRelay.zip

ahora bien ya tenemos descargado este maravilloso programita, pasamos a configurar el PHP.INI de nuestra carpeta windows.

Buscamos la directiva SMTP y le asignamos la ip: 127.0.0.1 entonces quedaria asi:

[mail function]
; For Win32 only.
SMTP = 127.0.0.1

y listo!!!!! a probar los scripts no mas!!!!!! SUERTE!!!!
__________________
Lo que se hace por AMOR esta mas allá del BIEN y del MAL - Friedrich Nietzsche
http://www.hispanogeek.com.ar
Desarrollador IT -
  #108 (permalink)  
Antiguo 04/05/2004, 10:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Tema: Formularios+Mysql

Pregunta: Como hacer una lista desplegable (<select> ) con valores de una tabla Mysql que dependa del valor seleccionado en la primera.

Respuesta:

Se trata de hacer una consulta a tu tabla "hija" con la clausula (confición) que identifique la relación entre ambas tablas. (usando como clave un campo de nuestra tabla hija q nos haga de clave foranea para nuestra consulta). En este caso usaremos el campo id_padre de la tabla_hija como "clave foranea" .. ambos del mismo tipo y relación 1 -> N (1 registro es a muchos registros de la otra tabla ..)

Partiende de una estructura SQL así: (como ejemplo completo de funcionamiento ..adaptenla a sus necesidades)

Código:
#
# Estructura de tabla para tabla `tabla_hija`
#

CREATE TABLE tabla_hija (
  id tinyint(3) unsigned NOT NULL auto_increment,
  id_padre tinyint(3) unsigned NOT NULL default '0',
  item_texto varchar(255) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

#
# Volcar la base de datos para la tabla `tabla_hija`
#

INSERT INTO tabla_hija VALUES (1, 1, 'tabla_hija - Item grupo 1 bla bla bla');
INSERT INTO tabla_hija VALUES (2, 2, 'tabla_hija - grupo 2 item 1');
INSERT INTO tabla_hija VALUES (3, 2, 'tabla_hija - grupo 2 item 2');
INSERT INTO tabla_hija VALUES (4, 3, 'tabla_hija - grupo 3 item probando');
INSERT INTO tabla_hija VALUES (5, 1, 'tabla_hija - item grupo 1 noseq pner');
# --------------------------------------------------------

#
# Estructura de tabla para tabla `tabla_padre`
#

CREATE TABLE tabla_padre (
  id tinyint(3) unsigned NOT NULL auto_increment,
  item_texto varchar(255) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

#
# Volcar la base de datos para la tabla `tabla_padre`
#

INSERT INTO tabla_padre VALUES (1, 'Grupo 1');
INSERT INTO tabla_padre VALUES (2, 'Grupo 2');
INSERT INTO tabla_padre VALUES (3, 'Grupo 3');
INSERT INTO tabla_padre VALUES (4, 'Grupo 4');

Y el código de nuestras consultas a realizar:



Código PHP:
<?php
// datos de conexion a la BD.
$servidor  ="localhost"// host
$usuario   =""
$clave     ="";
$basedatos =""// Indicar una Base de datos.

// si se ha pulsao el boton enviar ($enviado) se procesa el formulario ..
// Sino, se continua con el formulario y los nuevos valores de los Select ..
// OJO si se tienen mas varibles (mas <input> ) se van a perder sus valores a no ser
// que los obtengamos y se les de como valor inicial en el value= de cada uno segun corresponda.

if (!empty($_POST['enviado'])){

// Procesar el formulario ...
echo "Procesando formulario:<br>";
echo 
"Recibido id_tabla_padre: ".$_POST['id_padre']."<br>";
echo 
"Recibido id_tabla_hija: ".$_POST['id_hija'];

} else {

   
// Conexión a la BD
   
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error());
   
mysql_select_db($basedatos$conexion) or die(mysql_error());

   
// Obtener el $id_padre del envio a si mismo del formulario ..
   
$id_padre=$_POST['id_padre'];

   
// Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script).
   
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";

   
// Formar Selec "Padre".
   
echo "<select name=\"id_padre\" onChange=\"this.form.submit()\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";

   
$SQLconsulta_padre="SELECT * FROM tabla_padre";
   
$consulta_padre mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());

   While   (
$registro_padre=mysql_fetch_assoc($consulta_padre)){
      
// Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo.
      // Se selecciona en consecuencia (selected) la opción elegida.
      
if ($id_padre == $registro_padre['id']){
         echo 
"<option value=\"".$registro_padre['id']."\" selected>".$registro_padre['item_texto']."</option>\n";
      } else {
         echo 
"<option value=\"".$registro_padre['id']."\">".$registro_padre['item_texto']."</option>\n";
      }
    }
   echo 
"</select>\n\n";

   
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta.

   // Formar Select "Hijo"
   
echo "<select name=\"id_hija\">\n";

   
// Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opcion del select hijo
   // se muestra el mensaje de "seleccine un item" (del select padre).
   
if (!empty($id_padre)){

       
$SQLconsulta_hija="SELECT * FROM tabla_hija WHERE id_padre='$id_padre'";
       
$consulta_hija mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
       
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
       
if (mysql_num_rows($consulta_hija) != 0){
          While   (
$registro_hija=mysql_fetch_assoc($consulta_hija)){
            echo 
"<option value=\"".$registro_hija['id']."\">".$registro_hija['item_texto']."</option>\n";
          }
        } else {
            echo 
"<option value=\"\"> No hay registros para este Item </option>";
        }
    } else {
        echo 
"<option value=\"\"> <-- Seleccione un Item  </option>";
    }

    
mysql_free_result($consulta_hija); // Liberar memoria usada por consulta.
    
    
echo "</select>\n\n";
    echo 
"<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
    echo 
"</form>\n";
}

Otras Técnicas que sería interesante ver sobre el tema, sería el denominado "Remote Scripting" que se basa en disponer de iframe/frames ocultos donde se realiza la petición de datos al servidor (petición de nuestro .php que ejecutará la consulta SQL pertinente y obtendrá sus datos), eso datos serán "pasados" a la página principal (frame o "padre" que contenga el iframe oculto) por médio de javascript. De esta forma .. no se verá una recarga "aparente" de la página que estamos visualizando sin que será ese "frame" el que se recarga ante una petición que hagamos vía javascritp de mover algún <select> u otro evento javascript que lance dicho proceso de "Remote Scripting".

Puede ver un tutorial sobre el tema con algunos ejemplos en:
http://www.ashleyit.com/rs/main.htm


Un saludo,

PD: Agradecimiento a bhonox por localizar esta FAQ "perdida" xDD.

Última edición por jam1138; 02/06/2008 a las 18:57
  #109 (permalink)  
Antiguo 03/06/2004, 11:50
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 127
Antigüedad: 20 años, 10 meses
Puntos: 0
Función para Dígito Verificador de RUT (Chile)

Tema: Funciones
Pregunta: ¿Como puedo obtener el dígito verificador de un RUT? (Chile)
Respuesta:

Sólo coloca esta función en el lugar que más te acomode, obviamente antes de hacerle una llamada

Código PHP:
<?php 
/*********************************************************
Función Validador de Dígito verificador RUT, by HiperJP - 2003
Ult. Modificación: 26-08-2003 7:58 AM
Convertido originalmente de una versión en ASP.
*********************************************************/
function ValidaDVRut($rut) {

    
$tur strrev($rut);
    
$mult 2;

    for (
$i 0$i <= strlen($tur); $i++) { 
       if (
$mult 7$mult 2
    
       
$suma $mult substr($tur$i1) + $suma;
       
$mult $mult 1;
    }
    
    
$valor 11 - ($suma 11);

    if (
$valor == 11) { 
        
$codigo_veri "0";
      } elseif (
$valor == 10) {
        
$codigo_veri "k";
      } else { 
        
$codigo_veri $valor;
    }
  return 
$codigo_veri;
}
?>
La función en si retorna el Digito Verificador del rut pasado como parámetro en $rut (ojo, sólo RUT, sin DV). Para su utilización, hacen una llamada de la forma:

Código PHP:
if (ValidaDVRut($_POST['rut'])==$_POST['rut_dv'])
echo 
"Rut válido!!";
else
echo 
"Rut inválido!!"
Donde, $_POST['rut'] es la variable que trae el rut completo, sin puntos, pasada por un formulario.
y, $_POST['rut_dv'] es la variable que nos trae el DV enviado por el mismo formulario.
Luego de esto es una simple comparación


Eso seria, espero les sirva de algo

PD: Quedo espectacular la implementación de la nueva versión de vBulletin, resaltan las nuevas opciones

Última edición por HiperJP; 03/06/2004 a las 11:51
  #110 (permalink)  
Antiguo 09/06/2004, 11:24
 
Fecha de Ingreso: mayo-2003
Ubicación: Cuernavaca, Mor.
Mensajes: 117
Antigüedad: 21 años, 6 meses
Puntos: 2
Mini phpMyAdmin

¿Como creo una tabla sql en línea, usando php?
La respuesta es este script:
Su funcionamientos es bastante simple, ya que consta de un Formulario y la parte donde ejecutara la consulta simulando un mini phpMyAdmin, pero mucho mas sencillo. La razón de este manual es por que cuando empezaba a aprender este lenguaje (PHP), no sabia como ejecutar una, y por esa razón creo que aun debe haber varios con ese problema, esperando que de alguna manera esto le pueda servir a alguien.
Empezaremos creando nuestro formulario que contendrá lo siguiente:
Código HTML:
<html>
<head>
<title>Crear Tabla En Línea</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
BODY { COLOR: #333333; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 9pt;}
INPUT {FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 10px; BACKGROUND-COLOR: #D8D8C4;}
TEXTAREA {FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 10px; BACKGROUND-COLOR: #D8D8C4;}
</style>
</head>
<body>

<form action="tabla.php" method="post">
<table border="0" align="center">
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>Servidor</b></font>
</td><td><input type='text' name='host' value=''></td>
</tr>
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>Usuario</b></font>
</td><td><input type='text' name='user' value=''></td>
</tr>
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>Contrase&ntilde;a</b></font>
</td><td><input type='password' name='pass' value=''></td>
</tr>
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>Base de Datos</b></font>
</td><td><input type='text' name='dbnombre' value=''></td>
</tr>
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>SQL *</b></font>
</td><td><textarea name='sql' rows=15 cols=60 value=''></textarea></td>
</tr>

</table>
<center><input type="hidden" name="install" value="1"><input type="submit" value="Crear Tabla"><br><br>
<font face="verdana" size="-2" color="#333333">* Ejecutar una Tabla cada ves</font>
</center>
</form>
</body>
</html> 
Aquí pondremos los datos para conectarnos con nuestra base de datos y nuestra tabla, debemos notar que lleva un campo oculto (hidden) el cual determinara si debe o no ejecutarse la consulta sql, tal y como se ve en la foto:

Este es el contenido del script, el cual debes guardar como tabla.php
Código PHP:
<?php
//Enviamos las variables por metodo post y usamos los arrays superglobales $_POST
$install $_POST['install'];
$host $_POST['host'];
$user $_POST['user'];
$pass $_POST['pass'];
$dbnombre $_POST['dbnombre'];
$sql $_POST['sql'];

if(
$install == 1){// Igual a 1 ejecutamos la consulta, si no muestro el formulario
//Conecto con la DB
$conexion mysql_connect($host,$user,$pass);
if (!@
mysql_select_db($dbnombre)){
echo (
"Imposible Conectar");
exit();
}
//Quito las comillas
$sql str_replace("`"""$sql);
$sql str_replace("\\"""$sql);

if(!@
mysql_query($sql,$conexion)){//Ejecuto la consulta y creamos la Tabla
echo "Error: ".mysql_error();
}
else
{
$sql nl2br($sql);
//Finalmente Imprimo la Tabla y envio un mensaje de exito
$formulario2 = <<<EOF
<html>
<head>
<title>Crear Tabla En Línea</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
BODY {    COLOR: #333333; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 9pt;}
INPUT  {FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 10px; BACKGROUND-COLOR: #D8D8C4;}
TEXTAREA  {FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 10px; BACKGROUND-COLOR: #D8D8C4;}
</style>
</head>
<body>
<center><B>La Tabla ha sido creada con éxito</B></center>
$sql
</body>
</html>
EOF;
echo 
$formulario2;

}
}
else
{
$formulario = <<<EOF
<html>
<head>
<title>Crear Tabla En Línea</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
BODY {    COLOR: #333333; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 9pt;}
INPUT  {FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 10px; BACKGROUND-COLOR: #D8D8C4;}
TEXTAREA  {FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 10px; BACKGROUND-COLOR: #D8D8C4;}
</style>
</head>
<body>

<form action="tabla.php" method="post">
<table border="0" align="center">
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>Servidor</b></font>
</td><td><input type='text' name='host' value=''></td>
</tr>
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>Usuario</b></font>
</td><td><input type='text' name='user' value=''></td>
</tr>
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>Contrase&ntilde;a</b></font>
</td><td><input type='password' name='pass' value=''></td>
</tr>
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>Base de Datos</b></font>
</td><td><input type='text' name='dbnombre' value=''></td>
</tr>
<tr>
<td>
<font face="verdana" size="-2" color="#333333"><b>SQL *</b></font>
</td><td><textarea name='sql' rows=15 cols=60 value=''></textarea></td>
</tr>

</table>
<center><input type="hidden" name="install" value="1"><input type="submit" value="Crear Tabla"><br><br>
<font face="verdana" size="-2" color="#333333">* Ejecutar una Tabla cada ves</font>
</center>
</form>
</body>
</html>
EOF;
echo 
$formulario;
}

?>
Aquí mismo puedes bajar el ejemplo, pero al menos inténtalo una ves, suerte.
http://phpwebmasters.com/descargas/tabla.zip

Última edición por vic_mx; 09/06/2004 a las 11:28
  #111 (permalink)  
Antiguo 09/08/2004, 17:35
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 11 meses
Puntos: 5
Cómo mostrar una tabla de mi base de datos entera (con título de columnas y datos)

Tema: PHP y MySQL

Pregunta:
Cómo mostrar una tabla de mi base de datos entera (con título de columnas y datos)

Respuesta:

Código PHP:
<?php
include('config.php');  //INCLUIMOS SCRIPT DE CONEXIÓN A BASE DE DATOS
$tabla="Nombre de la tabla";   //NOMBRE DE LA TABLA A MOSTRAR
$result mysql_query("select * from $tabla"); 
echo 
"<table bgcolor=\"#DDDDDD\" align=center style=\"border:2px outset black\">";
for (
$i 0$i mysql_num_fields($result); $i++)
    { 
    print 
"<th>".mysql_field_name($result$i)."</th>\n"
    } 
while (
$registro mysql_fetch_row($result))
    {
    echo 
"<tr>";
    foreach(
$registro  as $clave)
        {
        echo 
"<td bgcolor=\"#BBBBBB\"style=\"border:2px groove black\" align=\"center\">",$clave,"</td>";
        }
    }
echo 
"</tr></table>";
mysql_close(); 
?>
Sólo es necesario incluir el script de conexión a la base de datos y el nombre de la tabla que queremos mostrar y cómo resultado veremos nuestra tabla ordenada con los títulos de las columnas

Última edición por jam1138; 02/06/2008 a las 18:58
  #112 (permalink)  
Antiguo 11/09/2004, 18:02
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 127
Antigüedad: 20 años, 10 meses
Puntos: 0
Creando un menú de lista por medio de una función.

Tema: Funciones en PHP

Pregunta:
¿Como puedo crear por medio de una función un menu de lista pasandole como parámetros el nombre, cadena de etiquetas y cadena de valores?.

Respuesta:

Puedes utilizar esta pequeña función creada por mi (lee las notas IMPORTANTES)

Código PHP:
/* ### Function to create listbox from values and labels in arrays (Nº labels = Nº values). ###
* Compatible with PHP4 (function array_combine() must be present).
* @param string $nombre: The SELECT name.
* @param string $arr_etiquetas (comma separated or \n): The labels of the SELECT.
* @param string $arr_valores (comma separated or \n): The values of the SELECT.
* ************************************************************************************
* Author: Jean Pierre Martínez @ 26-07-2004 13:45 [[email protected]]

* Por favor notificame antes o después de realizar cualquier cambio, te lo agradeceré. :P
*/
function combinedListbox ($nombre$str_etiquetas$str_valores) {
if (!isset(
$nombre)) {
trigger_error('combinedListbox() expects parameter 1 to be defined, NULL given'E_USER_WARNING); 
     return 
null;
}
if (!
is_string($str_etiquetas)) {
trigger_error('combinedListbox() expects parameter 2 to be string, '.gettype($str_etiquetas).' given'E_USER_WARNING); 
     return 
null;
}
if (!
is_string($str_valores)) {
trigger_error('combinedListbox() expects parameter 3 to be string, '.gettype($str_valores).' given'E_USER_WARNING); 
     return 
null;
}
 
// Creamos array con elementos de etiqueta/valor (debe ser la misma cantidad en ambos).
$arr_etiquetas split("[,\n]"$str_etiquetas);
$arr_valores split("[,\n]"$str_valores);
 
// Verificar que la cantidad de etiquetas sea igual al de valores.
if (count($arr_etiquetas) != count($arr_valores)) {
trigger_error('combinedListbox() must contain an equal number of keys and values'E_USER_WARNING); 
     return 
null;
}
 
// Crear array de elementos combinados.
$array_listbox array_combine($arr_etiquetas$arr_valores);
 
$listbox "<SELECT NAME=\"$nombre\">\n";
foreach (
$array_listbox as $etiqueta => $valor)
{
$etiqueta trim($etiqueta);
$valor trim($valor);
$listbox .= " <OPTION VALUE=\"$valor\">$etiqueta</OPTION>\n";
}
$listbox .= "</SELECT>\n";
return 
$listbox;

IMPORTANTE:
Esta función utiliza la función (valga la redundancia) del lenguaje array_combine() que viene incluida con PHP5, para los usuarios de PHP4 pueden utilizar ésta misma función del mismo nombre la cual, en caso de trasladar la funcion combinedListbox() a PHP5, no entrará en conflicto con la que trae ésta.

Código PHP:
// Función 'array_combine' para PHP4.
if (!function_exists('array_combine')) 

    function 
array_combine($keys$values
    { 
        if (!
is_array($keys)) { 
            
trigger_error('array_combine() expects parameter 1 to be array, ' gettype($keys) . ' given'E_USER_WARNING); 
            return 
null
        } 
        if (!
is_array($values)) { 
            
trigger_error('array_combine() expects parameter 2 to be array, ' gettype($values) . ' given'E_USER_WARNING); 
            return 
null
        } 
        if (
count($keys) !== count($values)) { 
            
trigger_error('array_combine() Both parameters should have equal number of elements'E_USER_WARNING); 
            return 
false
        } 
        if (
count($keys) === || count($values) === 0) { 
            
trigger_error('array_combine() Both parameters should have number of elements at least 0'E_USER_WARNING); 
            return 
false
        } 
        
$keys    array_values($keys); 
        
$values array_values($values); 
        
$combined = array (); 
        for (
$i 0$cnt count($values); $i $cnt$i++) { 
            
$combined[$keys[$i]] = $values[$i]; 
        } 
        return 
$combined
    } 


Última edición por HiperJP; 11/09/2004 a las 18:06
  #113 (permalink)  
Antiguo 22/09/2004, 07:22
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 10 meses
Puntos: 1
De acuerdo Forzar al IE a mostrar las imagenes sin usar su cache

Tema: Imágenes
Pregunta: Cómo hago para forzar al IE a que me recargue una imagen sin usar su cache.
Respuesta:

Cuando usamos en una página la carga de imágenes que siempre tienen el mismo nombre, el IE busca esa imagen en su cache.

Los metodos como:

Código PHP:
     // Fecha en el pasado
    
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    
// siempre modificado
    
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
     
    
// HTTP/1.1
    
header("Cache-Control: no-store, no-cache, must-revalidate");
    
header("Cache-Control: post-check=0, pre-check=0"false);
    
// HTTP/1.0
    
header("Pragma: no-cache"); 
Solamente afectan a los archivos include, css, js, html, etc. Pero no a las imagenes (Referenciado por Cluster)

Entonces lo que hay que hacer es "engañar" al IE, haciendole creer que nuestra imagen es una página dinamica. (Referenciado por josemi)

Al mandar a imprimir la imagen en la etiqueta HTML le contatenamos un número aleatorio dentro de un query string:

Código PHP:
$Nombre_Foto "foto.jpg"//Nombre de la imagen a mostrar
      
$var md5(time()); // Generamos el valor aleatorio
    
$Nombre_Foto "foto.jpg?var=".$var//Contatenamos la variable 
Código HTML:
<img src="<?php echo $Nombre_Foto; ?>"> 
Suerte
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.

Última edición por jam1138; 02/06/2008 a las 18:58
  #114 (permalink)  
Antiguo 27/09/2004, 14:21
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 10 meses
Puntos: 1
Mostrar la cantidad que quiero de palabras

Tema: Funciones.
Pregunta: ¿Cómo puedo mostrar la cantidad que quiero de palabras?
Respuesta:

Tenemos una función que nos puede servir de mucho: str_word_count()

Código PHP:
  $CAMPO "Texto de prueba que puede venir de una DB por ejemplo";
 
$PALABRAS str_word_count($CAMPO1); //Ordeno en un arreglo cada palabra
 
$NUM_PALABRAS str_word_count($CAMPO);//Obtengo el número de palabras
 
$NUM_PALABRAS_SHOW "20"//Fijo la cantidad que quiera de palabras a mostrar. En este caso del ejemplo coloque 20
 
 
if ($NUM_PALABRAS $NUM_PALABRAS_SHOW) {
    for (
$i=0$i<=$NUM_PALABRAS_SHOW$i++) {
       
$PARRAFO .= $PALABRAS[$i]." ";
    }
    echo 
$PARRAFO;
 }else{
    echo 
$CAMPO;
 } 
Suerte
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.

Última edición por José Molina; 27/09/2004 a las 14:23
  #115 (permalink)  
Antiguo 27/09/2004, 17:16
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 20 años, 2 meses
Puntos: 5
Tema: Generando archivos no HTML (creo)
Pregunta: ¿Cómo hacer un código visual de seguridad? (CAPTCHA)
Respuesta: Muchos hemos querido desarrollar un código visual al estilo Google, Hotmail, etc... donde tenemos que escribir en un campo input el contenido de una imagen.

Este código fue originalmente solicitado por Section1, desarrollado por Cluster, con aportes de josemi, sin embargo... tenía algunos errorcitos pequeños de sintaxis que corregí.

Basicamente serían 4 archivos:

gen_codigo.php
donde se generará el código que mostrará nuestra imagen
Código PHP:
<?php
function genera_password($longitud,$tipo="alfanumerico"){

if (
$tipo=="alfanumerico"){
$exp_reg="[^A-Z0-9]";
} elseif (
$tipo=="numerico"){
$exp_reg="[^0-9]";
}

return 
substr(eregi_replace($exp_reg""md5(time())) .
eregi_replace($exp_reg""md5(time())) .
eregi_replace($exp_reg""md5(time())),
0$longitud);
}
?>
tupagina.php
donde colocarás tu formulario y aparecerá la imagen generada
Código PHP:
<?php
// inicio uso sesiones.
session_start();
// aquí metes tu función genera_password
include ("gen_codigo.php");
// llamas a la función para generar un password.
$pass=genera_password(8);
// lo dejamos en una variable de sesión para poderlo leer de forma segura en otro proceso.php ...
$_SESSION['mipass']=$pass;
?>
<html>
</head>
</head>
<body>
<!-- .. etc y tu formulario con -->
<form action="procesa.php" method="POST">

<!-- la imagen generada con nuestro password ... -->
<img src="genera_img.php">

<input type="text" name="pass">
etc... campos y botón enviar ...
</form>
</body>
</html>
genera_img.php
el cual precisamente generará la imagen que contendrá el password generado por gen_codigo.php
Código PHP:
<?php
// Iniciamos uso de sesiones ...
session_start(); 

//recogemos el texto por el URL que enviamos a generar desde el link de imagen del HTML de nuestro formulario
$codigo=$_SESSION['mipass'];

//nombres tipografías a usar (sin extensión .ttf)
$tipografias = array("fuente1","fuente2");

//directorio donde estén las fuentes (ruta absoluta) importante el último /
$tipografias_ruta "C:\WINDOWS\Fonts\\";
// $tipografias_ruta="/home/sito/public_html/fonts/"; linux

//inicializa eje X desde donde se empezará a dibujar el código (referente al tamaño de la caja)
$espacio 0;

//tamaño fuente.
$tamano_fuente 20;

//profundidad caracteres/digitos del código a generar (password).
$profundidad_codigo 6// (alfanuméricos)

//cálculo Ancho automático de la caja
$x=150;
$y=40;
$angmax 20;
$hori 50;
$verti 100;
// Iniciar la generación de la imagen. Se define una caja de $x por $y pixels.
$im imagecreate($x$y);


//definición Colores. Expresados en valores R G B (respectivamente).
$color_fondo imagecolorallocate($im255255255); // Blanco
$color_texto imagecolorallocate($im000); // Negro

for($caracter=0$caracter<$profundidad_codigo$caracter++){
    
$rhori rand(-$hori$hori);
    
$rverti rand(-$verti$verti);
    
// intento de lineas
    
$lineColor imagecolorallocate($im000);
    
$lineColor2 imagecolorallocate($im000);
    
imagefill($im00$color_fondo);
    
//imageline( imagen, separacion izq, separacion superior, largo, inclinacion)

    //linias horizontales
    
imageline($im0$rhori200$rhori$lineColor);
    
imageline($im0$rhori+20200$rhori+20$lineColor);
    
// linias verticales, 
    
imageline($im$rverti025700$lineColor);
    
imageline($im$rverti+20025700$lineColor);

}


for(
$caracter=0$caracter<$profundidad_codigo$caracter++){
  
//seleccion de una tipografía aleatoria.
  
$indice_aleatorio=array_rand($tipografias);
  
$tipografia=$tipografias_ruta.$tipografias[$indice_aleatorio].'.ttf';

  
//separación entre caracteres
  
$espacio +=$tamano_fuente;
  
$ang rand(-$angmax$angmax); 
  
//generar el caracter gráfico.
  //imagettftext($im, $tamano_fuente, 0, $espacio, $tamano_fuente, $color_texto, $tipografia , $codigo{$caracter});
  
imagefttext($im$tamano_fuente$ang$espacio30$color_texto$tipografia$codigo{$caracter});
  
}

//cabecera HTTP la cual indica al navegador que la imagen que estamos generando es .PNG
header('Content-type: image/png');

//genera un png dinámico
imagepng($im);
//destruye la imagen del servidor
imagedestroy($im);
?>
procesa.php
el cual mostrará el resultado en cuando al proceso, si la imagen es correcta o incorrecta.
Código PHP:
<?php
// inicio sesiones
session_start();
// Checamos que haya un valor en la sesion para evitar robots...
if(empty($_SESSION['mipass'])) {
    
header("Location: tupagina.php");
}
// Checamos que haya un codigo minimo...
if(empty($_POST['pass'])) {
    echo 
"No escribiste nada";
}
// Comparamos los valores
if ($_SESSION['mipass'] == $_POST['pass']){
    echo 
"código/contraseña aceptado .. coincide ...";
} else {
    echo 
"Pues el código/contraseña NO coincide ...";
}

// Y nos deshacemos de la sesión ...
unset($_SESSION);
session_destroy();
?>
Eso es todo. Asi crearemos el propio sistema seguro para que nuestros usuarios se registren en nuestra página sin usar robots. Muy util cuando nuestra web es muy recurrida. Suerte!

Discusión completa en: http://www.forosdelweb.com/f18/como-hacer-codigo-visual-seguridad-183848/
Actualización 22/6/2006 por bauhaus1975: falta inicio sesión en genera_imagen.php
Actualizado: 21/02/08 por GatorV: mejorado el codigo para el Captcha y agregado codigo para verificar y prevenir contra Spam Bots.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.

Última edición por jam1138; 02/06/2008 a las 18:59 Razón: Actualizado para mejorar el captcha
  #116 (permalink)  
Antiguo 27/10/2004, 09:26
Avatar de The_Dark_Roy  
Fecha de Ingreso: enero-2004
Mensajes: 218
Antigüedad: 20 años, 10 meses
Puntos: 0
¿como Pasar un numero a palabras?

Pregunta:¿Como pasar numero a palabras?
Respuesta:Esta Funcion es Demasiado Buena. La Busque en los faq y no la encontre asiq ue tuvimos que hacerla, y como no soy amargao ni apretao aqui esta.

Bueno esta funcion la necesitaba para Imprimir un Comprobante de pago al cual aparate del monto en digitos habia que imprimirlo con palabras.
Código PHP:

$numeros 
=    array("-""uno""dos""tres""cuatro""cinco""seis""siete""ocho""nueve");
        
$numerosX =   array("-""un""dos""tres""cuatro""cinco""seis""siete""ocho""nueve");
        
$numeros100 = array("-""ciento""doscientos""trecientos""cuatrocientos""quinientos""seicientos""setecientos""ochocientos""novecientos");
        
$numeros11 =  array("-""once""doce""trece""catorce""quince""dieciseis""diecisiete""dieciocho""diecinueve");
        
$numeros10 =  array("-""-""-""treinta""cuarenta""cincuenta""sesenta""setenta""ochenta""noventa");

        function 
tresnumeros($n$last) {
            global 
$numeros100$numeros10$numeros11$numeros$numerosX;
            if (
$n == 100) return "cien ";
            if (
$n == 0) return "cero ";
            
$r "";
            
$cen floor($n 100);
            
$dec floor(($n 100) / 10);
            
$uni $n 10;
            if (
$cen 0$r .= $numeros100[$cen] . " ";

            switch (
$dec) {
                case 
0$special 0; break;
                case 
1$special 10; break;
                case 
2$special 20; break;
                default: 
$r .= $numeros10[$dec] . " "$special 30; break;
            }
            if (
$uni == 0) {
                if (
$special==30);
                else if (
$special==20$r .= "veinte ";
                else if (
$special==10$r .= "diez ";
                else if (
$special==0);
            } else {
                if (
$special == 30 && !$last$r .= "y " $numerosX[$n%10] . " ";
                else if (
$special == 30$r .= "y " $numeros[$n%10] . " ";
                else if (
$special == 20) {
                    if (
$uni == 3$r .= "veintitrés ";
                    else if (!
$last$r .= "veinti" $numerosX[$n%10] . " ";
                    else 
$r .= "veinti" $numeros[$n%10] . " ";
                } else if (
$special == 10$r .= $numeros11[$n%10] . " ";
                else if (
$special == && !$last$r .= $numerosX[$n%10] . " ";
                else if (
$special == 0$r .= $numeros[$n%10] . " ";
            }
            return 
$r;
        }

        function 
seisnumeros($n$last) {
            if (
$n == 0) return "cero ";
            
$miles floor($n 1000);
            
$units $n 1000;
            
$r "";
            if (
$miles == 1$r .= "mil ";
            else if (
$miles 1$r .= tresnumeros($milesfalse) . "mil ";
            if (
$units 0$r .= tresnumeros($units$last);
            return 
$r;
        }

        function 
docenumeros($n) {
            if (
$n == 0) return "cero ";
            
$millo floor($n 1000000);
            
$units $n 1000000;
            
$r "";
            if (
$millo == 1$r .= "un millón ";
            else if (
$millo 1$r .= seisnumeros($millofalse) . "millones ";
            if (
$units 0$r .= seisnumeros($unitstrue);
            return 
$r;
        } 
la funcion que se usa es docenumeros($numero)

ojala les sirva....
__________________
ojala te hayas quitado la venda

http://www.surire.cl
http://www.uta.cl

Última edición por The_Dark_Roy; 28/10/2004 a las 08:06
  #117 (permalink)  
Antiguo 28/10/2004, 11:43
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años
Puntos: 1
Calendario

Tema: Calendarios y Fechas
Pregunta: ¿Cómo creo un calendario de con días y meses donde los vínculos solo lleguen hasta el dia, mes y año actual?
Respuesta: Bueno a lo mejor muchos se han visto en este problema de crear calendario para mantener las cosas y realizar consultas a BDatos obtniendo las mismas por fechas. El calendario Consta de 4 funciones básicas:
Código PHP:
 DiaSemana($dia,$mes,$ano); 
 
NombreMes($mes);
 
ultimoDia($mes,$ano);
 
Calendar($mes,$ano); 
En la función DiaSemana($dia,$mes,$ano) lo que hacemos es devolver el día de la semana numéricamente, o sea, 1,2,3,4,5,6,7 según corresponda.
Código PHP:
function DiaSemana($dia,$mes,$ano){ 
  
$numerodiasemana date('w'mktime(0,0,0,$mes,$dia,$ano)); 
  if(
$numerodiasemana == 0){ $numerodiasemana 6; } else { $numerodiasemana--; } 
  return 
$numerodiasemana

En la función NombreMes($mes) lo que hacemos es darle nombre a los meses ya que la función date() de PHP los devuelve pero en Inglés.
Código PHP:
function NombreMes($mes){ 
  switch (
$mes){ 
   case 
1:  $nombre "Ene";  break; 
   case 
2:  $nombre "Feb";  break; 
   case 
3:  $nombre "Mar";  break; 
   case 
4:  $nombre "Abr";  break; 
   case 
5:  $nombre "May";  break; 
   case 
6:  $nombre "Jun";  break; 
   case 
7:  $nombre "Jul";  break; 
   case 
8:  $nombre "Ago";  break; 
   case 
9:  $nombre "Sep";  break; 
   case 
10$nombre "Oct";  break; 
   case 
11$nombre "Nov";  break; 
   case 
12$nombre "Dic";  break; 
  } 
  return 
$nombre

En la función ultimoDia($mes,$ano) lo que hacemos es calcular el último día que tiene el mes con el cual estamos construyendo el calendario para así construir la tabla con todos los días.
Código PHP:
function ultimoDia($mes,$ano){ 
  
$ultimo_dia=28
  while (
checkdate($mes,$ultimo_dia 1,$ano)){ $ultimo_dia++; } 
  return 
$ultimo_dia

Código PHP:
# Calendario de meses 
function Calendar($mes,$ano){ 
  
$nombremes NombreMes($mes); 
  
$mes_anterior $mes 1
  
$ano_anterior $ano
  if (
$mes_anterior == 0){ 
   
$ano_anterior--; 
   
$mes_anterior 12
  } 
  
$mes_siguiente $mes 1
  
$ano_siguiente $ano
  if (
$mes_siguiente==13){ 
   
$ano_siguiente++; 
   
$mes_siguiente=1
  } 
  echo 
"<table width='100'  border='0' cellspacing='0' cellpadding='0' align='center'>"
  echo 
"</table>"
  echo 
"<table width='100'  border='0' cellspacing='0' cellpadding='0' align='center' class='calendar'>"
  echo 
"<tr><td colspan='7' class='normal fontbig bold alterno calendar' align='center'><a href='".basename($_SERVER['PATH_TRANSLATED'])."?mes=".($mes_anterior)."&ano=".($ano_anterior)."&sid=".session_id()."'><< </a> ".$nombremes." ".$ano." <a href='".basename($_SERVER['PATH_TRANSLATED'])."?mes=".($mes_siguiente)."&ano=".($ano_siguiente)."&sid=".session_id()."'>>> </a></td></tr>"
  echo 
"<tr>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>D</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>L</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>M</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>M</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>J</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>V</td>"
  echo 
"<td align='center' bgcolor='#F0F8FE'>S</td>"
  echo 
"</tr>"
  
$dia_actual 1
  
$numero_dia DiaSemana(1,$mes,$ano); 
  
$ultimo_dia ultimoDia($mes,$ano); 
  
$diaact date("d"); 
  
$mesact date("m"); 
  
$anoact date("Y"); 
  echo 
"<tr>"
  for(
$i=-1;$i<6;$i++){ 
   if((
$dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ 
    
$bgcolor "#F0F8FE"
   }elseif((
$dia_actual>$diaact) && ($mes>=$mesact) || ($ano>$anoact)){ 
    
$bgcolor "#D8D8D8"
   }elseif (
$mes>$mesact){ 
    
$bgcolor "#D8D8D8"
   } 
   if((
$dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ 
    
$enlace "calendar.php?action=show&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&sid=".session_id().""
   }else{ 
    
$enlace ""
   } 
   if(
$i $numero_dia){ 
    echo 
"<td class='calendar' bgcolor='#D8D8D8'>&nbsp;</td>"
   }else{ 
    echo 
"<td align='center' bgcolor='".$bgcolor."'><a href=".$enlace."><span class='info' title='Mostrar contenido de ".($dia_actual."-".$mes."-".$ano)."'>".$dia_actual."</span></a></td>"
    
$dia_actual++; 
   } 
  } 
  echo 
"</tr>"
  
$numero_dia 0
  while(
$dia_actual <= $ultimo_dia){ 
   if((
$dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ 
    
$bgcolor "#F0F8FE"
   }elseif((
$dia_actual>$diaact) && ($mes>=$mesact) || ($ano>$anoact)){ 
    
$bgcolor "#D8D8D8"
   }elseif (
$mes>$mesact){ 
    
$bgcolor "#D8D8D8"
   } 
   if((
$dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ 
    
$enlace "calendar.php?action=show&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&sid=".session_id().""
   }else{ 
    
$enlace ""
   } 
   if (
$numero_dia == 0
    echo 
"<tr>"
    echo 
"<td align='center' bgcolor='".$bgcolor."'><a href=".$enlace."><span class='info' title='Mostrar contenido de ".($dia_actual."-".$mes."-".$ano)."'>".$dia_actual."</span></a></td>"
    
$dia_actual++; 
    
$numero_dia++; 
    if (
$numero_dia == 7){ 
     
$numero_dia 0
     echo 
"</tr>"
    } 
   } 
  for (
$i=$numero_dia;$i<7;$i++){ 
   echo 
"<td bgcolor='#D8D8D8'>&nbsp;</td>"
  } 
  echo 
"</tr>"
  echo 
"</table>"

Se usa de esta forma. Si la tienes en un archivo externo al tuyo, donde vas a usar la función sería algo como esto:
Código PHP:
 include("calendar-functions.php");
 
$mes = isset($_GET['mes'])?$_GET['mes']:date("m");
 
$ano = isset($_GET['ano'])?$_GET['ano']:date("Y");
 
Calendar($mes,$ano); 
sino simplemente sería esto:
Código PHP:
 $mes = isset($_GET['mes'])?$_GET['mes']:date("m");
 
$ano = isset($_GET['ano'])?$_GET['ano']:date("Y");
 
Calendar($mes,$ano); 
espero les sirva.
Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 29/10/2004 a las 15:27
  #118 (permalink)  
Antiguo 29/10/2004, 08:20
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 10 meses
Puntos: 1
Restar Fechas en DB

Pregunta: ¿Cómo puedo restar 2 fechas que se encuentran en campos de mi DB directamente con el MySQL?
Respuesta:

Primero debemos asegurarnos que ambos campos son de tipo DATETIME.

Para el ejemplo, usaremos: Campo 1 = fecha_inicio; Campo 2 = fecha_fin; Tabla en la DB = nombre_tabla

La función a utilizar será TIME_TO_SEC.

EJ:

Código PHP:
$sql_tiempo="SELECT TIME_TO_SEC(fecha_fin)-TIME_TO_SEC(fecha_inicio) as tiempo_transcurrido FROM nombre_tabla";

$execute_sql=mysql_query($sql_tiempo);
            
$row=mysql_fetch_object($execute_sql);
$tiempo_capturado $row->tiempo_transcurrido;
$tiempo_transcurrido intval($tiempo_capturado/60)." min ".($tiempo_capturado%60)." sec";

echo 
$tiempo_transcurrido
El resultado a mostrar sera: x min xx sec

Suerte
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #119 (permalink)  
Antiguo 31/10/2004, 01:00
 
Fecha de Ingreso: mayo-2003
Ubicación: Cuernavaca, Mor.
Mensajes: 117
Antigüedad: 21 años, 6 meses
Puntos: 2
¿Como hacer Thumbnails con PHP?

¿Como hacer Thumbnails con PHP?
Con la siguiente función podremos generar un thumbnail (imagen pequeña) de una original.

Código PHP:
<?php
//Autor: Víctor Simental
//http://port21.com.mx

$file "imagen.jpg";//Nombre de la imagen Original


function image_gd($file)
{
//Separamos las extenciones de archivos para definir el tipo de ext.
    
$extension explode(".",$file);
    
$ext count($extension)-1;
    
//Determinamos las extenciones permitidas.
        
if($extension[$ext] == "jpg" || $extension[$ext] == "jpeg")
        {
            
$image ImageCreateFromJPEG($file);
        }
        else if(
$extension[$ext] == "gif"){
            
$image ImageCreateFromGIF($file);
        }
        else if(
$extension[$ext] == "png"){
            
$image ImageCreateFromPNG($file);
        }
        else
        {
            echo 
"Error, extencion no permitida";
            die();
        }
        
    
$thumb_name substr($file,0,-5);//nombre del thumbnail
    
$width  imagesx($image);//ancho
    
$height imagesy($image);//alto
    
    
$nueva_anchura  100// Definimos el tamaño a 100 px
    
$nueva_altura = ($nueva_anchura $height) / $width // tamaño proporcional
    
        
if (function_exists("imagecreatetruecolor"))
        {
           
$thumb ImageCreateTrueColor($nueva_anchura$nueva_altura);//Color Real
        
}
        
//En caso de no encontrar la funcion, la saca en calidad media
        
if (!$thumb$thumb ImageCreate($nueva_anchura$nueva_altura);
        
    
ImageCopyResized($thumb$image0000$nueva_anchura$nueva_altura$width$height);
    
header("Content-type: image/jpeg");
    
ImageJPEG($thumb"t_".$thumb_name.".jpg"100);
    
imagedestroy($image);
    
return 
$image;
}
/* Forma de uso */
image_gd($file);    
?>
La forma de uso es image_gd($file); donde $file es la variable que tiene asignada el nombre de nuestra imagen original.
Bueno eso sería todo, suerte.
http://www.port21.com.mx/webmasters/manuales/gd.html
  #120 (permalink)  
Antiguo 07/11/2004, 17:29
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 10 meses
Puntos: 9
aqui un pequeña contribucion que tenia hace muuuucho guardada por ahi...

Pregunta:Que es y para que sirve el Control de Salida?

Respuesta: Las funciones de Control de Salida nos permiten controlar las salidas producidas por el script.
Esto puede resultar util por ejemplo para trabajar para trabajar con con funciones que deben ser ejecutadas utilizando datos que se han "salido", pero deben ser ejecutadas sin que se halla enviado ninguna como setcookie() o header().
Acontinuacion haremos un script para tratar de explicar como el control de salida puede servirnos. Lo que el script hace es tomar unas variables definidas por nosotros, o por que no, proveninentes de algun formulario; realizar una salida determinada utilizando estos datos, transformar esa salida es una variable y enviarla como mensaje en un mail.

.mandar.php
Código PHP:
<?php 
ob_start
();
/*
La Funcion "ob_start()" hace que todos los datos que se empizan a emitir
queden guardados en un "buffer" y mientras este este "on" so se envian salidas del script
Declaremos algunas variables para el ejemplo
*/
$nombre="Pepito";
$apellido="Comilon";
$edad=48;
$para="[email protected]";
echo 
'<html>
<head>
<title>Vulcar with Output Control and Mail() function</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>Nombre:</td>
<td>'
.$nombre.'&nbsp;</td>
</tr>
<tr>
<td>Apellido:</td>
<td>'
.$apellido .'&nbsp;</td>
</tr>
<tr>
<td>Edad:</td>
<td>'
.$edad .'&nbsp;</td>
</tr>
<tr>
<td colspan="2">Se le ah enviado un mail a su correo electronico: '
.$para.' con el contenido de esta pagina</td> 
</tr>
</table>
</body>
</html>'
;
$todo=ob_get_contents();
ob_end_clean();
echo 
$todo;
/*
la funcion "ob_get_contents()" devuelve todo salida provocada por el script.
La funcion "ob_end_clean()" da por terminado el almacenamiento ("off") de datos y los elimina.
Si no se especifica como debe finalizar el buffer del script por defecto se "agrega" "ob_end_flush()"
Fijense que curioso lo que pasa cuando el "echo $todo" se coloca antes que el ob_end_clean()
y que sucede cuando este no esta.
Podriamos no realizar el echo y usar la funcion mail, luego ob_end_clean() y luego un header("Location:algo.php")
pero esto es solo un ejemplo :P

Ahora mandamos el mail
Definamos algunas variables:*/
$de="[email protected]";
$tema="Tengo Tus Datos Aqui";
$mensaje=$todo;
$headers="From:".$de."\nReply-To:".$de."\n Mime-Version: 1.0\n Content-Type: text/html\n";
@
mail($para,$tema,$mensaje,$headers);
?>
Para el ejemplo anterior utilizamos un funcion escencial para el funcionamiento del script "ob_get_contents()" pero esa no es la unica funcion que veremos, en el ejemplo siguiente usaremos "ob_get_length()" que nos devuelve la longitud de contenidos almacenados dentro del buffer.
.peso.php
Código PHP:
<?php 
ob_start
();
?>
<html>
<head>
<title>Ejemplo de ob_get_length()</title>
</head>
<body>
ALGUN TEXTO PARA HACER PESO NUMAS :P<br>
<?php 
$peso
=(ob_get_length()/1024);
printf ("La pagina pesa: %01.2f Kbytes aproximadamente "$peso);
/*Notece que ob_end_flush es obviado pero pero el escript funciona igual*/
?>
</body>
</html>
Acabamos de ver como utilizar una funcion de control de salida para calcular el peso de la pagina, este no es exacto porque no se tiene en cuenta el peso de los caracteres posteriores a "ob_get_length" y si usamos este codigo al final, de la pagina a la cual le queremos medir, es peso estos ultimos caracteres es casi despreciable.

Espero les haya gustado, cualquier duda me pueden contactar a traves de mi emailo mejor posteen aqui
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 106 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 10:46.