Estoy aprendiendo a usar ajax para verificar si los datos de correo electrónico registrados ya existen en el sistema. Pero cuando se usa, el resultado devuelto por success:function(data) es siempre el código fuente de la página php original (como se muestra en la imagen a continuación). Aquí está mi código javascript
$(document).ready(function(){ $("#email").change(function(){ $.ajax({ URL: "process-email.php", type: "post", data: {email:$(this).val()}, success:function(res) { console.log(res); } }) }) })Este es el destino para el procesamiento de datos.
<?php include "config/config.php"; $result = mysqli_query($conn,"SELECT * FROM tb_user WHERE email='" . $_POST['email'] . "'"); if(mysqli_num_rows($result) <= 0) { echo "OK."; }else{ echo "Already exist."; } ?>Y aquí están los datos enviados a mi sitio principal.
Hay alguna manera de arreglarlo? ¡Gracias a todos!
Todavía no me queda claro si la solicitud AJAX se envía a la misma página, pero independientemente de lo siguiente, podría ser de ayuda, ya que aborda un par de puntos, a saber, la posibilidad de inyección de sql, el vaciado de búferes para garantizar que solo se se envía una respuesta elaborada y también que no se envía ninguna solicitud a menos que haya un correo electrónico válido.
<?php if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_POST['email'] ) ){ # flush any previous content ob_clean(); include "config/config.php"; /* Create a Prepared Statement Bind the placeholder to the POSTed email & execute. Obtain the number of rows returned & close statement. */ $sql='SELECT * FROM tb_user WHERE email=?'; $stmt=$conn->prepare( $sql ); $stmt->bind_param('s',$_POST['email']); $stmt->execute(); $stmt->store_result(); $rows=$stmt->num_rows; $stmt->free_result(); $stmt->close(); # terminate with response message exit( $rows == 0 ? 'OK.' : 'Already exists.' ); } ?>Función de validación de correo electrónico
const validateEmail=( email )=>{ return String( email ) .toLowerCase() .match( /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ ); }; $(document).ready(function(){ $("#email").change(function(){ let email=$(this).val(); if( validateEmail( email ) ){ /* No point sending the ajax request unless the email is valid. */ $.ajax({ URL: "process-email.php", type: "post", data:{ 'email':email }, success:function(res) { console.log(res); } }) } }) })