Iemand die weet wat er fout gaat? Ik probeer via jQuery Validation te controleren of een email adres al bestaat. Maar krijg het niet voor elkaar.

Mijn email formulier:

<form  action="register_form.php" name="registratieformulier" method="post" id="register_form">

		<div class="regform" >
		<label for="email">Email:*</label>
		<input type="text" name="email" id="email" value="" />
		</div>
		
		<div class="regform" > 
		<input type="submit" name="register" class="b_verzenden" value="verzenden"/>
		</div>
</form>


Het script:

$().ready(function() {
	
	$.validator.methods.email_adres = function( value, element ) {
  return this.optional( element ) || /[a-z]+@[a-z]+\.[a-z]+/.test( value );
};
	$.validator.methods.lettercijf = function( value, element ) {
  return this.optional( element ) || /^[a-z0-9]+$/i.test(value);
};

	$("#register_form").validate({
			onkeyup: false, 
			ignore: ".ignore",
			rules: {
				firstname: {
					required: true,
					lettersonly: true,
					nowhitespace: true,
					minlength: 2,
					maxlength: 15,
				},
				lastname: {
					required: true,
					minlength: 2,
				},
				email: {
					email_adres: true,
					required: true,
					remote: {
                    url: "register.php",
                    type: "post",
					data: {
                    email: function() { 
                        return $("#email").val();
							}                       
                		}
					}
				},


register.php

// Check if user with that email already exists
$result = $connect->query("SELECT * FROM users WHERE email='$email'") or die($connect->error());

	// We know user email exists if the rows returned are more than 0 als het email adres niet bestaat gaat de procedure verder.
	if ( $result->num_rows > 0 )  {
		
        echo ('true');  //good to register
    }
    else
    {
        echo ('false'); //already registered
    }


Ik heb het ook nog met een apart bestandje geprobeerd ipv register.php:

if (!empty($_POST['email']))
{
    $email = $connect->real_escape_string($_POST['email']);
    $query = "SELECT ID FROM users WHERE user_email = '{$email}' LIMIT 1;";
    $results = $connect->query($query);
    if($results->num_rows == 0)
    {
        echo 'true';  //good to register
    }
    else
    {
        echo 'false'; //already registered
    }
}


Ik weet dat de register.php goed moet zijn die geeft aan of er wel of geen email bestaat zonder jQuery.

Ook heb ik alles van deze pagina geprobeerd.

Maar bij alles geen succes.
Als ik van email naar een volgend veld ga dan kan je mooi zien dat de ajax_validatemail.php wordt aangeroepen. Ik weet niet of het zo hoort of misschien wel helemaal niks zegt, maar bij antwoord blijft de uitkomst het zelfde altijd true ook al gebruik ik het zelfde email adres dat in de database staat?

<br />
<b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\validateEmail.php</b> on line <b>15</b><br />
true


En dit is er aangevraagd:

Host	
localhost
User-Agent	
Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/55.0
Accept	
application/json, text/javascript, */*; q=0.01
Accept-Language	
nl,en-US;q=0.7,en;q=0.3
Accept-Encoding	
gzip, deflate
Referer	
http://localhost/register_form.php
Content-Type	
application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With	
XMLHttpRequest
Content-Length	
15
Cookie	
PHPSESSID=eje0ncvfdqcm86ksk3sj9htp46
Connection	
keep-alive
Mis je nou niet de database-connectie?
db_connect.php wordt in het zelfde bestand opgeroepen dit is de volledige ajax_validatemail.php:

<?php
// Maak verbinding met de database
require 'db_connect.php';
// Toon alle foutmeldingen
ini_set( 'display_errors', true );
error_reporting( E_ALL | E_STRICT );

if (!empty($_POST['email']))
{
    $email = $connect->real_escape_string($_POST['email']);
    $query = "SELECT ID FROM users WHERE user_email = '{$email}' LIMIT 1;";
    $results = $connect->query($query);
    if($results->num_rows == 0)
    {
        echo 'true';  //good to register
    }
    else
    {
        echo 'fals'; //already registered
    }
}
?>
haal die ; eens weg na je LIMIT 1
Ook geen succes. Ook werkt het hele registreren niet meer zodra er remote in de validatie.js staat. Dan werkt de submit niet meer.
De submit van het formulier hoort los te staan van de controle op het mailadres via AJAX.
Ik zou eens zeggen: Kijk eens naar de request in je network-tab. Misschien worden er nog meer parameters gevraagd, dan dat je afhandelt?

Is er eventueel een testcase die ik we kunnen bekijken?
Alles is lokaal met xampp. Ik zal alles eens verwijderen en alleen het geen bewaren wat nodig is voor dit.
Ik zie wel dat de events in je code van je validatie in jQuery een event (firstname:) gebruiken binnen de rules event. Misschien dat daar iets niet klopt?

Word je ook niet wijzer uit de JavaScript Debug Console van je browser?
Ik heb nu bijna niks meer over en nog geen succes? Ik heb nu alleen nog:

register_form.php

<?php
// Maak verbinding met de database
require 'db_connect.php';
// Begin the session
session_start();
// Toon alle foutmeldingen
ini_set( 'display_errors', true );
error_reporting( E_ALL | E_STRICT );

?>
<!DOCTYPE html>
<html lang="nl-NL">
	<head>
    
  </head>

<body>
 <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>
 <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/jquery.validate.min.js"></script>
 <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/additional-methods.min.js"></script>
 <script src='https://www.google.com/recaptcha/api.js'></script>
 <script src="/js/validation.js"></script>


<h1>Registreer</h1><br /><br />
   
<form  action="register_form.php" name="registratieformulier" method="post" id="register_form">
<!-- <fieldset> -->
		

		<div class="regform" >
		<label for="email">Email:*</label>
		<input type="text" name="email" id="email" value="" />
		</div>
		
		<div class="regform" >
		<label for="password">Wachtwoord:*</label>
		<input type="password" name="password" id="password" value="" />
		</div>
		
		<div class="regform" > 
		<input type="submit" name="register" class="b_verzenden" value="verzenden"/>
		</div>
<!-- </fieldset> -->
</form>
</body>
</html>


Het validatie script validation.js

$().ready(function() {
	
	$.validator.methods.email_adres = function( value, element ) {
  return this.optional( element ) || /[a-z]+@[a-z]+\.[a-z]+/.test( value );
};

	$("#register_form").validate({
			rules: {
				email: {
					email_adres: true,
					required: true,
					remote: {
                    url: "ajax_validatemail.php",
                    type: "post",
					data: {
                    email: function() { 
                        return $("#email").val();
							}                       
                		}
					}
				},
			},
			messages: {
				email: {
					required: 'Vul een email adres in.',
					email_adres: 'Vul een geldig email adres in.',
					remote: 'Email adres bestaat al.',
				},
		},
		submitHandler: function(form)
             {
                form.submit();
             },
	});
});


en dan alleen nog ajax_validatemail.php

<?php
// Maak verbinding met de database
require 'db_connect.php';

// Toon alle foutmeldingen
ini_set( 'display_errors', true );
error_reporting( E_ALL | E_STRICT );

if (!empty($_POST['email']))
{
    $email = $connect->real_escape_string($_POST['email']);
    $query = "SELECT ID FROM users WHERE user_email = '{$email}' LIMIT 1";
    $results = $connect->query($query);
    if($results->num_rows > 0)
    {
        echo 'true';  //good to register
    }
    else
    {
        echo 'fals'; //already registered
    }
}
?>


En dan in de database een email adres dat ik exact zo overneem bij het invullen. Bij de Debug Console geeft ie niks aan van een fout ofzo. Het moet toch niet uitmaken dat het lokaal is?
Ik heb het veld wachtwoord even toegevoegd voor de tab naar een ander veld. Al doet tab naar submit het zelfde waarschijnlijk.
Krijg je nou nog steeds die Notice-melding bij het uitvoeren te zien bij het bekijken van de request van ajax_validatemail.php? En welke antwoord- en verzoekheaders worden er uitgevoerd?

Reageren