[Résolu] impossible d’aller dans un if même si la condition est remplie

  • WordPress :4.7
  • Statut : résolu
7 sujets de 1 à 7 (sur un total de 7)
  • Auteur
    Messages
  • #1616988
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    Bonjour,

    Ma configuration WP actuelle (wordpress 4.7.1)

    • Version de PHP/MySQL : PHP 5.6.30
    • Thème utilisé : le mien déduit du thème enfold
    • Extensions en place : gravity form, Yoast SEO
    • Nom de l’hébergeur : STRATO
    • Adresse du site :

     

    Problème(s) rencontré(s) :

    Bonjour,

    j’ai la fonction suivante qui permet de verifier qu’un utilisateur se logue.

    add_filter( "gform_field_validation_124", "login_validate_field_124", 10, 4 );
    function login_validate_field_124($result, $value, $form, $field) {
    // make sure this variable is global
    	global $user;
    	// validate username
    	if ( $field['cssClass'] === 'benutzername' ) {
    		$user = get_user_by( 'login', $value );
    		if ( empty( $user->user_login ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid username provided.";
    		}
    	}
    		
    	// validate pass
    	if ( $field['cssClass'] === 'passwort' ) {
    		if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid password provided.";
    		}
    	    }	
    	
    		$user_role = array_shift($user->roles);
    		if ($user_role !== 'mitglieder_partnerlieferanten' ) 
    		 {	
    				if ($user_role == 'mitglieder_mitglieder' ) 
    				{
    					$admission = $user->usermitglieder_admission;
    					
    				}
    				if ($user_role == 'mitglieder_partnerorganisationen' ) 
    				{
    					$admission = $user->userpartnerorga_admission;
    				}
    				if ($user_role == 'administrator' ) 
    				{
    					$admission = ja;
    				}
    				// AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrator = admis direct)
    			   //if (($admission == 'ja' ) || ($user_role == 'administrator' ) )
    				//{
    				//return $result;
    				//}
    				//if (($user_role == 'administrator') || (2>3)) // ne fonctionne pas
    				//if ((1<2) || (2>3))                      //  MARCHE 
    			    //if ($user_role == administrator )       // ne fonctionne pas
    				//if ($user_role == "administrator" )     // ne fonctionne pas
    				//if (strcmp($admission, 'ja') !== 0  )   // ne fonctionne pas
    				if (strcmp($admission, 'ja') !== 0  )
    				{
    					return $result;
    				}
    				else
    				{
    				echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
    				}
    				
    		 }
    			else
    		 {
    		 echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden ");
    		 </script>';
    		}
    	// FIN AJOUT 
    }	

    Tout se passe au niveau du test  if (strcmp($admission, ‘ja’) !== 0  )

    La variable $admission est bien égale à ‘ja’ quand je la fais afficher juste avant….mais je ne rentre pas dans la condition et le user ne se loggue pas.

    A savoir que quand je fais afficher la variable avec un echo juste avant, ça fait planter aussi le programme, et le user ne se loggue pas.

    Quand je ne met pas cette condition, il n’y a pas de problème.

     

    aurais je fait une erreur dans l’écriture de la condition ?

    je ne comprends pas….. il y a des choses bizarre qui se passe comme le plantage lors de l’affichage par echo…

     

    merci pour votre aide par avance…..j’en ai besoin….je ne comprend pas et je ne vois plus rien…

    #1617005
    davdino
    Participant
    Padawan WordPress
    55 contributions

    Bonjour,

    Pourquoi ne pas faire directement ces tests-ci ?

    if ($user_role == 'administrator' ) 
    {
     return $result;
    }
    else
    {
     echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
    }

     

    Sinon, si tu veux garder la logique actuelle :

    remplacer <span class=”token variable”>$admission</span> <span class=”token operator”>=</span> ja<span class=”token punctuation”>;  par <span class=”token variable”>$admission</span> <span class=”token operator”>=</span> ‘ja’;</span>

    et if <span class=”token punctuation”>(</span><span class=”token function”>strcmp</span><span class=”token punctuation”>(</span><span class=”token variable”>$admission</span><span class=”token punctuation”>,</span> <span class=”token string”>’ja'</span><span class=”token punctuation”>)</span> <span class=”token operator”>!==</span> <span class=”token number”>0) par <span class=”token punctuation”>(</span><span class=”token variable”>$admission==</span><span class=”token string”>’ja'</span><span class=”token punctuation”>)</span></span>

     

    #1617007
    davdino
    Participant
    Padawan WordPress
    55 contributions

    Je le refais :

    if ($user_role == 'administrator' ) 
    {
    	$admission = 'ja';
    }
    // et
    
    if ($admission=='ja')
    {
    return $result;
    }
    else
    {
    echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
    }

    #1617081
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    merci beaucoup Davdino pour tes conseils…..

    Si j’impose $admission juste avant, il me met quand même “Sie sind nicht Miglieder”

    $admission = 'ja';
                    if (strcmp($admission, 'ja') !== 0  )
                    {
                        return $result;
                    }
                    else
                    {
                    echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
                    }

    j’ai testé avec

    				$admission = 'ja';
    				if ($admission=='ja')
    				{
    					return $result;
    				}
    				else
    				{
    				echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
    				}

    là ça fonctionne … je l’avais déjà testé mais sans même $admission = ‘ja’; juste avant…
    En fait, il semblerait que c’est la condition if ($user_role == ‘administrator’ )  qui ne fonctionne pas…..
    et quand je regarde dans le user, c’est bizarre car

    [“roles”]=> array(0) { }

    pourtant c’est un role de wordpress….. je ne vois pas pourquoi il est vide !

    hummmm je continue à chercher….

    #1617591
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    en fait il fallait séparer les conditions de la fonction de validation , soit créer une nouvelle fonction qui teste  les données de connexion :

    /*Gform after submission hook*/
    add_action( 'gform_after_submission_124', 'login_form_after_submission_124', 10, 2 );
    function login_form_after_submission_124($entry, $form) {
    	// get the username and pass
    	$username = $entry[1];;
    	$pass = $entry[2];;
    	$creds = array();
    		
    	// create the credentials array
    	$creds['user_login'] = $username;
    	$creds['user_password'] = $pass;
    	
    	// sign in the user and set him as the logged in user
    	$user = wp_signon( $creds );
    	wp_set_current_user( $user->ID );
    }
    
    
    /*Gform field validation hook*/
    add_filter( 'gform_field_validation_124', 'login_validate_field_124', 10, 4 );
    function login_validate_field_124($result, $value, $form, $field) {
    // make sure this variable is global
    	global $user;
    	// validate username
    	if ( $field['cssClass'] === 'benutzername' ) {
    		$user = get_user_by( 'login', $value );
    		if ( empty( $user->user_login ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid username provided.";
    		}
    	}
    	// validate pass
    	if ( $field['cssClass'] === 'passwort' ) {
    		if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid password provided.";
    		}
    	}	
    	return $result;
    		
    }	
    
    
    add_filter('gform_validation_124', 'msk_gform_user_registration_validation');
    function msk_gform_user_registration_validation($validation_result){
    	global $user;
    	
    	$form = $validation_result['form'];
    	$user_id = $user->ID;
    	$user1 = get_userdata( $user_id );
    	$user_role = array_shift($user1->roles);
    	
    	if ($user_role != 'mitglieder_partnerlieferanten'  )
    	 {
    				if ($user_role == 'mitglieder_mitglieder' ) 
    				{
    					$admission = $user->usermitglieder_admission;
    					
    				}
    				if ($user_role == 'mitglieder_partnerorganisationen' ) 
    				{
    					$admission = $user->userpartnerorga_admission;
    				}
    				
    				// AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrato = admis direct)
    			   if (($admission == 'ja' ) OR ($user_role == 'administrator' ))
    				{
    				}
    				else
    				{
    				echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
    				}
    	}
    	else
    	{ 
    		/*$validation_result['is_valid'] = false;
    		$field['failed_validation'] = true;
    		$field['validation_message'] = 'Sie können nur in Lieferantenbereich anmelden!';*/
    		echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden ");
    		 </script>';
    	}
    	$validation_result['form'] = $form;
    	return $validation_result;
    }
    
    /* déconnexion */
    function wpa_remove_menu_item( $items, $menu, $args ) {
        if ( is_admin() || ! is_user_logged_in() ) 
            return $items;
    		
        foreach ( $items as $key => $item ) {
            if ( 'Abmelden' == $item->title ) {
                $items[$key]->url = wp_logout_url('http://www.kmuzentrale.de');
            }
        }
        return $items;
    }
    add_filter( 'wp_get_nav_menu_items', 'wpa_remove_menu_item', 10, 3 );

     

    #1617593
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    la fonction

    <code class=" code-embed-code language-php"><span class="token string">gform_field_validation</span> est parcourue 2 fois, ce qui fait que cela posait des problèmes au niveau de la récupération de données 
    comme
    <code class=" code-embed-code language-php"><span class="token variable">$user_role  qui était rempli au premier tour mais vide au deuxième.....
    D'où extraire les conditions de tests afin de ne parcourir qu'une seule fois la fonction avec les tests.
    
    resolu !
    </span>
    #1617595
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    ouh la… ça a fait un schmilblick…

     

    je disais la fonction gform_field_validation est parcourue 2 fois, ce qui fait que cela posait des problèmes au niveau de la récupération de données comme

    $user_role qui était rempli au premier tour mais vide au deuxième…..

    D’où extraire les conditions de tests afin de ne parcourir qu’une seule fois la fonction avec les tests.

     

    Résolu !

7 sujets de 1 à 7 (sur un total de 7)
  • Vous devez être connecté pour répondre à ce sujet.