Estoy realizando un sitio web para una empresa de venta de hardware. Ya tengo todo el trabajo bastante terminado pero quiero pulir algunos detalles y se me presentaron algunas dificultades:
1. No logro hacer un sistema de para restituir la contraseña de un usuario en caso que la olvide, ya escribí el código php pero no se porque razón no funciona (más detalles abajo).
2. La estructura del encabezado y el pie de cada página se mantiene en cada una de las páginas del sitio, es decir, es igual. Al principio tenía una copia del código de dichas partes en cada una de las páginas, pero cada vez que deseaba cambiar algo, tenía que copiarlo en todas y cada una de las páginas y resultaba muy engorroso, por lo que "centralicé" estas partes en nuevos archivos .php y luego los llamo mediante un php include.
El problema es que algunas de estas partes incluyen formularios o mensajes mostrados mediante jquery UI dialog, y no logro hacer que funcione bien el procesamiento de los datos del formulario (tiene algo que ver con el action del form creo yo) ni que se muestren los mensajes del UI Dialog (más detalles abajo)
3. Me gustaría hacer un catálogo de productos online, quería saber que piensan que es mejor, que programe todo yo, o que use alguna solución como joomla + virtuemart o magento, etc.
MAS DETALLES AHORA SI:
1. Lo que tengo escrito hasta el momento es lo siguiente:
Código:
<?php
if(isset($_POST['email']) && !empty($_POST['email'])) {
$email_ = mysql_real_escape_string($_POST['email']);
if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email_)){
// Error - Email invalido
?>
<script>
$(document).ready(function(){
var mensaje = $('<div title="Error"><p>La dirección de e-mail que ingresó no es válida</p></div>');
mensaje.dialog( {modal: true, beforeClose: function(event, ui) { window.location.replace("forgotten.php"); } } );
});
</script>
<?php
}
else {
$query = "SELECT Username, Password FROM users WHERE EmailAddress='".$email_."'";
$result = @mysql_query ($query);
$num = mysql_num_rows ($result);
if ($num == 1) {
$row = mysql_fetch_array($result, MYSQL_NUM);
$password_ = rand(100000, 999999);
$password_crypted = md5($password_);
$query = "UPDATE users SET Password='".$password_crypted."' WHERE EmailAddress='".$row[0]."'";
$result = mysql_query ($query);
$to = $email_;
$subject = 'Reestablecimiento de contraseña';
$message = '
Su contraseña ha sido reestablecida. Se recomienda cambiarla apenas ingrese por primera vez.
------------------------
Nueva contraseña: '.$password_.'
------------------------
';
$headers= 'From:[email protected]' . "\r\n";
mail($to, $subject, $message, $headers);
//Como en el localhost (wampserver) no configure el SMTP no puedo usar la funcion mail() del php, da error, por lo que para probar la funcionalidad creo un alert box con la contraseña que se enviaría al mail
echo '<script type="application/javascript">alert("'.$password_.'")</script>';
?>
<script>
$(document).ready(function(){
var mensaje = $('<div title="Hecho"><p>La nueva contraseña ha sido enviada por e-mail.</p></div>');
mensaje.dialog( {modal: true, beforeClose: function(event, ui) { window.location.replace("index.php"); } } );
});
</script>
<?php
}
}
}
?>
<form action="forgotten.php" method="post" id="forgottenForm" name="forgottenForm" class="formulario">
<fieldset>
<p>
<label for="email">E-Mail:</label>
<input type="text" name="email" id="email"/>
</p>
</fieldset>
</form>
<div class="blankSeparator"><!-- --></div>
<a class="blueButton fl" onclick="javascript:document.forgottenForm.submit()">Enviar</a>
Las contraseñas de los usuarios las guardo encriptadas en la BD, por lo que no puedo enviarle su contraseña, sino que tengo que generarle una nueva (6 digitos numéricos) y sustituirla en la BD (en forma encriptada), y que el usuario la cambie luego. El código de arriba no funciona, el usuario sigue con su contraseña vieja.
2. Por poner un ejemplo, en el footer, tengo un formulario que recibe un email y lo pone en la lista de distribución mensual de las ofertas. Como el footer esta en todas las paginas y es el mismo, cree un archivo "footer.php" y en cada página lo llamé con:
Código:
<?php include($_SERVER['DOCUMENT_ROOT'] . "footer.php"); ?>
Hasta ahi todo correcto, en todas las paginas aparece sin problemas. Pero cuando quiero hacer uso del formulario que está dentro del footer, me lleva a footer.php en vez de quedarse en la pagina desde la cual se envió y desplegar los mensajes correspondientes en dicha página. El código de footer.php es el siguiente:
Código:
<h3>suscríbase a nuestras ofertas</h3>
<p>Ingrese su dirección de correo debajo para suscribirse. Recibirá nuestro mailing de ofertas una vez al mes.</p>
<?php
if(!empty($_POST['subscribe_email'])) {
$email = mysql_real_escape_string($_POST['subscribe_email']);
$checkemail = mysql_query("SELECT * FROM distribution WHERE EmailAddress = '".$email."'");
if(mysql_num_rows($checkemail) == 1) {
?>
<script>
$(document).ready(function(){
var mensaje = $('<div title="Error"><p>La dirección de correo ingresada ya se encuentra en nuestra lista de distribución.</p></div>');
mensaje.dialog( {modal: true, beforeClose: function(event, ui) { window.location.replace(document.history.back); } } );
;
});
</script>
<?php
}
else {
$registerquery = mysql_query("INSERT INTO distribution (EmailAddress) VALUES('".$email."')");
if($registerquery) {
?>
<script>
$(document).ready(function(){
var mensaje = $('<div title="Hecho"><p>A partir de ahora, recibirás las ofertas a tu dirección de correo una vez al mes.</p></div>');
mensaje.dialog( {modal: true, beforeClose: function(event, ui) { window.location.replace(document.history.back); } } );
;
});
</script>
<?php
}
else {
?>
<script>
$(document).ready(function(){
var mensaje = $('<div title="Error"><p>Lo sentimos, pero ha habido un problema. Inténtalo de nuevo.</p></div>');
mensaje.dialog( {modal: true, beforeClose: function(event, ui) { window.location.replace(document.history.back); } } );
;
});
</script>
<?php
}
}
}
else {
?>
<form action="footer.php" method="post" name="subscribeForm" id="subscribeForm" class="formulario">
<fieldset>
<div>
<input type="text" name="subscribe_email" id="subscribe_email" class="fl" />
<a id="newsletterSignup" class="blueButton"><img src="images/bluebutton_img.png" alt="Suscríbase" /></a>
</div>
</fieldset>
</form>
<p>
<a href="#" title="Términos de uso">Términos de uso</a>
|
<a href="#" title="Política de privacidad">Política de privacidad</a>
</p>
<?php
}
?>
3. Lo que hice hasta ahora fue crear 2 bases de datos, una de categorías de productos y otra de los productos en si. El tema es que quiero que en la pagina de catálogo (que se compone de un sidebar a la izq. y el contenido ppal. a la derecha) aparezcan las categorías de la base de datos como links en el sidebar, pero automáticamente, es decir, que yo no tenga que crear manualmente las páginas de las categorías (es más, preferiria que fuera una única página y que cambiara el contenido al ir cambiando de categoría, si es que es posible) y que si al día de mañana se agrega una categoría a la BD que se cree automaticamente en el catálogo. No se como implementar lo antes dicho.
Agradezco toda la ayuda que puedan brindarme sobre cualquiera de los 3 problemas que tengo.
Saludos!