Kezdőoldal » Számítástechnika » Weblapkészítés » PHPben meglévő értékhez való...

PHPben meglévő értékhez való hozzáadás?

Figyelt kérdé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) ;



2012. febr. 16. 15:49
1 2
 11/14 2xSü ***** válasza:

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.

2012. febr. 16. 17:20
Hasznos számodra ez a válasz?
 12/14 A kérdező kommentje:
Ezeket hogyan tudom kivédeni? Hogy ne lehessen ' $ " meg ilyeneket beírni sehova :)? Meg mit érdemes még megcsinálni, hogy ne lehessen ártani az adatbázisban?
2012. febr. 16. 18:33
 13/14 2xSü ***** válasza:

É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 />-é.

2012. febr. 16. 19:41
Hasznos számodra ez a válasz?
 14/14 A kérdező kommentje:
2xSü Nagyon szépen köszönöm! Először a privátot olvastam, de azt hiszem a 13# hozzászólásodban válaszoltál egy még fel nem tett kérdésemre :D
2012. febr. 16. 20:22
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!