Autor | Zpráva | ||
---|---|---|---|
Ikki Profil |
#1 · Zasláno: 29. 2. 2016, 02:19:55
Zdravím přátelé.
Potřebuji nějak nastavit minimální hodnotu INT na 0.. V případě, že někdo bude chtít klesnout pod nulu, tak mu to napíše, že je to nemožné. Díky za pomoc ;) |
||
juriad Profil |
#2 · Zasláno: 29. 2. 2016, 09:07:50
Co je INT? Jedná se o číselnou proměnnou v JS? V PHP? Sloupec v databázi?
O co se vlastně snažíš? |
||
Ikki Profil |
#3 · Zasláno: 29. 2. 2016, 14:22:02
juriad:
Ach pardón.. Jedná se o databázi. Mám nastavené INT(11) a potřebuji aby v tomto sloupci bylo možné dosáhnout minimální hodnoty 0, nikoli dosáhnout např. -50. V případě, že dotyčný bude mít 0 bodů, tak aby nebylo možné je využít do mínusu. Jednodnuše zablokovat možnost nákupu za body, které dotyčný nevlastní. |
||
Keeehi Profil |
#4 · Zasláno: 29. 2. 2016, 14:44:21
Sloupci můžeš nastavit UNSIGNED.
Nespoléhal bych však na databázi, ověření, že má uživatel dost bodů bys měl ověřovat už v aplikaci. |
||
Ikki Profil |
Keeehi:
Vím. Ověřování mám nastavené, ale i přesto bych byl rád, kdyby to INT pro jistotu nějak kontroloval. Jedná se o funkci odesílání bodů. Jméno uživatele, kterému chce daný člověk odeslat body se vypisuje v selectu. Potřebuju při výběru z databáze zakázat výpis uživatele, který ty body odesílá. Je to možné? E./ Opraveno! Díky Keeehi-mu jsem to vyřešil za pomocí type="number" a max="$body". Ale stále je tu problém s daným uživatelem. |
||
Fisir Profil |
#6 · Zasláno: 29. 2. 2016, 18:16:50
Reaguji na Ikkiho:
„jsem to vyřešil za pomocí type="number" a max="$body"“ Jakákoliv klientská validace se dá obejít, vždy to musíš kontrolovat ještě znovu na serveru! |
||
Ikki Profil |
#7 · Zasláno: 29. 2. 2016, 19:37:00
Fisir:
Neřeším zde kontrolu, ale to, jak vybrat odesilatele z vypsaných uživatelů. |
||
Ikki Profil |
#8 · Zasláno: 1. 3. 2016, 22:56:46
Jestli takový příkaz neexistuje, mohl by mi alespoň někdo poradit jak v <input> zakázat vybranou hodnotu? Děkuji.
|
||
Keeehi Profil |
#9 · Zasláno: 2. 3. 2016, 00:59:57
Ikki:
Já už nevím, jednou mluvíš o selectu, podruhé o inputu. Kdo se v tom má vyznat. Bylo by mnohem prospěšnější, kdyby jsi tu ukázal svůj nynější kód a popsal, čeho bys chtěl dosáhnout a s čím máš problém. Ne že sem zase nakopíruješ tuny kódu. Jen část které se to týká. |
||
Ikki Profil |
#10 · Zasláno: 2. 3. 2016, 05:03:51
$readp.= "<option value='".$row['nick']."' disabled> ".$row['nick']."</option>"; Zde se jedná o to, že to vypíše všechny uživatelské nicky z databáze. Cílem této funkce je moci podělit se s ostatními uživateli o body. Problém: Výpiše to i jméno odesilatele, což znamená, že pokud odesilatel odešle body na svůj nick, tak získá dvojnásobek svých bodů. Co potřebuji: Zakázat vybírání odesilatele, nebo jej nějak dát do disable. |
||
anonymnii Profil * |
To ted uz na úrovni databaze.
where nick != ... A ještě technická k tomu teoretickému dvojnásobku bodu. X odectu (co daruji), X prictu (co dostanu). To je snad nula, ne? A druha technická. Pokud si ve firebugu změním hodnotu value v některém z optionu, mohu bez dalšího ošetření poslat body i sobe, aniž bych v selectu byl. *řeš na úrovni databaze, preklep na telefonu. |
||
Keeehi Profil |
Ikki:
Při zpracování stejně musíš kontrolovat, zda odesílatel není roven příjemci. I když daného uživatele v selectu nezobrazíš, může formulář poslat tak, jako by tam by. No a jak ho nezobrazit? Co třeba před ten kód dát podmínku, to tě nenapadlo? if($row["nick"] !== $nickPrihlasenehoUzivatele) { |
||
Chamurappi Profil |
#13 · Zasláno: 2. 3. 2016, 10:44:19
Reaguji na Ikkiho:
Nevěřil bych, že disabled na <option> u bude spolehlivě fungovat napříč prohlížeči. I ten dříve zmíněný type="number" nebude fungovat všude.
Krom toho, že tomu, co se děje na straně klienta, opravdu nejde nikdy věřit – vždy předpokládej, že formulář odesílá tvůj nepřítel a že si jeho podobu v HTML může jakkoliv upravit. |
||
Str4wberry Profil |
#14 · Zasláno: 2. 3. 2016, 19:04:54
Ještě bych dodal, že pokud se v DB bude někde něco odečítat a jinde přičítat, měly by se použít transakce a možná i zamykání tabulek.
Jinak se může teoreticky stát, že se někdy pouze body odečtou, ale už nepřičtou. |
||
Ikki Profil |
#15 · Zasláno: 2. 3. 2016, 22:59:55
Přátelé,,, zkusil jsem Vaše rady, ale bohužel ani jedna z nich nefunguje.
Str4wberry tvojí jsem nezkoušel a myslím si, že ani zkoušet zatím nemusím, jelikož dokud tam bude jeho jméno, tak to nemá smysl dále rozebírat. Akce: V případě, že jsem přidal radu od anonymnii, tak se v tabulce vůbec nic nezobrazilo. Akce #2: V případě, že jsem přidal radu od Keeehi, tak se v tabulce zobrazit řádky s jmény, ale bez jmén. S pozdravem Ikki. |
||
1Pupik1989 Profil |
Ikki Tak máš nejspíš problém s logikou, protože Keeehi ti vysvětlil jak na to. Dělá se to tak běžně. Je to ochrana proti nechtěné myself insertion. Z databáze v první řadě vytáhneš uživatele, kteří se nerovnají přihlášenému. Pak kontroluješ, jestli se Id v cookies/session nerovná tomu přihlášenému. Pokud ne, tak provedu insert. Pokud ano, tak ho pošlu do pytle.
Příspěvky [#11] a, [#12] ti to jasně vysvětlují. |
||
Keeehi Profil |
#17 · Zasláno: 3. 3. 2016, 01:11:05
Ikki:
„zkusil jsem Vaše rady, ale bohužel ani jedna z nich nefunguje.“ Nebo je tu druhá možnost, že ony fungují, jen něco děláš špatně ty. Není to nic složitého, jen podmínka v cyklu. To jsou základy které se berou hned po výpisu a proměnných. Taky se to dá řešit už na úrovni databáze při výběru, jak napsal 1Pupik1989. |
||
Ikki Profil |
#18 · Zasláno: 3. 3. 2016, 01:47:40
Keeehi:
Hm.. Já něco dělám špatně... No je to dost možný :D Ale z toho, co jsem z Vaších odpovědí pochopil jsem udělal vše, co mě napadlo ale bohužel to nefungovalo. Takže jak na to dál? o.o |
||
Keeehi Profil |
#19 · Zasláno: 3. 3. 2016, 13:40:23
Ikki:
„Takže jak na to dál?“ Rozhodně by pomohlo, kdyby jsi ukázal ten tvůj nefungující kód. My bychom pak měli být schopni ti říct co jsi udělal špatně. |
||
Ikki Profil |
#20 · Zasláno: 3. 3. 2016, 17:36:13
<?php if(isset($_POST['paycoin'])) { $qbody = mysql_query("SELECT * FROM adminka WHERE nick='".$_SESSION['nick']."'"); $fbody = mysql_fetch_array($qbody); $odebrat_body = $fbody['body'] - $_POST['body_pridat']; $sbody = mysql_query("SELECT * FROM adminka WHERE nick='".$_POST['uzivatel_pridat']."'"); $gbody = mysql_fetch_array($sbody); $pridat_body = $gbody['body'] + $_POST['body_pridat']; mysql_query("UPDATE adminka SET body='$odebrat_body' WHERE nick='".$_SESSION['nick']."'"); mysql_query("UPDATE adminka SET body='$pridat_body' WHERE nick='".$_POST['uzivatel_pridat']."'");}?> <form action="" method="POST"> <h3>Odeslání bodů:<small> (min. 15bodů)</small></h3> <div class="form-horizontal mt-30 mb-40"> <div class="form-group"> <label class="control-label col-sm-2">Příjemce bodů:</label> <div class="col-sm-10"> <select class="textbox" name="uzivatel_pridat" class="form-control1" style="width:400px; height:30px;" required=""><?php echo $readp; ?></select> </div></div> <div class="form-group"> <label class="control-label col-sm-2" for="new_email">Body:</label> <div class="col-sm-10"> <div class="youplay-input"> <?if($bodiky >= 15){echo" <input type='number' max='".$bodiky."' id='new_email' name='body_pridat' placeholder='Zde uveďte číslem, kolik chcete odeslat bodů...'>";} elseif($bodiky <= 15){echo"<input type='text' id='new_email' placeholder='Nemáte dostatečný počet bodů pro odeslání...' disabled>";}?> </div></div></div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <?if($bodiky >= 15){echo" <button type='submit' class='btn btn-default' name='paycoin'>Odeslat body</button>";} elseif($bodiky <= 15){echo"<button type='submit' class='btn btn-default' disabled>Nedostatek bodů</button>";}?> </div></div></form> Zde je celý kód. |
||
Keeehi Profil |
#21 · Zasláno: 3. 3. 2016, 18:31:44
Ikki:
„Zde je celý kód.“ Chybí ti v něm tvorba obsahu proměnné $readp
Zatím pominu tu spoustu bezpečnostních chyb a nevhodných postupů. |
||
Ikki Profil |
#22 · Zasláno: 3. 3. 2016, 21:42:43
$readp = ""; while($row = mysql_fetch_array($queryp)){ $readp.= "<option value='".$row['nick']."' disabled> ".$row['nick']."</option>";} Bezpečnostní chyby zatím neřeším.. Postupy jsou na prd to vím taky :D |
||
Keeehi Profil |
#23 · Zasláno: 3. 3. 2016, 21:55:21
Ikki:
Výborně teď dovnitř do toho cyklu přidej podmínku, která zajistí, že se vnitřek provede jen když se právě vybraný nick z databáze neshoduje s nickem přihlášeného uživatele. |
||
Ikki Profil |
#24 · Zasláno: 4. 3. 2016, 01:05:17
Chlapci omlouvám se za nervy semnou...
:DD Jaksi mě nenapadlo to hodit do pod while, ale házel jsem to nad něj :D Omlouvám se.. Děkuji Keeehi za pomoc.. :') #Ano demence je v mém případě velmi vysoká :D |
||
Keeehi Profil |
#25 · Zasláno: 4. 3. 2016, 01:09:02
Ikki:
Výborně, myslel jsem si to. Takto už budeš příště vědět. |
||
Časová prodleva: 9 let
|
0