[opgelost] User bannen. Hoe beginnen?
ik zou graag hebben dat een admin ban kan geven aan een gebruiker.
Maar dat die dan met tijd is.
Namelijk, 1 uur ban, 2 uur ban, 1dag ban, 1week ban ...
Ik dacht dus om 2 nieuwe tabellen bij mijn gebruiker te maken (bij de database).
De eerste tabel heet dan ban. Als daar het cijfer 0 instaat, geen ban.
Als er cijfer 1 in staat, 1 uur ban enzovoort.
Daarnaast nog een tabel met als naam: bantijd
Die zou ik dan opvragen via now() ofzo.
Alleen dit zou wel werken maar ik zou dan niet weten hoe je die ban kan laten verlopen na 1 uur.
Ik zou dan ook werken met een statement. Heb al iets klaarliggen.
Als jullie dit al willen zien mogen jullie dit vragen.
Weet iemand hoe ik dit zou kunnen laten doen?
Ook of ik al goed bezig ben met de juiste redenering?
Dem
Gewijzigd op 08/01/2012 12:34:30 door - Diov -
Kijk hier ff in de scripts er zijn er genoeg
Of een ban-verloop-datum en ban-status in de usertabel meegeven bij de user.
@ Aar, hoe zou ik dan de ban-verloop-datum moeten bepalen?
En dan in mijn statement zou ik dan moeten doen: als ban-verloop-datum groter of gelijk is aan nu dan mag de gebruiker inloggen.
UPDATE users SET banned = '0' WHERE ban_verloopdatum < NOW()
Bepaal je zo wanneer de ban vervalt? Denk het niet.
Ik moet dus eigenlijk tellen met tijden in php.
Dus eigenlijk now() + 1 day enzo? (weet iemand hier meer info over?)
Dat moet ik dan updaten in ban_verloopdatum.
Om het dan uit te lezen moet ik de ban_verloopdatum opvragen en dan kijken of hij gelijk is (met ==) aan now() als die gelijk is, moet ik dan dit gebruiken:
UPDATE users SET banned = '0
Gewijzigd op 07/01/2012 13:38:42 door - Ariën -
Ik weet niet hoe ik dan voorbeeld 1 maand ban moet geven?
is dat dan now() + 1 Month?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
# 24 uur in seconden + de tijd:
$ban = time() + '1440';
# Dit zet je dan in je tabel en bij het opvragen doe je dit:
if((strlen($row['ban']) > 0) && ($row['ban'] > time())) {
echo 'Je hebt een ban tot '.date('H:i', $row['ban']).'.';
}
# Anders heeft de gebruiker geen ban, ongeacht er een datum in dat veld
# staat.
?>
# 24 uur in seconden + de tijd:
$ban = time() + '1440';
# Dit zet je dan in je tabel en bij het opvragen doe je dit:
if((strlen($row['ban']) > 0) && ($row['ban'] > time())) {
echo 'Je hebt een ban tot '.date('H:i', $row['ban']).'.';
}
# Anders heeft de gebruiker geen ban, ongeacht er een datum in dat veld
# staat.
?>
Eventueel kun je daarbij nog de dagen enzovoort bij vermelden.
Zulke berekeningen kan je het beste doen met MySQL.
Kijk eens naar DATE_ADD:
Gewijzigd op 07/01/2012 14:02:04 door - Ariën -
ik had je mis verstaan.
ik dacht dat je bezig was in php en niet in de database.
Maar als je dan berekent in mysql, hoe kan je dan verschillen van voorbeeld 1 uur enzo?
Of moet ik dan die 1 DAY laten sturen door een php scriptje?
Ik heb een hele lijst met verschillende datums. En ik kan moeilijk voor 20 verschillende datums een query aanmaken.
Want het gaat over minuten, uren, dagen en maanden. Dus zou ik er toch al snel 4 verschillende hebben die ik dan wel kan aanpassen met PHP als dat zou moeten. Maar die time() werkt perfect voor mij...
Dem Ian op 07/01/2012 14:05:26:
@ Aar,
ik had je mis verstaan.
ik dacht dat je bezig was in php en niet in de database.
Maar als je dan berekent in mysql, hoe kan je dan verschillen van voorbeeld 1 uur enzo?
Of moet ik dan die 1 DAY laten sturen door een php scriptje?
ik had je mis verstaan.
ik dacht dat je bezig was in php en niet in de database.
Maar als je dan berekent in mysql, hoe kan je dan verschillen van voorbeeld 1 uur enzo?
Of moet ik dan die 1 DAY laten sturen door een php scriptje?
1 HOUR, 2 HOURS, 2DAY, 3 YEARS, dat begrijpt MySQL allemaal bij de INTERVAL.
Lees anders mijn genoemde link eens door. Dat had je het allang zelf kunnen zien.
Gewijzigd op 07/01/2012 14:20:41 door - Ariën -
Pas als je het niet met "standaard" sql afkunt, mag je je vergrijpen aan database speciefike functionaliteiten.
Hier het script:
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
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
<?
include("config.php");
if(isset($_GET['del'])) {
if(is_numeric($_GET['del'])) {
$sql = "
UPDATE
leden
SET
ban-verloop-datum = date_add(NOW(), INTERVAL 1 DAY),
ban-status = '1'
WHERE
id='".$_GET['del']."'
";
$query = mysql_query($sql);
if($query == TRUE) {
echo "Het bericht met het ID ".$_GET[ 'del']." heeft ban.";
}
else{
echo "Er is iets fout gegaan bij het geven van een ban";
}
}else{
?>
Welke gebruiker wil je ban geven??<br />
<form method="get" action="geefban.php">
<table>
<tr>
<td><select name="del" size="1">
<option value=""> </option>
<?
$sql = "SELECT username,id FROM leden ORDER BY username ASC";
$query = mysql_query($sql);
while($rij = mysql_fetch_object($query)) {
$id = htmlspecialchars($rij->id);
$username = htmlspecialchars($rij->username);
echo "<option value=\"".$id."\">".$username."</option>\n";
}
?></select>
</td>
<td><input type="submit" value="GeefBan" /></td>
</tr>
</table>
</form>
<?
}
}else{
?>
Welke gebruiker wil je ban geven?<br />
<ul>
<li><a href="geefban.php?del=do">Geef ban</a></li>
</ul>
</body>
</html>
<?php
}
?>
include("config.php");
if(isset($_GET['del'])) {
if(is_numeric($_GET['del'])) {
$sql = "
UPDATE
leden
SET
ban-verloop-datum = date_add(NOW(), INTERVAL 1 DAY),
ban-status = '1'
WHERE
id='".$_GET['del']."'
";
$query = mysql_query($sql);
if($query == TRUE) {
echo "Het bericht met het ID ".$_GET[ 'del']." heeft ban.";
}
else{
echo "Er is iets fout gegaan bij het geven van een ban";
}
}else{
?>
Welke gebruiker wil je ban geven??<br />
<form method="get" action="geefban.php">
<table>
<tr>
<td><select name="del" size="1">
<option value=""> </option>
<?
$sql = "SELECT username,id FROM leden ORDER BY username ASC";
$query = mysql_query($sql);
while($rij = mysql_fetch_object($query)) {
$id = htmlspecialchars($rij->id);
$username = htmlspecialchars($rij->username);
echo "<option value=\"".$id."\">".$username."</option>\n";
}
?></select>
</td>
<td><input type="submit" value="GeefBan" /></td>
</tr>
</table>
</form>
<?
}
}else{
?>
Welke gebruiker wil je ban geven?<br />
<ul>
<li><a href="geefban.php?del=do">Geef ban</a></li>
</ul>
</body>
</html>
<?php
}
?>
De errors:
° Warning: mysql_query() [function.mysql-query]: Access denied for user 'a7258442'@'localhost' (using password: NO) in /home/a7258442/public_html/testen/geefban.php on line 38
°Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/a7258442/public_html/testen/geefban.php on line 38
°Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/a7258442/public_html/testen/geefban.php on line 39
Dem Ian op 07/01/2012 16:48:22:
De errors:
° Warning: mysql_query() [function.mysql-query]: Access denied for user 'a7258442'@'localhost' (using password: NO) in /home/a7258442/public_html/testen/geefban.php on line 38
° Warning: mysql_query() [function.mysql-query]: Access denied for user 'a7258442'@'localhost' (using password: NO) in /home/a7258442/public_html/testen/geefban.php on line 38
Je hebt geen verbinding met de database. Had je zelf ook kunnen lezen...
Ik heb btw wel contact met m'n database.
Je script logica klopt overigens ook niet, want je kan de database - je hebt geen connectie - niet gebruiken en dus ook geen query erop afvuren. Dus waar is het alternatieve logische script path.
@Aar, volgens mij gebruik je bij INTERVAL in MySQL geen HOUR en HOURS, maar altijd HOUR. het is namelijk de orde van grootte die ermee aangeeft. Ik kan het nu alleen even niet checken, maar ik ben er vrij zeker van.
Dem Ian op 07/01/2012 16:51:09:
Ik heb btw wel contact met m'n database.
Wrong, je hebt geen wachtwoord opgegeven. Lees de error nog maar eens. Kijk nog eens of in het config bestand écht verbinding wordt gemaakt, Mysql verzint dit niet zomaar natuurlijk ;-)