Diskuze: MySQL databáze automaticky přičítá +1

Ostatní jazyky SQL SQL a databáze MySQL databáze automaticky přičítá +1

Avatar
Griven
Člen
Avatar
Griven:

Dobrý den. Mám jednoduchý php soubor kde z MySQL databáze si nechám vypsat data, provede nějaké kontroly a zapisuje je zpět do db přičte +1. takže když z db vytáhnu třeba hodnotu "45" tak chci aby zapsal hodnotu 46. ale nezapíše hodnotu "46" ale "47". Přitom když si vypíšu co mu přišlo z databáze, po přičtení 1 a po zápisu do databáze tak pokaždé hodnoty sedí ale mysql si prostě řekne že mu přičte ještě jednu. Když dám aby přičítal třeba 2 tak přičte ty dvě + další dvě. takže z 45 má být 47 ale do db se uloží 49. Nevím čím to je , už se s tím drbám druhý den a nemohu na to přijít. Nestalo se to někomu nebo neví někdo co s tím ? Děkuji předem za odpověď.

$sql = mysql_query("SELECT * FROM tabulka");
$data = mysql_fetch_array($sql);

print_r($data); // zde jsou hodnoty v pořádku jak přišli z db

$data["val"]++;

echo $data["val"]; // Zde jsou hodnoty přesně jak chci zapisovat do db čili +1

mysql_query("UPDATE tabulka SET val=".$data["val"]." ;");

//když se podívám do PMA tak nahrál další +1 tzn z původní hodnoty je to +2;

zkoušel jsem to i zjednodušeně a to přímo v příkazu SET val=val+1 ; ale to také přičítá +2. Už nevím co s tím mám dělat.

 
Odpovědět 22.9.2015 16:43
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:

Není možné, že tam je trigger o kterém nevíš, který dělá to samé co ty v aplikační logice? Tedy přičítá jedničku?

 
Nahoru Odpovědět 22.9.2015 17:08
Avatar
Griven
Člen
Avatar
Odpovídá na Milan Křepelka
Griven:

Nemyslím si. Jsem teĎ ještě zkoušel když mu nechám nahrát hodnotu pevně ... SET val="55"; tak ji tam nahraje správně. Jen když tam chci nacpat proměnou tak přičte další +1. takže teĎ jsem z toho ještě víc v prdeli než předtím. přitom i když si tu proměnou vypíšu před i za tak pokaždé mi vyjde stejná hodnota. ale v db je prostě o jedno větší.

 
Nahoru Odpovědět 22.9.2015 17:19
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Griven
David Čápka:
  1. Loguj si kolikrát se ten skript spustil
  2. Zamysli se vážně nad tím, zda je vhodné používat funkce co již neexistují a o té SQL injekci raději ani nemluvím. Že vás to baví.
Nahoru Odpovědět  +2 22.9.2015 17:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Ondřej Langr (andysekcze):

Při tom jako by tu neměli o bezpečnosti a SQL dost ;-)

Nahoru Odpovědět 22.9.2015 17:36
I have a charger. I have Note 7. Umh I haven't Note7.
Avatar
Griven
Člen
Avatar
Odpovídá na David Čápka
Griven:

Pustí se jednou. K injekci dojít nemůže, protože tam nedosazuji hodnoty které se dají ovlivnit. k ukázce jsem použil mysql_query abych to nemusel psát celé. k ukázce mého problému je to dostačující.

 
Nahoru Odpovědět 22.9.2015 17:38
Avatar
Odpovídá na Griven
Michal Žůrek (misaz):

neovlivnitelné hodnoty asi myslíš ty co načítač v input typu number, že? :) No kžadopádně to fakt vypadá na to, že se to prostě zavolá 2×. Zkus si dát nějaký log do souboru.

Nahoru Odpovědět 22.9.2015 17:41
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):

ještě můžeš zkusit restartovat MySQL, někdy to pomůže.

Nahoru Odpovědět 22.9.2015 17:41
Nesnáším {}, proto se jim vyhýbám.
Avatar
Griven
Člen
Avatar
Griven:

Neovlivnitelnýma myslím ty, které si nemají s formulářem nic společného. vytáhne si data z mysql, zpočítá a nahraje z5.

 
Nahoru Odpovědět 22.9.2015 18:17
Avatar
Odpovídá na Griven
Michal Žůrek (misaz):

a za jakých okolností to dělá?

Nahoru Odpovědět 22.9.2015 18:49
Nesnáším {}, proto se jim vyhýbám.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Griven
David Čápka:

k ukázce jsem použil mysql_query abych to nemusel psát celé

Nevím, proč používáš k ukázce něco, co už v PHP dávno není? K injekci samozřejmě dojít může, protože tam dáváš proměnnou, do té si může kdokoli cokoli uložit, že to tam ty teď neděláš neznamená, že dalšího člověka co to bude upravovat nebe tebe pak nenapadne dát tam něco z formu. A ne, nebudeš kontrolovat X řádků co se s tou proměnnou dělá, prostě to tam napereš. A pak je z toho pěknej průser. Představ si, že to tady někdo uvidí a nedej bože to použije. Hlavně, že to vždycky odůvodníte nějakým nesmyslem.

K tvému problému. Pokud to dělá i samotný kód:

UPDATE tabulka SET val=val + 1

, proč sem posíláš ten PHP kód? Je tedy bezpředmětný. Co se stane, když SQL kód výše dáš do SQL konzole? Pokud se to zvýší o 2, tak zkus založit novou tabulku a zkus to samé. Případně novou DB. Přijde mi docela jednoduché přijít na to čím to je, stačí to vyzkoušet.

Nahoru Odpovědět 22.9.2015 21:47
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.