Betaling maar 1 keer uitvoeren
ik zit zelf eraan te denken om:
een aparte tabel aan te maken produkt id en gebruikers naam. als de gene die het heeft betaald nog een keer betaald (door op verversen te kliken) de betaling niet word voorgezet want hij komt immers voor in de database. en voor het betalen controleren of er geen rijen beschikbaar zijn met die gegevens. nu is hiermee het probleem als iemand het wel twee keer wild hebben dat het niet gaat.
dit is de code op het moment (ik weet dat dit niet op de juiste wijzen html heeft. maar het is alleen om te testen):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
include 'sql2.php'; #sql verbinding mogelijk maken
session_id(); #session id opvragen
session_start(); #session doorzetten
$ip = $_SESSION['ip']; #ip wat in sessie is opgeslagen
$id = $_SESSION['user_id']; #id wat in sessie is opgeslagen
$user = $_SESSION['user']; #de naam wat in sessie is opgeslagen
$kosten = -30; #even om mee te testen
if($ip <> $_SERVER['REMOTE_ADDR']) #als het ip aan het begin is aangemaakt anders is dan het ip wat de pagina opvraagt
{
session_destroy();
}
if($ip === $_SERVER['REMOTE_ADDR']) #als het ip wat aan het begin is aangemaakt en het ip wat de pagina opvraagt klopt
{
echo $ip.'<br>'.$id.'<br>'.$user.'<br>'; #test
echo session_id().'<br>'; #test
#dragon-coins ophalen
$sql = "
SELECT dragoncoins
FROM inloggen
WHERE id = '".$id."'
AND minecraftname = '".mysql_real_escape_string($user)."'
"; #eind sql query
if(!$res = mysql_query($sql)) #query aanmaken en kijken of die mislukt.
{
$foutmsg[] = 'Er is een onbekende fout opgetreden. Probeer het later opnieuw'; #als de query mislukt is
}
$dragon_coins = mysql_fetch_array($res);
$dragon_coins = $dragon_coins['dragoncoins'] - $kosten; #de - $kosten is alleen om te testen
#eind dragon-coins ophalen. dragon-coins zijn beschikbaar onder $dragon_coins
echo $dragon_coins.'<br>'; #dragon-coins laten zien
if($dragon_coins < 0) #als het saldo te laag is (onder 0)
{
echo 'Je hebt geen genoeg dragon coins!';
}
if($dragon_coins >= 0) #als het saldo hoog genoeg is (0 en daar boven)
{
echo 'Je hebt genoeg dragon coins. De betaling gaat vedder';
#de dragon-coins bijwerken na de betaling
$sql = "
UPDATE inloggen
SET dragoncoins='".$dragon_coins."'
WHERE id = '".$id."'
AND minecraftname = '".mysql_real_escape_string($user)."'
";
if(!$res = mysql_query($sql))
{
$foutmsg[] = 'Er is een onbekende fout opgetreden. Probeer het later opnieuw';
}
#eind dragon-coins bijwerken na de betaling
#de bijgewerkte dragon-coins ophalen
$sql = "
SELECT dragoncoins
FROM inloggen
WHERE id = '".$id."'
AND minecraftname = '".mysql_real_escape_string($user)."'
";
if(!$res = mysql_query($sql))
{
$foutmsg[] = 'Er is een onbekende fout opgetreden. Probeer het later opnieuw';
}
$dragon_coins = mysql_fetch_array($res);
$dragon_coins = $dragon_coins['dragoncoins'];
#eind bijgewerkte dragon-coins ophalen
echo 'Je saldo is nu: '.$dragon_coins; #de bijgewerkte dragon-coins laten zien
}
}
else #als het ip aan het begin is aangemaakt anders is dan het ip wat de pagina opvraagt
{
session_destroy();
}
?>
include 'sql2.php'; #sql verbinding mogelijk maken
session_id(); #session id opvragen
session_start(); #session doorzetten
$ip = $_SESSION['ip']; #ip wat in sessie is opgeslagen
$id = $_SESSION['user_id']; #id wat in sessie is opgeslagen
$user = $_SESSION['user']; #de naam wat in sessie is opgeslagen
$kosten = -30; #even om mee te testen
if($ip <> $_SERVER['REMOTE_ADDR']) #als het ip aan het begin is aangemaakt anders is dan het ip wat de pagina opvraagt
{
session_destroy();
}
if($ip === $_SERVER['REMOTE_ADDR']) #als het ip wat aan het begin is aangemaakt en het ip wat de pagina opvraagt klopt
{
echo $ip.'<br>'.$id.'<br>'.$user.'<br>'; #test
echo session_id().'<br>'; #test
#dragon-coins ophalen
$sql = "
SELECT dragoncoins
FROM inloggen
WHERE id = '".$id."'
AND minecraftname = '".mysql_real_escape_string($user)."'
"; #eind sql query
if(!$res = mysql_query($sql)) #query aanmaken en kijken of die mislukt.
{
$foutmsg[] = 'Er is een onbekende fout opgetreden. Probeer het later opnieuw'; #als de query mislukt is
}
$dragon_coins = mysql_fetch_array($res);
$dragon_coins = $dragon_coins['dragoncoins'] - $kosten; #de - $kosten is alleen om te testen
#eind dragon-coins ophalen. dragon-coins zijn beschikbaar onder $dragon_coins
echo $dragon_coins.'<br>'; #dragon-coins laten zien
if($dragon_coins < 0) #als het saldo te laag is (onder 0)
{
echo 'Je hebt geen genoeg dragon coins!';
}
if($dragon_coins >= 0) #als het saldo hoog genoeg is (0 en daar boven)
{
echo 'Je hebt genoeg dragon coins. De betaling gaat vedder';
#de dragon-coins bijwerken na de betaling
$sql = "
UPDATE inloggen
SET dragoncoins='".$dragon_coins."'
WHERE id = '".$id."'
AND minecraftname = '".mysql_real_escape_string($user)."'
";
if(!$res = mysql_query($sql))
{
$foutmsg[] = 'Er is een onbekende fout opgetreden. Probeer het later opnieuw';
}
#eind dragon-coins bijwerken na de betaling
#de bijgewerkte dragon-coins ophalen
$sql = "
SELECT dragoncoins
FROM inloggen
WHERE id = '".$id."'
AND minecraftname = '".mysql_real_escape_string($user)."'
";
if(!$res = mysql_query($sql))
{
$foutmsg[] = 'Er is een onbekende fout opgetreden. Probeer het later opnieuw';
}
$dragon_coins = mysql_fetch_array($res);
$dragon_coins = $dragon_coins['dragoncoins'];
#eind bijgewerkte dragon-coins ophalen
echo 'Je saldo is nu: '.$dragon_coins; #de bijgewerkte dragon-coins laten zien
}
}
else #als het ip aan het begin is aangemaakt anders is dan het ip wat de pagina opvraagt
{
session_destroy();
}
?>
Maak, na het 'betalen' een (extra) sessie aan en controleer daarop.
Als degene nu nog wil kopen, dan kan hij niet meer? (Of is dat de bedoeling?)
Controleer met isset of de sessie bestaat.
Dem Ian op 06/08/2012 18:43:18:
En ook een tijdsduur op de sessie?
Als degene nu nog wil kopen, dan kan hij niet meer? (Of is dat de bedoeling?)
Als degene nu nog wil kopen, dan kan hij niet meer? (Of is dat de bedoeling?)
Hoe doe je dat?
Toevoeging op 06/08/2012 18:58:10:
Obelix en Idefix op 06/08/2012 18:44:09:
Je hoeft niet perse een false aan te maken.
Controleer met isset of de sessie bestaat.
Controleer met isset of de sessie bestaat.
dus
Gewijzigd op 06/08/2012 18:58:46 door jeroen ruiten
Code (php)
Dit zorgt er voor dat het er een sessie word aangemaakt, maar als de $_POST request overnieuw word gedaan de sessie word kapot gemaakt en de pagina word doorgelinkt. Je kan bijvoorbeeld ook de sessie unsetten en een exit(""); of die(""); maken met daarin de tekst dat de betaling al afgerond is.
Bij sessies moet je kijken of de sessie vervallen is, dat is iets heel anders dan bij cookies.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
# Moet altijd boveaan de pagina
session_start();
# Hier moet je zelf bepalen wanneer de sessie moet vervallen
# 2 minuten in seconden
$inactief = 120;
$session_life = time() - $_SESSION['timeout'];
if($session_life > $inactief) {
session_destroy();
echo 'De sessie is vervallen.';
}
S_SESSION['timeout']=time();
?>
# Moet altijd boveaan de pagina
session_start();
# Hier moet je zelf bepalen wanneer de sessie moet vervallen
# 2 minuten in seconden
$inactief = 120;
$session_life = time() - $_SESSION['timeout'];
if($session_life > $inactief) {
session_destroy();
echo 'De sessie is vervallen.';
}
S_SESSION['timeout']=time();
?>
Dit moet je wel toepassen voor jouw script.
Jeroen ruiten op 06/08/2012 18:34:17:
Dit is GEEN vergelijking, maar een toekenning van een false aan de session-var. Een vergelijking doe je met == of ===.
- SanThe - op 06/08/2012 19:18:14:
Dit is GEEN vergelijking, maar een toekenning van een false aan de session-var. Een vergelijking doe je met == of ===.
Jeroen ruiten op 06/08/2012 18:34:17:
Dit is GEEN vergelijking, maar een toekenning van een false aan de session-var. Een vergelijking doe je met == of ===.
Toevoeging op SanThe haar reactie:
http://nl.wikibooks.org/wiki/Programmeren_in_PHP/Beslissingsstructuren
die snap ik even niet. dus als ik het goed begrijp als 'betaald' van de sessie array bestaat (er is immers al betaald) dan maakt die alleen het deel 'betaalt' van de array leeg en verwijs die naar een pagina waar je naar toe moet als je al betaalt hebt.
Toevoeging op 06/08/2012 19:31:12:
Dem Ian op 06/08/2012 19:24:09:
Toevoeging op SanThe haar reactie:
http://nl.wikibooks.org/wiki/Programmeren_in_PHP/Beslissingsstructuren
- SanThe - op 06/08/2012 19:18:14:
Dit is GEEN vergelijking, maar een toekenning van een false aan de session-var. Een vergelijking doe je met == of ===.
Jeroen ruiten op 06/08/2012 18:34:17:
Dit is GEEN vergelijking, maar een toekenning van een false aan de session-var. Een vergelijking doe je met == of ===.
Toevoeging op SanThe haar reactie:
http://nl.wikibooks.org/wiki/Programmeren_in_PHP/Beslissingsstructuren
sorry het het even snel in elkaar gezet maar heb de dubble == vergeten