Well I went back to the idea I had awhile ago, I thought I'd improved enough to try it now, apparently not. I'm trying to validate a login form however I can't get the failed validation to show, I've only attempted email so far
class Login
{
private
$email,
$password,
$database,
$db = null,
$validEmail;
public function __construct()
{
$this->db = new Database;
}
public function validEmail($email)
{
return (filter_var($email, FILTER_VALIDATE_EMAIL) != self::$validEmail);
}
}
require "loadclasses.php";
$database = new Database;
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$email = $pass = "";
$post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
$email = $post['email-login'];
$pass = $post['password-login'];
$errors = array();
$fields = array(
'email' => array(
'validating' => 'validEmail',
'failed' => 'Please enter a valid email',
)
);
foreach($post as $key => $value)
{
if(isset($fields[$key]))
{
if(!Login::{$fields[$key]['validating']}($value))
{
$errors[] = ['name' => $key, 'error' => $fields[$key]['failed']];
}
}
}
if(empty($errors))
{
$success = ['response' => 'true'];
}
}
header('Content-Type: application/json');
if (empty($errors))
{
echo json_encode($success);
}
else
{
echo json_encode(["errors" => $errors]);
}
$("#login").on("submit",
function(event)
{
event.preventDefault();
$("span.error").empty()
$("span.success").empty()
$.post('loginForm.php', $(this).serialize(),
function(data)
{
if (data.fail)
{
$(".fail").append(data.fail)
}
else
if (!data.errors)
{
$(".success").append(data.message) // deal with a no-error response ( all is good)
}
else
{
$.each(data.errors,
function (i, datum)
{
console.log(data);
$("[name='" + datum.name + "']").next().html(datum.error)
})
}
}
, 'json');
});
<ul class="indexList">
<li class="logInList">
Login/Register
</li>
<li class="showLogin">
<ul>
<form method="POST" class="login-center" id="login">
<li>
<span class="fail"> </span>
</li>
<li>
<div class="form-group">
<label for='email' class="registerLabel">E-mail</label>
<input type="text" class="form-control" id="emailAddress" name="email-login" aria-describedby="emailHelp" placeholder="Enter email">
<span class="error"></span>
</div>
</li>
<li>
<div class="form-group">
<label for='password' class="registerLabel">Password</label>
<input type="password" class="form-control" id="password" name="password-login" aria-describedby="password" placeholder="Password">
<span class="error"></span>
</div>
</li>
<li>
<div class="form-check">
<input type="submit" value="Submit">
<span class="success"> </span>
</div>
</li>
</form>
<li>
<div class="form-check">
<a href="register.php">Need an account?</a>
</div>
</li>
</ul>
</li>
</ul>