Autor Zpráva
laijk
Profil
Ahojte, na jednej stránke kde mažem nejaké veci mám problém, kod:

$dotaz = 'SELECT * FROM likes WHERE like_blogid = "'. $_GET['blog_id']. '"';
$vysledok = mysql_query($dotaz, $db) or die(mysql_error($db));
while ($riadok = mysql_fetch_assoc($vysledok)) {
    extract($riadok);
    $userid = zistiautora($like_blogid);
... kod poračuje, ale premenná $userid je prázdna
-kod funkcie zistiautora:
function zistiautora($id_blogu) {
    global $db;
    
    $dotaz = 'SELECT blog_author FROM blogs WHERE blog_id = '. $id_blogu;
    $vysledok = mysql_query($dotaz, $db) or die(mysql_error($db));
    $riadok = mysql_fetch_assoc($vysledok);
    extract($riadok);
    
    return $blog_author;
}
-chybová hláška:
Warning: extract() expects parameter 1 to be array, boolean given in C:\xampp\htdocs\w\zmazblog.php on line 27

Notice: Undefined variable: blog_author in C:\xampp\htdocs\w\zmazblog.php on line 29
-mal som raz podobný problém, ale to som si pomenil nejaké idčky v DB na localhoste tak nevedelo nájsť tú, ktorá tam mala byť, teraz som vyčistil DB a skúsil kod znova no nejde to, už sa s tým hrám druhý deň, chybu som nenašiel a kod som prešiel a upravoval niekoľko krát, možno niekto skúsenejší poradí kde by chyba mohla byť, vďaka za rady
Tori
Profil
laijk:
Chybu máte jasně popsanou: „extract() expects parameter 1 to be array, boolean given“. V manuálu se dočtete, že mysql_fetch_assoc vrací false, pokud už nejsou žádné další řádky dat. To znamená, že SQL dotaz nenašel odpovídajícího autora. Můžete např. změnit řádky 6-9 na: return mysql_num_rows($vysledok) ? mysql_result($vysledok, 0) : 0; - tzn. pokud funkce nenajde ID, vrátí nulu, jinak vrátí to ID. Na druhou stranu chybějící autor blogu znamená nekonzistenci dat, takže by vás na to naopak měla aplikace výrazně upozornit, abyste to mohl opravit.

- neposílejte do DB neošetřené vstupy zvenku, je to nebezpečný zlozvyk (nebezpečný hlavně pro vaše data): intval($_GET['blog_id'])
- global $db a použití $db na řádku 5 není nezbytně nutné - pokud ten parametr neuvedete, předpokládá se poslední použité připojení k DB.
- Místo vytvoření x nových proměnných (extract) by bylo lepší pracovat s tím asoc.polem. Může se stát, že náhodou budete mít globální proměnnou se stejným názvem jako sloupec v DB a takhle si ji přemažete -> těžko dohledatelná chyba. Anebo použijte 3.param extract.
- Přečtěte si něco o spojování tabulek v SQL, dohledávat autory byste mohl už tím prvním dotazem.

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: