Edycja profilu użytkownika - błąd

Informacje o zmianach i nowych możliwościach Forum

Moderator: gsmok

Awatar użytkownika
Hennos
100...124 posty
100...124 posty
Posty: 110
Rejestracja: czw, 29 marca 2007, 20:36
Lokalizacja: Płońsk

Edycja profilu użytkownika - błąd

Post autor: Hennos »

Witam.
Po próbie wejścia do ustawień mojego profilu pokazuje się błąd.
Nie jest to na pewno kwestia np. plików cookie, bowiem sprawdzałem to na 3 przeglądarkach (Opera, FF, MSIE), usuwałem też pliki cookie, błąd jest ciągle ten sam.
(Nikt chyba tego nie zgłaszał, przeszukałem ten dział).
A oto ów błąd:

Fatal error: Call to undefined function: validate_optional_fields() in /home/trioda/ftp/trioda/php/forum/includes/usercp_register.php on line 157
Pzdr, Hennos
Awatar użytkownika
Piotr
moderator
Posty: 8656
Rejestracja: pn, 30 czerwca 2003, 12:38
Lokalizacja: Kraków, Ślusarska 9

Post autor: Piotr »

Mam to samo.
Przykra niespodzianka po powrocie.
Awatar użytkownika
Romekd
moderator
Posty: 6965
Rejestracja: pt, 11 kwietnia 2003, 23:47
Lokalizacja: Zawiercie

Post autor: Romekd »

Obawiam się, że problem ten dotyczy wszystkich użytkowników Triody :(
α β Σ Φ  Ω  μ π °C ± √ ² < ≤ ≥ > ^ Δ − ∞ α β γ ρ . . . .
admin
administrator
Posty: 547
Rejestracja: ndz, 6 kwietnia 2003, 12:02
Lokalizacja: Warszawa

Post autor: admin »

Witam
Zobaczę, co da się zrobić.
Alek

Post autor: Alek »

Też mam ten problem :?
admin
administrator
Posty: 547
Rejestracja: ndz, 6 kwietnia 2003, 12:02
Lokalizacja: Warszawa

Post autor: admin »

Problem wynika z zastosowanego modu chroniącego przed robotami rejestrującymi. Oto zmieniony fragment:

Kod: Zaznacz cały

# 
#-----[ FIND ]------------------------------------------ 
#
if (
	isset($HTTP_POST_VARS['submit']) ||
	isset($HTTP_POST_VARS['avatargallery']) ||
	isset($HTTP_POST_VARS['submitavatar']) ||
	isset($HTTP_POST_VARS['cancelavatar']) ||
	$mode == 'register' )

# 
#-----[ REPLACE, WITH ]------------------------------------------ 
#
if (
	isset($HTTP_POST_VARS['avatargallery']) ||
	isset($HTTP_POST_VARS['submitavatar']) ||
	isset($HTTP_POST_VARS['cancelavatar']) ||
	(isset($HTTP_POST_VARS['submit']) && $mode == 'editprofile') ||
	(isset($HTTP_POST_VARS['submit']) && $mode == 'register' && !empty($HTTP_POST_VARS['email1']) && !empty($HTTP_POST_VARS['email2'])) || 
	$mode == 'register'
   )

# 
Jest to instrukcja warunkowa, której spełnienie powoduje m.in. włączenie pliku z brakującą funkcją. Ta instrukcja nie spełnia wprowadzonego warunku i stąd funkcja nie jest widoczna przy wywołaniu.

Tak się kończy włączanie modów modyfikujących oprogramowanie forum.
Alek

Post autor: Alek »

Co będzie dalej?
Awatar użytkownika
jakosek
125...249 postów
125...249 postów
Posty: 189
Rejestracja: ndz, 26 lutego 2006, 22:58
Lokalizacja: Lubartów/Lublin

Post autor: jakosek »

Mam nadzieję że wszystkie pliki pozamieniałeś? To co wkleiłeś to tylko fragment większej całości, nie widziałem żeby ktokolwiek zgłaszał problemy z tym modem :roll:

Kod: Zaznacz cały

# 
#-----[ OPEN ]------------------------------------------ 
# 
includes/usercp_register.php 

# 
#-----[ FIND ]------------------------------------------ 
# 
if ( 
   isset($HTTP_POST_VARS['submit']) || 
   isset($HTTP_POST_VARS['avatargallery']) || 
   isset($HTTP_POST_VARS['submitavatar']) || 
   isset($HTTP_POST_VARS['cancelavatar']) || 
   $mode == 'register' ) 

# 
#-----[ REPLACE, WITH ]------------------------------------------ 
# 
if ( 
   isset($HTTP_POST_VARS['avatargallery']) || 
   isset($HTTP_POST_VARS['submitavatar']) || 
   isset($HTTP_POST_VARS['cancelavatar']) || 
   (isset($HTTP_POST_VARS['submit']) && $mode == 'editprofile') || 
   (isset($HTTP_POST_VARS['submit']) && $mode == 'register' && !empty($HTTP_POST_VARS['email1']) && !empty($HTTP_POST_VARS['email2'])) || 
   $mode == 'register' 
   ) 

# 
#-----[ FIND ]------------------------------------------ 
# 
   $strip_var_list = array('email' => 'email', 

# 
#-----[ REPLACE, WITH ]------------------------------------------ 
# 
   $strip_var_list = array('email1' => 'email1', 'email2' => 'email2', 

# 
#-----[ FIND ]------------------------------------------ 
# 
   $signature = (isset($signature)) ? str_replace('<br />', "\n", $signature) : ''; 

# 
#-----[ BEFORE, ADD ]------------------------------------------ 
# 
   $email = ''; 

   if (($email1 == '' || $email2 == '') && $mode == 'register') 
   { 
      $email = ''; 
   } 
   elseif(!empty($email1) && !empty($email2) && $mode == 'register') 
   { 
      $email = $email1 . '@' . $email2; 
   } 
   elseif($mode != 'register') 
   { 
      $email = $HTTP_POST_VARS['email1']; 
   } 

# 
#-----[ FIND ]------------------------------------------ 
# 

   if ( $mode == 'editprofile' ) 
   { 
      $template->assign_block_vars('switch_edit_profile', array()); 
   } 

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
   if ( $mode == 'register') 
   { 
      $template->assign_block_vars('switch_register', array()); 
   } 

# 
#-----[ FIND ]------------------------------------------ 
# 
   'L_CURRENT_PASSWORD' => $lang['Current_password'], 
    
# 
#-----[ BEFORE, ADD ]------------------------------------------ 
# 
   'L_EMAIL_EXPLAIN' => $lang['Email_explain'], 

# 
#-----[ OPEN ]------------------------------------------ 
# 
language/lang_polish/lang_main.php 

# 
#-----[ FIND ]------------------------------------------ 
# 
// 
// That's all, Folks! 

# 
#-----[ BEFORE, ADD ]------------------------------------------ 
# 
$lang['Email_explain'] = 'Jeżeli twój mail to np. janek@janek.pl, to w pierwsze pole wpisz janek, a w drugie janek.pl!'; 

# 
#-----[ OPEN ]------------------------------------------ 
# 
templates/subSilver/profile_add_body.tpl 

# 
#-----[ FIND ]------------------------------------------ 
# 
   <!-- END switch_namechange_allowed --> 

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
   <!-- BEGIN switch_register --> 
   <tr> 
      <td class="row1"><span class="gen">{L_EMAIL_ADDRESS}: *</span><br /> 
      <span class="gensmall">{L_EMAIL_EXPLAIN}</td> 
      <td class="row2"> 
      <input type="text" class="post" style="width:100px" name="email1" size="25" maxlength="200" value="" /> 
      <span class="genmed">@</span> 
      <input type="text" class="post" style="width:100px" name="email2" size="25" maxlength="200" value="" /> 
      </td> 
   </tr> 
   <!-- END switch_register --> 
# 
#-----[ FIND ]------------------------------------------ 
# 
   <tr> 
      <td class="row1"><span class="gen">{L_EMAIL_ADDRESS}: *</span></td> 
      <td class="row2"><input type="text" class="post" style="width:200px" name="email" size="25" maxlength="255" value="{EMAIL}" /></td> 
   </tr> 
# 
#-----[ REPLACE, WITH ]------------------------------------------ 
# 
   <!-- BEGIN switch_edit_profile --> 
   <tr> 
      <td class="row1"><span class="gen">{L_EMAIL_ADDRESS}: *</span></td> 
      <td class="row2"><input type="text" class="post" style="width:200px" name="email1" size="25" maxlength="255" value="{EMAIL}" /></td> 
   </tr> 
   <!-- END switch_edit_profile --> 
# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM
admin
administrator
Posty: 547
Rejestracja: ndz, 6 kwietnia 2003, 12:02
Lokalizacja: Warszawa

Post autor: admin »

Zmieniłem wszystko co jest sygnalizowane w opisie modu.
Awatar użytkownika
jakosek
125...249 postów
125...249 postów
Posty: 189
Rejestracja: ndz, 26 lutego 2006, 22:58
Lokalizacja: Lubartów/Lublin

Post autor: jakosek »

Znalazłem w internecie jeszcze coś takiego:

Kod: Zaznacz cały

############################################### 

Autorem modu jest: daro < edaroo@gmail.com > http://darobb.org  
Wersja modu: 1.0 
Licencja: http://opensource.org/licenses/gpl-license.php GNU General Public License v2 

Aby dodać moduł musicie mieć dostęp do plików forum na serwerze! 

otwieramy do edycji plik: 

includes/usercp_register.php 

znajdujemy wpis:
$strip_var_list = array('email' => 'email', 

i zamieniamy go na: 

$strip_var_list = array('email1' => 'email1', 'email2' => 'email2', 

znajdujemy wpis:
$popuppm = ( isset($HTTP_POST_VARS['popup_pm']) ) ? ( ($HTTP_POST_VARS['popup_pm']) ? TRUE : 0 ) : TRUE; 

i po nim dodajemy wpis:
    $email = ''; 

    if (($email1 == '' || $email2 == '') && $mode == 'register') 
    { 
        $email = ''; 
    } 
    elseif(!empty($email1) && !empty($email2) && $mode == 'register') 
    { 
        $email = $email1 . '@' . $email2; 
    } 
    elseif($mode != 'register') 
    { 
        $email = $HTTP_POST_VARS['email1']; 
    } 

znajdujemy wpis:

    if ( $mode == 'editprofile' ) 
    { 
        $template->assign_block_vars('switch_edit_profile', array()); 

        if ( $board_config['allow_autologin'] == 2 && $userdata['user_level'] == USER && !$userdata['user_jr'] ) 
        { 
            $template->assign_block_vars('switch_ip_login_check', array()); 
        } 

        if ( (!$board_config['report_disable']) && (( $userdata['user_level'] > USER && !$board_config['report_only_admin'] ) || $userdata['user_level'] == ADMIN) ) 
        { 
            $template->assign_block_vars('switch_report', array( 
                'L_NO_REPORT_POPUP' => $lang['Report_no_popup'], 
                'NO_REPORT_POPUP_YES' => (!$userdata['no_report_popup'] ) ? 'checked="checked"' : '', 
                'NO_REPORT_POPUP_NO' => ($userdata['no_report_popup'] ) ? 'checked="checked"' : '', 

                'L_NO_REPORT_MAIL' => $lang['Report_no_mail'], 
                'NO_REPORT_MAIL_YES' => (!$userdata['no_report_mail'] ) ? 'checked="checked"' : '', 
                'NO_REPORT_MAIL_NO' => ($userdata['no_report_mail'] ) ? 'checked="checked"' : '') 
            ); 
        } 
    } 

i po nim dodajemy wpis:
    if ( $mode == 'register') 
    { 
        $template->assign_block_vars('switch_register', array()); 
    } 

znajdujemy wpis:
    'L_CURRENT_PASSWORD' => $lang['Current_password'], 
    
i przed nim dodajemy wpis:
    'L_EMAIL_EXPLAIN' => $lang['Email_explain'], 

zamykamy plik(zapisujemy zmiany)  

---------------------------------------------------------------- 

otwieramy plik
language/lang_polish/lang_main.php 

znajdujemy wpis na samym dole:
// 
// That's all, Folks! 

i przed nim dodajemy wpis:
$lang['Email_explain'] = 'Jeżeli twój mail to np. janek@janek.pl, to w pierwsze pole wpisz janek, a w drugie janek.pl!'; 

zamykamy plik(zapisujemy zmiany) 

----------------------------------------------------------------

otwieramy plik
templates/subSilver/profile_add_body.tpl 

znajdujemy wpis :
    <!-- END switch_namechange_allowed --> 

i po nim dodajemy wpis:
    <!-- BEGIN switch_register --> 
    <tr> 
        <td class="row1"><span class="gen">{L_EMAIL_ADDRESS}: *</span><br /> 
        <span class="genmed">{L_EMAIL_EXPLAIN}</td> 
        <td class="row2"> 
        <input type="text" class="post" onFocus="Active(this)" onBlur="NotActive(this)" style="width:100px" name="email1" size="25" maxlength="200" value="" /> 
        <span class="genmed">@</span> 
        <input type="text" class="post" onFocus="Active(this)" onBlur="NotActive(this)" style="width:100px" name="email2" size="25" maxlength="200" value="" /> 
        </td> 
    </tr> 
    <!-- END switch_register --> 

znajdujemy wpis :
    <tr> 
        <td class="row1"><span class="gen">{L_EMAIL_ADDRESS}: *</span></td> 
        <td class="row2"><input type="text" class="post" onFocus="Active(this)" onBlur="NotActive(this)" style="width:200px" name="email" size="25" maxlength="255" value="{EMAIL}" /></td> 
    </tr> 

i zamieniamy go na:
    <!-- BEGIN switch_edit_profile --> 
    <tr> 
        <td class="row1"><span class="gen">{L_EMAIL_ADDRESS}: *</span></td> 
        <td class="row2"><input type="text" class="post" onFocus="Active(this)" onBlur="NotActive(this)" style="width:200px" name="email1" size="25" maxlength="255" value="{EMAIL}" /></td> 
    </tr> 
    <!-- END switch_edit_profile --> 


zamykamy plik(zapisujemy zmiany) 

I to koniec, teraz możecie się cieszyć brakiem spamu na waszych forach :) 
Ten sam mod, ale nie ma w nim tej instrukcji warunkowej powodującej problemy.
admin
administrator
Posty: 547
Rejestracja: ndz, 6 kwietnia 2003, 12:02
Lokalizacja: Warszawa

Post autor: admin »

Dziękuję za przekazany materiał. Na pewno się przyda.
Awatar użytkownika
Hennos
100...124 posty
100...124 posty
Posty: 110
Rejestracja: czw, 29 marca 2007, 20:36
Lokalizacja: Płońsk

Post autor: Hennos »

Z badań przeprowadzonych na moim forum testowym wynika, iż 1 podany przez Jakoska mod powoduje u mnie prawie identyczny błąd jak na Triodzie:

Kod: Zaznacz cały

Fatal error: Call to undefined function: validate_optional_fields() in /var/www/sites/yoyo.pl/m/o/modrzew74/forum/includes/usercp_register.php on line 155"
Jak widać chodzi o inną linię, ale to ten sam błąd.
Testowałem moda na najnowszej wersji phpBB2, sciągniętej ok 2 tygodnie temu.
Oto wersja mojego pliku:

Kod: Zaznacz cały

usercp_register.php,v 1.20.2.78 2006/12/17 10:51:27 acydburn Exp $
Najwyraźniej ten mod nie nadaje się do tej wersji skryptu.
Natomiast drugi mod podany przez Jakoska to już zupełna abstrakcja, nijak ma się do tej mojej wersji pliku usercp_register.php.
Czyli trzeba walczyć z tym dalej...

Edit: Test przeprowadziłem na phpBB 2.0.22
Pzdr, Hennos
Awatar użytkownika
jakosek
125...249 postów
125...249 postów
Posty: 189
Rejestracja: ndz, 26 lutego 2006, 22:58
Lokalizacja: Lubartów/Lublin

Post autor: jakosek »

Właśnie że na moim forum ten drugi mod (v1.0) pasuje w 100% w przeciwieństwie do tego wymienionego wcześniej w tej dyskusji (v1.2) moje forum działa już prawie 2 lata i wtedy to była najnowsza wersja phpBB by Przemo, nie wiem która dokładnie to wersja czystego phpBB

Kod: Zaznacz cały

 usercp_register.php,v 1.8.9 2004/05/30 21:50
Awatar użytkownika
Hennos
100...124 posty
100...124 posty
Posty: 110
Rejestracja: czw, 29 marca 2007, 20:36
Lokalizacja: Płońsk

Post autor: Hennos »

A czy Trioda nie jest przypadkiem zaktualizowana do najnowszej, lub jednej z nowszych wersji phpBB?
Bo z testu wynika, iż pewnie tak, mam taki sam błąd...
Natomiast starsza wersja moda do tego mojego pliku nijak nie pasuje, widać, że mocno go zmieniono...
Pzdr, Hennos
Awatar użytkownika
Hennos
100...124 posty
100...124 posty
Posty: 110
Rejestracja: czw, 29 marca 2007, 20:36
Lokalizacja: Płońsk

Post autor: Hennos »

Udało mi się naprawić ten błąd na swoim forum testowym, jest ten mod (pierwszy podany przez Jakoska) i nie ma błędu, profil działa dobrze.
Usunąłem go w sposób najgłupszy z możliwych, czyli po prostu wstawiłem komentarz przed funkcją powodującą błąd, czyli "validate optional fields".
Załączam poprawiony plik, oczywiście nie ma gwarancji, że na forum Triody to zadziała, ale u mnie wszystko jest OK.
Jak komuś się nudzi to może zarejestrować się na moim forum i stwierdzić naocznie, że profil działa :)
http://www.modrzew74.yoyo.pl/forum/
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Pzdr, Hennos