Autor Zpráva
Ikki
Profil
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
Co je INT? Jedná se o číselnou proměnnou v JS? V PHP? Sloupec v databázi?
O co se vlastně snažíš?
Ikki
Profil
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
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
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
Fisir:
Neřeším zde kontrolu, ale to, jak vybrat odesilatele z vypsaných uživatelů.
Ikki
Profil
Jestli takový příkaz neexistuje, mohl by mi alespoň někdo poradit jak v <input> zakázat vybranou hodnotu? Děkuji.
Keeehi
Profil
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
$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 != ...
Kde místo ... bude hodnota ze session, kde mas nick aktuálne přihlášeného uzivatele.

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
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
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
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
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
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
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
<?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
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
$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
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
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
Ikki:
Výborně, myslel jsem si to. Takto už budeš příště vědět.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0