MySql, Java - kombinování více "podmínek :D" v SQL dotazu – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

MySql, Java - kombinování více "podmínek :D" v SQL dotazu – MySQL – Fórum – Programujte.comMySql, Java - kombinování více "podmínek :D" v SQL dotazu – MySQL – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
santa58
~ Anonymní uživatel
31 příspěvků
18. 11. 2015   #1
-
0
-

Ahoj, psal jsem že mám ještě jeden problém tak tady je, opět se omlouvám za dlouhé příkazy ale..

    public String Nacti(String s1, String s2, String s3, String s4) //SELECT MAX(id) FROM table;
    {
        chybaDatabaze = true;    
try (Connection spojeni = DriverManager.getConnection("jdbc:mysql://localhost/db_slovnicek?user=root");
        PreparedStatement dotaz = spojeni.prepareStatement("SELECT " + s1 + " FROM " + s2 +" WHERE " + s3 + "=? AND WHERE lekce = 2" );) {
        dotaz.setString(1, s4);
        try (ResultSet vysledky = dotaz.executeQuery())
        {
            chybaDatabaze = false;
                if (vysledky.next())
                {
                vystup = vysledky.getString(s1);
                return vystup;
                
            }
                chybaDatabaze = false;

        }
} catch (SQLException ex)
{
 
    System.err.println("Databázi se nepovedlo načíst!" + ex);
    chybaDatabaze = true;
     return "CHYBA";
}
        chybaDatabaze = true;
        return "CHYBA";
    }

Abych bysvětlil, jedná se o prográmek na anglická slovíčka, který vygeneruje náhodné císlo a poté ho načte z databáze jako id. boolean chybaDatabaze je tam kvuli tomu, že když se vygeneruje id které bylo smazáno celé to zůstane v cyklu a generuje tak dlouho, dokud se "netrefí", problém toho je, že když ta databáze nepujde načíst, tak už to v tom cyklu zůstane, ale nad tím zapřemýšlím později, ano vím že je to neefektivní ale je to moje první "větší" aplikace.

Vím o SQL injekci ale do té třídy to buď zadávám pevně(tabulku, pole) a nebo to bude z comboboxu.

Teď k problému, nyní jsem chtěl do prográmku dát jakési sady slovíček(Jednotlivé učebnice a jednotlivé lekce), napadlo mně to udělat jednodušeji pomocí více tabulek, ale co kdybych chtěl všechny slovíčko najednou? Musel bych náhodně generavat ještě tabulku, tak jsem to chtěl udělat takhle, na stack overflow jsem se dočetl že SQL dotaz takhle kombinovat nejde (SELECT ... FROM ... WHERE ... AND WHERE ... AND WHERE ...), ale už jsem nepochopil, jak to jde udělat jinak..
 

Nahlásit jako SPAM
IP: 2a00:1028:9194:e616:28a4:...–
Reklama
Reklama
Kit+11
Guru
18. 11. 2015   #2
-
0
-

#1 santa58
Stačí smazat to druhé slovo "WHERE".

Řádky zkrátíš velmi snadno, pokud se naučíš používat proměnné: 

// místo
PreparedStatement dotaz = spojeni.prepareStatement("SELECT " + s1 + " FROM " + s2 +" WHERE " + s3 + "=? AND lekce = 2" );

//použiješ proměnnou:
String sql = "SELECT " + s1 + " FROM " + s2 +
    " WHERE " + s3 + "=? AND lekce = 2";
PreparedStatement dotaz = spojeni.prepareStatement(sql);
 

Úplně stejně to uděláš s připojením k databázi:

// místo
Connection spojeni = DriverManager.getConnection("jdbc:mysql://localhost/db_slovnicek?user=root");

// napíšeš
String urlConnection = "jdbc:mysql://localhost/db_slovnicek?user=root";
Connection spojeni = DriverManager.getConnection(urlConnection);

Nakonec z toho urlConnection můžeš ještě udělat konstantu třídy: 

private static final String urlSpojeni = "jdbc:mysql://localhost/db_slovnicek?user=root";
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:6544:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
santa58
~ Anonymní uživatel
31 příspěvků
18. 11. 2015   #3
-
0
-

#2 Kit
Aha, moc děkuju, hledal jsem v tom něco strašně složitého a přitom je to takhle jednoduché. :D

Ty kratší řádky budu používat na foru, ale při psaní mi to přijde čitelnější a přehlednější v jednom řádku, no asi je to otázka zvyku, každopádně Díky :)

Nahlásit jako SPAM
IP: 2a00:1028:9194:e616:4818:...–
Kit+11
Guru
18. 11. 2015   #4
-
0
-

#3 santa58
Říká se, že nejtěžším úkolem programátora je pojmenovat proměnnou/třídu/metodu/rozhraní. Skutečně je dobré se naučit systematicky používat proměnné, protože jsou výbornou alternativou komentářů. Přesněji: Tam, kde napíšeš komentář, jsi něco zapomněl pojmenovat.

Zjistil jsem, že všechny řádky obsahující "chybaDatabaze" můžeš v klidu smazat a bude to fungovat stejně. Když navíc deleguješ výjimky do vyšších vrstev, bude to i čitelnější.

Konstrukce return "CHYBA"; se zbav, a to hodně rychle. Do javovských programů to nepatří - Java má místo toho "throw".

Mám výhradu ke tvému používání try ( ... ). Do těch kulatých závorek bys toho neměl dávat tolik nebo to alespoň trochu lépe zalomit, ať se to dá číst.

Nauč se neotevírat databázi kvůli každému jednotlivému dotazu. Tato metoda by tu databázi měla již dostat otevřenou. Rozhodně by ji neměla otevírat. Jak to budeš dělat, až budeš potřebovat poslat dva SQL dotazy za sebou z různých metod? Otevírání databáze je drahou operací.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:6544:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
santa58
~ Anonymní uživatel
31 příspěvků
19. 11. 2015   #5
-
0
-

#4 Kit
To otevírání databáze určutě předělám, na zbytku budu muset taky zapracovat..

Nahlásit jako SPAM
IP: 2a00:1028:9194:e616:a9d1:...–
Kit+11
Guru
19. 11. 2015   #6
-
0
-

#5 santa58
Tip: Databázi si otevři v konstruktoru třídy, která s tou databází bude pracovat.

Další (lepší) možností je databázi otevřít mimo a konstruktoru předat jen deskriptor "spojeni". Konstruktor si ho uloží do privátních atributů a pak s ním může pracovat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:6544:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+11
Guru
19. 11. 2015   #7
-
0
-

#5 santa58
Tady máš třetí variantu, která mi funguje. Využívá návrhového vzoru Simple Factory, který se ti jistě bude hodit ještě mnohokrát. Je to ta statická metoda connect(): 

import java.sql.*;
    
public class Database {
    private static final String dbClassName = "com.mysql.jdbc.Driver";
    private static final String urlConnection = "jdbc:mysql://localhost/test" +
        "?useUnicode=true&characterEncoding=UTF-8";
    private Connection spojeni; 

    public static void main(String[] args) throws Exception {
        Database db = Database.connect();
        String slovo = db.nacti("stůl");
        System.out.println(slovo);
    }   

    public static Database connect() throws Exception {
        Class.forName(dbClassName);
        Connection spojeni = DriverManager.getConnection(urlConnection, "root", "");
        return new Database(spojeni);
    }

    public Database(Connection spojeni) {
        this.spojeni = spojeni;
    }   

    public String nacti(String anglicky) throws Exception {
        String sql = "SELECT cesky FROM slovnicek WHERE anglicky=?";
        PreparedStatement dotaz = spojeni.prepareStatement(sql);
        dotaz.setString(1, anglicky);
        ResultSet vysledky = dotaz.executeQuery();
        if (vysledky.next()) {
            return vysledky.getString(1); 
        }
        return "";
    }   
}

Pro jednoduchost jsem z toho odstranil všechny bloky try .. catch.

Všiml jsem si, že používáš názvy proměnných s1, s2, s3, s4. Zavčas se to odnauč, než si na to zvykneš.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:6544:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
santa58
~ Anonymní uživatel
31 příspěvků
19. 11. 2015   #8
-
0
-

#7 Kit Určitě to bude takhle lepší, u sebe jsem si to předělal na tu 1. variantu, ale tvůj kod uplně nechápu, myslel jsem si že objekty chápu :D, mám knížku o OOP, takže si ji asi pořádně přečtu - kupoval jsem ji kdysi jak jsem začínál, myslel jsem že se to s tím naučím a o OOP jsem nic nevěděl.

U  vysledky.getString(1); jsem nikde nenašel co znamená ta jednička, pouze mně napadlo že je to číslo řádku, v případě že třeba v příkazu "SELECT anglicky FROM tabulka WHERE sada_slovicek = 1;" to najde více výsledků.. že?

Jak jsi zmiňoval tu oficiální dokumentaci ve které hledáš, je to tohle? http://docs.oracle.com/en/  ; Vždycky jsem si říkal odkuď berou ty informace např. v těch knížkách. Nicméně mi přijde že je tam těch informací málo, :(

Proměnné s1, s2 ... nepoužívám běžně, ale chtěl jsem si udělat takový objekt na databaze, který vždycky jenom zkopíruju a popř. trochu upravím, takže jsem to použil pouze v tom objektu.

jinak fakt Díky, myslel jsem si že tu Javu celkem chápu, ale tohle už je na mně celkem moc. :D

Nahlásit jako SPAM
IP: 2a00:1028:9194:e616:41d4:...–
Kit+11
Guru
19. 11. 2015   #9
-
0
-

#8 santa58
vysledky.getString(1) ... ta jednička značí první sloupec výsledku. Máš jen jeden, ale obecně jich může být víc.

Obvykle hledám přes Google. Ten mi většinou pro Javu naservíruje Oracle, což je oficiální distributor Javy. Informací tam bývá málo, ale bývají přesné. Tutoriály bývají lepší na pochopení, ale z praktických důvodů bývá jejich obsah omezen. Začátečník tedy začíná u tutoriálu a postupně přechází k oficiální dokumentaci.

s1, s2,... chápu snahu o univerzálnost, ale ta vede do pekel. Minimálně jsi ty sloupce mohl přejmenovat na "column", "table", "condition", "value" a mohl bys to použít všude. V uvedené sestavě to však není zrovna ideální, metoda by měla být vytvořena pro konkrétní sloupce v konkrétní tabulce - tak, jak jsem to napsal ve své třídě. Pokud budeš potřebovat česky->anglicky nebo ID->česky, napiš si další metody. V OOP je lepší mít tři jednoduché metody než jednu složitou.

Mé pojetí OOP vzniklo na základě několikaletého studia autorů Martina Fowlera, Roberta C. Martina a Bruce Eckela s několika úpravami ohledně tvorby názvů. Pokud chceš kvalitní studijní materiál, začni u nich. Hodně z toho se dá stáhnout v PDF, některé i v českém překladu. Mají také na YouTube výuková videa.

Uvedl jsem ti tady kompletní třídu, kterou jsem vyrobil z tvého prvního příspěvku a která mi funguje. Dá se rozšířit přidáním dalších metod. Klidně se zeptej na detail, kterému nerozumíš.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
santa58
~ Anonymní uživatel
31 příspěvků
19. 11. 2015   #10
-
0
-

Díky, že se mi tu tak věnuješ :D
Nemůžu to najít, protože v česku toho moc nenajdu, a angličtině zas tak nerozumím :(

1)public static final
2)throws Exception(vím, už jsi o tom mluvil, jak jsem tam měl return "CHYBA")
3)rozdíl mezi preparedStatement a Statement, v případě že bych si chtěl udělat ještě metodu dotaz(na jakýkoliv SQL dotaz)
takže pokuď bys mi tohle ještě vysvětlil .. :D

Nahlásit jako SPAM
IP: 2a00:1028:9194:e616:a165:...–
Kit+11
Guru
19. 11. 2015   #11
-
0
-

#10 santa58

  1. "static" znamená, že ta metoda nepracuje s atributy objektu a proto ji můžeš zavolat i když objekt ještě neexistuje. Používá se právě na stavbu továrniček, které svým způsobem nahrazují konstruktor. Slovo "final" se používá u konstant. Kompilátoru (i čtenáři kódu) sdělíš, že s hodnotou už nebudeš manipulovat. Může tedy použít některé optimalizace. Kód je pak stejně efektivní, jako kdybys ten string měl přímo vložený jako parametr. Je však čitelnější pro člověka.
  2. "throws Exception" znamená, že pokud v metodě vznikne výjimka, tak ji nemusíš ošetřovat uvnitř, ale předá se "o vrstvu výš". Je to velmi praktické, protože výjimka může nastat třeba na 50 místech aplikace, ale na ošetření ti stačí třeba jen jeden blok try .. catch. Nebo také žádný, jako v mém případě, kdy se při chybě program ukončí a vypíše se celý zásobník. Časem se v tom naučíš číst a budeš bloky try .. catch dávat skutečně jen tam, kde jsou potřebné k zotavení aplikace.
  3. Třída PreparedStatement je určena pro tzv. předpřipravené dotazy. Je v nich všechno kromě dat a používá se hlavně k zabránění tzv. SQL injection, kdy ti uživatel kromě dat podstrčí třeba i kus SQL dotazu tak, aby ti nějakým způsobem ukradl nebo zdemoloval data. Data se do takového dotazu vkládají další metodou, např. setString(), setInt() nebo setDouble(). Třída Statement se používá tam, kde se do SQL dotazu nedostávají uživatelská data a tedy nehrozí zneužití.
  4. Zkus si jen tak zagooglit: "java PreparedStatement". Jako první výsledek je odkaz na dokumentaci, druhým výsledkem je odkaz na příklady použití. Můžeš to tak udělat s jakoukoli třídou. Takhle najdeš, co budeš chtít.
  5. Vždy piš program tak, aby se co nejlépe četl. Aby název třídy vypovídal, o co se stará, aby název proměnné říkal, jaká data jsou uvnitř, aby název metody říkal, co ta metoda dělá. Takový program se pak dá číst jako pohádka na dobrou noc - i bez komentářů.
  6. Nechávej si občas automaticky přeformátovat kód od svého editoru. Velmi snadno tak najdeš např. chybějící středník nebo závorku.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
santa58
~ Anonymní uživatel
31 příspěvků
20. 11. 2015   #12
-
0
-

#11 Kit
Díky, všechno to jsou užitečné věci, od toho programu slovíčka asi na chvíli ustoupím a budu si přes víkend hrát s objektama, ale problém je že mě nic nenapadá :( :D Asi si udělám pořádnou třídu na tu databázi, čtení zápis a libovolný SQL dotaz.

Ten šestý bod, používám IDE, když mi chybí středník nebo závorka, hned to vidím označené jako chybu.

Nahlásit jako SPAM
IP: 88.101.57.–
santa58
~ Anonymní uživatel
31 příspěvků
20. 11. 2015   #13
-
0
-

Ještě bych se chtěl zeptat, k tomu tvému objektu databáze, co jsi mi tady navrhnul, a jak jsi psal o tom že try {} catch() {} je zbytečné, tak jak jde bez try, catch bloku udělat to, že když to bude hledat například id 343 které v databázi nebude ..co potom? Já jsem to mněl přes try, catch, boolean a cyklus..

Nahlásit jako SPAM
IP: 2a00:1028:9194:e616:a185:...–
Kit+11
Guru
20. 11. 2015   #14
-
0
-

#12 santa58
Aspoň něco to tvé IDE umí :)

Myslím si, že s tím programem na slovíčka se ještě dá řádně vyblbnout. Ještě sis neudělal výběr náhodného slovíčka pro výuku nebo pro zkoušení.

Čtení a zápis prostřednictvím libovolného SQL dotazu už Java má, stačí si to jen důkladně procvičit. Jazyk SQL je tak na víkend, než se ho naučíš používat - jde to i bez Javy. Pak je zde ještě návrh databáze, na který ti bude stačit tužka a papír. Jistě si vygooglíš pojmy 1N, 2N a 3N.

Pokud si chceš hrát s objekty, tak k tomu jsou určeny tzv. Návrhové vzory. Je to seznam osvědčených řešení dílčích problémů. Je jich sice hodně (oficiálně snad 33), ale všechny nejsou běžně potřebné a některým je dobré se vyhnout (tzv. antipatterny, antivzory). Pak se ještě dá vyhrát s kolekcemi (seznam, slovník, množina,...)

#13 santa58
Když potřebuješ blok try .. catch, tak si ho tam prostě dáš. Netvrdím, že bys měl tyto bloky vymýtit, ale že je výhodné je používat tam, kde je potřebuješ. Nezapomeň, že neexistence ID 343 není pro databázi chybou a výjimku ti kvůli tomu vyhazovat nebude. Na to máš klíčové slovo throw.

Je důležité se vyvarovat zneužití try .. throw .. catch pro řízení toku programu. Je to skutečně určeno pro zpracování chyb. Vždy je nutné položit si otázku: Je neexistence klíče ID 343 v databázi chybou nebo není? Odpověď může být ano i ne, ta hranice je často neostrá.

Nepřežeň to. Je toho hodně a mnozí se to učí celé roky.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
santa58
~ Anonymní uživatel
31 příspěvků
20. 11. 2015   #15
-
0
-

#14 Kit
Aspoň něco to tvé IDE umí :)

:D

Myslím si, že s tím programem na slovíčka se ještě dá řádně vyblbnout. Ještě sis neudělal výběr náhodného slovíčka pro výuku nebo pro zkoušení.

Jasně, chci tam toho udělat hodně, to generování náhodného slovíčka tam mám(po stisknutí tlačítka nebo enteru se zkontroluje předchozí slovíčko, přidá to nebo ubere body a vygeneruje se další náhodné číslo od 1 do maximálního id databáze a načte se a zobrazí se, pak to čeká na vstup), můj další cíl byly právě jakési "sady slovíček", ale nakonec to udělám fakt jako jednotlivé tabulky. Ale hodně do bucoucna mám vymyšlenou databázi živatelů, něakou lepší administraci - v tabulce, zatím tam mám jenom přidání slovíčka

Nepřežeň to. Je toho hodně a mnozí se to učí celé roky.

Já taky, už zhruba dva roky, na začátku jsem začal s javou(byl to jedinný programovací jazyk o kterém jsem slyšel), učil jsem se jí podle tutoriálů na youtube, konzolové aplikace mně nebavily, a hned jsem chtěl na okna(to byla ta chyba),  nevěděl jsem o fx a Swingu, našel jsem prostě okenní aplikace a učil se Swing, který mi přišel strašně komplikovaný a přestalo mně to bavit. Po cca. měsíci jsem začal s C sharpem, bez konzole, rovnou v okně, to byl zase ten problém, parsování mi nic neříkalo, nechápal jsem to, pak zhruba další dva měsíce a začal jsem znova s javou, ale pořádně, zhruba před dvěma měsíci jsem začal fx, před měsícem databáze..

Nahlásit jako SPAM
IP: 2a00:1028:9194:e616:a185:...–
Kit+11
Guru
20. 11. 2015   #16
-
0
-

#15 santa58
Výběr náhodného platného ID je jednou z nejobtížněji řešitelných úloh pro databázi, protože SQL databáze sama pro to nemá žádné vhodné funkce. Do několika tisíc položek to není velký problém, ale s rostoucí databází je to stále pomalejší a pomalejší, až je to nepoužitelné. U těch slovíček se to ještě nějak dá překousnout, ale už u miliónu záznamů to prostě trvá dlouho.

Moderní databáze nepoužívají jako ID číslo, ale pseudonáhodný řetězec znaků. Střílet na "náhodné ID" zde úplně postrádá smysl.

Přiznám se, že práce s okýnky mě nikdy moc nebrala. Možná proto jsem se zaměřil hlavně na PHP, kde okýnka vůbec nejsou. PHP totiž vůbec není určeno pro desktop. Když potřebuji okýnka, sáhnu po Tcl/Tk, ale i v Javě či Pythonu se dají udělat hezké aplikace. Hlavně to nepřeplácat, aby se v tom uživatel vyznal. Nejlepší textové editory mají jen jednu lištu nahoře, která je navíc během psaní skryta. Můj textový editor Vim ji nemá vůbec...

Parsery jsou docela zajímavými úlohami, ale bez trochy teorie o gramatikách a konečných automatech se v tom snadno utopíš. Parsery se zpravidla dají vygenerovat a následně vlepit do aplikace. Spousta je jich hotových a připravených k použití - například XML nebo HTML parser nemá smysl psát vlastní.

Pro nácvik práce s databází si zkus v konzoli napsat "mysql db_slovnicek". Můžeš v tom přímo psát SQL dotazy a hned dostaneš odpovědi. Jazyk je to ve své podstatě podobný, jakým mluví kpt. Pickard ve Star Treku k počítači. Uvědomíš si, proč nenalezení záznamu není chybou.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
santa580
Duch
20. 11. 2015   #17
-
0
-

Mně by php asi taky bavilo víc, líbí se mi že můžu někomu poslat link a může to být prostě webová aplikace, ale nesnáším sítě, a přijde mi že php má strašně složitou syntaxi, ruzné závorky, ty "dolary :D"  atd.,
Každopádně mi přijde blbost učit se více jazyků najednou, ale fakt je že mně php docela láká.

Chápu že nenalezení záznamu není chyba, ale stává se to chybou v momentě, když ten výsledek chci někam zapsat, nebo někde použít, v té aplikaci na ty slovíčka jsem to řešil pomocí cyklu, ale má to nevýhodu když tam je chyba už přímo v té databázi, že jí to například nenačte..

Nahlásit jako SPAM
IP: 2a00:1028:9194:e616:a185:...–
Kit+11
Guru
20. 11. 2015   #18
-
0
-

#17 santa58
Syntaxe PHP je taková podivná, ale zvyknout se na to dá. Proměnné často píši bez dolarů, editor je dodělává za mne. V Perlu (ze kterého PHP vychází) to bylo složitější. Výhodou "$" je, že na rozdíl od Javy klidně můžeš mít proměnnou "$class". Vlastně v Javě také můžeš mít proměnnou "$class", ale nevím o nikom, kdo by to používal. Javisté v takových případech zpravidla použijí "clazz".

Na té "chybě" je vidět rozdíl mezi relačním a objektovým programováním. Proto jsou takové problémy s ORM frameworky - jsou to dva neslučitelné světy. Ta tvá metoda Nacti() se čtyřmi parametry je také takovým pokusem o jednoduché ORM. Jsou lepší způsoby, např. Fluent Interface, ale to (podobně jako další "univerzální řešení") také vede do pekel.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Počítadlo sql dotazů — založil Ralf

Přehled SQL dotazů — založil Nicolas

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý