To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

Problem z modyfikacją - Problemy z modyfikacjami w wersji 1.12.8

Woytec - 20-11-2013, 14:03
Temat postu: Problemy z modyfikacjami w wersji 1.12.8
1. Obsługa baz danych
W wersji 1.12.8 wprowadzono obsługę mysqli, domyślnie włączoną. W związku z tym niektóre modyfikacje nie działają, ponieważ wykorzystują nadal funkcje służące do operowania na połączeniu mysql. Gdyby modyfikacje były pisane wg. standardu - tzn. wykorzystywały klasę "db" to problemu by nie było, ponieważ działałyby praktycznie niezależnie od tego, z jakiego silnika bazy danych korzysta pozostała część skryptu (problem może ewentualnie wystąpić z zapytaniami ale w przypadku mysqli to nadal jest taki sam standard jak mysql, to tylko sposób połączenia).
Charakterystyczne komunikaty o błędach zaczynają się na:
Kod:
Warning: mysql****

wskazujące na linię z funkcją dokonującą operacji w bazie danych(np. wywołanie zapytania)

W takim przypadku, w zmodyfikowanych plikach, jak i dołączonych do modyfikacji należy zmienić te funkcje na odpowiedniki z klasy "db".
  • mysql_query na $db->sql_query
  • mysql_fetch_array na $db->sql_fetchrow
  • mysql_num_rows na $db->sql_numrows


2. Cache
W związku ze zmianą sposobu działania cache, mogą pojawić się komunikaty o błędach zaczynające się od:
Kod:
Warning: include(Array)

wskazujące na linię
Kod:
include ($check_cache);

a kilka linii wcześniej
Kod:
sql_cache('check', 'nazwa');


Nowy sposób od razu zwraca zawartość cache a czy coś tam jest sprawdzamy czy zmienna jest pusta a nie jak dotychczas - funkcja zwracała informację o tym, że coś jest w cache i jeżeli zwróciła prawdę to includowaliśmy ten plik.

Nowy wzór:

Kod:
$nazwa = sql_cache('check', 'nazwa');

if(empty($nazwa)
{
//Nie ma nic w cache. Pobieramy z bazy
}
//dalsze operacje

Dla kompatybilności "nazwa" powinna być taka sama w nazwie zmiennej i drugiego parametru funkcji, tak jak we wcześniejszym fragmencie.

3. Funkcja htmlspecialchars
Od wersji php 5.4 zmieniona została zawartość parametru "kodowanie" tej funkcji na nie używane na razie UTF co powodowało problemy m.in przy wysyłaniu postów. Najłatwiej będzie zamienić wszystkie htmlspecialchars w plikach modyfikacji i fragmentach do wyszukania na xhtmlspecialchars - w 1.12.8 stworzyliśmy tę funkcję aby podawała prawidłowy trzeci parametr.

4. Optymalizacje kodu
Nie powoduje to błędów ale ulepsza kod.
Zachęcam do korzystania z funkcji get_vars
Kod:
function get_vars($name, $empty = false, $methods = 'POST,GET', $int = false, $array_level = 0)

Przykład: Zamiast
Kod:
if( isset($HTTP_GET_VARS['mark']) || isset($HTTP_POST_VARS['mark']) )
{
    $mark_read = ( isset($HTTP_POST_VARS['mark']) ) ? $HTTP_POST_VARS['mark'] : $HTTP_GET_VARS['mark'];
}
else
{
    $mark_read = '';
}

można zapisać
Kod:
$mark_read = get_vars('mark', false, 'POST,GET');

yukos - 06-12-2013, 14:52

Mam pytanie jeśli chodzi o podpunkt 4 - gdzie i jak to mam zrobić... ?
Bardzo proszę o odpowiedź. Pozdrawiam.

Woytec - 06-12-2013, 17:49

Do działania modyfikacji nie jest to ważne. Tworzysz jakąś?
HYPERSHOCKK^ - 09-12-2013, 19:13

Pkt 2 też nas nie interesuje? :P

Jak będzie taki komunikat to jakie pliki trzeba edytować aby pozbyć się tego błędu? Bo chyba nie wszystkie załączone z modem i wszystkie jakie edytowaliśmy dla tego moda?

Woytec - 09-12-2013, 19:16

HYPERSHOCKK^ napisał/a:
Pkt 2 też nas nie interesuje?
Zależy czy dodawany kod/obecny w dodatkowych plikach zawiera wykorzystanie cache i to po staremu
Kajtek223 - 27-01-2014, 23:48

Pomógłbyś mi? Robię punkt 2, ale coś mi nie wychodzi, bo wyskakują wtedy inne błędy.
U mnie jest takie kodowanie, gdzie i jak wstawić? Jakbyś mógł to podstaw mi :)
Kod:

{
    if ($check_cache = sql_cache('check', 'sb_count'))
    {
        include($check_cache);
        $row = $sb_count;
    }
    else
    {


Dzięki :)


EDIT: Zauważyłem, że był niepotrzebny znak "{" u mnie. Zrobione. Przepraszam za kłopot.

xaxaxa1 - 28-01-2014, 06:53

Cytat:
Nie powoduje to błędów ale ulepsza kod.
Ulepsza? Wciaz ta funkcja, jak i znaczna wiekszosc zawiera w sobie archaiczny kod z czasow PHP4 ktory w obecnych czasach nie zasluguje nawet na miano slowa "tandentny".

Jak chcesz coś ulepszyć to zamiast
Kod:
if( isset($HTTP_GET_VARS['mark']) || isset($HTTP_POST_VARS['mark']) )
{
    $mark_read = ( isset($HTTP_POST_VARS['mark']) ) ? $HTTP_POST_VARS['mark'] : $HTTP_GET_VARS['mark'];
}
else
{
    $mark_read = '';
}
sens ma jedynie raczej coś takiego:
Kod:
$mark_read = (isset($_REQUEST['mark']) && !empty($_REQUEST['mark'])) ? $_REQUEST['mark'] : '';


Skoro wydajecie już "nowe wersje" to wysilcie się choć trochę i poprawcie kod sprzed kilku lat - wystarczy odpalić "przema" na serwerze z PHP 5.3 / 5.4 + error_reporting(E_ALL); ;)

Tommekk80 - 29-01-2014, 09:12

$_POST i $_GET pozwala na szybsze i łatwiejsze zlokalizowanie ewentualnego problemu. $_REQUEST już nie - mamy go używać bo co - bo jest?
NineX - 29-01-2014, 10:58

xaxaxa1 napisał/a:
sens ma jedynie raczej coś takiego

Nie bardzo. Nie będziemy setki/miliony razy wypisywać isset, empty, przypisywać na sztywno i zaśmiecać dodatkowo kod. W takich projektach sens jest tylko wtedy, gdy konkretna część zbliżonego do siebie kodu jest oparta na 1 funkcji, przez co w przypadku zmian, mamy dostęp z 1 miejsca pliku do każdej zmiennej, więc Twoja sugestia jest całkowicie nietrafiona. Aktualna funkcja get_vars z wersji 1.12.8 jest jak najbardziej poprawna. W przykładzie powyżej $mark_read, w pewnym stopniu powinno się zastosować $_REQUEST, ze względu na wcześniejszą konstrukcję, ale w innych przypadkach już nie. Po zmianach w php.ini request może obsłużyć cookie, co w pewnych częściach forum może powodować problemy, przez dodatkowe modyfikacje. Kod ma być uniwersalny. Poza tym, aktualnie nasza załoga wie co robi, nie potrzebujemy rad odnośnie kodu.

Pozdrawiam

xaxaxa1 - 15-02-2014, 02:48

Tommekk80 napisał/a:
$_POST i $_GET pozwala na szybsze i łatwiejsze zlokalizowanie ewentualnego problemu.
Widać że z prawdziwym programowaniem nie masz nic wspólnego skoro takie rzeczy są dla Ciebie ważne.

Tommekk80 napisał/a:
mamy go używać bo co - bo jest?

Tak, bo jest. Jest to zmienna superglobalna tak samo jak $_POST, $_GET czy $_SERVER i nie ma żadnych przeciwskazań aby jej używać.

Cytat:
Aktualna funkcja get_vars z wersji 1.12.8 jest jak najbardziej poprawna.
W tym właśnie momencie pokazałeś swoją kompletną niewiedzę, że aż wstyd :twisted: $HTTP_GET_VARS i $HTTP_POST_VARS mają status DEPRECATED od wersji PHP, uwaga! 4.1.0 czyli przeszło od dwunastu lat. Trochę zacofany jesteś ;)

Na tym momencie możemy zakończyć dyskusję bo nie uznaję argumentów "bo mi się wydaje", bo nie są one żadnym przeciwnikiem do konfrontacji z doświadczeniami typu "wiem z doświadczenia" :mrgreen:

Woytec - 15-02-2014, 10:43

xaxaxa1 napisał/a:
Cytat:
Aktualna funkcja get_vars z wersji 1.12.8 jest jak najbardziej poprawna.
W tym właśnie momencie pokazałeś swoją kompletną niewiedzę, że aż wstyd :twisted: $HTTP_GET_VARS i $HTTP_POST_VARS mają status DEPRECATED od wersji PHP, uwaga! 4.1.0 czyli przeszło od dwunastu lat.
To nie znaczy że nie można stworzyć funkcji get_vars,w której szybko można zmienić na krótsze nazwy czy twoje REQUEST.


Powered by phpBB modified by Przemo © 2003 phpBB Group