Autor | Zpráva | ||
---|---|---|---|
>David< Profil * |
#1 · Zasláno: 10. 6. 2009, 09:15:07
Ahoj, potřebuju poradit. Dělám si svůj systém kterej bude zobrazovat bannery uživatelů a za každé zobrazení jim ubere kredity. Všechno sem zvládl ale jeden SQL dotaz mě zarazil, DB ukazuje 1 vyhledanej dotaz (což je správně) ale nevypíše ho, jako řádek...
SQL dotaz: select id from uzivatele where zb='y' and kredity > 0 and kredity != '-.*' order by rand() limit 1; Poradíte mi ? |
||
Kajman_ Profil * |
#2 · Zasláno: 10. 6. 2009, 09:35:20
Když nenapíšete kód, kterým řádek vypisujete, tak těžko radit, kde je chyba při vypisování.
|
||
>David< Profil * |
#3 · Zasláno: 10. 6. 2009, 09:44:01
Tím SQL dotazem (viz výše) zadaám dotaz a odpověď je takováto:
Zobrazeny záznamy 0 - 0 (1 celkem, Dotaz zabral 0.0004 sekund) |
||
fajzen Profil |
#4 · Zasláno: 10. 6. 2009, 10:10:59
„and kredity != '-.*'“
predpokladám, že toto má vylúčiť záporné čísla, ale je to tam zbytočné, pretože to už urobí tá podmienka predtým „Zobrazeny záznamy 0 - 0 (1 celkem“ však si chcel jeden záznam, nie? to 0 - 0 si nevšímaj keby nenašiel žiadny záznam, vypísal by niečo ako MySQL vrátil prázdny výsledok (tj. nulový počet riadkov). |
||
>David< Profil * |
#5 · Zasláno: 10. 6. 2009, 10:23:57
Mně ten script ten banner neukáže, přitom ho mam v tabulce, správný id to je:
Odkaz na script |
||
Joker Profil |
#6 · Zasláno: 10. 6. 2009, 10:38:06 · Upravil/a: Joker
>David<
select id from uzivatele where zb='y' and kredity > 0 and kredity != '-.*' order by rand() limit 1; pokud je sloupec kredity číselného typu, podmínka and kredity != '-.*' je zbytečná, protože taková hodnota tam nikdy nemůže být. Kdyby nebyl čístelného typu, tak to za prvé je nejspíš chyba a za druhé teď nevím, co by udělala podmínka kredity > 0 Mně ten script ten banner neukáže Je tam několik chyb: $surf_id = MySQL_Fetch_Array($surf_vyber); if ($surf_id == "")... Výsledkem mysql_fetch_array je pole. Porovnávat to s prázdným řetězcem sice fungovat bude (se to automaticky překonvertuje), ale lepší řešení: if(empty($surf_id)) ...alespoň třeba za půl roku při úpravě kódu budete vědět, co to má dělat. Ostatně tentýž omyl je asi i příčinou toho, že to nefunguje. Výsledkem $surf_id = MySQL_Fetch_Array($surf_vyber); není hodnota ID, ale pole, ve kterém teprve $surf_id['id'] je hodnota ID. |
||
Kajman_ Profil * |
#7 · Zasláno: 10. 6. 2009, 10:38:44
<?php require_once("db.php"); $surf_vyber = mysql_query("select id, banner from uzivatele where zb='y' and kredity > 0 order by rand() limit 1"); $surf_row = MySQL_Fetch_Array($surf_vyber); if (!$surf_row){ echo("Není žádný banner k zobrazení !"); } else { mysql_query("update uzivatele set kredity = kredity -0.2 where id='".$surf_row['id']."'"); echo $surf_row["banner"]; } ?> |
||
AM_ Profil |
#8 · Zasláno: 10. 6. 2009, 10:40:23 · Upravil/a: AM_
$surf_id = MySQL_Fetch_Array($surf_vyber); co myslíš, že bude v $surf_id? Array. $surf_zobrazit = mysql_query("select banner from uzivatele where id='".$surf_id."';"); jak můžeš ID porovnávat s Array? //edit: kajman_ova oprava je správná, já tu měl chybu. samozřejmě bys měl ještě pomocí mysql_num_rows testovat, zda se vrátil nějaký řádek, takhle ti to bude házet chyby když uživatel nebude existovat. |
||
Kajman_ Profil * |
#9 · Zasláno: 10. 6. 2009, 11:13:14
takhle ti to bude házet chyby když uživatel nebude existovat
Kdepak, pokud není v sql dotazu chyba a jen nebyl žádný řádek, tak mysql_fetch_array vrátí false, ale chybu nevyvolá. |
||
AM_ Profil |
#10 · Zasláno: 10. 6. 2009, 11:25:15
Kajman_
pravda, sry, jsem zvyklý to ošetřovat jak jsem říkal, takže jsem si nevšiml podmínky pod tím. |
||
>David< Profil * |
#11 · Zasláno: 10. 6. 2009, 12:56:00
Zatím to funguje celkem dobře, akorát mam problém s ukládánim kódu banneru, s diakritikou (kódování utf-8 cz) ale to vyřešim.. díky všem..
|
||
Časová prodleva: 15 let
|
0