[Resuelto] ¿Cómo enviar datos mezclando Java Script y PHP sin crear conflictos?

Iniciado por big_ed, 13 Agosto 2019, 20:32 PM

0 Miembros y 1 Visitante están viendo este tema.

big_ed

Hola  ::).

Estoy haciendo un formulario cuyos datos van a ser enviados con PHP pero "limpiados / filtrados" con Java Script. Al inicio queria hacerlo todo con PHP (se complica menos el no mezclar dos lenguajes distintos), es decir también la limpieza de datos, pero luego me di cuenta que más rápido sería primero limpiar / filtrar los datos con Java S. para luego enviarlos con PHP... Pero hacer esta mezcla me ha generado una duda y un conflicto:

1. Si ya estoy limpiando los datos con java script entonces no necesito hacerlo nuevamente con PHP, cierto?? Por lo tanto, funciones de PHP como trim(), stripslashes() y htmlspecialchars(), ya no deberian ser necesarias, correcto??? Abajo voy a poner mi codigo y veran como he limpiado los datos con js. Ademas como he limitado los caracteres extraños haciendo uso de las expresiones regulares.

2. ¿Cómo hago para meter codigo PHP en Java Script sin ocasionar conflicto? Esto es dificil de explicar asi que lo mejor sera que vean mi codigo para que entiendan lo que quiero decir...En el ultimo "else" explico esta parte:


//CODIGO HTML... MI FORMULARIO
//CODIGO HTML... MI FORMULARIO

<form method="POST">
<input type="text" name="text" maxlength />
<input type="text" name="mail" maxlength />
<input type="text" name="telf" maxlength />
<textarea name="post" ></textarea>
<input type="submit" value="Enviar Correo" maxlength />
</form>



//CODIGO JAVA SCRIPT... LA LIMPIEZA DE DATOS
//CODIGO JAVA SCRIPT... LA LIMPIEZA DE DATOS

<script>
document.forms[0].onsubmit = function () {

//recojo los valores de los campos
var text = document.forms[0]['text'].value;
var mail = document.forms[0]['mail'].value;
var telf = document.forms[0]['telf'].value;
var post = document.forms[0]['post'].value;
//creo expresiones regulares, la primera que solo permite texto, y la segunda valida un correo legitimo
var exp1 = /^[a-z\s]+$/i;
var exp2 = /^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,9}$/;

if ( text=="" || mail=="" || telf=="" || post=="" ) {
   alert( "Rellena todos los campos!" );
   return false
} else {
   if ( text.length > 50 ) {
       alert( "El campo Nombre permite un máximo de 50 caracteres!" );
       return false
   } else if ( !exp1.test( text ) ) {
       alert( "Los nombres solo deben contener letras (mayúsculas o minúsculas) y espacios!" );
       return false
   } else if ( mail.length > 30 ) {
       alert( "El campo Correo permite un máximo de 30 caracteres!" );
       return false
   } else if ( !exp2.test( mail ) ) {
       alert( "Ingresa un correo válido!" );
       return false
   } else if ( telf.length > 11 ) {
       alert( "El campo Teléfono permite un máximo de 11 caracteres!" );
       return false
   } else if ( isNaN(telf) ) {
       alert( "Ingresa un número válido! Sólo hasta 11 digitos." );
       return false
   } else {
       //AQUI DEBERIA IR EL CODIGO PHP DE ENVIO DE DATOS
       Pero todo deja de funcionar cuando aqui agrego codigo php:
             
       <?php
       
echo $_POST["text"] . '<br>';
       echo 
$_POST["mail"] . '<br>';
       echo 
$_POST["telf"] . '<br>';
       echo 
$_POST["post"] . '<br>';
       
?>

   }
}

}
</script>

@XSStringManolo

#1
Lo ideal es validar tanto en el cliente como en el servidor. Por mucho que valides en el cliente, puede usar una herramienta tipo burpsuite, webscarab o cualquier otra herramienta con proxy del estilo para obtener las cabeceras, inyectar el código antes de enviarlas y hacer forward al servidor. Asique la validación por parte del cliente sirve más bien de poco en muchos casos. Valida siempre en el servidor. Si no te gusta PHP usa node.js

Pd: Acabo de fijarme en el código que pusiste. No tiene sentido. javascript se ejecuta en el navegador en el ordenador del usuario que visita la página. PHP se ejecuta en el servidor que tendrás tú en tu casa o en un hosting. No puedes ni ejecutar PHP en el navegador, ni ejecutar javascript en el servidor. (Con node.js sí, pero entonces no usas PHP para nada.)

Si quieres pasar los datos del form desde el navegador(javascript) al servidor PHP, necesitas usar cualquiera de las distintas formas de comunicarse con el servidor con html5 o javascript. Véase sockets, xmlhttp, etc.


big_ed

Cita de: string Manolo en 13 Agosto 2019, 21:52 PM
Lo ideal es validar tanto en el cliente como en el servidor. Por mucho que valides en el cliente, puede usar una herramienta tipo burpsuite, webscarab o cualquier otra herramienta con proxy del estilo para obtener las cabeceras, inyectar el código antes de enviarlas y hacer forward al servidor. Asique la validación por parte del cliente sirve más bien de poco en muchos casos. Valida siempre en el servidor. Si no te gusta PHP usa node.js

Pd: Acabo de fijarme en el código que pusiste. No tiene sentido. javascript se ejecuta en el navegador en el ordenador del usuario que visita la página. PHP se ejecuta en el servidor que tendrás tú en tu casa o en un hosting. No puedes ni ejecutar PHP en el navegador, ni ejecutar javascript en el servidor. (Con node.js sí, pero entonces no usas PHP para nada.)

Si quieres pasar los datos del form desde el navegador(javascript) al servidor PHP, necesitas usar cualquiera de las distintas formas de comunicarse con el servidor con html5 o javascript. Véase sockets, xmlhttp, etc.



Eres la tercera persona que me dice lo mismo, que de toda formas necesito validar con php, entonces ya no voy a validar con java script, se me hace un sinsentido validar con ambos , solo es una perdida de tiempo, porque al final la que importa es la validacion del lado del server ... mejor no me hago bolas y solo uso php

#!drvy

Citarse me hace un sinsentido validar con ambos , solo es una perdida de tiempo, porque al final la que importa es la validacion del lado del server ... mejor no me hago bolas y solo uso php

Es util para evitar requests inutiles al servidor y que el usuario sepa de inmediato donde se ha equivocado. Eso si, validar con JS al final es opcional (muy útil pero opcional), validar en el servidor es obligatorio.

Saludos