Autor Zpráva
BlackMartin
Profil
Dobrý den.
Mám problém stím že se mi nevypisuje náhodný soubor pomocí tohoto scriptu.
<?php
$max = mysql_query("SELECT COUNT(id) FROM soubory");
$id = mt_rand(1, $max);
$query = mysql_query("SELECT * FROM soubory WHERE id = '".intval($id)."'");
echo "ID Souboru: ".$query["id"]."\n<br/>\nNázev souboru: ".$query["name"]."\n<br/>\n <a href=\"$homepage/stahni.php?id=".$query["id"]."\" target=\"_self\" >Stáhnout!</a>";
?>


K DB jsem připojený ale výstup je prostě toto
ID Souboru:
Název souboru:
Stáhnout!


Myslím že je chyba v DB protože ten výsledek dotazu je asi prázdný, ale v DB jsou 2 soubory takže by to mělo fungovat.
S mojím štěstím tam zase bude nějaká triviální chyba, prosím nebuďte agresivní :)
srigi
Profil
Nevytahuj udaje z $query, najprv musis
$result = mysql_fetch_assoc($query);
BlackMartin
Profil
Tak jsem to tak udělal ( děkuju opravil jsem tím jednu vedlejší chybu ) čili upravil na
<?php
$max = mysql_query("SELECT COUNT(id) FROM soubory");
$id = mt_rand(1, $max);
$query = mysql_query("SELECT * FROM soubory WHERE id = '".intval($id)."'");
$query = mysql_fetch_array($query); 
echo "ID Souboru: ".$query["id"]."\n<br/>\nNázev souboru: ".$query["name"]."\n<br/>\n <a href=\"$homepage/stahni.php?id=".$query["id"]."\" target=\"_self\" >Stáhnout!</a>";
?>


Ale nefunguje.
Nejsem si jistý ale musím použít fetch fci i na
$max = mysql_query("SELECT COUNT(id) FROM soubory");
?
EDIT: Tak jsem pro jistotu zkusil i tu fetch na $max ale beztak to nepomohlo.
srigi
Profil
Skus si najskor ten SQL request nahodit do PHPMyadmina, ci ti vypluje nejake vysledky. Samozrejme si najskor manualne (v hlave) preparsuj riadok
$query = mysql_query("SELECT * FROM soubory WHERE id = '".intval($id)."'");
tak aby ho databaza zozrala, cize napr.
SELECT * FROM soubory WHERE id = '2'


Alebo to takto natvdro pokusne zapis do PHP suboru. BTW poziadavky na DB poctivo testuj, moc sa to oplati a v selectoch si vymenuj ziadane polia, nepouzivaj zastupnu hviezdicku. cca priklad (trochu ina tabulka)
    $query = "SELECT `id`, `name`, `passwd`, `salt` FROM `users`  WHERE `name` = '$usr'";
    @$result = mysql_query($query);
    if (!$result) {
        // DB read error

    } else {
        // DB read OK
        $row = mysql_fetch_assoc($result)    // fetch associative array

    }
fos4
Profil
vytahujes COUNT (ID) ale opravdu mas vsechny id ? neni tam nahodou dira ?

a co zkusit tohle, na par radku se hodi pro vice je to uz horsi ale treba pomuze:

$query = mysql_query("SELECT * FROM soubory ORDER BY rand() LIMIT 1");
$query = mysql_fetch_array($query);
echo "ID Souboru: ".$query["id"]."\n<br/>\nNázev souboru: ".$query["name"]."\n<br/>\n <a href=\"$homepage/stahni.php?id=".$query["id"]."\" target=\"_self\" >Stáhnout!</a>";
?>
Jack Finger
Profil
fos4
já si myslím, že to je právě nejlepší řešení, protože to řeší i případy, kdy existuje id třeba 1,2,4 a chybí 3.
BlackMartin
Profil
OK, tak jsem to vyřešil jak mi napsal fos4, ale nejde mi do hlavy jaktože to funguje.
Když to vygeneruje třeba číslo 100 tak by to mělo hodit sql chybu né ?
fos4
Profil
BlackMartin: order by rand() funguej tak ze si databaze vezme vsechny zaznamy a hodi je do pomocne tabulky a pak je zpřehází a vybere v našem případě jeden zaznam.
Proto se order by rand() pouziva jenom pro par zaznamu, jakmile jich je dejme tomu vice nez 10 000 tak uz to jde dost poznat na case..

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