Autor Zpráva
>David<
Profil *
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 *
Když nenapíšete kód, kterým řádek vypisujete, tak těžko radit, kde je chyba při vypisování.
>David<
Profil *
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
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 *
Mně ten script ten banner neukáže, přitom ho mam v tabulce, správný id to je:
Odkaz na script
Joker
Profil
>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 *
<?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
$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 *
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
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 *
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..

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: