ugrás a tartalomhoz

Kattintás korlátozása

darkride · 2008. Feb. 21. (Cs), 14.46
Helló
Az a kérdésem hogy hogyan lehet megcsinálni, hogy van egy gomb ami a felhasználóhoz tartozó sql mondjuk kattintas mezőbe minden kattintással feltölt +1-et.

Ezt hogyan lehet korlátozni hogy naponta csak pl.:25 -ször kattinthasson rá.

van a katt.php
<?
$username = $_SESSION['username'];
include 'constants.php';

$mysql = mysql_connect(DBHOST,DBUSER,DBPASS);
        mysql_select_db(DBNAME,$mysql);

$connection = mysql_pconnect(DBHOST,DBUSER,DBPASS)
or die ("Couldn't connect to server.");

$db = mysql_connect(DBHOST,DBUSER,DBPASS);
mysql_select_db(DBNAME,$db);


$sql = mysql_query("SELECT * FROM ".DBTBLE." WHERE username='$username'");
$row=mysql_fetch_assoc($sql);
<form action="processes.php" method="post" name="form1" id="form1">
<input name="katt" type="hidden" class="textfield" id="katt" value="<? echo $row['katt']+1; ?>" size="50" />
<input name="userid" type="hidden" class="textfield" id="userid" value="<? echo $row['userid']; ?>" size="50" />
<input name="function" type="hidden" id="function" value="katt">
<input name="Submit" type="submit" class="textfield" value="Kattintok!" now!="Now!" />
</form>
?>
aminek elküldi a processes.php
<?
$userid = $_POST['userid'];
$katt = $_POST['katt'];


include 'constants.php';

$mysql = mysql_connect(DBHOST,DBUSER,DBPASS);
        mysql_select_db(DBNAME,$mysql);

$connection = mysql_pconnect(DBHOST,DBUSER,DBPASS)
or die ("Couldn't connect to server.");

$db = mysql_connect(DBHOST,DBUSER,DBPASS);
mysql_select_db(DBNAME,$db);

$query = "UPDATE ".DBTBLE." SET katt = '$katt' WHERE userid = '$userid'";
mysql_query($query) or die('Error, Check MySql');

header("Location: ../katt.php");
?>
Segítsetek pls
 
1

Elégtelen, leülhetsz

Wabbitseason · 2008. Feb. 21. (Cs), 15.02
Jobban járnál, ha most abbahagynád a fejlesztést és elolvasnál néhány tutorialt és szakkönyvet, mert agyrém, amit mutattál.
2

Miért?

darkride · 2008. Feb. 21. (Cs), 16.00
Miért agyrém?
Én annyira értek hozzá hogy így megtudom csinálni és minden működik is, de ha valamiben segítséget kérek akkor légyszíves ne kritizáld amit írok, hanem ha tudod akkor segíts vagy ha nem akkor ne írj.
Üdvözlettel: Darkride
11

Tényleg kell 3 adatbázis kapcsolat?

zila · 2008. Feb. 21. (Cs), 19.04
Nem értem miért van három kapcsolatod? $mysql, $connection és $db... Ebből az egyik perzisztens. Kicsit nekiesnek nézni az oldaladat és durván megeszik a mysql-t...

Másrészt:
Szerencsére szólásszabadság van, vagy mi, így nyugodtan lehet kritizálni egymást. Tény, hogy jobb az építő jellegű kritika, mint a pőre flame :)
3

Éjfélkor nullázod mindenki kattintás számát

vbence · 2008. Feb. 21. (Cs), 16.19
Persze, ha valódi megoldást szeretnél, kezdd biztonsági szempontokkal pl:

1) A usernevet és kattintás számot bárki módosíthatja a formban, így tetszőleges számra állíthatja bármelyik user kattintás-számát.
2) A "katt.php" címet ismerve bárki bármikor behívhatja (beírja a címsorba) anélkül, hogy a formon keresztül menne.
5

injection

Emul · 2008. Feb. 21. (Cs), 16.27
nem csak hogy akarmira allithatja a kattintasok szamat, hanem szinte barmit megtehet amit a jogok engednek...
6

magic_quotes

vbence · 2008. Feb. 21. (Cs), 17.08
Alaból be van kapcsolva.. szerintem.
4

Tervezd meg logikailag.

s_volenszki · 2008. Feb. 21. (Cs), 16.19
Mindíg amikor van egy feladatod, told félre a billentyűzetet és gondold át hogyan fog működni.

Ha már eltudod mondani, hogy amit akarsz, hogyan fog működni, akkor mehet a kódolás (mellesleg sztem. Wabbitseason is ezt akarta mondani, csak ...)!

Tehát:

Az a feladat, hogy ugyan az a felhasználó egy nap, csak 25x küldhessen be egy bizonyos űrlapot. Ehhez kell, hogy az nap már hányszor küldte be.

Csinálj egy [click_per_day] táblát [id, userid, date, clicks] mezőkkel. Ha user kattint a következőt teszed:

1. Leellenőrzöd hogy aznapra be van-e már jegyezve user.
2. Ha nincs, az lesz az első click, bejegyzed, ha van, megnézed a clicks mező értékét. Amennyiben kisebb mint 25, akkor növeled egyel és UPDATE, ha 25 akkor mondod neki hogy NO NO!

Valahogy így képzelem el!

s_volenszki

szerk.:

Persze ha user már benne van, de nem aznapra, nem kell bejegyezned újra, csak a dátumot írod át és a clicks = 1.
7

UPDATE máshogy

Velias9 · 2008. Feb. 21. (Cs), 17.25
Van egy-két dolog, amit nem értek a kódodban.
Pl. mire való ez:

<input name="function" type="hidden" id="function" value="katt">
De nem is annyira számít. Én inkább arra szeretném felhívni a figyelmedet, hogy az adatbázisban egy mező értékének növelésére (vagy csökkentésére) van egy másik módszer is, mint amit te alkalmazol:

$query = "UPDATE " . DBTBLE . " SET katt = (katt + 1) WHERE (userid = '$userid')";

(A zárójelek nem szükségesek, csak szeretem csoportosítani a kódot.)
Ennek a megoldásnak az alkalmazásával nem kell ez sem:

<input name="katt" type="hidden" class="textfield" id="katt" value="<? echo $row['katt']+1; ?>" size="50" />

(Ennek az elemnek miért adtál class-t?)
És még valami fontos: bármin, amit egy adatbázisba beírsz, vagy csak szerepel a parancsban (pl: WHERE userid = '$userid') le kell futtatni egy
$string = mysql_real_escape_string($string);
, vagy egy
$string = addslashes($string);
függvényt, hogy ne tudjanak hozzáférni illetéktelenek az adatbázisod értékeihez. Ez (ha jól tudom) SQL beoltásnak nevezik. Keress rá, hátha jobban is el tudják magyarázni, mint én.

(Ahol nem használtam a kódszinezőt, az azért van, mert nem működött jól.)
8

Nos tehát akkor még egyszer

darkride · 2008. Feb. 21. (Cs), 17.54
Azt szeretném hogy:
Van egy oldal (egy játék ahol autókat lehet tuningolni), itt van egy olyan funkció hogy versenyzés.
Itt a versenyzésnél lehet random alapján versenyezni ami a username tömbből veszi a neveket, és lehet úgy is hogy beírod a felhasználónevet.

Itt akarom azt megcsinálni hogy naponta csak 25x lehessen versenyezni.
Mindent meg tudok csinálni csak azt nem hogy minden nap 00:00-kor lenullázódjon ez az érték függetlenül attól hogy az mennyi.

Ui.:remélem érthetően fogalmaztam.

Szerk.: azt mond el légyszíves hogy hogyan tudnak hozzáférni az adatbázis értékeihez?
9

SQL injection

Emul · 2008. Feb. 21. (Cs), 18.49
Szerk.: azt mond el légyszíves hogy hogyan tudnak hozzáférni az adatbázis értékeihez?

peldaul ugy hogy a $_POST['katt'] -ba nem egy szamot kuldenek hanem a kovetkezo stringet:

$query = "UPDATE ".DBTBLE." SET katt = '$katt' WHERE userid = '$userid'";
' WHERE 1=1; DROP TABLE user; --

ekkor a queryd a kovetkezo lenne:
$query = "UPDATE ".DBTBLE." SET katt = '' WHERE 1=1; DROP TABLE user; --' WHERE userid = '$userid'";


Ezzel szepn felulir minden katt mezot a tabladban mivel ugye az 1 mindig = 1-el. Es utana lefuttat megegy utasitast mi dobja a user tablat(ha van olyan, es van ra a usernek joga), de ide barmilyen utasitast betehet, a legvegen a --vel commentet indit hogy ne szalljon a query.

Remelem ertheto volt amit irtam. De nyugodtan keress ra neten hogy PHP security, vannak nagyon jo doksik.
A lenyeg soha ne bizz meg semmilyen adatban ami a usertol jon, mindezt eltarolaskor es kiirataskor.
Az elobbi SQL injectiont eredmenyezhet az utobbi pedig XSS-t(azaz Cross Site Scripting-et).
10

Adatbázis...

Velias9 · 2008. Feb. 21. (Cs), 18.54
Előszöris csinálsz egy olyan táblát, mint amit s_volenszki is leírt. Azután a user_id helyett pl. ip-t írsz és ide tárolod a felhasználók IP-címét. A date mezőbe beírod az aktuális dátumot (ellenőrzöd, hogy nem-e tegnapi (vagy az előtti), mert ha az, akkor átállítod az aktuálista és a clikk mező értéket 25-re állítod.). Ha egy felhasználó klikkel levonsz egyet a clikk mező értékéből (miután ellenőrizted, hogy nem-e 0 már) és ha ez az érték 0 lesz, akkor kiiratod, hogy nem versenyezhet.

Remélem valami ilyesmire gondoltál.