<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>aplikacje internetowe - Kama Kaczmarek</title>
	<atom:link href="https://kamakaczmarek.net/tag/aplikacje-internetowe/feed/" rel="self" type="application/rss+xml" />
	<link>https://kamakaczmarek.net/tag/aplikacje-internetowe/</link>
	<description>Strona z materiałami dla uczniów i nauczycieli</description>
	<lastBuildDate>Wed, 09 Sep 2026 15:59:15 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>EMMET &#8211; plugin usprawniający pisanie kodu</title>
		<link>https://kamakaczmarek.net/emmet-plugin-usprawniajacy-pisanie-kodu/</link>
		
		<dc:creator><![CDATA[Kama]]></dc:creator>
		<pubDate>Thu, 10 Sep 2020 12:49:55 +0000</pubDate>
				<category><![CDATA[dla ucznia]]></category>
		<category><![CDATA[aplikacje internetowe]]></category>
		<category><![CDATA[emmet]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[strony www]]></category>
		<guid isPermaLink="false">http://kamakaczmarek.net/?p=2108</guid>

					<description><![CDATA[<p>Nauczycie&#160;się&#160;pisać&#160;szybszy&#160;i&#160;wydajniejszy&#160;kod&#160;HTML&#160;i&#160;CSS. Aby&#160;Tab&#160;w&#160;Emmet&#160;działał&#160;plik&#160;musi&#160;być&#160;zapisany&#160;jako&#160;html. Jeżeli&#160;piszemy&#160;skrót&#160;dla&#160;Emmeta&#160;i&#160;przejdziemy&#160;do&#160;innej&#160;linijki&#160;to&#160;nasze&#160;polecenie&#160;zostanie&#160;„zapomniane”,&#160;należy&#160;wtedy&#160;wykasować&#160;ostatnią&#160;literkę&#160;i&#160;kontynuować&#160;pisanie&#160;polecenia.&#160; Proponuję korzystać z Visual&#8217;a (ma więcej podpowiedzi niż Sublime). &#160; Lista skrótów Po&#160;każdym&#160;skrócie&#160;klikamy&#160;Tab ! – struktura witryny &#60;!DOCTYPE html&#62; &#60;html lang=&#8221;en&#8221;&#62; &#60;head&#62;     &#60;meta charset=&#8221;UTF-8&#8243;&#62;     &#60;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1.0&#8243;&#62;     &#60;title&#62;Document&#60;/title&#62; &#60;/head&#62; &#60;body&#62;      &#60;/body&#62; &#60;/html&#62;   Wstawianie css i skryptów link:css &#8211; wstawianie linków &#60;link rel=&#8221;stylesheet&#8221; href=&#8221;style.css&#8221;&#62;   link:css[href=bla] &#8211; wstawianie linków i określanie ściezki dostępu &#60;link rel=&#8221;stylesheet&#8221; href=&#8221;bla&#8221;&#62;   [&#8230;]</p>
<p>Artykuł <a href="https://kamakaczmarek.net/emmet-plugin-usprawniajacy-pisanie-kodu/">EMMET &#8211; plugin usprawniający pisanie kodu</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div>
<div>Nauczycie&nbsp;się&nbsp;pisać&nbsp;szybszy&nbsp;i&nbsp;wydajniejszy&nbsp;kod&nbsp;HTML&nbsp;i&nbsp;CSS.</div>
<div>Aby&nbsp;Tab&nbsp;w&nbsp;Emmet&nbsp;działał&nbsp;plik&nbsp;musi&nbsp;być&nbsp;zapisany&nbsp;jako&nbsp;html.</div>
<div>Jeżeli&nbsp;piszemy&nbsp;skrót&nbsp;dla&nbsp;Emmeta&nbsp;i&nbsp;przejdziemy&nbsp;do&nbsp;innej&nbsp;linijki&nbsp;to&nbsp;nasze&nbsp;polecenie&nbsp;zostanie&nbsp;„zapomniane”,&nbsp;należy&nbsp;wtedy&nbsp;wykasować&nbsp;ostatnią&nbsp;literkę&nbsp;i&nbsp;kontynuować&nbsp;pisanie&nbsp;polecenia.&nbsp;</div>
<div>Proponuję korzystać z Visual&#8217;a (ma więcej podpowiedzi niż Sublime).</div>
&nbsp;</div>



<h2>Lista skrótów</h2>
<p>Po&nbsp;każdym&nbsp;skrócie&nbsp;klikamy&nbsp;Tab</p>



<p><strong>!</strong> – struktura witryny</p>
<div>&lt;!DOCTYPE html&gt;</div>
<div>&lt;html lang=&#8221;en&#8221;&gt;</div>
<div>&lt;head&gt;</div>
<div>    &lt;meta charset=&#8221;UTF-8&#8243;&gt;</div>
<div>    &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1.0&#8243;&gt;</div>
<div>    &lt;title&gt;Document&lt;/title&gt;</div>
<div>&lt;/head&gt;</div>
<div>&lt;body&gt;</div>
<div>    </div>
<div>&lt;/body&gt;</div>
<div>&lt;/html&gt;</div>
<div> </div>
<h4>Wstawianie css i skryptów</h4>
<p><strong>link:css &#8211; </strong>wstawianie linków</p>
<div>&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;style.css&#8221;&gt;</div>
<div> </div>
<p><strong>link:css[href=bla]</strong> &#8211; wstawianie linków i określanie ściezki dostępu</p>
<div>&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;bla&#8221;&gt;</div>
<div> </div>
<p><strong>script:src</strong> &#8211; wstawianie skryptów</p>
<div>&lt;script src=&#8221;&#8221;&gt;&lt;/script&gt;</div>
<div> </div>
<p><strong>meta:vp &#8211; </strong>wstawianie metatagów</p>
<div>&lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1.0&#8243;&gt;</div>
<h3>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</h3>
<p><strong>Ctrl+/</strong> &#8211; komentarz dla całej linii nie ważne gdzie jesteśmy</p>
<div><strong>Shift+alt+a</strong> &#8211; komentarz zaznaczenia</div>
<div> </div>
<div><strong>shift+alt+up/down(w visual) lub Ctrl+shift+d(w sublime)</strong> &#8211; duplikuje nam wiersz, w którym mamy postawiony kursor lub zaznaczony fragment</div>
<div> </div>
<div><strong>div*3</strong> – wiele elementów na raz</div>
<div>&lt;div&gt;&lt;/div&gt;</div>
<div>&lt;div&gt;&lt;/div&gt;</div>
<div>&lt;div&gt;&lt;/div&gt;</div>
<div> </div>
<div><strong>alt+up/down(w visual) lub ctrl+shift+up/down(w sublime)</strong> – przesuwamy wiersz w górę lub w dół. Nie musi on być zaznaczony.</div>
<div> </div>
<h4>Combinator selectors w CSS mają zastosowanie w działaniu emmeta</h4>
<div><strong>&gt; bezpośrednie child w danym elemencie np. nav&gt;ul&gt;li</strong></div>
<div>&lt;nav&gt;</div>
<div>    &lt;ul&gt;</div>
<div>        &lt;li&gt;&lt;/li&gt;</div>
<div>    &lt;/ul&gt;</div>
<div>&lt;/nav&gt;</div>
<div> </div>
<div><strong>+ siblings działają na tym samym poziomie np. div+p+bq</strong></div>
<div>&lt;div&gt;&lt;/div&gt;</div>
<div>&lt;p&gt;&lt;/p&gt;</div>
<div>&lt;blockquote&gt;&lt;/blockquote&gt;</div>
<div> </div>
<div><strong>^ wychodzenie poziom wyżej przy pisaniu komend np. div+div&gt;p&gt;span+em^bq (można stawiać kilka ^^)</strong></div>
<div>&lt;div&gt;&lt;/div&gt;</div>
<div>&lt;div&gt;</div>
<div>    &lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;</div>
<div>    &lt;blockquote&gt;&lt;/blockquote&gt;</div>
<div>&lt;/div&gt;</div>
<div> </div>
<div><strong>() oddziela poziomy od siebie np. div&gt;(header&gt;ul&gt;li*2&gt;a)+footer&gt;p</strong></div>
<div>&lt;div&gt;</div>
<div>    &lt;header&gt;</div>
<div>        &lt;ul&gt;</div>
<div>            &lt;li&gt;&lt;a href=&#8221;&#8221;&gt;&lt;/a&gt;&lt;/li&gt;</div>
<div>            &lt;li&gt;&lt;a href=&#8221;&#8221;&gt;&lt;/a&gt;&lt;/li&gt;</div>
<div>        &lt;/ul&gt;</div>
<div>    &lt;/header&gt;</div>
<div>    &lt;footer&gt;</div>
<div>        &lt;p&gt;&lt;/p&gt;</div>
<div>    &lt;/footer&gt;</div>
<div>&lt;/div&gt;</div>
<div> </div>
<div><strong>$ &#8211; zamieniany jest na kolejne liczby np. p{tekst $}*5 wyświetli 5 </strong><strong>akapitów i w tekście po kolei od 1 do 5; jeżeli po $ dodamy @jakaścyfra, </strong><strong>to numerowanie rozpocznie się od podanej cyfry</strong></div>
<div> </div>
<div><strong>p{tekst $}*3</strong></div>
<div>    &lt;p&gt;tekst 1&lt;/p&gt;</div>
<div>    &lt;p&gt;tekst 2&lt;/p&gt;</div>
<div>    &lt;p&gt;tekst 3&lt;/p&gt;</div>
<div> </div>
<div><strong>h$[title=item$]{Header $}*3</strong></div>
<div>    &lt;h1 title=&#8221;item1&#8243;&gt;Header 1&lt;/h1&gt;</div>
<div>    &lt;h2 title=&#8221;item2&#8243;&gt;Header 2&lt;/h2&gt;</div>
<div>    &lt;h3 title=&#8221;item3&#8243;&gt;Header 3&lt;/h3&gt;</div>
<div> </div>
<div><strong>ul&gt;li.item$@3*5</strong></div>
<div>&lt;ul&gt;</div>
<div>    &lt;li class=&#8221;item3&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item4&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item5&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item6&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item7&#8243;&gt;&lt;/li&gt;</div>
<div>&lt;/ul&gt;</div>
<div> </div>
<div><strong>ul&gt;li.item$@-*5(w sublime) lub w visualu nie jest obsługiwana tak jak div$@*2</strong></div>
<div>&lt;ul&gt;</div>
<div>    &lt;li class=&#8221;item5&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item4&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item3&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item2&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item1&#8243;&gt;&lt;/li&gt;</div>
<div>&lt;/ul&gt;</div>
<div> </div>
<div><strong>ul&gt;li.item$$$*5</strong></div>
<div>&lt;ul&gt;</div>
<div>    &lt;li class=&#8221;item001&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item002&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item003&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item004&#8243;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;item005&#8243;&gt;&lt;/li&gt;</div>
<div>&lt;/ul&gt;</div>
<div> </div>
<h4>Klasy, ID, atrybuty, zawartość</h4>
<div><strong>.nazwa</strong> – tworzy div z klasą</div>
<div>&lt;div class=&#8221;nazwa&#8221;&gt;&lt;/div&gt;</div>
<div> </div>
<div><strong>#nazwa</strong> – tworzy div z id</div>
<div>&lt;div id=&#8221;nazwa&#8221;&gt;&lt;/div&gt;</div>
<div> </div>
<div><strong>form#search.wide</strong></div>
<div>&lt;form action=&#8221;&#8221; id=&#8221;search&#8221; class=&#8221;wide&#8221;&gt;&lt;/form&gt;</div>
<div> </div>
<div><strong>p.text</strong> – nadaje klasę podanemu znacznikowi</div>
<div>&lt;p class=&#8221;text&#8221;&gt;&lt;/p&gt;</div>
<div> </div>
<div><strong>[name]</strong> – dodaje atrybut do div, można atrybutowi nadać wartość np. href=#, kolejne atrybuty nadajemy dalej po spacji</div>
<div>&lt;div name=&#8221;&#8221;&gt;&lt;/div&gt;</div>
<div> </div>
<div><strong>img[alt=bla]</strong> – dodaje atrybut do konkretnego znacznika, można atrybutowi nadać wartość np. href=#, kolejne atrybuty nadajemy dalej po spacji</div>
<div>&lt;img src=&#8221;&#8221; alt=&#8221;bla&#8221;&gt;</div>
<div> </div>
<div><strong>td[rowspan=2 colspan=3 title]</strong></div>
<div>&lt;td rowspan=&#8221;2&#8243; colspan=&#8221;3&#8243; title=&#8221;&#8221;&gt;&lt;/td&gt;</div>
<div> </div>
<div><strong>a{Click me}</strong> – dodawanie tekstu wewnątrz znaczników</div>
<div>&lt;div class=&#8221;a&#8221;&gt;Click me&lt;/div&gt;   </div>
<div> </div>
<div><strong>p&gt;{Click }+a{here}+{ to continue}</strong></div>
<div>&lt;p&gt;</div>
<div>    Click </div>
<div>    &lt;a href=&#8221;&#8221;&gt;here&lt;/a&gt;</div>
<div>    to continue</div>
<div>&lt;/p&gt;</div>
<div> </div>
<h4>Emmet wie jakie tagi umieszczać wewnątrz nadrzędnego tagu, np.</h4>
<div><strong>ul&gt;.klasa*5</strong> – automatycznie doda li</div>
<div>&lt;ul&gt;</div>
<div>    &lt;li class=&#8221;klasa&#8221;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;klasa&#8221;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;klasa&#8221;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;klasa&#8221;&gt;&lt;/li&gt;</div>
<div>    &lt;li class=&#8221;klasa&#8221;&gt;&lt;/li&gt;</div>
<div>&lt;/ul&gt;</div>
<div> </div>
<div><strong>em&gt;.klasa</strong> – doda span do znacznika pochylającego tekst i podnoszącego jego wartość semantyczną</div>
<div>&lt;em&gt;&lt;span class=&#8221;klasa&#8221;&gt;&lt;/span&gt;&lt;/em&gt;</div>
<div> </div>
<div><strong>table&gt;.a$*3&gt;.b$*2</strong></div>
<div>&lt;table&gt;</div>
<div>    &lt;tr class=&#8221;a1&#8243;&gt;</div>
<div>        &lt;td class=&#8221;b1&#8243;&gt;&lt;/td&gt;</div>
<div>        &lt;td class=&#8221;b2&#8243;&gt;&lt;/td&gt;</div>
<div>    &lt;/tr&gt;</div>
<div>    &lt;tr class=&#8221;a2&#8243;&gt;</div>
<div>        &lt;td class=&#8221;b1&#8243;&gt;&lt;/td&gt;</div>
<div>        &lt;td class=&#8221;b2&#8243;&gt;&lt;/td&gt;</div>
<div>    &lt;/tr&gt;</div>
<div>    &lt;tr class=&#8221;a3&#8243;&gt;</div>
<div>        &lt;td class=&#8221;b1&#8243;&gt;&lt;/td&gt;</div>
<div>        &lt;td class=&#8221;b2&#8243;&gt;&lt;/td&gt;</div>
<div>    &lt;/tr&gt;</div>
<div>&lt;/table&gt;</div>
<div> </div>
<h4>podajemy typ używając tag:</h4>
<div><strong>input:podajemytyp</strong></div>
<div>&lt;input type=&#8221;password&#8221; name=&#8221;&#8221; id=&#8221;&#8221;&gt;</div>
<div> </div>
<div> <strong>a:mail</strong></div>
<div>&lt;a href=&#8221;mailto:&#8221;&gt;&lt;/a&gt;</div>
<div> </div>
<h4><strong>lorem ipsum</strong></h4>
<div><strong>lorem</strong> – dodaje klasyczny loremipsum 2 zdaniowy</div>
<div>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ratione, laborum similique placeat amet illum quibusdam aperiam doloremque aliquam, sunt dolorum minus est voluptatum tempora? Vitae veniam fugiat voluptatibus voluptas impedit.</div>
<div> </div>
<div><strong>lorem5</strong> – lorem z 5 wyrazów</div>
<div>Lorem ipsum dolor sit amet. lorem5 – lorem z 5 wyrazów</div>
<div> </div>
<div><strong>p*3&gt;lorem10</strong> – 3 akapity z 10 wyrazowym lorem</div>
<div>&lt;p&gt;Lorem ipsum dolor sit, amet consectetur adipisicing elit. Numquam, veniam.&lt;/p&gt;</div>
<div>&lt;p&gt;Accusamus non doloribus ipsam nisi odio a, vel omnis impedit?&lt;/p&gt;</div>
<div>&lt;p&gt;Odio commodi expedita voluptas voluptate officiis maxime similique iste sunt?&lt;/p&gt;</div>
<div> </div>
<h3>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</h3>
<div> </div>
<div> </div>
<div>Możemy ustawić się w <strong>wielu miejscach na raz</strong>, by jednocześnie wpisywać teskt w różnych linijkach np. gdy zapomnimy dodać alt do img, aby tego dokonać wciskamy</div>
<div><strong>lewy alt i klikamy</strong> tam, gdzie chcemy umieścić kursor lub możemy też nacisnąć <strong>ctrl+shift+alt i strzałkami góra/dół</strong> tworzyć nowe kursory</div>
<div> </div>
<div><strong>ctrl+d</strong> zaznacza takie same wyrazy tworząc nowe kursory, możemy wprowadzać zmiany w wielu miejscach na raz</div>
<div> </div>
<div><strong>ctrl+shift+g (w sublime)</strong> obejmowanie znacznikiem zaznaczenia, tzw. wrapping,</div>
<div>w visualu klikamy <strong>ctrl+shift+p lub edit-&gt;emmet&#8230;</strong> i wpisujemy emmet: wrap with abbreviation</div>
<div> </div>
<div><em><strong>Pełna lista skrótów <a href="https://docs.emmet.io/cheat-sheet/">https://docs.emmet.io/cheat-sheet/</a></strong></em></div>
<p>Artykuł <a href="https://kamakaczmarek.net/emmet-plugin-usprawniajacy-pisanie-kodu/">EMMET &#8211; plugin usprawniający pisanie kodu</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2. PHP &#8211; pierwszy skrypt, echo, komentarze.</title>
		<link>https://kamakaczmarek.net/php-pierwszy-skrypt-echo-komentarze/</link>
		
		<dc:creator><![CDATA[Kama]]></dc:creator>
		<pubDate>Fri, 28 Sep 2018 18:18:39 +0000</pubDate>
				<category><![CDATA[aplikacje]]></category>
		<category><![CDATA[dla ucznia]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[aplikacje internetowe]]></category>
		<category><![CDATA[echo]]></category>
		<category><![CDATA[komentarze]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[składnia]]></category>
		<guid isPermaLink="false">https://kamakaczmarek.net/?p=2284</guid>

					<description><![CDATA[<p>Na zakończenie ostatniego tematu poprosiłam Cię o stworzenie &#8222;zeszytu elektronicznego&#8221;. W panelu lewym Twojego &#8222;zeszytu&#8221; dodaj link o treści: &#8222;PHP &#8211; pierwszy skrypt, echo, komentarze.&#8221;, który przeniesie Cię do podstrony o nazwie: &#8222;data_dziesiejszych_zajec.php&#8221; (oczywiście wpisz datę zajęć np. 280918.php). Pliki projektu zapisuj w katalogu serwera WWW, np.&#160;C:\xampp\htdocs\NAZWA_PROJEKTU\&#160;(Windows + XAMPP). Dzięki temu nie mieszasz plików z [&#8230;]</p>
<p>Artykuł <a href="https://kamakaczmarek.net/php-pierwszy-skrypt-echo-komentarze/">2. PHP &#8211; pierwszy skrypt, echo, komentarze.</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Na zakończenie ostatniego tematu poprosiłam Cię o stworzenie &#8222;zeszytu elektronicznego&#8221;. W panelu lewym Twojego &#8222;zeszytu&#8221; dodaj link o treści: &#8222;PHP &#8211; pierwszy skrypt, echo, komentarze.&#8221;, który przeniesie Cię do podstrony o nazwie: &#8222;data_dziesiejszych_zajec.php&#8221; (oczywiście wpisz datę zajęć np. 280918.php).</p>



<p class="wp-block-paragraph">Pliki projektu zapisuj w katalogu serwera WWW, np.&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">C:\xampp\htdocs\NAZWA_PROJEKTU\</code>&nbsp;(Windows + XAMPP). Dzięki temu nie mieszasz plików z innymi ćwiczeniami i łatwo przenosisz projekt.</p>



<p class="wp-block-paragraph"><strong>Uwaga: skrypty php muszą być zapisane w pliku z rozszerzeniem .php, NIE .html.</strong></p>



<p class="wp-block-paragraph">Uruchom XAMPP Control Panel i wystartuj&nbsp;<strong>Apache</strong>.&nbsp;<strong>MySQL</strong>&nbsp;uruchamiaj tylko wtedy, gdy dana lekcja faktycznie korzysta z bazy danych. Uruchom przeglądarkę internetową wpisując w pasku adresu: <strong>localhost</strong>.</p>



<p class="wp-block-paragraph">Jesteś gotowy do pracy.</p>



<h2 class="wp-block-heading"><strong>Składnia PHP</strong></h2>



<p class="wp-block-paragraph">O składni języka PHP mówiliśmy na poprzedniej lekcji, ale w celu przypomnienia, aby skrypt PHP został prawidłowo zinterpretowany musi znajdować się pomiędzy standardowymi znacznikami:</p>



<pre class="wp-block-preformatted prettyprint">&lt;?php <br />    // kod PHP</pre>



<p class="wp-block-paragraph">Zamykanie&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">?&gt;</code>&nbsp;na końcu pliku PHP jest&nbsp;<strong>opcjonalne</strong>&nbsp;i często się go&nbsp;<strong>nie stosuje</strong>&nbsp;(zmniejsza ryzyko przypadkowego wysłania białych znaków i problemów z nagłówkami).</p>



<h2 class="wp-block-heading"><strong>Komentarze</strong></h2>



<p class="wp-block-paragraph">Pamiętasz jak wygląda komentarz w HTML?</p>



<pre class="wp-block-preformatted prettyprint">&lt;!-- komentarz --&gt;
</pre>



<p class="wp-block-paragraph">Komentarze w języku PHP występują w 3 postaciach:</p>



<pre class="wp-block-preformatted prettyprint">&lt;?php<br />// komentarz liniowy<br /># działa jak komentarz liniowy, ale w praktyce w PHP najczęściej spotkasz //<br />/* komentarza blokowy<br />kolejna linia<br />i kolejna<br />i kolejna<br />aż do zamknięcia komentarza */<br />?&gt;<br /></pre>



<p class="wp-block-paragraph"><strong>Uwaga: nie wolno zagnieżdżać w sobie komentarzy blokowych!</strong></p>



<p class="wp-block-paragraph">Komentarze są bardzo przydatnym narzędziem i nie bój się z nich korzystać.</p>



<p class="wp-block-paragraph">Mamy jeszcze komentarz dokumentacyjny, który musi zaczynać się od <strong class="Yjhzub" data-processed="true"><code class="prettyprint lang-sql" style="font-size: 0.85em;">/**</code></strong>&nbsp;(otwarcie) i kończyć na&nbsp;<strong class="Yjhzub" data-processed="true"><code class="prettyprint lang-sql" style="font-size: 0.85em;">*/</code></strong>&nbsp;(zamknięcie). Każda linia wewnątrz bloku powinna zaczynać się od gwiazdki (<code class="prettyprint lang-sql" style="font-size: 0.85em;">*</code>).</p>



<pre class="wp-block-preformatted prettyprint">&lt;?php<br />/**<br /> * Krótki opis (podsumowanie) funkcji.<br /> *<br /> * Dłuższy opis funkcji, który może zawierać szczegóły<br /> * dotyczące implementacji lub działania.<br /> *<br /> * @param string $param1 Opis parametru pierwszego.<br /> * @param int    $param2 Opis parametru drugiego.<br /> * @return array         Opis zwracanej wartości.<br /> */<br />function przykladowaFunkcja($param1, $param2) {<br />    // ... kod<br />}<br />?&gt;</pre>



<div class="Y3BBE" data-sfc-cp="" data-hveid="CAcQAA" data-processed="true">Tagi pozwalają ustrukturyzować informacje o kodzie. Najpopularniejsze z nich to:<button class="rBl3me" tabindex="0" data-amic="true" data-icl-uuid="1e1f7757-8135-4c15-9422-24421ca3da0c" aria-label="Wyświetl powiązane materiały" data-wiz-attrbind="disabled=y4T9Yc_1g/C5gNJc;aria-label=y4T9Yc_1g/bOjMyf;class=y4T9Yc_1g/UpSNec" data-ved="2ahUKEwjo8qn-tOWSAxUGT1UIHRHjAIcQye0OegQIBxAB" data-processed="true"></button></div>



<ul class="wp-block-list KsbFXc U6u95">
<li><span class="T286Pc" data-sfc-cp="" data-processed="true"><strong class="Yjhzub" data-processed="true"><code class="prettyprint lang-sql" style="font-size: 0.85em;">@param</code>&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;typ&gt;</code>&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;zmienna&gt;</code>&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;opis&gt;</code></strong>: Opisuje parametry funkcji/metody.</span></li>



<li><span class="T286Pc" data-sfc-cp="" data-processed="true"><strong class="Yjhzub" data-processed="true"><code class="prettyprint lang-sql" style="font-size: 0.85em;">@return</code>&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;typ&gt;</code>&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;opis&gt;</code></strong>: Opisuje zwracaną wartość.</span></li>



<li><span class="T286Pc" data-sfc-cp="" data-processed="true"><strong class="Yjhzub" data-processed="true"><code class="prettyprint lang-sql" style="font-size: 0.85em;">@var</code>&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;typ&gt;</code></strong>: Używany do definiowania typu zmiennych (np. właściwości klasy).</span></li>



<li><span class="T286Pc" data-sfc-cp="" data-processed="true"><strong class="Yjhzub" data-processed="true"><code class="prettyprint lang-sql" style="font-size: 0.85em;">@author</code></strong>: Autor kodu.</span></li>



<li><span class="T286Pc" data-sfc-cp="" data-processed="true"><strong class="Yjhzub" data-processed="true"><code class="prettyprint lang-sql" style="font-size: 0.85em;">@since</code></strong>: Wersja, od której element jest dostępny.</span></li>



<li><span class="T286Pc" data-sfc-cp="" data-processed="true"><strong class="Yjhzub" data-processed="true"><code class="prettyprint lang-sql" style="font-size: 0.85em;">@throws</code>&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;typ&gt;</code>&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">&lt;opis&gt;</code></strong>: Opisuje wyjątki, które mogą zostać wyrzucone.</span></li>
</ul>



<h2 class="wp-block-heading"><strong>Wyświetlanie tekstu w przeglądarce</strong></h2>



<p class="wp-block-paragraph">Aby wyświetlić tekst w przeglądarce posługujemy się instrukcją <strong>echo</strong></p>



<pre class="wp-block-preformatted prettyprint">echo "Hello World!"; // wyświetli napis: Hello World! </pre>



<p class="wp-block-paragraph">Alternatywnie możesz posłużyć się funkcją <strong>print</strong></p>



<pre class="wp-block-preformatted prettyprint">print "Hello World!"; // wyświetli napis: Hello World!  </pre>



<p class="wp-block-paragraph">Hmm&#8230; czy są identyczne?</p>



<p class="wp-block-paragraph"><strong>echo </strong>i <strong>print </strong>służą do wypisywania tekstu.  <br />&#8211; echo to **konstrukcja językowa** i nie zwraca wartości.  <br />&#8211; print zachowuje się jak **wyrażenie** i zwraca `1`, więc teoretycznie można go użyć w wyrażeniach.  <br />W praktyce w nowoczesnym PHP (7/8) różnice wydajności są pomijalne — używaj tego, co jest czytelniejsze (najczęściej `echo`).</p>



<p class="wp-block-paragraph">ale co i jak jeszcze można wyświetlać:</p>



<pre class="wp-block-preformatted prettyprint">echo "&lt;br&gt;"; //w ten sposób dodajemy wyświetlanie nowej linii w HTML<br />echo "Linia 1\nLinia 2"; //w samym tekście (np. do pliku, do konsoli, do logów) używa się znaku nowej linii \n<br /><br />//wyświetlanie wielu linii<br />echo "Ten zapis obejmuje wiele linii, ale zostaną one wyświetlone w jednej linii, ponieważ sama instrukcja echo nie widzi w tym przypadku znaków nowej linii"; <br /><br />echo "&lt;br&gt;";<br />echo "&lt;br&gt;Ten zapis również obejmuje wiele linii.&lt;br&gt;<br />Będą one wyświetlane, w wielu liniach,&lt;br&gt;<br />przez dodanie znacznika nowego wiersza.";  <br /><br />echo "&lt;br&gt;";<br />//alternatywna metoda wyświetlania. PHP umożliwia tworzenie wielowierszowych ciągów znaków za pomocą operatora &lt;&lt;&lt;, czyli tzw. składni heredoc (here-document) umożliwiającej dosłowne wstawianie bloków tekstowych z zachowaniem miejsc łamania wierszy i innych białych znaków (w tym wcięć).Działa pod warunkiem, iż łańcuch rozpocznie się i zakończy tym samym słowem, w tym wypadku END. <br />Heredoc jest użyteczny, gdy chcesz wstawić większy blok tekstu bez uciekania cudzysłowów.  <br />Uwaga: jeżeli wypisujesz tekst do przeglądarki, sam znak nowej linii w tekście nie zrobi „nowej linii” w HTML — do tego potrzebujesz np. `&lt;br&gt;` albo CSS (`white-space`).<br />echo &lt;&lt;&lt;_END<br />Ten tekst może być wieloliniowy w edytorze.<br />Sprawdź czy zostanie tak wyświetlony w przeglądarce.<br />_END;<br /><br />W PHP 8 masz też **nowdoc** (gdy nie chcesz interpretacji zmiennych):  <br />```php<br />$txt = &lt;&lt;&lt;'END'<br />Tekst z $zmienna – tutaj NIE zostanie podstawiona.<br />END;<br />```<br /><br />echo "&lt;br&gt;";<br /><br />//wyświetlanie znaków specjalnych tj. "" musimy poprzedzić backslash'em<br />echo "Jeżeli chcemy wyświetlić cudzysłów \"Przykład\".";<br />/*<br />W łańcuchach w cudzysłowie `"` musisz uciekać znak `"` oraz możesz w nich używać sekwencji specjalnych (np. `\n`, `\t`).  <br />W apostrofach `'` nie ma interpretacji `\n` (poza `\'` i `\\`) i nie ma podstawiania zmiennych.<br />*/ <br /><br />echo "&lt;br&gt;"; <br /> <br />echo "Znak dolara \$";<br />echo "&lt;br&gt;";<br />echo "\"Tekst ujęty w znaki cudzysłowia\"";<br />echo "&lt;br&gt;";<br /><br />// Wyświetlanie zawartości zmiennych <br />$zmienna1 = "wartość zmiennej 1"; <br />$zmienna2 = "wartość zmiennej 2"; <br />echo "zmienna1 = $zmienna1, a zmienna2 = $zmienna2"; // wyświetli: zmienna1 = wartość zmiennej 1, a zmienna2 = wartość zmiennej 2<br /><br />echo "&lt;br&gt;"; <br /><br />// używając apostrofu wyświetlamy dokładnie to co znajduje się pomiędzy apostrofami (nie pobiera zawartości zmiennej)<br />echo 'wartość zmiennej 1 znajduje się w $zmienna1'; // wyświetli: wartość zmiennej 1 znajduje się w $zmienna1 <br /><br />echo "&lt;br&gt;"; <br /><br />// jeżeli wyświetlamy samą zmienną nie musimy używać cudzysłowów, ani apostrofów <br />echo $zmienna1; // wartość zmiennej 1<br /><br />echo "&lt;br&gt;"; <br /><br />echo "Wartością zmiennej \$zmienna1 jest $zmienna1 &lt;br&gt;"; <br /><br />echo "&lt;br&gt;"; <br />//łączenie wielu elementów do wyświetlenia<br />echo $zmienna1.$zmienna2."&lt;br&gt;"; // za pomocą kropki dołączamy kolejne zmienne <br />echo $zmienna1,$zmienna2,"&lt;br&gt;"; // przecinek działa podobnie, tylko ma inne zachowanie (m.in. nie działa jak konkatenacja i ma inny priorytet) - stosujemy kropkę<br /><br />// łączenie wielu elemetów - tekstu i zmiennych  <br />echo 'Można '.'łączyć '.'wiele '.'elementów '.' oraz dodawać zmienne '.$zmienna1.'&lt;br&gt;';<br /><br />// wyświetlanie tablicowe<br />$tablica = ["indeks" =&gt; "wartość"];<br />echo "wartość dla indeksu = {$tablica['indeks']} !"; <br />// wyświetli: wartość dla indeksu = wartość !<br /><br />echo "&lt;br&gt;";<br /><br />// wyświetlanie z warunkiem jeżeli (warunek) ? 'wartość gdy prawda' : 'wartość gdy fałsz'<br />$wiek = 18;<br />echo ($wiek &gt;= 18) ? 'pełnoletni' : 'niepełnoletni';</pre>



<h2 class="wp-block-heading"><strong>Integracja PHP z HTML</strong></h2>



<p class="wp-block-paragraph">Skrypty PHP możesz umieszczać w dowolnym miejscu kodu HTML, zarówno przed i za znacznikami jak i wewnątrz nich:</p>



<pre class="wp-block-preformatted prettyprint prettyprinted"><span class="dec">&lt;!DOCTYPE html&gt;</span>
<span class="tag">&lt;html&gt;</span>
<span class="tag">   &lt;head&gt;</span>
<span class="tag">   &lt;/head&gt;</span>
<span class="tag">   &lt;body&gt;</span><span class="pln">
      &lt;section id="</span><span class="pun">&lt;?</span><span class="pln">php </span><span class="com">dowolny skrypt </span><span class="pun">?&gt;</span><span class="pln">"&gt;
</span><span class="pln">         &lt;a href="</span><span class="pun">&lt;?</span><span class="pln">php echo </span><span class="str">'https://kamakaczmarek.net'</span><span class="pun">;</span> <span class="pun">?&gt;</span><span class="pln">"&gt;Materiały do nauki</span><span class="tag">&lt;/a&gt;</span>
<span class="tag">      &lt;/section&gt;</span>    
<span class="tag">   &lt;/body&gt;</span>
<span class="tag">&lt;/html&gt;</span></pre>



<p class="wp-block-paragraph">Istnieją 2 szkoły integrowania PHP z HTML:  pierwsza mówi o wyświetlaniu HTML za pomocą instrukcji <strong>echo, </strong>druga o rozdzieleniu HTML i PHP i umieszczaniu w kodzie HTML wielu skryptów objętych znacznikami &lt;?php ?&gt;. Ty decydujesz jakiej użyjesz. Ja jestem zwolenniczką 2 szkoły, ponieważ nie tracimy kolorowania składni HTML, a poza tym w testach jest odrobinę wydajniejsza ;P</p>



<pre class="wp-block-preformatted prettyprint">&lt;?php
   //wyświetlanie HTML w PHP  
   echo "&lt;p&gt;użycie HTML w PHP".$zmienna1."&lt;/p&gt;";  
?&gt;
&lt;p&gt;użycie PHP w HTML &lt;?php echo $zmienna1; ?&gt;&lt;/p&gt;
&lt;p&gt;użycie PHP w HTML w skróconej formie &lt;?=$zmienna1;?&gt;&lt;/p&gt;
</pre>



<p class="wp-block-paragraph">Wszystkie kody zaprezentowane w tej lekcji powinny zostać zapisane w Twoim zeszycie, przetestuj ich działanie i za pomocą CSS &#8222;upiększ&#8221; ich wyświetlanie.</p>



<h2 class="wp-block-heading">Zasady pisania kodu (dobre praktyki)</h2>



<p class="wp-block-paragraph">Dobrze napisany kod to taki, który jest&nbsp;<strong>czytelny</strong>,&nbsp;<strong>spójny</strong>,&nbsp;<strong>łatwy do rozbudowy</strong>&nbsp;i&nbsp;<strong>bezpieczny</strong>. Poniższe zasady warto stosować od pierwszych ćwiczeń.</p>



<h3 class="wp-block-heading">1) Czytelne nazewnictwo (zmienne, funkcje, pliki)</h3>



<ul class="wp-block-list">
<li>Używaj nazw, które mówią&nbsp;<strong>co przechowują / co robią</strong>, np.&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$cenaNetto</code>,&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$liczbaPunktow</code>,&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">obliczSume()</code>.</li>



<li>Unikaj skrótów typu&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$a</code>,&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$x</code>,&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$tmp</code>&nbsp;(chyba że w bardzo krótkim fragmencie i ma to sens).</li>



<li>Stosuj jeden styl zapisu, np.&nbsp;<strong>camelCase</strong>&nbsp;w PHP:
<ul class="wp-block-list">
<li>zmienne i funkcje:&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$nazwaUcznia</code>,&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">policzSrednia()</code></li>



<li>klasy:&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">NazwaKlasy</code></li>
</ul>
</li>



<li>Nazwy nie powinny być za długie, ale muszą być jednoznaczne.</li>
</ul>



<h3 class="wp-block-heading">2) Jeden język w kodzie</h3>



<ul class="wp-block-list">
<li>Trzymaj się konsekwentnie&nbsp;<strong>jednego języka nazw</strong>&nbsp;w projekcie.</li>



<li>Najczęściej spotkasz angielski (np.&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$userName</code>,&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$totalPrice</code>), ale jeśli w klasie/zeszycie ustalacie polski — używaj polskiego wszędzie.</li>



<li>Nie mieszaj: np. nie rób&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$userImie</code>&nbsp;albo&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$cenaTotal</code>.</li>
</ul>



<h3 class="wp-block-heading">3) Wcięcia, spacje i estetyka</h3>



<ul class="wp-block-list">
<li>Stosuj wcięcia (indentację) w blokach&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">{ }</code>&nbsp;— kod ma „wyglądać jak drzewko”.</li>



<li>Daj spacje po przecinkach i wokół operatorów:
<ul class="wp-block-list">
<li>dobrze:&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$a = $b + 2;</code></li>



<li>źle:&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">$a=$b+2;</code></li>
</ul>
</li>



<li>Jedna instrukcja na linię — unikaj „ściany kodu”.</li>



<li>Zostaw puste linie między logicznymi częściami programu (np. deklaracje zmiennych, obliczenia, wyświetlanie wyniku).</li>
</ul>



<h3 class="wp-block-heading">4) Komentarze – po co i jak</h3>



<ul class="wp-block-list">
<li>Komentarze mają tłumaczyć&nbsp;<strong>dlaczego</strong>&nbsp;coś robisz, a nie przepisywać oczywistości.</li>



<li>Dobre komentarze opisują zamiar, np. „Walidacja danych z formularza”, „Zabezpieczenie przed pustym parametrem”.</li>
</ul>



<h3 class="wp-block-heading">5) Unikaj powtórzeń (DRY)</h3>



<ul class="wp-block-list">
<li>Jeśli ten sam fragment kodu powtarza się 3+ razy, to znak, że warto zrobić:
<ul class="wp-block-list">
<li>funkcję, np.&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">formatujDate()</code></li>



<li>lub osobny plik/klasę (w większym projekcie)</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">6) Prosta struktura i podział na elementy</h3>



<ul class="wp-block-list">
<li>Mieszanie wszystkiego w jednym miejscu utrudnia pracę.</li>



<li>Staraj się rozdzielać:
<ul class="wp-block-list">
<li>pobieranie danych (np. z formularza)</li>



<li>przetwarzanie (logika)</li>



<li>wyświetlanie (HTML)</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">7) Przewidywalność i bezpieczeństwo danych</h3>



<ul class="wp-block-list">
<li>Nie ufaj danym z zewnątrz (formularze, URL) — sprawdzaj je (walidacja).</li>



<li>Przy wyświetlaniu tekstu w HTML stosuj escapowanie (ochrona przed XSS), np.&nbsp;<code class="prettyprint lang-sql" style="font-size: 0.85em;">htmlspecialchars(...)</code>.</li>



<li>Ustal, co ma się stać w przypadku błędu (np. brak danych, zły format) i obsłuż to w kodzie.</li>
</ul>



<h3 class="wp-block-heading">8) Stała konsekwencja</h3>



<p class="wp-block-paragraph">Najważniejsza zasada:&nbsp;<strong>konsekwencja</strong>. Jeśli w projekcie ustalisz:</p>



<ul class="wp-block-list">
<li>styl nazw,</li>



<li>wcięcia,</li>



<li>sposób formatowania, to trzymaj się tego w całym kodzie. Dzięki temu kod jest czytelny nie tylko dla Ciebie, ale też dla innych.</li>
</ul>





<div>
<h1>TaskQuest — Twój projekt na cały semestr</h1>
<br />
<h2>O czym jest ten projekt</h2>
<br />
<div>Przez cały kurs będziesz budować **jedną, konkretną aplikację internetową** — nie osobne, niepowiązane ćwiczenia, tylko jeden projekt, do którego co lekcję dokładasz nową „cegiełkę”. Na koniec będziesz miał(a) działającą, kompletną aplikację webową, którą naprawdę możesz pokazać innym (np. w portfolio) i naprawdę używać.</div>
<br />
<h2>Jak działa TaskQuest</h2>
<br />
<div><strong>TaskQuest</strong> to aplikacja do zarządzania zadaniami i nauką, w której — tak jak w grze — zdobywasz doświadczenie za wykonaną pracę.</div>
<br />
<div>&#8211; Zakładasz konto i się logujesz.</div>
<div>&#8211; Dodajesz zadania (np. „Nauczyć się pętli w PHP”, „Zrobić zadanie z matematyki”) z terminem wykonania.</div>
<div>&#8211; Gdy oznaczysz zadanie jako wykonane, dostajesz **punkty doświadczenia (XP)**.</div>
<div>&#8211; Zebranie odpowiedniej liczby XP daje **awans na wyższy poziom** (Nowicjusz → Wojownik → Mistrz&#8230;).</div>
<div>&#8211; Za konsekwentne wykonywanie zadań każdego dnia rośnie Twoja **passa (streak)**.</div>
<div>&#8211; Za różne osiągnięcia (np. 10 wykonanych zadań, 7-dniowy streak) odblokowujesz **odznaki**.</div>
<div>&#8211; Widzisz **ranking** — jak wypadasz na tle innych uczniów w klasie.</div>
<br />
<h2>Jak będzie wyglądać finalna aplikacja</h2>
<br />
<div>Na koniec kursu Twoja aplikacja będzie mieć:</div>
<br />
<div>1. <strong>Ekran logowania/rejestracji</strong> — formularz z nazwą użytkownika i hasłem (hasła bezpiecznie zaszyfrowane).</div>
<div>2. <strong>Dashboard (panel główny)</strong> — Twoje imię, aktualny poziom, pasek XP pokazujący postęp do następnego poziomu, aktualny streak.</div>
<div>3. <strong>Listę zadań</strong> — zadania do zrobienia i zadania ukończone, z terminami, możliwością dodania nowego zadania, oznaczenia jako zrobione i usunięcia.</div>
<div>4. <strong>Panel odznak</strong> — zdobyte i niezdobyte odznaki.</div>
<div>5. <strong>Ranking klasy</strong> — tabela z uczniami posortowana wg zdobytego XP.</div>
<div>6. <strong>Dynamiczny pasek XP i ranking</strong>, które odświeżają się bez przeładowania całej strony (dzięki technologii AJAX/JSON w ostatniej lekcji).</div>
<br />
<div>Wszystko to zbudujesz krok po kroku — od pojedynczego `echo` w lekcji 2, aż po pełne API w lekcji 24. Każda lekcja ma swoje polecenia, podpowiedzi kodu i checklistę, żebyś mógł/mogła pracować samodzielnie i sam(a) sprawdzić, czy wszystko działa.</div>
<br />
<div><strong>Zasada projektu:</strong> wszystkie pliki trzymaj w jednym folderze projektu, np. `taskquest/`. Nie kasuj tego, co zrobiłeś/aś na poprzednich lekcjach — kolejne lekcje rozbudowują istniejące pliki.</div>
</div>



<h1>Karta pracy</h1>
<p><strong>Projekt: TaskQuest</strong> — grywalizowana aplikacja do zarządzania zadaniami. Użytkownik loguje się, dodaje zadania, za ich wykonanie zdobywa punkty XP, awansuje na poziomy, zdobywa odznaki i widzi swoją pozycję w rankingu klasy. Każda lekcja rozbudowuje tę samą aplikację o nową funkcję.</p>
<h2>Projektowanie aplikacji — zanim napiszesz pierwszą linijkę kodu</h2>
<h3>Cel lekcji</h3>
<p>Zrozumieć, czym będzie Twoja aplikacja, zanim zaczniesz pisać kod.</p>
<h3>Co dziś budujesz</h3>
<p>Jeszcze nic w kodzie — dziś projektujesz aplikację na papierze/w edytorze tekstu.</p>
<h3>Kroki do wykonania</h3>
<ol>
<li>Przeczytaj sekcję „Jak działa TaskQuest” i „Jak będzie wyglądać finalna aplikacja” powyżej.</li>
<li>Wypisz w punktach wszystkie funkcje aplikacji, jakie widzisz (np. logowanie, dodawanie zadania, system XP…).</li>
<li>Narysuj prosty schemat blokowy (na kartce lub w dowolnym narzędziu) pokazujący: użytkownik dodaje zadanie → oznacza jako wykonane → system dolicza XP → system sprawdza, czy to wystarcza na awans → jeśli tak, poziom rośnie.</li>
<li>Zapisz pseudokodem (zwykłym językiem, nie PHP) regułę: „jeśli suma XP jest większa lub równa progowi poziomu, to…”.</li>
<li>Utwórz na dysku folder projektu, np. taskquest/.</li>
</ol>
<h3>Do samodzielnego sprawdzenia</h3>
<p>☐ Mam listę min. 8 funkcji, które będzie mieć aplikacja.</p>
<p>☐ Mam narysowany schemat blokowy logiki awansu na poziom.</p>
<p>☐ Mam zapisaną regułę awansu w pseudokodzie.</p>
<p>☐ Mam utworzony folder projektu.</p>
<h3>Pytania kontrolne</h3>
<ol>
<li>Czym różni się algorytm od programu?</li>
<li>Dlaczego warto zaprojektować aplikację, zanim zacznie się pisać kod?</li>
</ol>
<p>Artykuł <a href="https://kamakaczmarek.net/php-pierwszy-skrypt-echo-komentarze/">2. PHP &#8211; pierwszy skrypt, echo, komentarze.</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>1. Wprowadzenie do programowania. Języki wysokiego poziomu, instrukcje i bloki instrukcji, algorytmy, programowanie proceduralne i obiektowe, zmienne i stałe.</title>
		<link>https://kamakaczmarek.net/wprowadzenie-programowania-jezyki-wysokiego-poziomu-instrukcje-bloki-instrukcji-algorytmy-programowanie-proceduralne-obiektowe-zmienne-stale/</link>
		
		<dc:creator><![CDATA[Kama]]></dc:creator>
		<pubDate>Thu, 05 Oct 2017 18:10:40 +0000</pubDate>
				<category><![CDATA[aplikacje]]></category>
		<category><![CDATA[dla ucznia]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[algorytmy]]></category>
		<category><![CDATA[aplikacje internetowe]]></category>
		<category><![CDATA[języki wysokiego poziomu]]></category>
		<category><![CDATA[programowanie]]></category>
		<guid isPermaLink="false">https://kamakaczmarek.net/?p=2276</guid>

					<description><![CDATA[<p>Jak zostać programistą? Trzeba ćwiczyć, ćwiczyć i ćwiczyć. Stawiać przed sobą wyzwania, rozwiązywać problemy i cierpliwie &#8222;klepać&#8221; linijki kodów. Po czasie sami stwierdzicie, że &#8222;nie taki diabeł straszny&#8230;&#8221;. Programowanie, to rozwiązywanie istniejącego problemu i zapisywania tego rozwiązania w postaci zrozumiałej dla komputera. Schemat działań, jakie należy podjąć w celu rozwiązania problemu, to nic innego jak [&#8230;]</p>
<p>Artykuł <a href="https://kamakaczmarek.net/wprowadzenie-programowania-jezyki-wysokiego-poziomu-instrukcje-bloki-instrukcji-algorytmy-programowanie-proceduralne-obiektowe-zmienne-stale/">1. Wprowadzenie do programowania. Języki wysokiego poziomu, instrukcje i bloki instrukcji, algorytmy, programowanie proceduralne i obiektowe, zmienne i stałe.</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Jak zostać programistą? Trzeba ćwiczyć, ćwiczyć i ćwiczyć. Stawiać przed sobą wyzwania, rozwiązywać problemy i cierpliwie &#8222;klepać&#8221; linijki kodów. Po czasie sami stwierdzicie, że &#8222;nie taki diabeł straszny&#8230;&#8221;.</p>



<p class="wp-block-paragraph"><strong>Programowanie</strong>, to rozwiązywanie istniejącego problemu i zapisywania tego rozwiązania w postaci zrozumiałej dla komputera. Schemat działań, jakie należy podjąć w celu rozwiązania problemu, to nic innego jak <strong>algorytm</strong>.</p>



<p class="wp-block-paragraph"><strong>Programy komputerowe</strong> są wszędzie &#8211; samochody, pralki, lodówki, inteligentne domy&#8230; można wyliczać bez końca. Jak to działa? Wszystko co wprowadzamy do komputera, czy jest to tekst, czy obrazek musi zostać jakoś przez maszynę odczytane. Komputer nie &#8222;widzi&#8221; jak my &#8211; on przetwarza. Ale co? ciągi zer i jedynek &#8211; <strong>system binarny</strong>.</p>



<p class="wp-block-paragraph">Za pomocą zer i jedynek można zapisać wszystko &#8211; zainteresowanych pogłębianiem tematu odsyłam do bardzo fajnego artykułu &#8211; <a href="http://eduinf.waw.pl/inf/alg/006_bin/0009.php" target="_blank" rel="noopener">KLIK</a></p>



<p class="wp-block-paragraph"><strong>Programowanie</strong> jest cyklicznym procesem tworzenia kodu w następujących etapach:</p>



<ol class="wp-block-list">
<li>edycji kodu źródłowego,</li>



<li>uruchamiania programu,</li>



<li>analizie działania i rejestrowania błędów,</li>



<li>powrocie do edycji kodu źródłowego (pkt 1) w celu poprawienia błędów lub dalszego poszerzania funkcjonalności.</li>
</ol>



<p class="wp-block-paragraph">Osobę zajmującą się programowaniem nazywa się <strong>programistą</strong>.</p>



<p class="wp-block-paragraph">Pojęcie &#8222;<strong>aplikacja internetowa</strong>&#8221; nie zostało jednoznacznie określone, jest różnie rozumiane i bardzo ogólne.</p>



<p class="wp-block-paragraph">ale jak wyrocznia Wiki mawia:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Aplikacja internetowa, (ang.) web application – zwana również aplikacją webową, to program komputerowy, który pracuje na serwerze i komunikuje się poprzez sieć komputerową z hostem użytkownika komputera z wykorzystaniem przeglądarki internetowej użytkownika, będącego w takim przypadku interaktywnym klientem aplikacji internetowej. W pracy aplikacji internetowej musi pośredniczyć serwer WWW. Do przygotowania samej aplikacji używa się różnych mechanizmów (np. CGI, JSP, ASP.NET) i języków (np. PHP, Java, C#), jak również serwerów aplikacji. Mechanizm prezentacji danych w przeglądarce określa się czasem mianem cienkiego klienta. Przykładem aplikacji internetowej jest mechanizm edycji treści encyklopedii Wikipedia. Inne witryny WWW należące do tej kategorii to np. serwis aukcyjny Allegro czy księgarnia internetowa Merlin.</em></p>
</blockquote>



<h2 class="wp-block-heading">Algorytmy</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><dfn>Algorytm to zestaw instrukcji, czynności, które należy wykonać, aby zrealizować pewne zadanie w skończonej liczbie kroków.</dfn></p>
</blockquote>



<p class="wp-block-paragraph">Sposób &#8222;naszego myślenia&#8221; możemy zapisywać za pomocą następujących bloków:</p>


<div class="wp-block-image">
<figure class="aligncenter"><img fetchpriority="high" decoding="async" width="689" height="702" src="https://kamakaczmarek.net/wp-content/uploads/tablica.png" alt="" class="wp-image-1217" srcset="https://kamakaczmarek.net/wp-content/uploads/tablica.png 689w, https://kamakaczmarek.net/wp-content/uploads/tablica-294x300.png 294w" sizes="(max-width: 689px) 100vw, 689px" /></figure>
</div>


<p class="wp-block-paragraph">a prosty algorytm przedstawiający sposób myślenia jest taki:</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" width="324" height="442" src="https://kamakaczmarek.net/wp-content/uploads/algorytm1.png" alt="" class="wp-image-1218" srcset="https://kamakaczmarek.net/wp-content/uploads/algorytm1.png 324w, https://kamakaczmarek.net/wp-content/uploads/algorytm1-220x300.png 220w" sizes="(max-width: 324px) 100vw, 324px" /></figure>
</div>


<h2 class="wp-block-heading">Języki wysokiego poziomu</h2>



<p class="wp-block-paragraph">Na początku do porozumiewania się z komputerem używano języków niskiego poziomu, czyli krótkich kodów zrozumiałych dla procesora, ale nie koniecznie dla innych <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> takie języki nazywamy assemblerami. W miarę rozwoju programowania, języki programowania zaczęły się stawać bardziej przyjazne dla programistów. Dzisiaj programujemy tak jak myślimy, wykonujemy kolejne kroki algorytmu ubierając je w odpowiednie instrukcje danego języka.</p>



<p class="wp-block-paragraph">Podam wam teraz prosty przykład:</p>



<p class="has-text-align-center wp-block-paragraph"><em>Jeżeli liczba jest większa od zera, to wypisz że jest dodatnia</em></p>



<p class="wp-block-paragraph">aby zakodować to zdanie, nie trzeba się specjalnie głowić &#8211; wystarczy je dosłownie przetłumaczyć na język obcy &#8211; w naszym wypadku jest to język programowania. Języki te są uniwersalne (w większości brzmią jak angielski lub skróty angielskich wyrazów), dlatego w np. PHP należy zapisać powyższe zdanie następująco:</p>



<p class="has-text-align-center wp-block-paragraph">if($liczba&gt;0) echo &#8222;jest dodatnia&#8221;;</p>



<p class="wp-block-paragraph">if to jeżeli, a echo to wypisz i zamieniając te 2 słowa na polskie otrzymamy to samo zdanie co wyżej &#8211; o to właśnie chodzi w językach wysokiego poziomu &#8211; tak jak myślisz, tak piszesz.</p>



<p class="wp-block-paragraph">Napisany przez nas kod musi zostać zrozumiany przez komputer, aby tak się stało, musi zostać przerobiony na zera i jedynki za pomocą kompilatora (tłumaczy kod na język niskiego poziomu) lub interpretera (analizuje kod źródłowy, a przeanalizowane fragmenty wykonuje).</p>



<h2 class="wp-block-heading">instrukcje i bloki instrukcji</h2>



<p class="wp-block-paragraph">Programy komputerowe składają się z serii instrukcji np. if($liczba&gt;0) echo &#8222;jest dodatnia&#8221;;</p>



<p class="wp-block-paragraph">Pojedyncze instrukcje mogą być łączone w bloki np.</p>



<pre class="wp-block-code language-php"><code class="prettyprint lang-sql" style="font-size: 0.85em;">instrukcja_1; 
{ 
   instrukcja_2; 
   instrukcja_3; 
   { 
      instrukcja_4; 
      { 
         instrukcja_5; 
      ) 
   } 
}</code></pre>
<p>Artykuł <a href="https://kamakaczmarek.net/wprowadzenie-programowania-jezyki-wysokiego-poziomu-instrukcje-bloki-instrukcji-algorytmy-programowanie-proceduralne-obiektowe-zmienne-stale/">1. Wprowadzenie do programowania. Języki wysokiego poziomu, instrukcje i bloki instrukcji, algorytmy, programowanie proceduralne i obiektowe, zmienne i stałe.</a> pochodzi z serwisu <a href="https://kamakaczmarek.net">Kama Kaczmarek</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
