db tijd + gegeven tijd uitrekenen
( ***EDIT*** dit is voor een ban script dus je word gebanned op bijvoorbeeld 17-12-2012 om 14:35 en je word gebanned voor 1440 minuten dan zou die dus op de site moeten laten zien je ban verloopt op.... )
Ik wil graag een scripje maken dat een tijd in de database + een aantal minuten dat in de database staat aangegeven uitrekent.
Bijvoorbeeld:
Tijd: 14:35
Datum: 17-12-2012
Aangegeven minuten: 1440
Nu moet die dus 1440 minuten bij de tijd rekenen dat zou dus in totaal 18-12-2012 - 14:35 worden.
Heeft iemand enig idee hoe ik dit zou kunnen maken want ik heb echt geen idee :p
Gr marco
Gewijzigd op 17/12/2012 14:38:22 door - Marco -
http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html Zie bij DATE_ADD http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
MySQL heeft in vergelijking met andere databasetypes erg veel functies om te kunnen rekenen met data en tijden. Gewijzigd op 17/12/2012 14:45:17 door John D
ik heb het al voor een stukje voorelkaar:
Ik moet alleen de tijd ( die die nu van de computer pakt) uit de db laten halen
Gewijzigd op 17/12/2012 14:46:30 door - Marco -
Ik neem aan dat je het opslaat met DATETIME?
Gewijzigd op 17/12/2012 14:49:35 door Chris PHP
Het beste is om het in de database dus met MySQL op te lossen omdat het aantal minuten voor de ban al in de database staat. Bovenstaan doe jij het met php, kan ook natuurlijk maar dan heb je twee database acties, eentje om de minuten voor de ban op te halen en eentje om het geheel weer op te slaan. Het kan in 1 insert statement en subquery die die minuten(1440) ophaalt.
http://www.phphulp.nl/php/tutorial/overig/datum-en-tijdfuncties-in-mysql/519/
Dus, je hebt een veld nodig dat datatype DATETIME heeft.
Je hebt niets van php-functies nodig.
Een ander ding is alles er rond.
Hoe en waarom ban je de gebruiker?
Op basis van IP? Of gaat het om gebande content voor een geregistreerde gebruiker, ... ?
Toon eens een SQL query die je wil geblokkeerd zien.
dus kortom het is voor een game :p
Kris Peeters op 17/12/2012 14:48:48:
Prima tutorial, wel jammer dat DATE_ADD hier niet behandeld wordt want dat zoekt TSAlle antwoorden staan te lezen in deze tutorial
http://www.phphulp.nl/php/tutorial/overig/datum-en-tijdfuncties-in-mysql/519/
http://www.phphulp.nl/php/tutorial/overig/datum-en-tijdfuncties-in-mysql/519/
Gewijzigd op 17/12/2012 14:52:09 door John D
In de database gebruik ik trouwens CURRENTTIMESTAMP dit dus:
2012-12-17 14:53:11
En de bedoeling is dus dat het veld Banned_on_Date uit de database word gehaald en daar het veld Ban_Length word opgeteld (dit veld is in minuten) en dan word geechoöd.
Toevoeging op 17/12/2012 14:59:59:
John D op 17/12/2012 14:48:13:
Het beste is om het in de database dus met MySQL op te lossen omdat het aantal minuten voor de ban al in de database staat. Bovenstaan doe jij het met php, kan ook natuurlijk maar dan heb je twee database acties, eentje om de minuten voor de ban op te halen en eentje om het geheel weer op te slaan. Het kan in 1 insert statement en subquery die die minuten(1440) ophaalt.
Hij moet het niet opslaan alleen uitrekenen en dan echoën :D
Gewijzigd op 17/12/2012 15:00:20 door - Marco -
plus en min INTERVAL is een verkorte schrijfwijze van respectievelijk de DATE_ADD en DATE_SUB functies
Okay, dus die banned_on staat in de DB, bij de tabel users.
Dus, ik ga er van uit dat je de de user selecteert op basis van een id (zie de ...)
Dan kan je dit doen:
En het is me dus nog niet volledig duidelijk wat je er mee van plan bent, maar je kan dit allemaal inwerken in subqueries
Gewijzigd op 17/12/2012 15:10:55 door Kris Peeters
$sql2 = mysql_query ("SELECT (Banned_on_Date + INTERVAL Ban_Length MINUTE) AS banned_until FROM LDTBans WHERE id=$id");
//$sql = mysql_query("select * from LDTBans");
echo $sql2;
dan krijg ik als echo
Resource id #4
Wat heb ik fout gedaan?
je bent vergeten te fetchen
Gewijzigd op 17/12/2012 15:16:35 door Ger van Steenderen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
require("require/dbconnect.php");
$id = $_GET['id'];
$sql2 = mysql_query ("SELECT (Banned_on_Date + INTERVAL Ban_Length MINUTE) AS banned_until FROM LDTBans WHERE id=$id");
$row = mysql_fetch_row($sql2);
echo $row[0];
?>
require("require/dbconnect.php");
$id = $_GET['id'];
$sql2 = mysql_query ("SELECT (Banned_on_Date + INTERVAL Ban_Length MINUTE) AS banned_until FROM LDTBans WHERE id=$id");
$row = mysql_fetch_row($sql2);
echo $row[0];
?>
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
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
<?php
// error reporting
error_reporting(E_ALL);
require("require/dbconnect.php");
$sql = "SELECT (Banned_on_Date + INTERVAL Ban_Length MINUTE) AS banned_until FROM LDTBans WHERE id=". (int) $_GET['id']; #let op mysql injection mysql_real_escape_string() voor strings (int) voor integers
$query = mysql_query ($sql);
// fouthandeling
if(!$query) {
echo 'MySQL error:' . mysql_error();
} else {
// kijken voor resultaten
if(mysql_num_rows($query) > 0) {
// resultaten ophalen
while($fetch = mysql_fetch_assoc($query)) {
//resultaat weergeven
echo $fetch['banned_until'];
}
} else {
echo 'Geen resultaten gevonden....';
}
}
?>
// error reporting
error_reporting(E_ALL);
require("require/dbconnect.php");
$sql = "SELECT (Banned_on_Date + INTERVAL Ban_Length MINUTE) AS banned_until FROM LDTBans WHERE id=". (int) $_GET['id']; #let op mysql injection mysql_real_escape_string() voor strings (int) voor integers
$query = mysql_query ($sql);
// fouthandeling
if(!$query) {
echo 'MySQL error:' . mysql_error();
} else {
// kijken voor resultaten
if(mysql_num_rows($query) > 0) {
// resultaten ophalen
while($fetch = mysql_fetch_assoc($query)) {
//resultaat weergeven
echo $fetch['banned_until'];
}
} else {
echo 'Geen resultaten gevonden....';
}
}
?>
Zo zou hij moeten werken. Kijk vooral naar het commentaar.
Gewijzigd op 17/12/2012 18:27:34 door Jordi Kroon
Maar je hebt wel gelijk natuurlijk met de foutafhandeling.
if(mysql_num_rows($query) > 0) {
Dankje voor de verbetering, ook ik maak fouten.
Zoals wij allemaal. Overigens laat ik met dit soort simpele query's de fouthandeling achterwege omdat er weinig mee mis kan gaan.
Moet ik in de database wel een veld banned_until aanmaken want daar hoort die toch het uitgerekende resultaat op te slaan?
Mijn database:
Link naar de pagina.