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


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  validar formulario desde servidor en PHP / Textarea
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: validar formulario desde servidor en PHP / Textarea  (Leído 290 veces)
guiamoscow

Desconectado Desconectado

Mensajes: 1


Ver Perfil
validar formulario desde servidor en PHP / Textarea
« en: 29 Diciembre 2018, 19:03 »

Buenas tardes amigos y felices fiestas.
Antes que nada quiero agradecerles por la pagina es muy buena y brinda mucha información.
No encontré mi problema en los foros por eso escribo mi pregunta aquí a ver si hayo respuesta.

Necesito validar el textarea de mi formulario, que rechace escritura de url y palabras mal sonantes como sex, porn, etc..

Por favor si me pueden dar una mano estaré muy agradecido.

Envío los codigos de formulario del php

Código del formulario
form.html

Código
  1.    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head>
  2.    <body>
  3.        <form accept-charset="UTF-8" action="https://excursiones-moscu-espanol.com/validation-send.php" method="post" target="_blank" autocomplete="off">
  4.    <div style="width: 300px;margin: auto;border:1px solid #ddd;padding: 40px;">
  5. <label for="fname"><b>¿Para qué día desea el tour?</b></label><br>
  6. <input type="date" name="fecha" required><br>
  7. <br>
  8. <label for="fname"><b>Su nombre</b></label><br>
  9. <input type="text" id="fname" name="nombre" placeholder="Su nombre.." required><br><br>
  10. <label for="lname"><b>Su Email</b></label><br>
  11. <input type="email" id="email" name="email" placeholder="Su email.." pattern="[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*@[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{1,5}" required><br><br>
  12. <label for="country"><b>¿Desde dónde nos escribes?</b></label><br>
  13. <select id="country" name="pais">
  14. <option value="Argentina">Argentina</option>
  15. <option value="Bolivia">Bolivia</option>
  16. <option value="Brasil">Brasil</option>
  17. <option value="Chile">Chile</option>
  18. <option value="Colombia">Colombia</option>
  19. <option value="Costa Rica">Costa Rica</option>
  20. <option value="Cuba">Cuba</option>
  21. <option value="Ecuador">Ecuador</option>
  22. <option value="El Salvador">El Salvador</option>
  23. <option value="España">España</option>
  24. <option value="Guatemala">Guatemala</option>
  25. <option value="Honduras">Honduras</option>
  26. <option value="México">México</option>
  27. <option value="Nicaragua">Nicaragua</option>
  28. <option value="Paraguay">Paraguay</option>
  29. <option value="Panamá">Panamá</option>
  30. <option value="Perú">Perú</option>
  31. <option value="Puerto Rico">Puerto Rico</option>
  32. <option value="República Dominicana">República Dominicana</option>
  33. <option value="Uruguay">Uruguay</option>
  34. <option value="Venezuela">Venezuela</option>
  35. <option value="Estados Unidos">Estados Unidos</option>
  36. <option value="Otro">Otro..</option>
  37. </select><br><br>
  38. <label for="country"><b>¿Cuantas personas serán?</b></label><br>
  39. <select id="country" name="personas">
  40. <option value="2">2</option>
  41. <option value="3">3</option>
  42. <option value="4">4</option>
  43. <option value="5">5</option>
  44. <option value="6">6</option>
  45. <option value="7">7</option>
  46. <option value="8">8</option>
  47. <option value="9">9</option>
  48. <option value="10">10</option>
  49. <option value="11">11</option>
  50. <option value="12">12</option>
  51. <option value="13">13</option>
  52. <option value="14">14</option>
  53. <option value="15">15</option>
  54. <option value="16">16</option>
  55. <option value="17">17</option>
  56. <option value="18">18</option>
  57. <option value="19">19</option>
  58. <option value="20">20</option>
  59. <option value="21">21</option>
  60. <option value="Mas22">Más de 22</option>
  61. </select><br><br>
  62. <label for="subject"><b>Su consulta</b></label><br>
  63. <textarea id="subject" name="mensaje" placeholder="Escribe tu mensaje.." style="height:200px" required></textarea><br><br>
  64. <input type="submit" value="Enviar consulta">
  65. </div>
  66. </form>
  67. </body>
  68. </html>

Codigo del PHP
validation-send.php

Código
  1. <?php
  2. function get_ip_address() {
  3. if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  4. $ip = $_SERVER['HTTP_CLIENT_IP'];
  5. } else {
  6.    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  7.    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  8. } else {
  9.    $ip = $_SERVER['REMOTE_ADDR'];
  10. }}
  11. return $ip;
  12. }
  13. function check_input($data)
  14. {
  15.    $data = trim($data);
  16.    $data = stripslashes($data);
  17.    $data = htmlspecialchars($data);
  18.    return $data;
  19. }
  20. if ($_POST['nospam'] != ""){
  21. // Es un SPAMbot
  22. exit("Imposible enviar la solicitud, cierre la ventana.");
  23. } else {
  24. // Es un usuario real, proceder a enviar el formulario.
  25. }
  26.  
  27. $destino = "......";
  28. $fecha = check_input($_POST['fecha']);
  29. $nombre = check_input($_POST['nombre']);
  30. $email = check_input($_POST['email']);
  31. $pais = check_input($_POST['pais']);
  32. $personas = check_input($_POST['personas']);
  33. $mensaje = check_input($_POST['mensaje']);
  34. $ip   = ' '.get_ip_address();
  35. $cont = "Enviado desde:\n https://guiamoscow.es.tl/Excursiones-Moscu-verano-2011.htm";
  36. $headers .= "Content-Type: text/html; charset = UTF-8 \n";
  37. $contenido = "CONSULTA: Moscú 1 día
  38. IP:" . $ip . "\n
  39.  
  40. Su nombre:\n " . $nombre . "\n
  41. Su email:\n " . $email . "\n
  42. Para qué fecha:\n " . $fecha . "\n
  43. Desde donde nos escribes:\n " . $pais . "\n
  44. Cuantas personas son?:\n " . $personas . "\n
  45. Mensaje del turista:\n " . $mensaje;
  46.  
  47. mail($destino,"Consulta", $contenido, $cont);
  48. header("Location:https://guiamoscow.es.tl/muchas-gracias.htm");
  49. ?>


« Última modificación: 15 Enero 2019, 13:11 por #!drvy » En línea

febef

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: validar formulario desde servidor en PHP / Textarea
« Respuesta #1 en: 8 Enero 2019, 23:02 »

Buenas

Me agarraste de con buena onda  :xD

Leete esto sobre regex en php,

visita esta pagina→ http://php.net/manual/es/function.preg-match-all.php

y desp usa este→ https://www.phpliveregex.com/p/qxq (con la función preg_match_all)


De manera que quede tu código:

Código
  1.    preg_match_all('/[a-z]+:\/\/\S+|sex|porn/', $input_texarea, $output_array)
  2.  
  3.    if (count ($output_array) > 0) {
  4.       echo "se encontraron cadenas no permitidas";
  5.    }
  6.  


Saludos!


En línea

chatiel

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: validar formulario desde servidor en PHP / Textarea
« Respuesta #2 en: 12 Enero 2019, 06:29 »

Hola guiamoscow

Lo que nuestro amigo febef quiere decir es que con la funcion "preg_match_all" o "str_replace" lo que puedes hacer es simplemente cambiar el texto por un espacio vacio.

Acá te dejo el código para que lo pongas DEBAJO de la linea "$mensaje = check_input($_POST['mensaje']);"
Esta es una opción que yo la llamé filtro.
Código:
<?php
$buscar= array("sex", "porn", "violencia");
$reemplazar= array("", "po..", "violenc");
$mensaje = str_replace($buscar, $reemplazar, $mensaje);
//by chatiel
?>

Otra opción es:
Código:
<?php
$buscar= array("sex", "porn", "violencia");
$mensaje = str_replace($buscar, "", $mensaje);
//by chatiel
?>

Adicionales:
Te recomiendo quitar el siguiente texto del primer archivo
Código:
pattern="[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*@[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{1,5}"
En HTML5 el input type="email" por defecto detecta la correcta escritura de correos.
Otra observación es que la etiqueta "<b>" es de xhtml 1.0 ahora para negritas es la etiqueta <strong>

espero que te sirva.

Suerte bro.
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.108



Ver Perfil WWW
Re: validar formulario desde servidor en PHP / Textarea
« Respuesta #3 en: 15 Enero 2019, 13:59 »

Hola,

Tu HTML tiene varios errores..

- Como ya ha comentado el compañero @chatiel, el pattern que tienes es inútil si usas un campo tipo email.
- Tienes varios nombres e ids que no corresponden con el for del label.
- Intenta no utilizar inline CSS, es feo y una mala practica (úsalo solo cuando no te queda otra).
- En vez de utilizar breaks (<br>) para espaciar, usa un div u otro contenedor.
- Si todos los label son en negrita, usa CSS para decirles que se muestren en una linea negrita.
- No deshabilites el autocomplete a no ser que tengas una razón de peso.


El PHP lo mismo:

- No te fíes de HTTP_CLIENT_IP ni de X_FORWARDED_FOR. Son simples cabeceras las cuales el cliente puede modificar desde su navegador.

- En el check_data realmente no estas comprobando nada (check..) si no que estas devolviendo un valor filtrado.

- No pones la lógica del envió del correo en el IF "anti-spam"...

- Realmente en ningún momento validas nada.


Con todo esto, me da que lo que has hecho es un copy-paste barato de algún lado...Los compañeros te han dado algunos ejemplos de como puedes buscar palabras malsonantes.. con una URL seguirías con el mismo principio..  pero.. ¿realmente necesitas eso? Por lo que veo, vas a enviar un correo sobre una consulta de viaje (probablemente a una agencia de viaje), no lo vas a exponer de manera publica ni nada parecido. Hay infinitas formas de saltarse los filtros: en vez de cabron pongo cab.ron por ejemplo, o, en vez de http://google.com pongo h t t p : / / google (punto) com... No tiene mucho sentido si no vas a exponerlo al publico.

Saludos

En línea

CHAT no oficial DEL FORO
Accede vía web, móvil o cualquier SO. >>(click aquí)<<

Respondemos dudas y tenemos barcos y p***s.
IRC: #ircehn | chat.freenode.org

https://www.youtube.com/watch?v=oqKsrSXLR98
chatiel

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: validar formulario desde servidor en PHP / Textarea
« Respuesta #4 en: 18 Enero 2019, 06:01 »

Excelente bro!
No pensé que exista otro enfermo como yo en SEO  ;-)

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Validar campo formulario web
Nivel Web
[>NeRiO<] 2 2,321 Último mensaje 1 Mayo 2010, 11:46
por [>NeRiO<]
Validar formulario PHP con JQUERY
PHP
pisagatos 3 6,636 Último mensaje 24 Julio 2010, 16:53
por pisagatos
Validar formulario con PHP
PHP
kodeone 6 5,797 Último mensaje 6 Febrero 2011, 05:18
por Castg!
Mejor forma de guardar campos de formulario (textarea) si se cierra la ventana.
PHP
Graphixx 1 2,904 Último mensaje 23 Junio 2012, 14:37
por WarGhost
[duda] campo formulario textarea?
PHP
colcrt 1 427 Último mensaje 18 Enero 2016, 14:58
por MellaSystems
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines