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'] 1$Vyber=mysql_query("SELECT `points` FROM `hraci` WHERE `steamid`='$steamid' "); $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 |
#2 · Zasláno: 4. 5. 2014, 12:09:32
Vypiš si hodnotu proměnné
$steamid , abys viděl, zda obsahuje to, co si myslíš.
|
||
Fastman Profil |
#3 · Zasláno: 4. 5. 2014, 12:13:13
Zadal jsem to a vypsalo to přesnou hodnotu, kterou jsem odeslal.
|
||
Jcas Profil * |
#4 · Zasláno: 4. 5. 2014, 12:53:39
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']) if($Vypis['points']) If je vpřekadu "jestliže" Takže ta tvoje podmínka "jestliže prvek pole...... CO? |
||
Fastman Profil |
#5 · Zasláno: 4. 5. 2014, 13:00:12
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 if($Vypis['points']){ // Dostali jsme nějaký výsledek, vypíšeme článek 1
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 * |
#7 · Zasláno: 4. 5. 2014, 13:14:45 · Upravil/a: Jcas
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: 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); $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' `steamid`='$steamid' |
||
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 * |
#9 · Zasláno: 4. 5. 2014, 13:28:27
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 |
#10 · Zasláno: 4. 5. 2014, 13:29:52
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 * |
#11 · Zasláno: 4. 5. 2014, 13:42:56
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' "); $result = mysql_query("SELECT `points` FROM `hraci` WHERE `steamid`='$steamid' "); 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 |
#12 · Zasláno: 4. 5. 2014, 14:03:29
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 * |
#13 · Zasláno: 4. 5. 2014, 14:13:09
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 |
#14 · Zasláno: 4. 5. 2014, 14:16:29
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();“ |
||
Časová prodleva: 11 let
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0