Contourner les redirections PHP avec Ajax
- Accueil
- Forum
- Programmation
- JavaScript
- Contourner les redirections PHP avec Ajax
kraster Le 9 décembre 2016 à 18:34 (Édité le 25 janvier 2019 à 17:52)
Je viens de créer un formulaire de contact très simple en PHP et j'aimerai souscrire ce formulaire en Ajax sans l'actualisation de la page, le problème c'est que la partie PHP contient 2 redirections, mon code Ajax marche bien mais je veux savoir s'il y a un truck pour contourner les redirections et rester sur la meme page.
voici mes 2 codes:
<?php
$errors = [];
$nom = htmlspecialchars($_POST['nom']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
if(!array_key_exists('nom', $_POST) || $_POST['nom'] == ''){
$errors['nom'] = "Vous n'avez pas renseigné votre nom !";
}
if(!array_key_exists('email', $_POST) || $_POST['email'] == '' || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
$errors['email'] = "Vous n'avez pas renseigné un email valide !";
}
if(!array_key_exists('message', $_POST) || $_POST['message'] == ''){
$errors['message'] = "Vous n'avez pas renseigné votre message !";
}
session_start();
if(!empty($errors)){
$_SESSION['errors'] = $errors;
header('Location: ../contact.php#contactform');
} else {
$_SESSION['success'] = 1;
$to = "exemple@exemple.org";
$headers ="MIME-Version: 1.0\r\n";
$headers ='From:'.$nom.'<'.$email.'>'."\r\n";
$headers.='Content-Type:text/html; charset="UTF-8"'."\r\n";
$headers.='Content-Transfert-Encoding: 8bit';
'Reply-To: $email' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, "Form contact", $message, $headers);
header('Location: ../contact.php#contactform');
}
die();
?>
et le code Javascript:$("#contactform").submit(function(){
var action = $(this).attr('action');
var nom = $(".nom").val();
var email = $(".email").val();
var message = $(".message").val();
$('button[type="submit"]').hide().after('<img src="imgs/zZTBdeLybMk/ajaxl.gif" class="fleft inline ajaxll">');
$('button[type="reset"]').hide();
$.post(action,{
nom:nom,
email:email,
message:message
},function(){
$(".message").html(data);
$('.ajaxll').fadeOut();
$('button[type="submit"]').fadeIn();
$('button[type="reset"]').fadeIn();
});
return false;
});
TheOldNoob Le 10 décembre 2016 à 09:20 (Édité le 1 janvier 1970 à 01:00)
Tu peu utilisé les boleen pour faire ça, et du coup, pas besoin d'ajax.
En gros, tu défini une variable au début de ton php :
$showReponse = false
Tu fait ton php avec vérification de ton formulaire de façon classique et dans ton envois a la bdd juste après tu ajoute une ligne qui change ta valeur boleen false en true.
Puis dans ton formulaire de réponse html tu l'englobe dans un if (showReponse) ...
En gros, au début ton formulaire est visible mais la réponse ne l'ai pas, mais si le formulaire est correctement envoyer en bdd, ta réponse apparaîtra. Dans se même principe, tu peu aussi caché le formulaire après envoie en bdd 😀
kraster Le 11 décembre 2016 à 21:18 (Édité le 11 décembre 2016 à 21:20)
TheOldNoob Le 12 décembre 2016 à 00:07 (Édité le 13 décembre 2016 à 21:37)
$showFormulaire = false// de base il est donc visible
$showReponse = false // de base il est caché
// Blablabla toute tes vérification de formulaire
/// Si envoie correcte du formulaire dans la base de donné alors
$showFormulaire = true // on le cache
$showReponse = true // On l'affiche
Puis on arrive au objets qu e lon veux caché ou afficher en fonction des événements
if ($showFormulaire == false) { // Donc si le formulaire est sur false, il est afficher mais si après validation de l'envoie en bdd il passe sur true, il sera donc caché
Tout ton formulaire ici
}
if ($showReponse == true) { // On affiche la reponse si la variable passe sur true
Ta reponse ici même
}
Dans se principe même on peu créer une variable $error = array(); qui pourra contenir tes erreur ainsi qu'une variable $showError = false qui lorsqu'elle passera a true en cas d'erreur, affichera tes erreurs 😀 kraster Le 13 décembre 2016 à 19:42 (Édité le 1 janvier 1970 à 01:00)