Autor Zpráva
Fastman
Profil
Zdravím,

Furt nemůžu přijít na chybu. Tenhle úryvek kódu má za úkol najít hodnotu $steamid (co zadal uživatel) a vyhledat jí v databázi, tím následně vybere points a vypíše danou hodnotu. Bohužel podmínka furt hlásí, že záznam neexistuje. Ještě podotknu, že hodnota se odesílá přes $_POST['submit']
$Vyber=mysql_query("SELECT `points` FROM `hraci` WHERE `steamid`='$steamid' ");
    $Vypis=mysql_fetch_array($Vyber); // Naplníme pole
      if($Vypis['points']){  // Dostali jsme nějaký výsledek, vypíšeme článek
        echo "
          <h2><br>Máte celkem: ".$Vypis['points']." bodů</h2>
          ";  
           echo'<h2><b> <font color="green">Vše je OK.</font></b></h2>';
      
        echo '<br>';  

      }else
      {
        echo "<h1><b> <font color='red'><br><br>záznam neexistuje</font></b></h1>";
      } 

U jednoho záznamu to vypsalo po zadání hodnoty. U dalších už ne ( i když existují v databázi).

Díky všem za odpověď.
jenikkozak
Profil
Vypiš si hodnotu proměnné $steamid, abys viděl, zda obsahuje to, co si myslíš.
Fastman
Profil
Zadal jsem to a vypsalo to přesnou hodnotu, kterou jsem odeslal.
Jcas
Profil *
Jsem totální amatér a laik, takže moje odpověď bude asi zcela na houby. Spíš se sám ptám.
Ta podmínka mi připadá divná.
if($Vypis['points'])
Prvek pole a co? existuje? Je roven něčemu?

If je vpřekadu "jestliže"

Takže ta tvoje podmínka "jestliže prvek pole...... CO?
Fastman
Profil
Tak vyřešeno. Nejspíš se jedná o bug, protože při hodnotě points "0" to napíše, že záznam nebyl nalezen. Jakmile dám například points 1 nebo 100, tak už vše funguje. Tuhle chybu bych potřeboval opravit.
Medvídek
Profil
Fastman:
A co si myslíž, že vrátí podmínka if(0)

if($Vypis['points']){  // Dostali jsme nějaký výsledek, vypíšeme článek
Jenže pokud se ti vrátí výsledek s hodnotou 0, tak se vyhodnotí jako false, viz manuál.

 
When converting to boolean, the following values are considered FALSE: 
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0" 

Více zde.

Lze kontrolovat počet vrácených záznamů z DB, v tvém případě tedy mysql_num_rows();
Jcas
Profil *
Může mi někdo prosím vysvětlit tu jeho podmínku?
Chápal bych to, kdyby $Vypis['points'] nabývalo hodnot true, nebo false. Možná i 1/0.
Potom by i bylo logické, že mu to při hodnotě 0 vyhodnotí podmínku jako false a tutíž "záznam nenalezen.

Fastman
Schválně zkus toto:
if(isset($Vypis['points']))
a nastav si points na 0.
Projde nebo ne?


A stejně tak poprosím o vysvětlení toho výpisu.
$Vypis=mysql_fetch_array($Vyber);

Dle mého názoru si naplní pole jedním(prvním) řádkem z tabulky. (pokud existuje shoda)
Ale co když existuje v DB více řádků, či více záznamů, pro které platí že
`steamid`='$steamid'
Potom se dle měho laického názoru k těmto datům nedostane, pokud nepoužije cykl while.
Fastman
Profil
Vyřešeno if($Vypis['points']!=="-1") Podíval jsem se do knížky od Miloslava Ponkráce. Děkuji všem za odpovědi.
* Ještě poznamenám, že v mém případě se nikdy nestane, že by points nabývala hodnotu -1, proto můžu využít tohle řešení. *
Jcas
Profil *
Fastman já tě zneužívám na to, abych se sám vzdělával, protože jsem jak jsem psal totální amatér.
Ale opět prosím o vysvětlení.
if($Vypis['points']!=="-1") není roven "-1" v uvozovkách????
Předpokládám, že do toho sloupce ukládáš čísla a předpokládám, že v DB máš pro ten sloupec nastaven Typ pro čísla. Tak proč ten řetězec - string???

Předpokládám, že nikdy v tom sloupci v databázi nebudeš mít uložel string. Takže ta podmínka bude vždy splněna. I v případě, že záznam nebude existovat.
Fastman
Profil
Tak se omlouvám, myslel jsem, že to pomůže a nakonec při zadání nesmyslného záznamu to ukázalo "Máte celkem: bodů" Využil jsem tedy Jcas kód if(isset($Vypis['points'])) Děkuji.
Jcas
Profil *
Existuje metoda, tu jsem obkoukal, která rovnou vyhodnotí, zda záznam v Db existuje nebo ne. Ale nejsem si jist a nevím, jak to funguje pokuď podmínce odpovídá více záznamů.

$result = mysql_query("SELECT `points` FROM `hraci` WHERE `steamid`='$steamid' ");
Pokud existuje v DB aspoň jeden záznam, který vyhovuje podmínce WHERE `steamid`='$steamid'
Tak $result nabyde její hodnotu. A potom podmínka
if (mysql_result($result, 0)) bude splněna.

Pokud žádný takový záznam neexistuje, tak ta podmínka splněna nebude.
Rfilip
Profil
Jcas:
To bych nedoporučoval, viz dokumentace k mysql_result, konkrétně: Calls to mysql_result() should not be mixed with calls to other functions that deal with the result set.
Jcas
Profil *
Rfilip
Nemám tak silnou angličtinu, abych to pochopil. Mám to ve stránkách. Takže pro ověření existence záznamu nepoužívat? Jak by jsi ty ověřil, zda záznam v Db existuje, nebo ne. Existuje vždy pouze jeden jediný, který vyhovuje podmínce, nebo žádný.
Medvídek
Profil
Jcas:
Nemám tak silnou angličtinu, abych to pochopil. Mám to ve stránkách. Takže pro ověření existence záznamu nepoužívat? Jak by jsi ty ověřil, zda záznam v Db existuje, nebo ne. Existuje vždy pouze jeden jediný, který vyhovuje podmínce, nebo žádný.
Jak jsem psal výše, stačí uplně jednoduše:

Medvídek:
Lze kontrolovat počet vrácených záznamů z DB, v tvém případě tedy mysql_num_rows();

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