Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP Praca (praktyki)
Forum PHP.pl > Inne > Hydepark
KsaR
To brzmi tak głupio że aż muszę się zapytać:
Slyszal ktos moze o praktykach ale "zdalnych"(przez neta)? tongue.gif
Interesują mnie wszelkie informacje o tym tongue.gif
memory
słyszał zdalne to takie przez internet, pracujesz na swoim komputrze, nie musisz przychodzić do biura. Coś jeszcze chcesz wiedzieć ? biggrin.gif

A tak poważnie praktyki zdalne to troche chory pomysł, nie wiem jak można czegoś konkretnego się nauczyć.
KsaR
Cytat(memory @ 24.09.2015, 20:07:47 ) *
słyszał zdalne to takie przez internet, pracujesz na swoim komputrze, nie musisz przychodzić do biura. Coś jeszcze chcesz wiedzieć ? biggrin.gif

A tak poważnie praktyki zdalne to troche chory pomysł, nie wiem jak można czegoś konkretnego się nauczyć.

Hm, cos typu.
Ktos zadaje mi zadanie, do zrobienia w dzien,
I podaje warunki.
A ja musze to wykonac, + wysylam kod a ta osoba mnie ocenia co mozna by lepiej itd biggrin.gif
--
Bo potrzebowalbym praktyk (darmowych) biggrin.gif
Tylko nie wiem jak szukac, gdzie szukac, i (czy) szukac biggrin.gif
mrc
Po prostu pisz. To są najlepsze praktyki. Z czasem zauważysz, że coś jest niewygodne, że można coś łatwiej albo po prostu inaczej. Możliwe, że nie szukasz praktyk, tylko mentora przez internet, który pomógłby Ci w dalszej nauce.
KsaR
Cytat(mrc @ 24.09.2015, 20:39:46 ) *
[...]Możliwe, że nie szukasz praktyk, tylko mentora przez internet, który pomógłby Ci w dalszej nauce.

No, tak tongue.gif
Pisac juz wiele napisalem.
Tak to od czasu do czasu pomagam na forach z nadzieja ze ktos sie doczepi ze cos zle, ale poki co tylko raz ktos sie mnie czepil o to ze sie czepiam, to lipa troche tongue.gif
Tak to nwm w czym sie dalej rozwijac.

Najwieksze problemy z calego php mam z,
Bitami. (Za malo praktyk) mimo ze cos tam juz probowalem,

Z FW. Zaden mi sie nie spodobal, a co wazniejsze nie zachecil do siebie.

Jak googluje to o optymalizacji i trickach ale nic nowego nie znajduje ;D.
Oczywiscie znam rozne narzedzia (ale) nie mam do ich dostepu, jak np. AB. Czy cos.

I kod ktory pisze jest dla mnie akurat, najlepszy. Pytanie jak dla innych itd. Stad tez te pytania.

Ps. Do komputera tez nie mam dostepu aaevil.gif
aniolekx
pokaz kod to ci powiemy wink.gif
hikaryu
Gdzie mieszkasz miszczu ? To może załatwię jakieś praktyki albo staż(płatny) jeżeli dałbyś radę dojeżdżać.
KsaR
Cytat(aniolekx @ 25.09.2015, 11:09:19 ) *
pokaz kod to ci powiemy wink.gif

Jestem w trakcie programowania małego bloga,
Ale nie wiem czy za mały by się nie okazał tongue.gif
Poki co jeszcze nawet nie ostylowany, nie przetestowany.
Ale jak zrobie to moge na GitHuba wrzucić.

Hikaryu:
Tak jak pisałem: zdalne, przez neta.
A dwa: "Grupa: Zarejestrowani
Postów: 243
Pomógł: 50
Dołączył: 15.07.2014
Skąd: Świecie nad wisłą"
tongue.gif

--
Dobra jednak bloga nie wrzuce na GH bo bym musial troche pozmieniac, ale np.
install.php bloga taki, jeszcze nie testowalem:
  1. <!DOCTYPE html>
  2. <html lang="pl">
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <title>Instalacja bloga KsaR.</title>
  6. <style>.scc{color:green}.err{color:red}</style>
  7. </head>
  8. <body>
  9. <?php
  10. function tabExs($pdo, $table)
  11. {
  12. try
  13. {
  14. $r=$pdo->query("SELECT 1 FROM `$table` LIMIT 1");
  15. }
  16. catch (PDOException $e) // PDOE. Bo domyslnie zmienione w $pdo.
  17. {
  18. return 0;
  19. }
  20. return $r!==false;
  21. }
  22.  
  23. $install='';
  24.  
  25. if (file_exists('sql/blog_users.sql') && !tabExs($pdo, 'blog_posts'))
  26. {
  27. $pdo->query(file_get_contents('sql/blog_users.sql'));
  28. unlink('sql/blog_users.sql');
  29. $install.='<span class="scc">Dodano tabelę, `blog_users`</span><br/>';
  30. }
  31.  
  32. if (file_exists('sql/blog_categories.sql') && !tabExs($pdo, 'blog_categories'))
  33. {
  34. $pdo->query(file_get_contents('sql/blog_categories.sql'));
  35. unlink('sql/blog_categories.sql');
  36. $install.='<span class="scc">Dodano tabelę, `blog_categories`</span><br/>';
  37. }
  38.  
  39. if (file_exists('sql/blog_tags.sql') && !tabExs($pdo, 'blog_tags'))
  40. {
  41. $pdo->query(file_get_contents('sql/blog_tags.sql'));
  42. unlink('sql/blog_tags.sql');
  43. $install.='<span class="scc">Dodano tabelę, `blog_tags`</span><br/>';
  44. }
  45.  
  46. if (file_exists('sql/blog_posts.sql') && !tabExs($pdo, 'blog_posts'))
  47. {
  48. $pdo->query(file_get_contents('sql/blog_posts.sql'));
  49. unlink('sql/blog_posts.sql');
  50. $install.='<span class="scc">Dodano tabelę, `blog_posts`</span><br/>';
  51. }
  52.  
  53. if (isset($install[0]))
  54. {
  55. echo $install,'Odśwież teraz stronę.';
  56. }
  57. else
  58. {
  59. $form='<form method="post" action="#"><input type="text" name="adm" required/><input type="submit" value="Dodaj admina"/></form>';
  60. if (isset($_POST['adm']))
  61. {
  62. $pdo->prepare('UPDATE `blog_users` SET `staff`=1 WHERE `email`=?')->execute([$_POST['adm']]);
  63. if ($pdo->rowCount())
  64. {
  65. echo '<br/><span class="scc">Dodano admina, aktualny plik został skasowany ze względów bespoieczeństwa..</span>';
  66. unlink(__FILE__);
  67. }
  68. else
  69. {
  70. echo $form;
  71. }
  72. }
  73. else
  74. {
  75. echo $form;
  76. }
  77. }
  78. ?>
  79. </body>
  80. </html>

Taki byle jaki bo na 2 requesty bedzie (dodanie bazy, dodanie admina - zarejestrowanego).
+ jeszcze trzeba by PDO zaincludować.

Hmmm, lub tez taki inny (ktory koloruje literki, oraz podaje bbcode) robiony na szybko bo tylko do jednorazowego użytku.
Takze spacje, nowe linie itd tez bbcoduje biggrin.gif, oraz nie sprawdza jaki poprzedni kolor... ale serio do 1x uzytku..
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <title>KsaR - color mixer.</title>
  6. <style scoped>body,html{background:#3C3D3C;color:white}</style>
  7. </head>
  8. <body>
  9. <form action="#mix" method="POST"/>
  10. <input type="text" name="t" required/><br/>
  11. <select name="c">
  12. <option value="1">Niebieskie</option>
  13. <option value="2">Zielone</option>
  14. <option value="3">Wszystkie razem</option>
  15. </select>
  16. <input type="submit" value="Mixuj !"/>
  17. </form>
  18. <?php
  19. if (isset($_POST['t'],$_POST['c']))
  20. {
  21. $new='';
  22. $newBB='';
  23. switch ($_POST['c'])
  24. {
  25. case '1': $colors=['62A2E3','3280CF','196CBF','197CE0','1381F0','1F6CB8','4286C9']; break;
  26. case '2': $colors=['35B53B','18AD20','04BA0D','1ACC23','2ADE33','09D913','27C22F']; break;
  27. default: $colors=['35B53B','18AD20','04BA0D','1ACC23','2ADE33','09D913','27C22F','62A2E3','3280CF','196CBF','197CE0','1381F0','1F6CB8','4286C9']; # wszystkie
  28. }
  29. shuffle($colors);
  30. $colorsCt=count($colors)-1;
  31. preg_match_all('#(.)#u',$_POST['t'],$str);
  32. $str=$str[0];
  33. $i=-1;
  34. do
  35. {
  36. ++$i;
  37. $curr=$colors[mt_rand(0,$colorsCt)];
  38. $new.='<span style="color:#'.$curr.'">'.$str[$i].'</span>';
  39. $newBB.=''.$str[$i].'';
  40. }
  41. while (isset($str[$i]));
  42. echo '<br/><br/><span style="color:gray">Rezultat:</span> ',$new,'<br/><span style="color:gray">BBcode:</span> ',$newBB;
  43. }
  44. ?>
  45. </body>
  46. </html>

Tu mysle ze lepiej by bylo na checkboxach ale tak jw. Pisalem.

Więc jak cos więcej to lepiej zapytać, bo ja zazwyczaj robie krotkie.. I nie ma wtedy co oceniac.
A jak dlugie to zwyczajnie nie daje bo mi zalezy na tym ze duzo czasu poswiecilem tongue.gif
Pyton_000
Przepraszam że to powiem, ale to jest straszne. To nawet proceduralnie nie jest a przynajmniej wygląda beznadziejnie.
KsaR
Cytat(Pyton_000 @ 28.09.2015, 08:16:07 ) *
Przepraszam że to powiem, ale to jest straszne. To nawet proceduralnie nie jest a przynajmniej wygląda beznadziejnie.

Hee, ja wlasnie tego nie widze, co innego gdyby inaczej formatowal kod jak co niektorzy,
A co bys zmienil? Zeby nie bylo strasznie?
--
Instalacja to robilem z 2-5min.
Mix kolorow do 20min, na tablecie.
Czyli na szybko po mojemu tongue.gif
--
Aha, ps.
Normalnie to tak nie mam HTML-a wmieszanego.
Do podstron.
Tu tak jest zeby przegladarka wrazie czego nie zwariowala tongue.gif
kapslokk
To po co właściwie wrzucasz kod zrobiony w 5 minut?
Co do samego kodu:
Tak na dobrą sprawę to bym zaczął od jakiegoś rozdzielenia htmla od php...


  1. if (file_exists('sql/blog_users.sql') && !tabExs($pdo, 'blog_posts'))
  2. {
  3. $pdo->query(file_get_contents('sql/blog_users.sql'));
  4. unlink('sql/blog_users.sql');
  5. $install.='<span class="scc">Dodano tabelę, `blog_users`</span><br/>';
  6. }
  7.  
  8. if (file_exists('sql/blog_categories.sql') && !tabExs($pdo, 'blog_categories'))
  9. {
  10. $pdo->query(file_get_contents('sql/blog_categories.sql'));
  11. unlink('sql/blog_categories.sql');
  12. $install.='<span class="scc">Dodano tabelę, `blog_categories`</span><br/>';
  13. }
  14.  
  15. if (file_exists('sql/blog_tags.sql') && !tabExs($pdo, 'blog_tags'))
  16. {
  17. $pdo->query(file_get_contents('sql/blog_tags.sql'));
  18. unlink('sql/blog_tags.sql');
  19. $install.='<span class="scc">Dodano tabelę, `blog_tags`</span><br/>';
  20. }
  21.  
  22. if (file_exists('sql/blog_posts.sql') && !tabExs($pdo, 'blog_posts'))
  23. {
  24. $pdo->query(file_get_contents('sql/blog_posts.sql'));
  25. unlink('sql/blog_posts.sql');
  26. $install.='<span class="scc">Dodano tabelę, `blog_posts`</span><br/>';
  27. }


A teraz pomyśl, że chcesz zmienić klasę w tym spanie. I robisz to w x miejscach... A wystarczyło zrobić funkcję smile.gif

Ogólnie to wrzuć coś, co nie było robione na szybko, bo tym to aż wstyd się chwalić biggrin.gif
KsaR
Kapslokk, co do HTML-a to zedytowalem chwile wczesniej post zanim odpisales tongue.gif,
Ee ja nie mam takich problemow. ;D w edytorze moge zmieniac dowolny ciag na inny.
I sie niczym tu nie chwale, sami prosiliscie kod to jest ogolny zarys tongue.gif.
  1. # (...)
  2. $install='';
  3.  
  4. function tableExists($patch='', $table='')
  5. { global $pdo; # ach to global biggrin.gif, nie chce mi sie na szybko teraz przerabiac aaevil.gif
  6. if (file_exists($patch) && !tabExs($pdo, $table))
  7. {
  8. $pdo->query(file_get_contents($patch));
  9. unlink($patch);
  10. return '<span class="scc">Dodano tabelę, `'.$table.'`</span><br/>';
  11. }
  12. return '';
  13. }
  14.  
  15. $install.=tableExists('sql/blog_posts.sql', 'blog_posts');
  16. $install.=tableExists('sql/blog_categories.sql', 'blog_categories');
  17. $install.=tableExists('sql/blog_tags.sql', 'blog_tags');
  18. $install.=tableExists('sql/blog_users.sql', 'blog_users');
  19.  
  20. if (isset($install[0]))
  21. # (...)

Czy o cos takiego chodzilo? tongue.gif
kapslokk
Tak.. o coś takiego chodziło. Ja wiem, że możesz zmienić dowolny ciąg na inny, ale jeżeli oprócz zmiany ciągu znaków będziesz musiał przerobić coś więcej, to sie okaże, że musisz robić to ręcznie. I jeśli Ci dojdzie x tabel, to będziesz musiał się nieźle narobić ;P A poza tym kod staje się czytelniejszy. Za miesiąc przyjdziesz i stwierdzisz, że tak naprawdę nie wiesz co robisz w tym miejscu, a jeśli sobie sensownie nazwiesz funkcję to łatwo się domyślisz smile.gif

Staraj się nazywać funkcje tak jak działają. Nazwa tableExists sugeruje, że ona sprawdza czy tabela istnieje. Nic nie mówi o tym, że zostanie utworzona jeśli nie istnieje smile.gif
KsaR
No tak, tongue.gif nie pomyslalem o DRY w tamtym wypadku. < dziękuje za uswiadomienie, zobacze inne kody czy tak nie odwalilem biggrin.gif.

--

Mialem problem zeby nazwac teraz na szybko funkcje biggrin.gif
Pyton_000
lepiej, ale uważasz że nazwa funkcji jest adekwatna do działania?
KsaR
Cytat(Pyton_000 @ 28.09.2015, 09:06:20 ) *
lepiej, ale uważasz że nazwa funkcji jest adekwatna do działania?

Nie w pelni, ale na chwile obecna nie wiem jak nazwac (jak wyzej).

tblNonExsts (tableNonExists)
kapslokk
  1. $i=-1;
  2. do
  3. {
  4. ++$i;
  5. $curr=$colors[mt_rand(0,$colorsCt)];
  6. $new.='<span style="color:#'.$curr.'">'.$str[$i].'</span>';
  7. $newBB.=''.$str[$i].'';
  8. }
  9. while (isset($str[$i]));


To jest fajny fragment. biggrin.gif
Wiesz, że najpierw wykonają się instrujcje z pętli, a później sprawdzisz czy w ogóle $str[$i] istnieje ?biggrin.gif

@edit

Zamiast tblNonExsts zrób tak jak napisałeś w nawiasie. Po cholere to skracać?
KsaR
Cytat(kapslokk @ 28.09.2015, 09:09:30 ) *
  1. $i=-1;
  2. do
  3. {
  4. ++$i;
  5. $curr=$colors[mt_rand(0,$colorsCt)];
  6. $new.='<span style="color:#'.$curr.'">'.$str[$i].'</span>';
  7. $newBB.=''.$str[$i].'';
  8. }
  9. while (isset($str[$i]));


To jest fajny fragment. biggrin.gif
Wiesz, że najpierw wykonają się instrujcje z pętli, a później sprawdzisz czy w ogóle $str[$i] istnieje ?biggrin.gif

Naprostuj, co tu złego? Jako ze jest w ifie:
  1. if (isset($_POST['t'],$_POST['c']))
  2. {


questionmark.giftongue.gif
Czyli po tym ifie zakladam ze jednak jest cos, w tym wypadku 1 znak:pp
--
@edit - ok
Pyton_000
Cytat
# ach to global biggrin.gif, nie chce mi sie na szybko teraz przerabiac aaevil.gif

Wiesz, źle to świadczy o Tobie.

A zamiast tableExists -> executeSchema
kapslokk
Tak na dobrą sprawę to nie wiem o co chodzi w ogóle w tej pętli do...while(). Tzn do czego ona służy, ale tak czy inaczej, czemu nie foreach ? A źle jest to, że jak Ci sie skonczy tablica $str to zrobi jeszcze jedno kółko.
KsaR
Cytat(Pyton_000 @ 28.09.2015, 09:16:44 ) *
Wiesz, źle to świadczy o Tobie.

A zamiast tableExists -> executeSchema

Ten global dodalem przy edycji dopiero, bo sie pytalem czy o "cos takiego" chodzi, i nagle zauwazylem ze $pdo nie lokalne, to nie chcialem na szybko przerabiac co zaznaczylem w komentarzu smile.gif
--
kapslokk, to chyba nie ogarnelem dzialania do...while hm?

to nie dziala tak ze:
do{} sie zawsze wykona z ta roznica ze od drugiego obiegu sprawdza warunek (tzn po wykonaniu?)

A robi to ze podmienia wpisany tekst na losowe kolorowanie liter.
Na poczatku bylo cos typu $str[$x].. Że by sie nie dalo nawet foreach. (Foreach po stringu), ale niestety problem z UNICODE i musialem na szybko cos wykombinowac ponownie. Zeby polskie znaki mi obsluzylo tongue.gif i tak kolejne kombinacje.
kapslokk
Do while działa tak, że sprawdza warunek po wykonaniu pętli. W Twoim przypadku ustawiasz $i = -1; Na początku masz inkrementację i to powoduje błąd. $i na starcie powinno być równe 0, na końcu pętli inkrementacja i warunek działał by poprawnie. A tak, to warunek jest spełniony, następuje inkrementacja i lecimy po elemencie tablicy który nie istnieje.
Odpal sobie takie 2 kody:
1.
  1. <?php
  2.  
  3. $arr = array(
  4. 0=>0,
  5. 1=>1,
  6. 2=>2,
  7. 3=>3,
  8. );
  9. $i = -1;
  10. do{
  11. $i++;
  12. var_dump($arr[$i]);
  13. }while(isset($arr[$i]));


2.
  1. <?php
  2.  
  3. $arr = array(
  4. 0=>0,
  5. 1=>1,
  6. 2=>2,
  7. 3=>3,
  8. );
  9. $i = 0;
  10. do{
  11. var_dump($arr[$i]);
  12. $i++;
  13. }while(isset($arr[$i]));
KsaR
Tyle rzeczy sie nauczyc w chwile tongue.gif, dzięki.
Na szczescie rzadko uzywam do-while.
Najczesciej while/foreach.
Z petlami mialem najwiekszy problem gdy zaczynalem nauke "dawno" temu tongue.gif

Co do bardziej przemyslanego:
  1. <?php
  2. ob_start('ob_gzhandler')?:ob_start();
  3.  
  4. define('IS_DEBUG', true); // DEBUG MODE.
  5. define('ok', true); // for included files.
  6. define('RP', $_SERVER['DOCUMENT_ROOT']); // root path.
  7.  
  8. if (IS_DEBUG)
  9. {
  10. ini_set('display_errors',true);
  11. ini_set('display_startup_errors',true);
  12. ini_set('track_errors',true);
  13. }
  14. else ini_set('display_errors',false);
  15.  
  16. session_set_cookie_params(86400,'/',$_SERVER['HTTP_HOST'],false,true); #-1:ssl; -0: httpOnly.
  17. session_save_path(__DIR__.'/sess/'); # change dir of sess; defend for shared hosting.
  18.  
  19. # functions include #
  20. include RP.'/php/functions.php';
  21.  
  22. register_shutdown_function('footer');
  23.  
  24. if (!isset($_GET['p'])) $_GET['p']='home';
  25. switch ($_GET['p'])
  26. {
  27. case 'signin': $page=['title'=>'Logowanie','name'=>'signin']; break;
  28. case 'signup': $page=['title'=>'Rejestracja','name'=>'signup']; break;
  29. case 'addpost': $page=['title'=>'Dodaj post','name'=>'addpost']; break;
  30. case 'addcategory': $page=['title'=>'Dodaj kategorię','name'=>'addcategory']; break;
  31. case 'signout': $_SESSION=[]; session_destroy(); $page=['title'=>'Cytaty online','name'=>'home']; break;
  32. default: $page=['title'=>'Blog - KsaR','name'=>'home'];
  33. }
  34.  
  35. $server=sprintf('//%s/~%s/',$_SERVER['SERVER_ADDR'],explode('/',$_SERVER['SCRIPT_FILENAME'])[2]);
  36.  
  37. echo '<!DOCTYPE html SYSTEM "about:legacy-compat">
  38. <html lang="pl" dir="ltr">
  39. <head>
  40. <meta charset="UTF-8"/>
  41. <title>',$page['title'],'.</title>
  42. <meta name="viewport" content="width=device-width,maximum-scale=2.5,initial-scale=1.0"/>
  43. <link rel="stylesheet" href="',$server,'css/style.min.css?v=0"/>
  44. <meta name="MobileOptimized" content="true"/>
  45. <meta name="HandheldFriendly" content="true"/>
  46. <meta name="author" content="KsaR"/>
  47. <meta name="keywords" content="ksar,blog,php,polski"/>
  48. </head>
  49. <body>
  50. <header>';
  51.  
  52.  
  53. // @author: KsaR.
  54. ## session security ##
  55. // before stolen session
  56. if (isset($_SESSION['owner']) && $_SESSION['owner']!==$_SERVER['HTTP_USER_AGENT'])
  57. {
  58. exit('<div style="color:red"><b>Wykryto i udaremniono próbę przejęcia sesji użytkownika.</b></div>');
  59. }
  60. else
  61. {
  62. $_SESSION['owner']=$_SERVER['HTTP_USER_AGENT'];
  63. }
  64. ##-session security-##
  65.  
  66. $logged=isset($_SESSION['uid']);
  67.  
  68. try
  69. {
  70. $config=
  71. [
  72. 'db_host'=>'127.0.0.1',
  73. 'db_name'=>'baza',
  74. 'db_user'=>'uzytkownik',
  75. 'db_pass'=>'haslo'
  76. ];
  77. $pdo=new PDO(sprintf('mysql:host=%s;dbname=%s;charset=utf8;encoding=utf8',$config['db_host'],$config['db_name']),$config['db_user'],$config['db_pass'],[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_PERSISTENT=>true,PDO::MYSQL_ATTR_INIT_COMMAND=>'SET time_zone=\''.date('P').'\'']);
  78. }
  79. catch(PDOException $e)
  80. {
  81. exit(sprintf('<div class="error">Wystąpił problem podczas połączenia z bazą danych.<br/>%s</div>',$e->getMessage()));
  82. }
  83. if ($logged)
  84. {
  85. $user=$pdo->prepare('SELECT `staff` FROM `users` WHERE `userId`=? LIMIT 1');
  86. $user->execute([$_SESSION['userId']]);
  87. $user=$user->fetch(PDO::FETCH_ASSOC);
  88. }
  89.  
  90. echo '<nav id="menu">
  91. <ul>
  92. <li><a href="/">Strona główna</a></li>',($logged?($user['staff']?(
  93. '<li><a href="/addpost/">Dodaj post</a></li>
  94. <li><a href="/addcategory/">Dodaj kategorie</a></li>':'')).
  95. '<li><a href="/signout/">Wyloguj</a></li>'):(
  96. '<li><a href="/signin/">Logowanie</a></li>
  97. <li><a href="/signup/">Rejestracja</a></li>'),
  98. '</ul>
  99. </nav>
  100. </header>
  101. <main>';
  102.  
  103. ob_start('ob_clear');
  104. include sprintf('%s/pages_include/%s.php',RP,$page['name']);

Ps.
Ten HTML w PHP tez mi sie nie podoba (to co w echo), jednak cos wolniej ladowala mi sie strona gdy byl html poza php, jakby go kompresja nie dosiegala ale nie mam jak to potwierdzic.
Pyton_000
  1. exit(sprintf('<div class="error">Wystąpił problem podczas połączenia z bazą danych.<br/>%s</div>',$e->getMessage()));

Wrzuć sobie jakieś błędne dane i zobacz co Ci wywali na ekran...
kapslokk
Kumpel z pracy Cię wyśmiał za to:
  1. define('ok', true); // for included files.


Poza tym coś takiego:
  1. $pdo=new PDO(sprintf('mysql:host=%s;dbname=%s;charset=utf8;encoding=utf8',$config['db_host'],$config['db_name']),$config['db_user'],$config['db_pass'],[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_PERSISTENT=>true,PDO::MYSQL_ATTR_INIT_COMMAND=>'SET time_zone=\''.date('P').'\'']);

To imo tylko zaciemnianie kodu.


  1. if (!isset($_GET['p'])) $_GET['p']='home';

Serio musisz to przypisywać prosto do GET'a ?
KsaR
Co do define chodzi o 'ok'?
Co do zaciemniania, wedlug mnie wlasnie czytelniej tongue.gif bo i tak w tablicy dane.
Co do przypisania do get,
Bylo na poczatku tak:

if (...)
{
tu switch
}
else $page=[...];
Jednak zrobilem jak wyzej bo bylo podwujnie w else i default to samo tongue.gif

--
Pyton_000 - nie mam jak teraz sprawdzic, hostingodawca wylaczyl cos dostep do error_loga nie wiem czemu aaevil.gif musze cos pokombinowac, bo blank page -,- < nie testowalem po zmianach, tak samo jak widac tam "cytaty online" biggrin.gif heh
kapslokk
Tak, chodzi o ok... Po co to?biggrin.gif

Jeżeli uważasz, że ta linijka jest czytelna, no to cóż biggrin.gif musisz z tym żyć haha.gif
Co do geta, to juz lepiej sobie przepisz to do innej zmiennej i tam coś zmieniaj, a nie bezposrednio w gecie.
KsaR
Cytat(kapslokk @ 28.09.2015, 11:19:51 ) *
Tak, chodzi o ok... Po co to?biggrin.gif

W includowanych plikach robie:

if (!defined('ok')) exit;

Zeby ktos nie wszedl w plik bezposrednio (includowany).
kapslokk
Cytat(KsaR @ 28.09.2015, 11:22:49 ) *
W includowanych plikach robie:

if (!defined('ok')) exit;

Zeby ktos nie wszedl w plik bezposrednio (includowany).


To żeś ładnie nazwał stałą. Od razu wiedziałem o co chodzi.
KsaR
  1. <?php
  2. ob_start('ob_gzhandler')?:ob_start();
  3.  
  4. define('IS_DEBUG', true); // DEBUG MODE.
  5. define('included', true); // for included files.
  6. define('RP', $_SERVER['DOCUMENT_ROOT']); // root patch.
  7.  
  8. if (IS_DEBUG)
  9. {
  10. ini_set('log_errors',true);
  11. ini_set('error_log','errors.log.txt');
  12. ini_set('display_errors',true);
  13. ini_set('display_startup_errors',true);
  14. ini_set('track_errors',true);
  15. }
  16. else ini_set('display_errors',false);
  17.  
  18. session_set_cookie_params(86400,'/',$_SERVER['HTTP_HOST'],false,true); #-1:ssl; -0: httpOnly.
  19. session_save_path(__DIR__.'/sess/'); # change dir of sess; defend for shared hosting.
  20.  
  21. # functions include #
  22. include RP.'/php/functions.php';
  23.  
  24. register_shutdown_function('footer');
  25.  
  26. $page=['title'=>'Blog - KsaR','name'=>'home'];
  27. switch ((isset($_GET['p']) ? $_GET['p'] : ''))
  28. {
  29. case 'signin': $page=['title'=>'Logowanie','name'=>'signin']; break;
  30. case 'signup': $page=['title'=>'Rejestracja','name'=>'signup']; break;
  31. case 'addpost': $page=['title'=>'Dodaj post','name'=>'addpost']; break;
  32. case 'addcategory': $page=['title'=>'Dodaj kategorię','name'=>'addcategory']; break;
  33. case 'signout': $_SESSION=[]; session_destroy(); break;
  34. }
  35.  
  36. $server=sprintf('//%s/~%s/',$_SERVER['SERVER_ADDR'],explode('/',$_SERVER['SCRIPT_FILENAME'])[2]);
  37. ?>
  38. <!DOCTYPE html SYSTEM "about:legacy-compat">
  39. <html lang="pl" dir="ltr">
  40. <head>
  41. <meta charset="UTF-8"/>
  42. <title><?=$page['title']?></title>
  43. <meta name="viewport" content="width=device-width,maximum-scale=2.5,initial-scale=1.0"/>
  44. <link rel="stylesheet" href="<?=$server?>'css/style.min.css?v=0"/>
  45. <meta name="MobileOptimized" content="true"/>
  46. <meta name="HandheldFriendly" content="true"/>
  47. <meta name="author" content="KsaR"/>
  48. <meta name="keywords" content="ksar,blog,php,polski"/>
  49. </head>
  50. <body>
  51. <?php
  52. // @author: KsaR.
  53. ## session security ##
  54. // before stolen session
  55. if (isset($_SESSION['owner']) && $_SESSION['owner']!==$_SERVER['HTTP_USER_AGENT'])
  56. {
  57. exit('<div class="err"><b>Wykryto i udaremniono próbę przejęcia sesji użytkownika.</b></div>');
  58. }
  59. else
  60. {
  61. $_SESSION['owner']=$_SERVER['HTTP_USER_AGENT'];
  62. }
  63. ##-session security-##
  64.  
  65. $logged=isset($_SESSION['uid']);
  66.  
  67. try
  68. {
  69. $config=
  70. [
  71. 'db_host'=>'127.0.0.1',
  72. 'db_name'=>'baza',
  73. 'db_user'=>'uzytkownik',
  74. 'db_pass'=>'haslo'
  75. ];
  76. $pdo=new PDO('mysql:host='.$config['db_host'].';dbname='.$config['db_name'].';charset=utf8;encoding=utf8',$config['db_user'],$config['db_pass'],
  77. [
  78. PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
  79. PDO::ATTR_PERSISTENT=>true,
  80. PDO::MYSQL_ATTR_INIT_COMMAND=>'SET time_zone=\''.date('P').'\''
  81. ]);
  82. }
  83. catch(PDOException $e)
  84. {
  85. exit(sprintf('<div class="err">Wystąpił problem podczas połączenia z bazą danych.<br/>%s</div>',$e->getMessage()));
  86. }
  87.  
  88. if ($logged)
  89. {
  90. $user=$pdo->prepare('SELECT `staff` FROM `users` WHERE `userId`=? LIMIT 1');
  91. $user->execute([$_SESSION['userId']]);
  92. $user=$user->fetch(PDO::FETCH_ASSOC);
  93. }
  94. ?>
  95. <header>
  96. <nav id="menu">
  97. <ul>
  98. <li><a href="/">Strona główna</a></li>
  99. <?php
  100. if ($logged)
  101. {
  102. if ($user['staff']):
  103. ?>
  104. <li><a href="/addpost/">Dodaj post</a></li>
  105. <li><a href="/addcategory/">Dodaj kategorie</a></li>
  106. <?php
  107. endif;
  108. ?>
  109. <li><a href="/signout/">Wyloguj</a></li>
  110. <?php
  111. }
  112. ?>
  113. <li><a href="/signin/">Logowanie</a></li>
  114. <li><a href="/signup/">Rejestracja</a></li>
  115. </ul>
  116. </nav>
  117. </header>
  118. <main>
  119. <?php
  120. ob_start('ob_clear');
  121. include sprintf('%s/pages_include/%s.php',RP,$page['name']);

Ok zmiany i juz nie blank page,

Pyton_000:
Cytat
Wystąpił problem podczas połączenia z bazą danych.<br/>SQLSTATE[HY000] [1045] Access denied for user 'uzytkownik'@'localhost' (using password: YES)


Juz chyba wszystko poprawilem, jeszcze coś źle? tongue.gif
kapslokk
  1. $page=['title'=>'Blog - KsaR','name'=>'home'];
  2. switch ((isset($_GET['p']) ? $_GET['p'] : ''))
  3. {
  4. case 'signin': $page=['title'=>'Logowanie','name'=>'signin']; break;
  5. case 'signup': $page=['title'=>'Rejestracja','name'=>'signup']; break;
  6. case 'addpost': $page=['title'=>'Dodaj post','name'=>'addpost']; break;
  7. case 'addcategory': $page=['title'=>'Dodaj kategorię','name'=>'addcategory']; break;
  8. case 'signout': $_SESSION=[]; session_destroy(); break;
  9. }


ten switch jest głupi, bo i tak będzie sprawdzał warunki nawet gdy nie będzie $_GET['p'];
Wg. mnie lepiej by było:
  1. if(isset($_GET['p']){
  2. switch ($_GET['p']))
  3. {
  4. case 'signin': $page=['title'=>'Logowanie','name'=>'signin']; break;
  5. case 'signup': $page=['title'=>'Rejestracja','name'=>'signup']; break;
  6. case 'addpost': $page=['title'=>'Dodaj post','name'=>'addpost']; break;
  7. case 'addcategory': $page=['title'=>'Dodaj kategorię','name'=>'addcategory']; break;
  8. case 'signout': $_SESSION=[]; session_destroy(); break;
  9. }
  10. }
  11. if(!isset($page){
  12. $page=['title'=>'Blog - KsaR','name'=>'home'];
  13. }

Ale to już ktoś mądrzejszy by się musiał wypowiedzieć.

A co do samego kodu, jeżeli chcesz rozwijać ten 'blog' to przydały by się jakieś obiekty i system szablonów.
Pyton_000
Wiedz że jeśli serwer się wykrzaczy lub inny timeout to Exception z POD wywali Ci PLAIN password. Dlatego nie rób czegoś takiego jak $e->getMessage().
KsaR
  1. $page=['title'=>'Blog - KsaR','name'=>'home'];
  2. if (isset($_GET['p']))
  3. {
  4. switch ($_GET['p'])
  5. {
  6. case 'signin': $page=['title'=>'Logowanie','name'=>'signin']; break;
  7. case 'signup': $page=['title'=>'Rejestracja','name'=>'signup']; break;
  8. case 'addpost': $page=['title'=>'Dodaj post','name'=>'addpost']; break;
  9. case 'addcategory': $page=['title'=>'Dodaj kategorię','name'=>'addcategory']; break;
  10. case 'signout': $_SESSION=[]; session_destroy(); break;
  11. }
  12. }


Cytat(Pyton_000 @ 28.09.2015, 12:31:14 ) *
Wiedz że jeśli serwer się wykrzaczy lub inny timeout to Exception z POD wywali Ci PLAIN password. Dlatego nie rób czegoś takiego jak $e->getMessage().

A co zamiast robić? Zeby blad otrzymac?
Pyton_000
Przecież masz tam tylko połączenie z bazą, więc zwykły komunikat Ci wystarczy.
KsaR
Cytat(Pyton_000 @ 28.09.2015, 12:34:22 ) *
Przecież masz tam tylko połączenie z bazą, więc zwykły komunikat Ci wystarczy.

A no, tak biggrin.gif

  1. catch(PDOException $e)
  2. {
  3. exit('<div class="err">Wystąpił problem podczas połączenia z bazą danych.</div>');
  4. }


Poprawione.
com
pytałeś o praktyki zdalne, słyszałem IBM takie robił jakiś czas temu tongue.gif
Ale lepiej zrobić coś w tradycyjny sposób, bo tam nie wiele sie nauczysz.
memory
widzisz KsaR dlatego praktyki powinieneś odbyć stacjonarnie
Wazniak96
Ajj KsaR.. Z tego co pamiętam cały czas zaciemniałeś kod przez optymalizację i przez to co Ci się podoba.

Niestety ten zawód nie działa tak jak i cały świat. Musisz się układać pod standardy, a nie własne upodobania by pracować w tym zawodzie.

Dzisiaj właśnie było na wykładach wspomniane o tym słowo. Oczywiście zazwyczaj stylistyka kodu ma pierwszeństwo przed optymalizacją wink.gif
Pyton_000
Cytat(Wazniak96 @ 28.09.2015, 15:53:05 ) *
Oczywiście zazwyczaj stylistyka kodu ma pierwszeństwo przed optymalizacją wink.gif

Powodzenia w zawodzie...
mrc
Co ma stylistyka kodu do optymalizacji? Klamrowania, wcięcia, nawiasowanie - co to ma wspólnego z optymalizacją?

Jak ktoś nauczy się ładnie pisać na początku, to zawsze będzie pisał ładny kod, przed i po optymalizacji.
Wazniak96
Chodziło mi o to, że np. mieszanie kodu PHP z HTML. wink.gif
pyro
Cytat(Wazniak96 @ 28.09.2015, 19:36:11 ) *
Chodziło mi o to, że np. mieszanie kodu PHP z HTML. wink.gif


To nie jest stylistyka kodu... Mylisz pojęcia
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.