Autor Zpráva
RastyAmateur
Profil
Zdravím, mohu se zeptat, co je na tomto špatně? :(

    <?
      mysql_connect("mysql.webzdarma.cz", "hubacekzkousk", "heslo");
      mysql_select_db("hubacekzkousk");
      
      $sql_zk = mysql_query("SELECT * FROM 'a' WHERE 'a1000'");
      echo($sql_zk);
    ?>

co je na tom špatně? Připojím se k mysql, vyberu databázi a hledám...
ty 2 první řádky jsem našel v jednom tutorialu, a $sql_zk je jen zkouška, co se stane, kdyz za to napisu to, co jsem napsal. Dostal jsem do databáze tabulku "a" a do ní jsem nastrkal složky "a1000", "a2000", ... , "a5000" a všude je TRUE. Já to potřebuji změnit na FALSE, ale jen u jednoho. Tak jsem doufal, že když to napíšu takto, budu moci v této tabulce změnit hodnotu "a1000" na FALSE...


Tak už jsem na to přišel... Nemá tam být "mysql.webzdarma.cz", ale prosím vás, jak mám nyní zadávat ty příkazy? kdyz tam dám to $sql_zk tak mi to vypíše tu závorku... Když jsem hledal, našel jsem nějaké mysql_query, ale nevím, jak to pak mám nechat vypsat...
juriad
Profil
mysql_query("SELECT * FROM a")
vybere všechny řádky. Kolem názvu tabulky se nepíší apostrofy.
Za WHERE patří logická podmínka, která říká, o které řádky máš zájem.

Databáze obsahuje tabulky.
Tabulka má pevně dané sloupce (definované při vytvoření).
Tabulka obsahuje záznamy, kterým se také říká řádky.
Nikde nejsou žádné složky.

Ukázka databázového schématu a pár dotazů:
http://sqlfiddle.com/#!2/be5ed/2

Data se vybírají pomocí SELECT. Vkládají pomocí INSERT. Mažou pomocí DELETE. Upravují pomocí UPDATE.
Všechny kromě INSERT mají klauzuli WHERE, která říká, kterých řádků se úkon týká.

Než budeš pokračovat v PHP. Nauč se základní databázové příkazy v PHPMyAdminu, alespoň budeš mít jistotu, že chyba není v PHP.
RastyAmateur
Profil
nyní mi to vypisuje "Resource id #3", co to znamená?

Mám tabulku "a", a v ní mám sloupce "a1000" , "a2000" , ... , "a5000". Mám je udělané tak, že je zde jedna řádka a v každém sloupci v té řádce je definována 1(*). Potřebuji udělat, aby se určité texty zobrazovali pouze tehdy, když se jejich majitel rovná 1.
Příklad: mám nějakou větu, a chci, aby se ukázala pouze tehdy, když se sloupec "a3000" rovná 1. Jak to udělám?

*Nějak se v tom zamotávám :( Pro jistotu sem dám to, co jsem vložil do řádku na mysql.webzdarma.cz
INSERT INTO `a` (
        `a1000`,
        `a2000`,
        `a3000`,
    `a4000`,
        `a5000`
)
VALUES (
        '1',  '1',  '1', '1', '1'
);
juriad
Profil
Nechi říkat dotaz, protože i kdyby něco vrátil, máš špatně navrženou databázi.
Doufám, že majitelé nejsou jednotlivé sloupce. To by bylo špatně: Některé časteji řešené dotazy pro MySQL - FAQ » Musíte pojmenovávat sloupce s indexem (jmeno1, jmeno2, jmeno3, …). Už ty čísla v názvech sloupců vypadají hodně podezřele.
Také doufám, že datový typ je INT a nikoli VARCHAR. V takovém případě by INSERT neměl obsahovat kolem těch 1 apostrofy - jsou to přece čísla.

Zkusme napřed vymyslet strukturu databáze.
Máš texty a uživatele a uživatelé mohou vidět jen některé texty.
A očekáváš, že budeš postupně přidávat jak uživatele, tak texty.
Je tomu tak?
juriad
Profil
mysql_query vrací resource - to je něco co není přímo užitečné pro výpis, ale používá se to pro vytáhnutí jednotlivých řádků:

$vysledek = mysql_query('SELECT * FROM a');
echo "Nalezeno " . mysql_num_rows($vysledek) . " řádků";
echo "<ul>";
while($radek = mysql_fetch_assoc($vysledek)) {
  echo "<li>Řádek: " . $radek['sloupec'] . ", " . $radek['druhy-sloupec'];
}
echo "</ul>";
Kde damozřejmě ty sloupec a druhy-sloupec jsou názvy sloupců, které jsou v tabulce.
RastyAmateur
Profil
Ano, datový typ je INT a ne VARCHAR.

juriad díky za pomoc, ale MySQL je na mě asi moc složitý. Ve škole se budeme ve druháku učit sotva HTML, takže nic novémo se asi nepřiučím, a pochybuji, že naše učitelka informatiky umí PHP natož MySQL. Jak to tak vidím, bude lepší, když využiji místo databáze textové soubory. Již jsem to tak jednou udělal, a je to sice zdlouhavější, ale za to lehčí na pochopení a hledání chyb :-)

Kdyby tě zajímalo, co tu celou dobu vymýšlím, chtěl jsem udělat webové stránky, něco jako riskuj. Vytaháváš si otázky v určité hodnotě určitého témata, a když jednou nějakou otázku vemeš, už ji znovu nemůžeš vzít. Původně jsem to chtěl udělat v Pythonu, ale v tom se učím jen krátce, a půl knihovny se za chvilku nenaučím :-) (V pythonu jsem se začal učit, protože mě zajímalo, jak fungujou jiné aplikace než webové stránky)
juriad
Profil
Problém se soubory je právě složitost návrhu toho, jaký obsah do nich uložit. V databázi to není nutné řešit, tam prostě používáš jazyk SQL pro veškerou komunikaci - formát je tedy pevně daný.

Riksuj.
Navrhl bych to s šesti tabulkami.
Tabulka uživatelů (Franta, Pepa)
Tabulka řad otázek (doba Karla IV, hlavní města, zimní sporty, )
Tabulka otázek (Kdy byl postaven Kralův most, Hlavní město Pákistánu)
Tabulka her (Hra 1, Hra 2, Hra 3) - každá hra je náhodně generovaná a hratelná jen jednou - hráčem, pro kterého byla vytvořena.
Tabulka herních řad - která hra obsahuje které řady
Tabulka herních řadových otázek - ktera herní řada obsahuje které otázky
RastyAmateur
Profil
Zajímavý nápad. Mě to stačí tak, jak jsem si to nyní udělal. Tabulka, několik kategorií, 5 obtížností, zvolí-li hráč jednu otázku, nemůže jí zvolit znovu. Kdykoliv může hráč vyresetovat vše, a začít od znovu.

Dobrý nápad, ten, který nejspíše použiji, je, že by to mohlo generovat náhodné otázky, například ze 3. Jak udělám, aby mi PHP vybralo náhodnou věc?

např. budu mít 3 proměnné, $ot1, $ot2 a $ot3. Jak udělám, aby se to vybralo náhodně?
juriad
Profil
Nebudeš mít proměnné pojmenované číslicí. Budeš mít pole. A pak použiješ array_rand.
lionel messi
Profil
RastyAmateur:
Jak udělám, aby mi PHP vybralo náhodnou věc?
Náhodný výber môžeš spraviť už na úrovni SQL a v PHP nemusíš potom riešiť nič.
SELECT * FROM tabulka WHERE sloupec = 'hodnota' ORDER BY RAND()

Ale ak naozaj hľadáš riešenie na tejto úrovni, v tom prípade si môžeš napríklad naskladať jednotlivé premenné do poľa a použitím funkcie shuffle dosiahnuť náhodné premiešanie jeho prvkov.

Ešte o čosi lepšie než shuffle je v tomto prípade juriadovo riešenie.
RastyAmateur
Profil
Děkuji vám :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0