« 1 2
Autor Zpráva
Sir Tom
Profil
peteo:
No nič, lúskam, skúšam.
No a takhle to děláš správně! :D
peteo
Profil
tak poďme na to, hovorím si (teória vytvorenia tabuľka, dátové typy etc.), a ajhľa:

zosmolil som kód
<?php
mysql_connect("127.0.0.1", "root", "");
mysql_select_db("cotoje");                                           //pôvodne  tu bol chybný názov "cojeto"[#3]
echo "Pripojené k databáze cojeto<br>";

$sql = "CREATE TABLE `cotoje`.`kniha` (`id` INT NOT NULL AUTO_INCREMENT, `meno` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `obsah` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `edit` TIMESTAMP NOT NULL, PRIMARY KEY (`id`), UNIQUE (`id`))";
$sql1 = "CREATE TABLE `cotoje`.`alias` (`id` INT NOT NULL, `alias` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL)";
$sql2 = "CREATE TABLE `cotoje`.`odkaz` (`id` INT NOT NULL, `odkaz` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL)";
$sql3 = "CREATE TABLE `cotoje`.`foto` (`id` INT NOT NULL, `foto` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL)";
$sql4 = "CREATE TABLE `cotoje`.`vari` (`id` INT NOT NULL, `vari` LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL)";

mysql_query ($sql);
mysql_query ($sql1);
mysql_query ($sql2);
mysql_query ($sql3);
mysql_query ($sql4);   
echo "hotovo";  
?>

a čo - nič.
OK, hovorím ci, pomeníme tie obrátené apostrofy na obyčajné.
A nič.
Tak skúsim úvodzovky.
Bez efektu.

Takže problém je kde?
Ďakujem.

Pri každom prebehlo vytvorenie bez chýb, iba tabuľky nevznikli.
Petr__
Profil *
[#2] peteo
Na 3. řádku vybíráte databázi jménem "cojeto" zatímco v těch příkazech pro vytvoření tabulek je vytváříte v databázi jménem "cotoje". To jsou dvě zcela odlišné jména databází. Zbytex syntaxe jsem nezkoumal.
peteo
Profil
ach
ani po odstránení tejto chyby nejde.
juriad
Profil
Věz, že mysql_connect, mysql_select_db i mysql_query mají návratovou hodnotu, která říká, zda se příkaz povedl. Ty nikde netestuješ, zda ses vůbec přípojil k databázi.
Přímo v manuálu je příklad:
<?php

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Not connected : ' . mysql_error());
}

// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
    die ('Can\'t use foo : ' . mysql_error());
}
?>
poznámka: V praxi nikdy nechceš volat nesmysl die(mysql_error()), protože v případě problémů uživatel uvidí jen chybovou hlášku z databáze, ale pro testování to může být užitečné.
tiso
Profil
peteo: existujú aj iné dátové typy ako int, longtext a timestamp.
PRIMARY KEY (`id`), UNIQUE (`id`)
- primary key je automaticky unique, stačí primary key
peteo
Profil
Dobrý deň,

prosím Vás, pri spustení skriptu na výpis tabuliek databáze mi vypisuje okrem tabuliek (teda to, čo chcem), že funkcia mysql_list_tables() je zastaralá:

Deprecated: Function mysql_list_tables() is deprecated 

Akú (novšiu) funkciu mám teda použiť?

Ďakujem.

PS: aký má vplyv používanie starších funkcií, keď skript prebehne v poriadku (okrem tej hlášky?

Veď na telefonovanie nepotrebujem posledný výkrik mobilnej telefónie, dovolám sa aj so staručkou nokiou.
Rfilip
Profil
To znamená že je funkce zastaralá,spolu s celou skupinou funkcí mysql_*, a že bude brzy z php v nějaké další verzi úplně odstraněna. Použij novejší mysqli.
shaggy
Profil
peteo:
aký má vplyv používanie starších funkcií
Žiadny.

Skutočne potrebuješ tú funkciu? Na čo? Ja som ju v živote nepoužil a pri projekte, ako je tvoj, ani nevidím dôvod na jej použitie.

A k alternatíve - dôvod, prečo stále nevieš pochopiť veľa základných vecí je ten, že sa iba pýtaš a nevynakladáš vlastné úsilie. Keby si sa len trochu posnažil a otvoril by si si dokumentáciu k tejto funkcii, našiel by si riešenie.
peteo
Profil
shaggy:

Snažím sa urobiť skript, ktorý bude robiť čo ja chcem, takže hľadám a prepínam medzi výkladom SQL, PHP a príkladmi, tak mi tu netvrďte, že sa nesnažím.


Čo sa týka dokumentácie, vychádzam z tohto:


mysql_list_tables
(PHP 3, PHP 4 , PHP 5)

mysql_list_tables -- Načte všechny tabulky v MySQL databázi
Popis
resource mysql_list_tables ( string database [, resource spojeni])


mysql_list_tables() Na základě jména databáze vrací ukazatel výsledku na tabulky přesně tak jako mysql_db_query(). Použítím funkce mysql_tablename() můžete zjistit jména všech tabulek z ukazatele výsledku nebo použít jiné funkce k zjištění dalších informací jako např. mysql_fetch_array(). 

Parametr database je název databáze, z které se mají číst jména tabulky. Dojde-li k chybě, mysql_list_tables() vrací FALSE. 

Z důvodů zpětné kompatibility můžete také narazit na funkci mysql_listtables(). Tuto funkci však nedoporučujeme používat, neboť nemusí být již v dalších verzích PHP podporována. 


Příklad 1. mysql_list_tables Příklad

<?php
    $dbname = 'mysql_dbjmeno';

    if (!mysql_connect('mysql_host', 'mysql_uziv', 'mysql_heslo')) {
        print 'Nelze se spojit';
        exit;
    }

    $result = mysql_list_tables($dbname);
    
    if (!$result) {
        print "Chyba DB, nelze číst tabulky\n";
        print 'MySQL chyba: ' . mysql_error();
        exit;
    }
    
    while ($row = mysql_fetch_row($result)) {
        print "Tabulka: $row[0]\n";
    }

    mysql_free_result($result);
?>


Našiel som už iba príkaz SHOW TABLES FROM DATABASE, tak radšej používať ten? (nič nerobím, len hľadám u gúgla, ako má vyzerať zápis tejto funkcie)

Teda je v tom pekný bordel, keď konečne nájdem funkciu, ktorú chcem a tu ma zvozíte, že nič nerobím.
ach jaj.

dôvod, prečo stále nevieš pochopiť veľa základných vecí je ten, že sa iba pýtaš a nevynakladáš vlastné úsilie.

Keby existoval editor, ktorý by urobil to čo potrebujem, (a ktorému napíšem toto zober a toto s tým urob), tak si s tým nelámem hlavu.
Keďže taký nie je (aspoň o tom neviem), tak si to musím urobiť.
Keď si to chcem urobiť, musím sa učiť a SKÚŠAŤ.
A keďže skúšam, prechádzam i omylmi, slepými cestičkami.
Takže už sa na mňa nehnevajte, nesnažím sa tu otravovať s každou blbosťou (no ako pre koho, že), ale už keď niečo zosmolím a potom mi to napíše takúto vec, tak to dožerie.
shaggy
Profil
peteo:
Čo sa týka dokumentácie, vychádzam z tohto:
Prečo si neprečítaš oficiálnu dokumentáciu?! Dal som ti na ňu odkaz a je aj medzi prvými na google, tak mi nehovor, že hľadáš alternatívy.

Našiel som už iba príkaz SHOW TABLES FROM DATABASE, tak radšej používať ten?
Prečítal si si ten odkaz, ktorý som ti dal? To ti naozaj máme hovoriť (ako 6 ročnému decku), áno milý peteo, urob to presne takto a takto? Zistil si, že mysql_list_tables() je deprecated, pýtaš sa na novšiu funkciu. Dostaneš od nás odkaz na stránku, kde je popísaný lepší postup a ty sa napriek tomu budeš pýtať, či to máš použiť?

Keď si to chcem urobiť, musím sa učiť a SKÚŠAŤ.
To je správny postup, tak sme to robili všetci. Ale neustále vypytovanie sa na základne veci != učiť a skúšať.

Ako som písal, ja som mysql_list_tables nikdy nepoužil. Rovnako ako ty som musel otvoriť Google a/alebo oficiálnu dokumentáciu a rovnako, ako ty, som si tam musel prečítať ako to riešiť "po novom". Rozdiel je v tom, že ja to nepotrebujem a aj tak som to musel urobiť a napísať ti to, kým ty to potrebuješ, ale nevyhľadal si si k tomu nič. Prečo?

A k tomu, čo sa snažíš naprogramovať - skutočne potrebuješ zoznam všetkých tabuliek?
peteo
Profil
shaggy:
A k tomu, čo sa snažíš naprogramovať - skutočne potrebuješ zoznam všetkých tabuliek?

Samozrejme, budem do nich zapisovať.

V podstate sa snažím o jedno:
načítať súbor s dátami, ktoré musím rozsekať na názov, alternatívny názov, obsah, fotografiu, odkazy, suvislosti a zaujimavosti a do jednotlivých tabuliek to potom pozapisovať.
Preto nech nemusím všade vypisovať tie názvy tabuliek, som chcel použiť inkriminovanú funkciu (vyriešil som to externým súborom, z ktorého sa názvy načítajú, myslel som, že použitím tej funkcie mysql_list_tables() to bude jednoduchšie).

ale ako vidím, som na najlepšej ceste sa na to vykašľať.
veď to funguje tak, ako to je, tak čo.
Sir Tom
Profil
peteo:
V podstate sa snažím o jedno:
načítať súbor s dátami, ktoré musím rozsekať na názov, alternatívny názov, obsah, fotografiu, odkazy, suvislosti a zaujimavosti a do jednotlivých tabuliek to potom pozapisovať.
Tady ti nerozumím.
Hele - zkus si to takhle: Vytvoř si databázi, v ní si vytvoř jenom jednu tabulku. Ta tabulka bude mít jenom 3 sloupce: ID, name, content
Naplň si tuto tabulku nějakými údaji (alespoň 10) - to znamená, že každý údaj bude na jednom řádku a těch řádků bude alespoň 10. Např.

1 | Auto | Dopravní prostředek, který slouží k přepravě osob a věcí
2 | Okno | Otvor ve zdi
3 | Myšpulín | Kreslená postava v dětském komiksu Čtyřlístek
4 | Madagaskar | Ostrov u Afriky
atakdál...

S těmito daty si pak hraj. Přidávej do tabulky nové řádky, hledej údaje v tabulkách, maž řádky, upravuj řádky, vybírej řádky z tabulky. Na to budeš používat MySQL dotazy začínající SELECT, UPDATE, INSERT, REMOVE... (jejich použití si najdi na googlu).

mysql_list_tables() opravdu potřebovat nebudeš :)

ale ako vidím, som na najlepšej ceste sa na to vykašľať.
veď to funguje tak, ako to je, tak čo.
Ale kdepak! Určitě se na to nevykašli. Z pochopením databází měl problém téměř každý - třeba já jsem se na to 2x vždycky vykašlal a teďka jsem rád, že potřetí jsem se na to už nevykašlal...
peteo
Profil
Dobrý deň, večer, ráno,


Po vložení riadku potrebujem zistiť, aké číslo mu bolo priradené do stĺpca s automatickým číslovaním, aby som do druhej tabuľky mohol vložiť referencie.
Pomocou volania príkazu SELECT @@identity získam hodnotu/reťazec Resource id #19, kde #19 nezodpovedá číslu záznamu (riadku), ale je v pomere

záznam = ((Resource id #x)-5)/2

generované kódom:
...
     while ($text<>$stop) {
       $text=fgets($soubor);
       $meno=explode(";",$text);
       $riadok++;
       include ("cotoje_conect.php"); 
       $tab_meno="INSERT INTO meno (meno,obsah) VALUES ('".$meno[0]."','".$meno[1]."')";
       mysql_query($tab_meno);
       $meno_id=mysql_query("SELECT @@identity"); echo "záznam č. ".$riadok." >> ".$meno_id;
     }
...

a výstup je:
...
záznam č. 4. >> Resource id #13
záznam č. 5. >> Resource id #15
záznam č. 6. >> Resource id #17
...

Ako mám pomocou volania príkazu SELECT @@identity zistiť hodnotu čísla, ktoré bolo priradené záznamu v tabuľke?
Sedím nad tým už od obeda.

PS: v samotnej vytvorenej tabuľke jednotlivé id zodpovedajú hodnote záznam.
Sir Tom
Profil
peteo:
Po vložení riadku potrebujem zistiť, aké číslo mu bolo priradené do stĺpca s automatickým číslovaním
co třeba http://jonatan.spse.pilsedu.cz/doc/php-man/function.mysql-insert-id.html ?
juriad
Profil
Chces pouzit php funkci mysql_insert_id, ta vrati posledni vygenerovane id. Vypada to ze si zacinas s mysql tykat. :-)
Pisu z mobil, budu se muset podivat na to nabodenickovatko
peteo
Profil
printf ("Posledně vložený záznam má id: %d\n", mysql_insert_id()); vracia 0,
$meno_id2= mysql_query("LAST_INSERT_ID()"); vracia "" (prázdny reťazec)
juriad
Profil
Tabulka meno tedy nema zadny sloupec, ktery byl mel autoincrement. Zkontroluj jeji strukturu nebo ji sem nakopiruj. Pokud ma jen dva sloupce, tak pridej dalsi s vlastnosti autoincrement, nazvi ho nejspis id.


Jeste poznamka, include s prihlasenim k databazi staci obvykle jen jednou na zacatku skriptu. Presun ho ven z while.
peteo
Profil
juriad:
tabulka bola vytvorená:

CREATE TABLE `cotoje`.`meno` (
`id` INT NOT NULL AUTO_INCREMENT ,
`meno` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
`obsah` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`id`
)
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin;

do stĺpca id predsa nič nevkladám, tam je AUTO_INCREMENT.

s tým prihlásením som si nebol celkom istý, či pred cyklus alebo do cyklu.
díky.
juriad
Profil
Jsi si jistý, že mezi mysql_query("INSERT ...") a mysql_insert_id() není žádný dotaz do databáze, tzn. řádek 9 předchozího php skriptu jsi nahradil příkazem mysql_insert_id?
peteo
Profil
mám to!

pri posledných úpravách vypadol riadok
mysql_query($tab_meno); (riadok 8 z [#14])

už to funguje.

Ďakujem, zasa je na deň možno odo mňa pokoj.
« 1 2

Vaše odpověď

Mohlo by se hodit

Příspěvky nesouvisející s webem budou odstraněny.

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0