Partage
  • Partager sur Facebook
  • Partager sur Twitter

Redirection après insertion sql avec AJAX

    18 janvier 2018 à 20:51:44

    Bonjour,

    j'ai crée un formulaire d'inscription ou je vérifie si mes champs son valide etc... avec AJAX, le problème est que je ne sais pas vérifier si l'adresse mail a déjà été utilisé ou si le recaptcha et valide en javasxript je l'ai donc fait dans la partie PHP, et j'aimerais donc que ça affiche un message d'erreur si le captcha n'est pas valide ou l'email est déjà prise, voici mon code:

    			if (errors == 'videivdeiv'){ 
                    $.ajax({
                        type : "POST",
                        url: $(this).attr("action"),
                        data: $(this).serialize(),
                        success : function() {
                        },
                        error: function() {
                            $("#form-reg").html("<p>Erreur d'appel, le formulaire ne peut pas fonctionner</p>");
                        }
                    });
                }

    fichier php:

     <?php
    session_start();
    
    $bdd = "censored :D" 
       
       header('Content-Type: text/html; charset=utf-8');
    
    		$secret = "6LebJy8UAAAAACRS55rp_pVAFgoAI18qNK6zfTk_";
    		// Paramètre renvoyé par le recaptcha
    		$response = $_POST['g-recaptcha-response'];
    		// On récupère l'IP de l'utilisateur
    		$remoteip = $_SERVER['REMOTE_ADDR'];
    		$api_url = "https://www.google.com/recaptcha/api/siteverify?secret=" 
    			. $secret
    			. "&response=" . $response
    			. "&remoteip=" . $remoteip ;
    		$decode = json_decode(file_get_contents($api_url), true);
    		$pseudo = htmlspecialchars(trim($_POST['pseudo'])); 
    		$password = htmlspecialchars(trim($_POST['password'])); 
    		$repeatpassword = htmlspecialchars(trim($_POST['repeatpassword'])); 
    		$email = htmlspecialchars(trim($_POST['email'])); 
    		$tel = htmlspecialchars(trim($_POST['telephone']));
    		$CGU = $_POST['CGU'];
    		$ip = $_SERVER["REMOTE_ADDR"];
    		$today = date("Y-m-d H:i:s");
    		$stmt = $bdd->prepare('SELECT COUNT(*) FROM buston_users WHERE user_email = ?');
    		$stmt->execute(array($email));
    		$stmt->closeCursor();
    	
    	
    		$stmt = $bdd->prepare('SELECT COUNT(*) FROM buston_users WHERE user_email = ?');
    		$stmt->execute(array($email));
    		$stmt->closeCursor();
    		
    		if($stmt->fetchColumn() == 0)
    		{
    			if ($decode['success'] == true) {
    				$cle = md5(microtime(TRUE)*100000);
    				$password = md5(sha1($password));
    				$insert = $bdd->prepare("INSERT INTO buston_users(user_login,user_password,user_email,user_register,user_connection,user_ip,user_lastip,user_tel,user_clef) VALUES(?,?,?,?,?,?,?,?,?)");
    				$insert->execute(array($pseudo,$password,$email,$today,$today,$ip,$ip,$tel,$cle));
    				$insert->closeCursor();
    				header("Location: ../inscription/?validate=1");
    			}else{
    				header("Location: ../inscription/?error=2");
    			}
    		}else{
    			header("Location: ../inscription/?error=1");
    		}
    
    
    
    ?>
    

    J'ai essayé avec des redirection et des variables get mais ça ne marche pas et je ne peux le mettre dans la fonction success de ajax puisque tout dépend si l'email est déjà prise ou si le captcha n'est pas valide :/

    Merci de votre aide.

    Cordialement


    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2018 à 21:16:41

      Salut,

      Tes redirects devraient pas plutôt s'écrire comme ça ?:

       if($stmt->fetchColumn() == 0)
              {
                  if ($decode['success'] == true) {
                      $cle = md5(microtime(TRUE)*100000);
                      $password = md5(sha1($password));
                      $insert = $bdd->prepare("INSERT INTO buston_users(user_login,user_password,user_email,user_register,user_connection,user_ip,user_lastip,user_tel,user_clef) VALUES(?,?,?,?,?,?,?,?,?)");
                      $insert->execute(array($pseudo,$password,$email,$today,$today,$ip,$ip,$tel,$cle));
                      $insert->closeCursor();
                      header("Location: ../inscription?validate=1");
                  }else{
                      header("Location: ../inscription?error=2");
                  }
              }else{
                  header("Location: ../inscription?error=1");
              }



      • Partager sur Facebook
      • Partager sur Twitter
        18 janvier 2018 à 22:33:16

        Bonjour,

        Tu veux rediriger la requête AJAX ou la page où se trouve le formulaire ?

        • Partager sur Facebook
        • Partager sur Twitter
          18 janvier 2018 à 23:59:37

          Bonjour, enfaite j'aimerais tous simplement afficher un message d'erreur sur la page du formulaire si le recaptcha n est pas valide ou si l'email est déjà utilisé, mais la seul solution que j'ai trouvé et de redirigée vers un page avec un variable get et apres selon la valeur de la variable afficher le message d'erreur correspondant.

          Je ne pense pas que c'est la meilleur technique je doute même que c'est possible :/ 

          C'est pour celà que je viens vous demandez si vous n'aurez pas une solution ? :D

          • Partager sur Facebook
          • Partager sur Twitter
            19 janvier 2018 à 0:11:30

            Si tu veux juste que ça arrive dans ta fonction de rappel error, suffit d'envoyer un code HTTP en 4xx pour représenter une erreur. Par exemple :

            <?php
            http_response_code(401); // Indique que la requête ne contient pas les autorisations nécessaires.

            https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP

            -
            Edité par Yovar 19 janvier 2018 à 0:11:55

            • Partager sur Facebook
            • Partager sur Twitter
              19 janvier 2018 à 9:15:28

              Oui je vois le style mais ça ne serait pas esthétique non ?

              Puisque ça changerait de page avec un gros message d'erreur, j'aimerais juste que au dessus du formulaire il y est un petit message qui me dit si le captcha est valide et si l'adresse mail est déjà utilisé x)

              • Partager sur Facebook
              • Partager sur Twitter
                19 janvier 2018 à 9:38:08

                Non, c'est la méthode la plus propre et la plus recommandée pour représenter des erreurs. Tu choisis un code HTTP adapté et tu ajoutes des détails dans le corps de la réponse. Je ne vois pas pourquoi cela ferait une redirection puisque il s'agît du résultat de la requête AJAX.
                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2018 à 12:46:45

                  Hum ok, je ne vois pas vraiment comment l,implémenté dans mon code, pouvez me donner une idée pour bien l'utiliser ? (J'ai jamais utilisé cette méthode)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Redirection après insertion sql avec AJAX

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown