PHPben meglévő értékhez való hozzáadás?
A kérdésem az lenne, hogy hogyan lehetne azt megcsinálni, hogy:
Pl van ez:
$sql = "UPDATE users.list Set coin='200' WHERE id='".$_POST['ref']."' " ;
És, hogy ne 200ra állítsa a coin oszlop értékét, hanem ha annak alapból van értéke (pl 500), akkor 500+200 legyen, tehát 700?
$result2 = mysql_query($sql2) ;
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Amúgy pont emiatt a PHP-ban van védelem erre. Magic quote névre hallgat. A MySQL szépen le is kezeli. Emiatt viszont figyelni kell a POST-ból kérkező adatokra, mert a \ jelet \\ -re, az idézőjeleket \' illetve \" -re cseréli. De biztos, ami biztos érdemes a saját kódodban is lekezelni a dolgot.
Pl. ha az id a kérdésben található lekérdezésnél szám, akkor érdemes ellenőrizni, hogy valóban szám-e.
De még sok dologra lehet figyelni. Pl. hogy mi történik, ha valaki egy másik számot ír be a ref-hez, baj-e. Mi van, ha sokszor küldi el a POST kérést, lekezeli-e a rendszered.
Érdemes kicsit megtanulni hackerkedni. Csak az a lakatos tud igazán jó zárat csinálni, aki betörőnek is jó lenne. Hiszen csak így tudja, milyen trükkök ellen kell védenie annak, amit csinál.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Én pl. ha számot kell ellenőrizni, akkor valami ilyesmit szoktam elkövetni:
$hiba=false;
if (!empty($_POST["szam"])) {
$szam=floor(1*trim($_POST["szam"]));
if ($szam!=$_POST["szam']) … /nem egész szám jött be
} else $hiba=true; //hiányzó paraméter
Persze hogy a szám megfelel-e értékhatároknak, azt külön kell ellenőrizni. Pl. ha adatbázisban található id-ről van szó, akkor – amennyiben a nem létező rekord gondot okozna – ellenőrizni kell, hogy valóban létezi-e ilyen id-vel rekord.
* * *
Szöveg ellenőrzése már kissé bonyolultabb témakör lehet. Erre van egy nagyon jó eszköz: reguláris kifejezés. Ez mondjuk egy külön nyelv, aminek a hatékony elsajátítása időt vesz igénybe, de megéri, mert nagyon jól lehet használni sokféle célra.
Lásd: [link]
Pl. ha egy szöveg csak kisbetűt számot és aláhúzást tartalmazhat, valamit nem kezdődhet számmal (lásd: változónév), akkor ezt így tudod ellenőrizni:
if (preg_match("/^[a-z_]+[a-z0-9_]*$/i",$szoveg)) echo "helyes!"; else echo "hibás!";
(A ^ a sor elejét jelenti a $ a sor végét. A kapcsos zárójelek egy karakterhalmazt adnak meg a-z és _ illetve a-z és 0-9 és _
A + jel a halmaz végén 1 vagy több előfordulást enged meg, a * jel a halmaz végén 0 vagy több előfordulást jelent. A többinek nézz utána Google-lal.)
* * *
Mint mondtam a legtöbb szerveren működik a magic quote és gyakorlatilag megoldja a problémákat. De célszerű inkább saját magad kezelni a dolgot.
Egyrészt vedd ki a magic quote-ot. Másrészt használd a PHP ehhez készített fügvényét, ami a speciális szimbólumokat az SQL nyelvnek megfelelően alakítja át. Nem árt még, ha a szöveg elején és végén található szóközöket is eltávolítod, ha azoknak nincs valós szerepük:
$szoveg=stripslashes(trim($_POST["szoveg"]));
…
$sql="SELECT … " . mysql_real_escape_string($szoveg) . " … ";
Így a $szoveg-ben is és a $sql-ben is az lesz, ami a tényleges szövegnek kell lennie.
Persze itt még nincs vége. A kiiratásnál megint csak figyelni kell, hogy pl. HTML tagek ne kerüljenek ki, mert az meg XSS támadásra adhat okot. (Pl. ha valaki a <script>alert('hehe');</script> üzenetet küldi el, az kellemetlen, de ennél durvább dolgokat is el lehet érni.)
Szóval kiiratásnál minimum: echo htmlspecialchars($szoveg);
De lehet még bonyolítani. Pl. itt a gyakorikerdesek.hu -n nem jól kezeli az üzenetben a sor eleji szóközöket. Vagy pl. a sortörést is át kell ugye alakítani <br />-é.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!