- WordPress :4.7
- Statut : résolu
- Ce sujet contient 6 réponses, 2 participants et a été mis à jour pour la dernière fois par
Timama, le il y a 6 années et 8 mois.
-
AuteurMessages
-
27 janvier 2017 à 17 h 53 min #1616988
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…
27 janvier 2017 à 19 h 07 min #1617005Bonjour,
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>
27 janvier 2017 à 19 h 10 min #1617007Je 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>';
}28 janvier 2017 à 10 h 52 min #1617081merci 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….
31 janvier 2017 à 8 h 41 min #1617591en 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 );31 janvier 2017 à 8 h 43 min #1617593la 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>
31 janvier 2017 à 8 h 45 min #1617595ouh 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 !
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.