Bueno este script es un sistema de contacto que he hecho unicamente con el fin de adquirir nuevos conocimientos de PHP y MySQL.
El script funciona sin la funcion mail(), en cambio utiliza base de datos esta en una soluion a los que quieran tener un sistema de contacto pero sus hosting (generalmente gratuitos) han desabilitado esta funcion ('mail()').
Consta de 3 archivos:
Contacto.php
Archivo que incluye el formulario de contacto y ademas introduce los datos de este en la base de datos.
Mensajes.php
Archivo que contiene el panel de administracion de los mensajes (ver, borrar) esta protegido con contraseña mediante HTTP pero es problema de ustedes si quieres protegerlo de otra manera.
func.php
Este archivo contiene algunas funciones que son utilizadas.
Bueno empezemos con el codigo:
Creamos un Archivo llamado config.php y ponemos lo siquiente
Quote:
<?php
unset($config) ;
$config[1] = 'localhost' ; # Puede ser "localhost" aunque también una URL o una IP
$config[2] = 'root' ; # Usuario de la base de datos
$config[3] = '' ; # Contraseña de la base de datos
$config[4] = 'uno' ; # Nombre de la base de datos
$conectar = @mysql_connect($config[1],$config[2],$config[3]) or exit('Datos de conexión incorrectos.') ;
mysql_select_db($config[4],$conectar) or exit('No existe la base de datos.') ;
# DEFINE UN USUARIO Y UNA CONTRASEÑA PARA ENTRAR A ADMINISTAR LOS MENSAJES.
$usuario= "usuario"; // USUARIO PARA ENTRAR A ADMINISTAR LOS MENSAJES
$password= "pass"; // UN PASSWORD (CONTRASEÑA)
?>
|
Seguidamente creamos otro archivo llamado contacto.php
y ponemos lo siguiente:
Quote:
<html>
<head>
<title>Formulario de contacto</title>
</head>
<body alink="336699" link="336699" vlink="336699">
<STYLE TYPE="text/css">
a:link {text-decoration: none}
a:visited {text-decoration: none}
a:active {text-decoration: none}
a:hover {text-decoration: underline}
</STYLE>
<?
/////////////////////////////////////////////////////
////// Por Favor No Borre los creditos ////////
////// By Javi ////////
////// Www.mansionanime.info ////////
////// ////////
////////////////////////////////////////////////////
# SI NO SE HA PULSADO ENVIAR SE MUESTRA EL FORMULARIO
if(!isset($enviar))
{
?>
<script languaje="javascript">
function contar(form)
{
n = form.texto.value.length;
t = 200;
{
form.escritos.value = n;
form.restantes.value = (t-n);
}
}
function maximo(form) {
var max=200;
if (form.texto.value.length > max) {
alert("Tu mensaje sobrepasa el numero de caracteres admitidos.Reducelo por favor!");
return false;
}
else return true;
}
</script>
<form action="contacto.php" method="post" onsubmit="return maximo(this)">
<table border="0" align="center">
<tr>
<td colspan="2"><div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Contacto</font></div></td>
</tr>
<tr>
<td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Nombre :</font></strong></div></td>
<td><input name="nombre" id="nombre" class="campos" type="text" maxlength="20" > </td>
</tr>
<tr>
<td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">E-Mail:</font></strong></div></td>
<td><input name="email" id="email" class="campos" type="text" maxlength="40"> </td>
</tr>
<tr>
<td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Asunto:</font></strong></div></td>
<td><div align="left"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> <em>
<input name="asunto" id="asunto" class="campos"type="text" maxlength="25">
</em></font></div></td>
</tr>
<tr>
<td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Mensaje:</font></strong></div></td>
<td rowspan="2"><textarea name="texto" id="texto" class="textok" cols="50" rows="15" onKeyUp="contar(this.form)"></textarea>
<br>
<font face="arial" size="2">Escritos: </font><input type="text" ReadOnly name="escritos" size="2" value="0">
<font face="arial" size="2">Restantes: </font><input type="text" ReadOnly name="restantes" size="2" value="200">
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td><br><br> </td>
<td><input type="submit" id="enviar" class="botones" name="enviar" value="Enviar">
<input type="reset" id="borrar" class="botones" name="borrar" value="Borrar"></td>
</tr>
</table>
<?
}
#SI YA SE PULSO ENVIAR SE PROCESA EL FORMULARIO
else
{
include("func.php");//INCLUYO EL ARCHIVO CON LAS FUNCIONES
if(trim($_POST["nombre"]) != "" && trim($_POST["email"]) != "" && trim($_POST["asunto"]) != "" && trim($_POST["texto"]) != ""){
$email = $_POST["email"] ;
# COMPROVAMOS QUE EL EMAIL INTRODUCIDO SEA VALIDO
if(!eregi("[0-9a-z_\-]+@[0-9a-z\-\.]+\.[a-z]{2,3}",$email)) {
echo "<center><font face=Verdana size=1><b>El email que has introducido <font face=Verdana size=1 color=336699>$email</font> no es valido.<br><a href=javascript:history.go(-1)>Volver</a>.</b></font></center>";
}
else {
include("config.php"); // SE INCLUYE EL ARCHIVO DE CONEXION
$nuevo= 0;
$nombre= $_POST["nombre"]; // TOMAMOS EL NOMBRE DEL FORMULARIO.
$email= $_POST["email"]; // TOMAMOS EL EMAIL DEL FORMULARIO.(YA COMPROVADO)
$ip= obtener_ip(); // OBTENEMOS LA IP DEL REMITENTE
$asunto= $_POST["asunto"]; // TOMAMOS EL ASUNTO DEL FORMULARIO.
$mensaje= $_POST["texto"]; // TOMAMOS EL MENSAJE DEL FORMULARIO.
$fecha= date("d-m-Y"); // SE TOMA LA FECHA
$cliks= 0;
$sql = mysql_query("insert into contacto (nuevo, nombre, email, ip, asunto, mensaje, fecha, cliks) values ('$nuevo', '$nombre','$email','$ip','$asunto','$mensaje', '$fecha', '$cliks')")
or exit("<center><font face=Verdana size=1><b>A ocurrido un error al introducir los datos en la DB.</b></font></center>");
echo "<center><font face=Verdana size=1><b>Mensaje enviado correctamente. TU ip: <font face=Verdana size=1 color=336699>$ip</font> a sido guadada.</b></font></center>";
}
}
else
{
echo "<center><font face=Verdana size=1><b>Todos los campos son obligatorios.<br><a href=javascript:history.go(-1)>Volver</a>.</b></font></center>";
}
}
?>
|
Despues creamos otro archivop llamado func.php
y ponemos lo siquiente
Quote:
<?php
/////////////////////////////////////////////////////
////// Por Favor No Borre los creditos ////////
////// By Javi ////////
////// Www.mansionanime.info ////////
////// ////////
////////////////////////////////////////////////////
/* DEFINIMOS ALGUNAS FUNCINES QUE MAS ADELANTE VAN A SER USADAS */
# FUNCION PARA OBTENER LA DIRECCION IP DE LOS USUARIOS
function obtener_ip() {
global $HTTP_SERVER_VARS;
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"] != "") {
$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
}else{ $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"]; }
return($ip);
}
# FUNCION PDAR FORMATO A LOS MENSAJES RECIVIDOS.
function quitar($texto) {
// Quita los espacios al principio y al final
$texto = trim($texto);
// Esta función intenta eliminar todas las etiquetas HTML y PHP de la cadena dada. (Quitar los // si queremos desactivar el html)
$texto = strip_tags($texto);
// Convierte el texto en html con sus etiquetas
$texto = htmlspecialchars($texto);
// convierte las ' " ' en ' " ' para que no den problemas con mysql
$texto = addslashes($texto);
// Reemplaza los saltos de linea por <br>
$texto = nl2br($texto);
return $texto ;
}
?>
|
Y por Ultimo creamos un archivo llamado mensajes.php
y ponemos lo siguiente
Quote:
<?php
/////////////////////////////////////////////////////
////// Por Favor No Borre los creditos ////////
////// By Javi ////////
////// Www.mansionanime.info ////////
////// ////////
////////////////////////////////////////////////////
include("config.php"); // INCLUIMOS EL ARCHIVO PARA CONECTARNOS A LA BD.
# AUTORIZACION PARA ENTAR A LA ZONA DE ADMINISTRACION DE LOS MENSAJES
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
if (($PHP_AUTH_USER==$usuario) && ($PHP_AUTH_PW==chop($password))){ $validado=true;
$i++;
}
if (!$validado) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>
<html>
<head>
<title>Mensajes recividos.</title>
</head>
<div align="right">
<font size="1" face="arial">Bienvenido <font color="blue"><?php echo $PHP_AUTH_USER?></font> a tu panel de mensajes.</font>
</div><br><br>
<!-- CSS PARA TRATAR A LOS LIKS -->
<STYLE TYPE="text/css">
a:link {text-decoration: none}
a:visited {text-decoration: none}
a:active {text-decoration: none}
a:hover {text-decoration: underline}
</STYLE>
<!-- --------------------------- -->
<?
# SI NOS PIDEN BORRAR. BORRAMOS jejeje xD. QUEDARIA ASI 'mensajes?borrar=ID'
if($_GET["borrar"])
{
?>
<body alink="336699" vlink="336699" link="336699"><?
$borrar= $_GET["borrar"];
mysql_query("delete from contacto where id=$borrar limit 1");
echo "<center><font face=Verdana size=1 color=red><b>Mensaje borrado correctamente<br>Haz click <a href='mensajes.php'>aqui</a> para regresar.</b></font></center>";
}
else
{
if($_GET["id"])
{
?>
<body alink="336699" vlink="336699" link="336699">
<?
# SI NOS PIDEN VER. 'mensajes.php?id=ID'
$ver= $_GET["id"];
$sql = mysql_query("select * from contacto where id=$ver");
$contacto = mysql_fetch_array($sql);
# SI EL MENSAJE QUE SE VA A MOSTRAR ES NUEVO(nuevo=0) SE LE CAMBIA (nuevo=1) EL VALOR PARA QUE YA NO SE TOME COMO TAL
if($contacto[nuevo] == 0){
$nuevoborrar= mysql_query("update contacto set nuevo=1 where id=$ver");
}
# SE LE SUMA UNA VISITA AL MENSAJE
$sumar= $contacto["cliks"] + 1;
$upd= mysql_query("update contacto set cliks=$sumar where id=$ver");
# SI LA ID DEL MENSAJE NO SE ENCUENTRA SE MUESTRA UN ERROR
if($contacto == ""){
echo "<center><font face=Verdana size=1><b>El mensaje no existe en la base de datos.<br>Haz click <a href='mensajes.php'>aqui</a> para regresar.</b></font></center>";
}else{
include("func.php");//INCLUIMOS EL ARCHIVO QUE CONTIENE LAS FUNCIONES
# LE DAMOS PRESENTACION AL MENSAJE
?>
<table align="center" border="0" width="80%">
<tr>
<td bgcolor="#663333">
<table border="0" bgcolor="#663333" width="100%">
<tr>
<td width="70%"><center><font face="Verdana" size="3" color="ffffff"><b><? echo $contacto[asunto]; ?></b></font></center></td>
<td width="20%" align="right"><font face="Verdana" color="ffffff" size="1"><b>Fecha: <? echo $contacto[fecha]; ?></b></font></td>
</tr>
</table>
</td>
</tr>
<tr>
<td><br><font face="Verdana" size="1"><b><? echo quitar($contacto[mensaje]); ?></b></font><br><br></td>
</tr>
<tr>
<td bgcolor="#969696">
<table width="90%" align="center" border="0" summary="">
<tr>
<td bgcolor="#969696" width="10%"><div align="left"><font face="Verdana" size="2"><b><a href="mensajes.php">Volver</a></b></div></td>
<td bgcolor="#969696" width="15%"><font face="Verdana" size="1" color="ffffff"><b>Enviado por: <? echo $contacto[nombre]; ?></b></font></td>
<td bgcolor="#969696" width="25%"><font face="Verdana" size="1" color="ffffff"><b>IP del remitente: <? echo $contacto[ip]; ?></b></font></td>
<td bgcolor="#969696" width="10%"><div align="right"><font face="Verdana" size="2"><b><a href="mensajes?borrar=<?=$contacto[id]?>">Borrar</a></b></div></td>
</tr>
</table>
</td>
</tr>
</table>
<?
}
}
else{
// MOSTRAMOS LOS MENSAJES RECIVIDOS
# SELECCIONAMOS LOS MENSAJES NUEVOS Y.....
$nuevos = mysql_query("select * from contacto where nuevo=0");
# LOS CONTAMOS
$contarnuevos= mysql_num_rows($nuevos);
# RECIVIMOS TODOS LOS MENSAJES Y LOS ORDENAMOS DE MANERA DECENDENTE Y....
$sql = mysql_query("select * from contacto order by id desc");
# LOS CONTAMOS
$contar= mysql_num_rows($sql);
?>
<body alink="ffffff" vlink="ffffff" link="ffffff">
<font face="arial" size="6" color="#663333"><center><b>MENSAJES RECIVIDOS</b></center></font>
<table width="46%" align="center" bgcolor="#663333" border="0" cellspacing="0" cellpading="0">
<tr>
<td align="center"><font face="arial" color="ffffff" size="1">Mensajes Nuevos: <?=$contarnuevos?></font></b></td>
<td align="center"><font face="arial" color="ffffff" size="1">Total de Mensajes: <b><?=$contar?></b></font></td>
</tr>
</table><br><br>
<?
# SI NO HAY MENSAJES INFORMAMOS
if($contar == 0){
echo "<center><font face=Verdana size=1><b>No hay mensajes recividos</b></font></center>";
}
else
{
while($contacto = mysql_fetch_array($sql))
{
$id=$contacto["id"];
# LE DAMOS PRESENTACION A LOS MENSAJES ACOMODANDOLOS EN UNA TABLA.
?>
<body alink="FFFFFF" vlink="FFFFFF" link="FFFFFF">
<table align="center">
<tr>
<td width="70%" bgcolor="#663333"><div align="rigth"><font face=Verdana size=2 color="FFFFFF"><b>Remitente: </b> <a href=mailto:<?=$contacto['email']?>><?=$contacto['nombre']?></a></font></div></td>
<td width="80%" bgcolor="#663333"><div align="left"><font face=Verdana size=1 color="ffffff"><b>IP del remitente:</b><?=$contacto[ip]?></font></div></td>
</tr>
<tr>
<td width="70%"><font face=Verdana size=1><b>Asunto:</b> <?=$contacto[asunto]?></font></td>
<td><font face="arial" size="-1">ID de la noticia: <b><?=$id?></b></font></td>
</tr>
<tr>
<td width="70%" bgcolor="#969696">
<table border="0" summary="">
<tr>
<td width="60%"><a href="mensajes.php?id=<?=$id?>"><font face="verdana" size="1"><b>Ver Mas...</b></font></a></td>
<td><center><font color="ffffff" face="verdana" size="1"><b>Visitado <b><?=$contacto["cliks"]?></b> veces</b></center></td>
</tr>
</table>
</td>
<td width="70%" bgcolor="#969696">
<a href="mensajes.php?borrar=<?=$id?>"><font face="verdana" size="1"><b>Borrar</b></font></a>
</td>
</tr>
<tr>
</table><hr color="#663333" width="50%"><br>
<?
}
}
}
}
?>
|
asta qui es el codigo del sistema ahora solo nos falta conectarnos con la base de datos para ello hacemos lo siguiente creamos un archivo llamado
contacto.sql y ponemos lo siquiente:ç
Quote:
CREATE TABLE contacto (
id INT(44) NOT NULL auto_increment,
nuevo BIGINT( 1 ) NOT NULL,
nombre VARCHAR(255),
email VARCHAR(255),
ip VARCHAR(255),
asunto VARCHAR(255),
mensaje LONGTEXT,
fecha VARCHAR( 20 ) NOT NULL,
cliks VARCHAR( 5 ) NOT NULL,
PRIMARY KEY (id)
) |
----------------------------------------------------------
FORMULARIO DE CONTACTO HECHO POR Javitor52x
CON AYUDA DE LOS FOROS PHP QUE VI POR LA RED Y CON MUCHOS TUTOS ----------------------------------------------------------
INSTRICCIONES:
--------------------------------
1.- Modifica el archivo config.php
2.- Crea las tablas desde el phpmy admin con el codigo
del archivo contacto.sql
3.- Sube los archivos al servidor.
Espero qu eles sirva de alluda este tutorial si necesitan alluda o cualquier cosa no duden en preguntarmelo saludos