Portál AbcLinuxu, 2. května 2025 07:16
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result --to tam ohlasihm, takže v databázi nenajde žádnou dvojici nick - heslo, která by odpovídala požadavku ...
Chápu to správně tak, že podle vás se tato chybová hláška objeví vždy, když se nenajde žádný výsledek vyhovující podmínkám? Ve skutečnosti se tato hláška objeví při nějaké zásadní chybě, jako je špatně formulovaný SQL dotaz, nebo právě nepřipojení se k serveru... Pokud je prázdný výsledek (tj. ani jeden řádek), žádná chyba nevzniká, funkceWarning: mysql_fetch_row(): supplied argument is not a valid MySQL result --to tam ohlasihm, takže v databázi nenajde žádnou dvojici nick - heslo, která by odpovídala požadavku ...
mysql_fetch_row
jen vrací false
.
Pokud je prázdný výsledek (tj. ani jeden řádek), žádná chyba nevzniká, funkcedík za opravu/upřesnění, to je tak, když si člověk něco nepamatuje přesně a je línej koukat do manuálumysql_fetch_row
jen vracífalse
.
if($bflm[3]==$heslo)
, když z databáze vybíráš pouze jeden sloupec (heslo), a tudíž to pole $bflm
bude jednorozměrné (tedy hodnota hesla bude v položce $bflm[0]
)? - kdybys měl zapnuté warningy, nejspíš by ti to napsalo, že používáš neicializovanou proměnnou ...
btw, při daném dotazu je dostatečným testem už jen to, že vrátí nenulový počet řádků, a tedy do větve "Špatné heslo." by kód nikdy nemohl dojít, kdyby byl napsaný pořádně a otestoval, jestli vůbec nějaký výsledek dotazu dostal (konstrukce or MySQL_Error()
jest velmi zvláštní, je tam na parádu či co? - řetězec, který vyplivne, se ani nezobrazuje, ani nikam neukládá ...)
jo a když už jsem u toho rozboru ... proměnná $connect
, vzhledem k tomu, že se nevyužívá, je tam taky na nic, tu počáteční konstrukci by stačilo přepsat na:
if (!MySQL_Connect("mysql.webzdarma.cz", "...", "...")) { echo "nelze se pripojit k databazi"; exit; }
bflm[0]
a stejne to hlasi stejnou hlasku... To bude asi neco jinciho
hmh, upravil jsem to na bflm[0]
a stejne to hlasi stejnou hlasku... To bude asi neco jinciho
jistěže je to "něco jiného", jak už ostatně řešíš níže ... nicméně pointa měla být, i když se v mém příspěvku trochu schovala, že tak jak to bylo napsané to muselo napsat "špatné heslo" vždy, protože neprázdný řetězec $heslo (zaručeno předchozí podmínkou) jsi testoval proti prázdné (resp. neexistující) proměnné
$bflm[3]
- co očekáváš, že dostaneš ve čtvrtém sloupci, když ti dotaz vrací jen jeden sloupec?
U or MySQL_Error()
přidej print (MySQL_Error())
, ať to aspoň trochu funguje. Nebo rovnou die()
.
Pokud je toto skutečně původní kód, upozornil bych na nutnost ošetření vstupních parametrů, kvůli script injection apod.. Na wz.cz sice asi budou mít zapnuté magic_quotes_gpc
, ale 1) jinde to tak být nemusí, 2) největší sranda je, když to přes noc vypnou.
Pokud je toto skutečně původní kód, upozornil bych na ...no, především dlužno říci, že takto se projekty nepíšou ... jenže on má každej člověk jinej styl, takže bysme si mohli tak akorát zaflejmovat, jak to má "správně" vypadat
require_once("konfigurák") or die ("Fatální chyba: Nelze načíst kofiguraci"); if ($db_handle = MySQL_Connect($db_server, $db_user, $db_heslo)) { MySQL_Select_DB($db_mydb,$db_handle) or die ("Fatální chyba: Nelze vybrat databasi"); } else { die ("Fatální chyba: Nelze se pripojit k databazi"); }ale pokud by šlo o něco většího ...
require_once("konstanty"); require_once("sys_funkce"); require_once("db_konfigurace"); require_once("db_funkce"); $db_handle = Pripoj_se_k_databazi($db_databaze_pro_tuto_stranku); if (db_handle == false) { Vyhod_kritickou_chybu ($err_nepripojeno_k_databazi) };... výše uvedený kód prosím brát v tuto nekřesťanskou hodinu s rezervou
Na wz.cz sice asi budou mít zapnuté magic_quotes_gpc
, ale 1) jinde to tak být nemusí, 2) největší sranda je, když to přes noc vypnou.
hm, magic_quotes_gpc
je dle mého pěkná prasárna, ale když už se tu o tom mluví require_once("konfigurák") or die ("Fatální chyba: Nelze načíst kofiguraci");
K cemu tam je to die
? Ja myslel, ze require_once
samo vyhodi fatal error, takze za or
se v pripade chyby program beztak nedostane.
$spoj = mysql_connect("..... $dotaz = "select..... if (($spoj)&&(mysql_select_db("jmeno",$spoj}}) { $vydotaz = mysql_query($dotaz); if ($vydotaz) { $radek = mysql_fetch_array($vydotaz, MYSQL_ASSOC); // a $radek je asociativni pole, delam uz s tim }; }Jo, a kde se ti tam vzala ta trojka? Nevraci to jen jedno pole (heslo)? {Já používám array, protože mi to vrací jméno a heslo, abych to jméno mohl zobrazit.)
bflm[0]
nebo nechat to bez toho indexu?
mysql_select_db('foo', $lnk) or die ('Can\'t use foo : ' . mysql_error());
lopuch
. To, s jakou tabulkou chceš pracovat, si zvolíš v konkrétním dotazu. Přes mysql_select_db volíš databázi.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.