Foros del Web » Programando para Internet » PHP »

Libro de Visitas usando archivos de texto plano

Estas en el tema de Libro de Visitas usando archivos de texto plano en el foro de PHP en Foros del Web. Hola amigos. Estuve revisando un codigo hace unos dias.. les cuento que soy un poco perezoso con esto del php y lo agarro de vez ...
  #1 (permalink)  
Antiguo 03/02/2006, 16:45
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 2 meses
Puntos: 5
Información Libro de Visitas usando archivos de texto plano

Hola amigos.
Estuve revisando un codigo hace unos dias.. les cuento que soy un poco perezoso con esto del php y lo agarro de vez en cuando :P... Me preguntaba como hacer para aprender mas rapido y leí por ahi que viendo codigo ageno y modificandolo se aprende mucho. Esdo hice, y me fui a www.webtaller.com y busque aplicaciones hechas con archivos de texto plano y me animé por estudiar una simple pero que sirva (Libro de Visitas con archivos de texto plano). Acá les paso el código comentado, por si alguien no sabe usar archivos de texto y desea aprender.

Los créditos son de:
##############################
## Mini Tag Lite V-0.5 by }^Trade^{ ##
## Script programado en php y archivos ##
## de texto con el que podrás tener tu ##
## propio tag board. La instalación es ##
## muy sencilla (ver archivo leeme.txt). ##
## Este TagBoard no soporta Smiles, tan ##
## solo texto . ##
## Para integrarlo en tu sitioWeb puedes ##
## consultar el archivo leeme.txt . ##
## Si tienes una web y quieres ofrecerlo ##
## como descarga consultalo antes en la ##
## direccion de e-mail : ##
## [email protected] ##
## Puedes modificar este script, pero por ##
## favor, manten los créditos originales ##
## Requisitos : Soporte para PHP ##
## Dudas al foro de www.gaymelilla.com ##
## Por favor, no por e-mail por que no ##
## se responderán. ##
## ¡¡ DISFRUTA DEL SCRIPT !! ##
##############################

Si alguien quiere el .zip completo puede ir a webtaller y descargarlo.

PD. Hay algunas cosas que me marearon asi es que si alguien puede aportar para esclarecerlas seria genial.
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #2 (permalink)  
Antiguo 03/02/2006, 16:46
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 2 meses
Puntos: 5
Config.php
Código PHP:
<?php
$nombresitio 
"www.gaymelilla.com"// Nombre de tu sitio Web .
$archivo "tag.txt" // ruta y archivo donde guardarás los mensajes .
$version "V 0.5" 
$publicidad "si" // "si" o "no" mostrar version del tag y link para descargarlo al pie de página del historial
$tagprint 40 // numero de mensajes que quieres mostrar en el tagBoard .
$historial "si" // "si" o "no" para dar acceso a ver el historial de mensajes .
$historialprint "todos" // "1000" u otro numero para mostrar numero limitado .
// "todos" para mostrar todo el historial .
?>
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus

Última edición por Celcius; 03/02/2006 a las 16:55
  #3 (permalink)  
Antiguo 03/02/2006, 16:47
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 2 meses
Puntos: 5
tag.php
Código PHP:
<?php
ob_start
();
# Esta función habilitará el uso de búferes de salida. Mientras los búferes de salida están activos no se envía salida
# Desde el script (más que las cabeceras), en su lugar la salida es almacenada en un búfer interno. (www.php.net)
# Osea por lo que se entiende, no se envia nada al navegador hasta que aparezca algo como ob_end_flush()--mira al final.
include ("config.php");
 
if (isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])) {// SI NO ESTA VACIO INDICA QUE SE HA USADO UN PROXY
$ip $_SERVER['HTTP_X_FORWARDED_FOR']; //
//
elseif (isset($_SERVER['HTTP_VIA'])) { // NO TENGO INFO AL RESPECTO. A VER SI ALGUIEN HECHA UNA MANO PARA
$ip $_SERVER['HTTP_VIA']; // APRENDER TODOS...
// 
elseif (isset($_SERVER['REMOTE_ADDR'])) { // ALMACENA LA DIRECCION IP DEL VISITANTE EN 
$ip $_SERVER['REMOTE_ADDR']; // CASO DE NO HABERSE USADO PROXY
//
else { //
$ip "Desconocida"//

$nick $HTTP_POST_VARS['nick']; //CUAL ES SU NICK? LO ALMACENAMOS EN UNA VARIABLE
$msg $HTTP_POST_VARS['msg']; // ALMACENAMOS EL MENSAJE LO ALMACENAMOS EN OTRA VARIABLE
// LA LINEA QUE SIGUE VA A COMPROBAR CON isset() QUE LA VARIABLE $nick Y $msg ESTA DEFINIDA
// ADEMAS VA A COMPROBAR QUE NO VENGAN VACIAS NINGUNA DE LAS DOS VARIABLES
// Y QUE NO TENGAN LOS VALORES QUE SE MUESTRAN POR DEFECTO LOS CUADROS DE TEXTO.
// SI SE CUMPLEN ESTOS REQUISITOS, ENTONCES EJECUTAMOS EL CODIGO DE ABAJO.
if (isset($nick)&&isset($msg)&&($nick!="")&&($msg!="")&&($nick!="Tu Nick")&&($msg!="Tu Mensaje")){
$msg str_replace (":||:"" "$msg); // REEMPLAZAMOS TODAS LAS OCURRENCIAS DE :||: POR " " en el mensaje ($msg).
$fecha getdate(); // OBTENEMOS LA FECHA PERO NO VEO DONDE LA UTILIZA
$time getdate (time()); // OBTENEMOS LA HORA, TAMPOCO VEO QUE LA USE.
$uusi=":||:$nick:||:$msg:||:$ip:||:\n"// CONCATENAMOS EL NICK, MENSAJE Y LA IP EN UNA SOLA VARIABLE
$fp fopen($archivo"r+"); // ABRIMOS EL FICHERO $archivo(tag.txt) EN MODO LECTURA Y ESCRITURA
$vanha fread($fpfilesize($archivo)); // LEO TODO EL ARCHIVO. filesize() me da el tamaño de un determinado fichero
// y fread() me permite leer un determinado fichero con la opcion de indicarle cuanto queremos leer (en bytes)
// de esta manera leemos todo el fichero tag.txt y almacenamos su contenido en una nueva variable.
fseek($fp0); // NOS POSICIONAMOS AL PRINCIPIO DEL FICHERO ;)
fputs($fp"${uusi}${vanha}"); // ACA AGREGAMOS LA VARIABLE $uusi(usuario + mensaje + ip) AL FICHERO
fclose($fp); // CERRAMOS EL FICHERO
echo "<center><b>$nick, Ya se envió tu mensajete ;) </b></center>"// EL AUTOR PONE ESTA LINEA.. NO SE LLEGA A VISUALIZAR PORQUE INMEDIATAMENTE VIENE UNA REDIRECCION.
Header("Location: tag.php");// DE ESTA REDIRECCION TE ESTABA HABLANDO. EN ESTE CASO ESTAMOS REDIRECCIONANDO AL MISMO SCRIPT.
}else{ // EN CASO QUE LAS VARIABLES $nick y $msg NO ESTEN DEFINIDAS ni cumplan los requisitos del IF HACEMOS...
?> <!-- MIENTRAS HAYA MENOS CODIGO POR INTERPRETAR MENOS VA A TRABAJAR NUESTRO MICROPROCESADOR, CERRAR EL TAG PHP AHI, NOS FAVORECE POR QUE LO QUE SIGUE ES HTML PURO NO NECESITA INTERPRETARSE :S //-->
<link href="1.css" rel="stylesheet" type="text/css">
<body leftmargin="0" topmargin="0">
<table width="0" border="0" cellspacing="0" cellpadding="0">
<tr> 
<td align="center"> <table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<form action="<?php echo $PHP_SELF?>" method="post" name="Tagboard" target="_self" id="Tagboard">
<textarea class="TAG" name="textarea" cols="38" rows="13" readonly="readonly" wrap="virtual">
<?php
// EL AUTOR DEL SCRIPT INCLUYE NUEVAMENTE EL ARCHIVO config.php, PERO NO CREO QUE SEA NECESARIO
// PUES YA ESTA INCLUIDO MAS ARRIBA.
include ("config.php");
$fichero_en_array file("$archivo""r+"); // file() ES UNA FUNCION QUE DEVUELVE UN ARRAY EN DONDE CADA ELEMENTO DEL ARRAY VIENE A SER UNA LINEA DEL ARCHIVO INCLUYENDO LOS SALTOS DE LINEA.
$cuentamsj count($fichero_en_array);//CONTAMOS EL NUMERO DE ELEMENTOS DEL NUEVO ARRAY Y LO ALMACENAMOS EN UNA VARIABLE
$totaltag count($fichero_en_array);// SUPUESTAMENTE EL AUTOR DEL SCRIPT CREO UNA VARIABLE PARA MOSTRAR EL Nº DE MENSAJES INGRESADOS HASTA EL MOMENTO.
if($cuentamsj $tagprint){ //$tagprint ES LA VARIABLE QUE INDICA EL NUMERO DE MENSAJES QUE QUEREMOS MOSTRAR.
$cuentamsj $tagprint//EN CASO QUE EL NUMERO DE MENSAJES INGRESADOS SEA MAYOR AL QUE IN DICAMOS EN $tagprint (SU
// NUMERO ESTA DEFINIDO EN EL FICHERO config.php) FORZAMOS QUE LA VARIABLE QUE CONTIENE EL TOTAL DE MENSAJES CAMBIE SU VALOR NUMERICO (SIN QUE ESTO AFECTE EN NADA
//AL FICHERO) POR EL NUMERO QUE CONTIENE $tagprint.
}
function 
tag($fichero_en_array,$cuentamsj){
for (
$i 0$i $cuentamsj$i++){ //RELLENAMOS POR INTERMEDIO DE ESTE FOR, LA PAGINA CON LOS MENSAJES DEL FICHERO
$dtag explode(":||:"$fichero_en_array[$i]); // LEEMOS LINEA A LINEA EL ARRAY QUE CONTIENE TODAS LAS LINEAS DEL FICHERO Y DIVIDIMOS CON explode() EN SUBCADENAS LAS CUALES VAN A SER ELEMENTOS INDEPENDIENTES DENTRO DEL ARRAY $dtag
$dtag[2] = stripslashes($dtag[2]);//ELIMINAMOS LAS BARRAS INVERTIDAS EN EL MENSAJE PARA EVITAR DUPLICADOS (SUFRI MUCHO PARA ENTENDERLO :s) pues tuve que meterme a php.net y ahi me enteré de que en el php.ini hay una directiva llamada magic_quotes_gpc la cual esta por defecto en On, esto hace que sin la necesidad de llamar a AddSlashes se active en caso de tener que escapar caracteres tales como (\)barra invertida, (')comillas simples, (")comillas dobles ó valores NUL.
$dtag[1] = stripslashes($dtag[1]); //LO MISMO QUE EL COMENTARIO ANTERIOR \o/
$dtag[2] = str_replace(":||:"" "$dtag[2]); //NO LE ENCUENTRO UTILIDAD A ESTAS DOS LINEAS MAS QUE SI EL USUARIO QUE
$dtag[1] = str_replace(":||:"" "$dtag[1]);//INGRESE EL MENSAJE ESCRIBE :||: SE CAMBIA POR UN ESPACIO EN BLANCO
$hecha="&laquo; $dtag[1] &raquo; $dtag[2]\n--------------------------------------\n";//ACA CONCATENAMOS EL NOMBRE Y MENSAJE DEL USUARIO Y LA ALMACENAMOS EN LA VARIABLE $hecha
echo "$hecha";//AL FIN! INSERTAMOS EL NOMBRE DEL USUARIO Y SU MENSAJE EN EL TEXTAREA.
}
}
tag($fichero_en_array,$cuentamsj);// HACEMOS LA LLAMADA A LA FUNCION tag($fichero_en_array,$cuentamsj)
?>
</textarea></td>
<td>&nbsp;<input type="submit" name="Submit" value="EnviarMsj">
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr> 
<td width="0">
<input name="nick" type="text" id="nick" value="Tu Nick" size="8" maxlength="20">
</td>
<td>&nbsp;&nbsp;&nbsp;&nbsp;
<input name="msg" type="text" id="msg" value="Tu Mensaje" size="25" maxlength="150"></td>
</tr></form>
</table></td>
</tr>
</table>
<?php
if ($historial == "si"){//FIJATE EN EL ARCHIVO config.php AHI LE DICES AL SCRIPT SI QUIERES MOSTRAR UN HISTORIAL O NO.
echo "<center><a href=historial_tag.php target=_blank><b>Historial :</b> $totaltag mensajes.</a></center>";
}
}
ob_end_flush();//Volcar (enviar) el búfer de salida y deshabilitar el uso del búfer (www.php.net)
?>
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus

Última edición por Celcius; 03/02/2006 a las 16:55
  #4 (permalink)  
Antiguo 03/02/2006, 16:48
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 2 meses
Puntos: 5
historial_tag.php
Código PHP:
<?php 
include ("config.php");
if (
$historial == "no"){
die();
// si no queremos historial se termina la ejecucion del script esto es en caso de
// querer acceder sin usar el link de la pagina tag.php (siempre es bueno comprobar)
}
//en caso contrario
$tagfile file("$archivo""r");//solo en modo lectura porque no necesitamos agregar nada. file nos devuelve un array
$cuentamsj count($tagfile); //contamos el numero de mensajes que hay en la nueva matriz.
?><!--cerramos el tag de php para evitar que se use mucho procesador.//-->
<link href="1.css" rel="stylesheet" type="text/css">
<p align="center"><strong>- Historial de Mensajes Publicados en el Tag Board de <?php echo "\"$nombresitio\""?> - Total : <?php echo "$cuentamsj Mensajes"?></strong></p>
<table width="95%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#333333">
<tr>
<td><table width="100%" border="0" align="center" cellpadding="4" cellspacing="1">
<tr>
<?php
if ($historialprint == "todos"){ //comprobamos cuantos mensajes queremos mostrar.
$cuentamsj count($tagfile); //contamos el numero de elementos del array $tagfile para luego usar ese numero en el for.
}else{
$cuentamsj "$historialprint" //Si no se van a mostrar todos, entonces renombramos la variable $cuentamsj por el
//numero de mensajes que se indicó en la variable $historialprint EN el archivo config.php
}
function 
tag($tagfile,$cuentamsj){
for (
$i 0$i $cuentamsj$i++){ //Usamos el for para pintar todos los mensajes del fichero tag.txt
$dtag explode(":||:"$tagfile[$i]);//Usamos explode para separar en subcadenas que van a ser 
//elementos independientes del array $dtag
$dtag[2] = stripslashes($dtag[2]); //Mira la explicacion de la linea 68 del archivo tag.php
$dtag[1] = stripslashes($dtag[1]); // igual que la anterior.
$color=($color=="#FFFFFF")?"#E6F3FB":"#FFFFFF"//Alguien explique más acerca de esto.. no se como buscarlo!
$hecha="<tr><td bgcolor=$color valign=top>&raquo;</td><td bgcolor=$color><b>&laquo;$dtag[1] dice&raquo;</b> $dtag[2]</td></tr>\n";//Pintamos las filas y agregamos valores (nick y mensaje). Cada uno en su respectiva celda. Aun no lo
//mostramos
echo "$hecha"// Ahora si :D. Mostramos la fila pintada con sus respectivos valores.
}
}
tag($tagfile,$cuentamsj); //llamamos a la funcion..
?>
</tr>
</table></td>
</tr>
</table>
<p align="center"><br>
<?php 
if ($publicidad == "si"){
echo 
"<a href=http://www.gaymelilla.com target=_blank>Mini Tag Lite $version .Funciona con php y archivos de Texto.</a>";
}
?>
</p>
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus

Última edición por Celcius; 03/02/2006 a las 16:55
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.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:48.