elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  ¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)  (Leído 3,946 veces)
Cergath


Desconectado Desconectado

Mensajes: 340



Ver Perfil
¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)
« en: 23 Septiembre 2009, 18:35 pm »

Pues miren:

Empiezo por crear la DB en phpmyadmin normal, le puse "Suscritos" y ejecuté la consulta:

Citar
CREATE TABLE `tabla_boletin` (
`id` bigint(20) NOT NULL auto_increment,
`email` varchar(100) NOT NULL default '',
`fecha` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) TYPE=MyISAM AUTO_INCREMENT=1;

Todo bien, ahora la página para suscribir, que es un cuadro tonto que pide el email y en seguida te pone en la DB, o bien te elimina poniendo el correo.

Código
  1. <?php
  2. if($seguro_del) {
  3. include("conexion.php");
  4. $result = @mysql_query("SELECT email FROM `tabla_boletin` WHERE `email` LIKE ' $email '");
  5. if(mysql_num_rows($result) != 0) {
  6. $sql = @mysql_query("DELETE FROM `tabla_boletin` WHERE `email`=' $email '");
  7. $msg = " El correo electr?nico se ha removido, no recibir? nuestras novedades. ";
  8. } else {
  9. $msg = " El email que solicitaste para darlo de baja no existe en la base de datos. ";
  10.  
  11. } } elseif($seguro_ins) {
  12. include("conexion.php");
  13. $sql = "SELECT email FROM `tabla_boletin` WHERE `email` LIKE ' $email '";
  14. $result = mysql_query($sql);
  15. if(mysql_num_rows($result) != 0) { $msg = " El email que indicaste para la suscripci?n ya se encuentra registrado en la base de datos. "; } else {
  16. if (!ereg("^[^@]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,}$", $email)) { $msg =" Tu correo electr?nico no existe o esta mal escrito. "; } else {
  17. $fecha = date("Y/n/d H:i:s");
  18. $sql = "INSERT INTO `tabla_boletin` SET `email`=' $email ', `fecha`=' $fecha '";
  19. $result = mysql_query($sql);
  20. $msg = " La suscripci?n fue un ?xito, recibir?s las novedades de nuestro sitio. ";
  21. } } }
  22. ?>
  23. <html>
  24. <head>
  25. <title>Suscribir al bolet?n</title>
  26. </head>
  27. <body>
  28. <div align="center">
  29. <?php if($msg) { ?>
  30. <table width="100%" border="0" cellspacing="5" cellpadding="0">
  31. <tr>
  32. <td><div align="center" class="texto_gral"><?=$msg;?></div></td>
  33. </tr>
  34. <tr>
  35. <td><div align="center"><a href="javascript:window.close()"><strong>cerrar ventana</strong></a></div></td>
  36. </tr>
  37. </table>
  38. <? } else { ?>
  39. <form action="suscripcion.php" method="post" name="" id="">
  40. <table width="200" border="0" cellspacing="2" cellpadding="0">
  41. <tr>
  42. <td><input name="email" type="text" id="email" value="tu correo electr&oacute;nico" size="25">
  43. </td>
  44. </tr>
  45. <tr>
  46. <td> <div align="right">
  47. <input name="seguro_ins" type="submit" id="seguro_ins" value="suscr?bete">
  48. <input name="seguro_del" type="submit" id="seguro_del" value="desinscribir">
  49. </div></td>
  50. </tr>
  51. </table>
  52. </form>
  53. <? } ?>
  54. </div>
  55. </body>
  56. </html>

¿Va bien verdad?,
ahora fíjense en la parte de Include (al principio), pide el archivo Conexion.php que lo tengo así:

Código
  1. <?
  2. $link=mysql_connect("localhost", "root", "lalolanda");
  3. mysql_select_db("suscritos",$link) OR DIE ("Error: Imposible Conectar");
  4. ?>

¿Esta bien no?... cuando corro el script no me sale error, pero a la hora de poner el email y dar en Suscribir, puf, no pasa nada en la DB, no queda el registro....




Adjunto el fichero para enviar el email en html:
Código
  1. <html>
  2. <head>
  3. <title>Sistema de bolet?n :: Env?o de emails</title>
  4. </head>
  5. <body>
  6. <?
  7. if($seguro_env) {
  8. include("conexion.php");
  9. $sql = mysql_query("SELECT * FROM `tabla_boletin`");
  10. $n = 1;
  11. while($row = mysql_fetch_array($sql)) {
  12. $asunto ="Bolet?n NO.1";
  13. $headers = "MIME-Version: 1.0\r \n";
  14. $headers .= "Content-type: text/html; charset=iso-8859-1\r \n";
  15. $headers .= "From: \"Bolet?n de Dise-web\" <boletin@dise-web.com>\r \n";
  16. if(!$mensaje) { echo "No haz escrito el bolet?n!"; } else {
  17. mail("".$row["email"]."","$asunto","$mensaje\n\n","$headers");
  18. echo "<div>".$n++.". Enviado email a <b>".$row["email"]."</b><br></div>";
  19. }
  20. }
  21. } else {
  22. ?>
  23. <form action="enviarboletin.php" method="post" name="" id="">
  24. <table width="100%" border="0" cellspacing="1" cellpadding="0">
  25. <tr>
  26. <td><font size="4" face="tahoma, Arial, verdana"><strong>Puedes usar HTML
  27. para el bolet&iacute;n.</strong></font></td>
  28. </tr>
  29. <tr>
  30. <td><textarea name="mensaje" cols="50" rows="5" id="mensaje"></textarea></td>
  31. </tr>
  32. <tr>
  33. <td><input name="seguro_env" type="submit" id="seguro_env" value="Enviar"></td>
  34. </tr>
  35. </table>
  36. </form>
  37. <? } ?>
  38. </body>
  39. </html>

Muchas gracias, espero ayuda...


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: ¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)
« Respuesta #1 en: 23 Septiembre 2009, 20:45 pm »

El problema lo tienes en la sentencia LIKE, fijate que no es lo mismo poner
Código
  1. $result = @mysql_query("SELECT email FROM `tabla_boletin` WHERE `email` LIKE ' $email '");

a poner
Código
  1. $result = @mysql_query("SELECT email FROM `tabla_boletin` WHERE `email` = '$email'");

like da una aproximación o sea algo que contenga eso pero puede retornar muchos resultados, si quieres algo exacto usa el signo igual.

Otro detalle es que si usas like de seguro no tienes ningún email que comienze con un espacio en blanco ni termmine con uno también asi que o le sacas esos espacios en blanco en like o le pones el signo porcentage %palabra% ya que porcentage es comodín y significaría que pueda comenzar por lo que sea y termine en lo que sea pero que contenga palabra, si le pones espacio en blanco + palabra + espacio en blanco estarás buscando todos los mails que comienzen y terminen en un espacio en blanco y que además puedan contener la palabra y por eso no te devuelve resultados.

Fijate en tu phpmyadmin y fabrica la query así:
$sql = 'select * from ....'
después vas y haces un echo $sql; tomas lo que te muestre y lo pegas en tu phpmyadmin y verás el problema.

También puedes sacarle las arrobas para que te muestre si hay algún error en la función porque así vas a ciegas.

Otra cosa, utiliza http://cl2.php.net/mysql_real_escape_string para evitar las inyecciones sql
Código
  1. if(!$result = mysql_query("SELECT email FROM `tabla_boletin` WHERE `email` = '".mysql_real_escape_string($email)."'")
  2. die('Error en la query.');

Ahora, si quieres saber la cantidad de mails que concuerden puedes usar count()

Código
  1. if(!$result = mysql_query("SELECT count(id) FROM `tabla_boletin` WHERE `email` = '".mysql_real_escape_string($email)."'")
  2. die('Error en la query.');

Te devolverá una columna llamada 'count(id)' con la cantidad de mails que concuerden con el criterio.


« Última modificación: 23 Septiembre 2009, 20:48 pm por WHK » En línea

Cergath


Desconectado Desconectado

Mensajes: 340



Ver Perfil
Re: ¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)
« Respuesta #2 en: 23 Septiembre 2009, 21:02 pm »

Gracias por los consejos!, ya los implementé.

Sin embargo el script nada que me pone los registros en la base de datos, colocas el email, clic en suscribir y nada... :-\
En línea

miguel86

Desconectado Desconectado

Mensajes: 258


Ver Perfil
Re: ¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)
« Respuesta #3 en: 27 Septiembre 2009, 20:52 pm »

Vete paso por paso, comprobando cada consulta si da resultado, fijate en el fondo de tu página ya que el mensaje en el die si tienes un fondo oscuro no lo verás, coge tu php copia la consulta y la pegas en la parte sql del Mysql (Phpmyadmin) para comprobar que no tiene errores de sintaxis y si funcionan dilo y te miramos la semántica (pero antes mira la sintaxis ya que eso corre de tu cuenta no quieras que te miramos todas las sentencias y te las corrijamos).
Cuando lo hayas hecho y hayas comprobado de arriba a abajo cada sentencia habrás dado con la sentencia que te da el problema, colócala y te la corregimos. O al menos pon la salida que te da de colocar las sentencias de la primera a la última en el orden que van al probarlas en el phpmyadmin.
Salu2
« Última modificación: 27 Septiembre 2009, 20:54 pm por miguel86 » En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: ¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)
« Respuesta #4 en: 29 Septiembre 2009, 02:02 am »

No puedo ayudarte en abundancia, ya que el error puede ser variado... haz considerado revisar los logs que genera Apache respecto a esto? generalmente cuando tengo un fallo en algo de php o un cgi de perl o viceversa y no se donde esta el error, voy a los logs de error de Apache y alli me instruyo mas sobre que esta pasando  ;)  mira ver si te funciona.
En línea

Embusterillo de bolsillo


Desconectado Desconectado

Mensajes: 1.333


Yo-jo Yo-jo Un Pirata Yo Soy ♫♫


Ver Perfil
Re: ¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)
« Respuesta #5 en: 4 Octubre 2009, 01:38 am »

Cergath, es simple:

No hace el registro porque la acción del formulario es redirigirse a si mismo más no a las variables, no es lo mismo:
<form action="suscripcion.php" method="post" name="" id="">

Que:
<form action="<?php $_SERVER['PHP_SELF']?>" method="post" name="" id="">

Saludos!

Edit PD: de igual manera haz lo que te dijo WHK, más ahora si te hará el registro en la DB.
« Última modificación: 4 Octubre 2009, 01:43 am por Danfelbm » En línea

Absence makes the heart grow fonder.
Eru Iluvatar

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Re: ¿Que estoy haciendo mal?... (Sistema newsletter, problema al conectar a la DB)
« Respuesta #6 en: 4 Octubre 2009, 20:25 pm »

El problema lo tienes en la sentencia LIKE, fijate que no es lo mismo poner
Código
  1. $result = @mysql_query("SELECT email FROM `tabla_boletin` WHERE `email` LIKE ' $email '");

a poner
Código
  1. $result = @mysql_query("SELECT email FROM `tabla_boletin` WHERE `email` = '$email'");

like da una aproximación o sea algo que contenga eso pero puede retornar muchos resultados, si quieres algo exacto usa el signo igual.

Otro detalle es que si usas like de seguro no tienes ningún email que comienze con un espacio en blanco ni termmine con uno también asi que o le sacas esos espacios en blanco en like o le pones el signo porcentage %palabra% ya que porcentage es comodín y significaría que pueda comenzar por lo que sea y termine en lo que sea pero que contenga palabra, si le pones espacio en blanco + palabra + espacio en blanco estarás buscando todos los mails que comienzen y terminen en un espacio en blanco y que además puedan contener la palabra y por eso no te devuelve resultados.

Fijate en tu phpmyadmin y fabrica la query así:
$sql = 'select * from ....'
después vas y haces un echo $sql; tomas lo que te muestre y lo pegas en tu phpmyadmin y verás el problema.

También puedes sacarle las arrobas para que te muestre si hay algún error en la función porque así vas a ciegas.

Otra cosa, utiliza http://cl2.php.net/mysql_real_escape_string para evitar las inyecciones sql
Código
  1. if(!$result = mysql_query("SELECT email FROM `tabla_boletin` WHERE `email` = '".mysql_real_escape_string($email)."'")
  2. die('Error en la query.');

Ahora, si quieres saber la cantidad de mails que concuerden puedes usar count()

Código
  1. if(!$result = mysql_query("SELECT count(id) FROM `tabla_boletin` WHERE `email` = '".mysql_real_escape_string($email)."'")
  2. die('Error en la query.');

Te devolverá una columna llamada 'count(id)' con la cantidad de mails que concuerden con el criterio.

cergath, necesito un sistema como estos, espero que no te moleste si lo uso!...
oye,
y esto donde lo coloco?
Código
  1. if(!$result = mysql_query("SELECT count(id) FROM `tabla_boletin` WHERE `email` = '".mysql_real_escape_string($email)."'")
  2. die('Error en la query.');
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema haciendo una busqueda y replazo con VB Script
Scripting
Gallusser 3 4,396 Último mensaje 11 Enero 2011, 17:01 pm
por Novlucker
estoy haciendo estadisticas y tengo problema
PHP
tecasoft 2 2,123 Último mensaje 28 Septiembre 2011, 16:32 pm
por tecasoft
estoy haciendo una programa con archivo en tengo problema con la parte de consul
Programación C/C++
swagger14 0 1,944 Último mensaje 5 Diciembre 2011, 17:44 pm
por swagger14
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines