Partage
  • Partager sur Facebook
  • Partager sur Twitter

XMLHttpRequest php récupération des echo en data

    10 mai 2022 à 16:09:16

    Bonjour ,

    Je suis débutant et je fais mon premier site web en PHP et MVC et je fais un système de login et inscription et j'aimerai récupérer mes echo "Username already taken"; etc et les afficher sans ouvrir une autre page , j'utilise donc XMLHttpRequest .

    const form = document.querySelectorAll(".form-container form");
    const continueBtn = document.querySelectorAll(".login-connect");
    const errorText = document.querySelectorAll(".error-message");
    
    
    for (let i = 0; i < form.length; i++) {
    	form[i].onsubmit = (e)=> {
    		e.preventDefault();
    	}
    }
    
    for (let i = 0; i < continueBtn.length; i++) {
    	continueBtn[i].addEventListener("click", function() {
    
    		let xhr = new XMLHttpRequest();
    		
    		xhr.open("POST", "../../index.php", true);
    		
    		xhr.onreadystatechange = function() {
    		    if (this.readyState == 4 && this.status == 200) {
    
    		       let data = this.responseText;
    
    					if(data == "success") {
    						location.href = "../../view/frontend/home.php"
    					}
    					else {
    						for (let i = 0; i < errorText.length; i++) {
    							errorText[i].textContent = data;
    							errorText[i].style.display = "block";
    							
    						}
    					}
    		    }
    		};
    		
    
    		let formData = new FormData(form[i]);
    		xhr.send(formData);
    
    
    
    	});
    }

    Je renvoie le POST a mon index.php qui contient ma class controler qui lui même contient les class model : 

    mon index est celui quand mon form transmettais les $_POST a mon home.php?action=register

    maintenant que j'utilise xmlHttpRequest je ne sais pas comment écrire mon index

    <?php 
    
    require_once(__DIR__ .'/controler/Controler.php');
    
    	if(isset($_GET['action'])) {
    
    		if ($_GET['action'] == 'register') {
    			registerAccount($_POST['username'], $_POST['email'], $_POST['password'], $_POST['passwordConfirm']);
    					
    		}
    
    		if ($_GET['action'] == 'loged') {
    			logUser($_POST['email'], $_POST['password']);	
    		}
    
        }
    
    
    	else {
    		homePage();
    	}
    

    ma class model : 

    public function signupUser($username, $email, $password, $passwordConfirm) {
    
    
    		if($this->emptyInput($username, $email, $password, $passwordConfirm) == false) {
    			
    			echo "Please enter all input field";
    			exit();
    						
    		}
    
    		if($this->checkUsername($username) == false) {
    			echo "Username already taken";
    			exit();
    			
    		}
    
    		if($this->checkEmail($email) == false) {
    			echo "Email already taken";
    			exit();
    			
    		}
    
    		if($this->passwordConfirm($password, $passwordConfirm) == false) {
    			echo "Password dont match";
    			exit();
    			
    		}
    
    		$this->postUser($username, $email, $password); 
    
    	
    	}
    }

    et mon controler : 

    <?php 
    
    require_once("C:/MAMP/htdocs/ProjetSheep/model/SignupManager.php");
    require_once("C:/MAMP/htdocs/ProjetSheep/model/LoginManager.php");
    
    function homePage() {
    
    header('Location: view/frontend/home.php');
    }
    
    // REGISTER ACCOUNT
    
    function registerAccount($username, $email, $password, $passwordConfirm) {
    	$accountManager = new AccountManager();
    
    	$signupUser = $accountManager->signupUser($username, $email, $password, $passwordConfirm);
    
    	if ($signupUser === false) {
    		echo "Fail to signup";
    		exit();		
    	}
    
    	else {
    		header('Location: view/frontend/home.php');
    	}
    }
    
    // LOGIN USER
    
    function logUser($email, $password) {
    	$loginManager = new LoginManager();
    
    	$logedUser = $loginManager->getUser($email, $password);
    
    	if($logedUser === false) {
    		echo "Fail to login";
    		exit();		
    	}
    
    	else {
    		header('Location: view/frontend/home.php');
    	}
    	
    }

    J'aimerai que quand un utilisateur entre un nom d'utilisateur qui existe déja , que mon echo "Username already taken" s'affiche dans ma class errorText sauf que je ne sais pas comment écrire mon index car quand je l'écrit comme cela si je suis sur la page home.php cela fonctionne 

    <?php 
    
    require_once(__DIR__ .'/controler/Controler.php');
    
    	
    	
    			registerAccount($_POST['username'], $_POST['email'], $_POST['password'], $_POST['passwordConfirm']);
    					
    		
    		
    homePage();
    

    mais si je vais sur mon index.php je recois :

    une page blanche avec :


    Warning: Undefined array key "username" in C:\MAMP\htdocs\ProjetSheep\index.php on line 7

    Warning: Undefined array key "email" in C:\MAMP\htdocs\ProjetSheep\index.php on line 7

    Warning: Undefined array key "password" in C:\MAMP\htdocs\ProjetSheep\index.php on line 7

    Warning: Undefined array key "passwordConfirm" in C:\MAMP\htdocs\ProjetSheep\index.php on line 7
    Please enter all input field

    et si j'écrit mon index.php comme cela :

     <?php 
    
    require_once(__DIR__ .'/controler/Controler.php');
    
    homePage();
    	
    	
    			registerAccount($_POST['username'], $_POST['email'], $_POST['password'], $_POST['passwordConfirm']);

    j'ai bien ma page home qui s'affiche mais si j'envoie mon formulaire je recois tout mon html en data et pas "Username already taken" :

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"/> <title>ProjetSheep</title> <link href="https://fonts.googleapis.com/css2?family=Play&display=swap" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="../../public/css/template.css"> <link rel="stylesheet" type="text/css" href="../../public/css/header.css"> <link rel="stylesheet" type="text/css" href="../../public/css/footer.css"> <link rel="stylesheet" type="text/css" href="../../public/css/home.css"> <link rel="stylesheet" type="text/css" href="../../public/css/loginbtn.css"> <script src="../../public/js/nav.js" defer></script> <script src="../../public/js/login.js" defer></script> </head> <body> <header> <div id="container_header"> <div class="start"> <div id="logo_container"> <a href=""><img src="../../public/images/28x28.png" alt="logo site"></a> </div> </div> <div class="mobile-nav-toggle" aria-controls="center" aria-expanded="false"> <svg class="hamburger-mobile-svg" data-visible="true" xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="#FFFFFF" class="bi bi-list" viewBox="0 0 16 16"> <path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/> </svg> <svg class="close-mobile-svg" data-visible="false"

    j'ai pas tout écrit voici ce que j'obtiens en réponse .

    Je suis bloqué je ne sais pas comment afficher "Username already taken" sur ma page home.php quand on appuye sur le boutton s'enregistrer cela ouvre mon formulaire sur la même page avec du JS mais je ne sais pas comment faire pour afficher mes erreurs sur cette même page sans ouvrir une autre page .

    Je ne sais pas comment écrire mon index.php correctement..

    J'ai modifier mon index en 

    <?php 
    
    require_once(__DIR__ .'/controler/Controler.php');
    
    if ($_POST['submit']) {
    	registerAccount($_POST['username'], $_POST['email'], $_POST['password'], $_POST['passwordConfirm']);
    }
    	
    	
    			
    					
    else  {
    	homePage();
    }		
    		
    

    mais j'ai toujours tout mon html qui s'écrit et dans le network de mon index je recois status code 302 Found et en réponse je recois :

    Failed to load response data : No content avalaible because this request was redirected.

    Si quelqu'un a la solution merci bien :)

    J'ai besoin de votre aide.

    Merci !



    -
    Edité par GaëtanEtame 10 mai 2022 à 16:58:24

    • Partager sur Facebook
    • Partager sur Twitter

    XMLHttpRequest php récupération des echo en data

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown