db tijd + gegeven tijd uitrekenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

- Marco -

- Marco -

17/12/2012 14:37:02
Quote Anchor link
Hallo,

( ***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 -
 
PHP hulp

PHP hulp

20/04/2024 18:37:14
 
John D

John D

17/12/2012 14:40:57
Quote Anchor link
MySQL heeft in vergelijking met andere databasetypes erg veel functies om te kunnen rekenen met data en tijden. 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
Gewijzigd op 17/12/2012 14:45:17 door John D
 
- Marco -

- Marco -

17/12/2012 14:44:47
Quote Anchor link
Ok dankjewel! :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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $time
=date("D dS M h:i A",time()+(1440*60));
    
    echo $time;
?>
Gewijzigd op 17/12/2012 14:46:30 door - Marco -
 
- Ariën  -
Beheerder

- Ariën -

17/12/2012 14:47:17
Quote Anchor link
Ik neem aan dat je het opslaat met DATETIME?
 
Chris PHP

Chris PHP

17/12/2012 14:47:19
Quote Anchor link
...
Gewijzigd op 17/12/2012 14:49:35 door Chris PHP
 
John D

John D

17/12/2012 14:48:13
Quote Anchor link
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.
 
Kris Peeters

Kris Peeters

17/12/2012 14:48:48
Quote Anchor link
Alle antwoorden staan te lezen in deze tutorial
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.
 
- Marco -

- Marco -

17/12/2012 14:51:39
Quote Anchor link
Nee Ik heb een plugin in een spel gemaakt die gebande players opslaat in de database met naam,id, tijd, gebanned op,reden. en dan zouden ze op de site kunnen kijken waarom ze gebanned zijn, waneer de ban verloopt
dus kortom het is voor een game :p
 
John D

John D

17/12/2012 14:51:40
Quote Anchor link
Kris Peeters op 17/12/2012 14:48:48:
Prima tutorial, wel jammer dat DATE_ADD hier niet behandeld wordt want dat zoekt TS
Gewijzigd op 17/12/2012 14:52:09 door John D
 
- Marco -

- Marco -

17/12/2012 14:56:59
Quote Anchor link
Goede tutorial maar niet helemaal wat ik zocht :)

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.

Afbeelding

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 -
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/12/2012 15:01:55
Quote Anchor link
Als je de Ban_Length in minuten hebt staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT (Banned_on_Date + INTERVAL Ban_Length MINUTE) AS banned_until FROM ....

plus en min INTERVAL is een verkorte schrijfwijze van respectievelijk de DATE_ADD en DATE_SUB functies
 
Kris Peeters

Kris Peeters

17/12/2012 15:05:13
Quote Anchor link
(te laat :) )
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
  (banned_on + INTERVAL 1440 MINUTE) AS banned_to
FROM user
WHERE id= ...


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
 
- Marco -

- Marco -

17/12/2012 15:11:41
Quote Anchor link
als ik dit doe:

$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?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/12/2012 15:16:13
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$row
= mysql_fetch_row($sql2);
echo $row[0];
?>

je bent vergeten te fetchen
Gewijzigd op 17/12/2012 15:16:35 door Ger van Steenderen
 
- Marco -

- Marco -

17/12/2012 15:18:58
Quote Anchor link
Ok dat heb ik aangepast maar dan werkt het nog steeds niet (nu echoöd die helemaal niks)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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];

?>
 
Jordi Kroon

Jordi Kroon

17/12/2012 15:31:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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....';
        }
    }


?>


Zo zou hij moeten werken. Kijk vooral naar het commentaar.
Gewijzigd op 17/12/2012 18:27:34 door Jordi Kroon
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/12/2012 16:23:42
Quote Anchor link
Jordi, kijk eens goed naar regel 18.
Maar je hebt wel gelijk natuurlijk met de foutafhandeling.
 
Kris Peeters

Kris Peeters

17/12/2012 17:32:34
Quote Anchor link
dus:
if(mysql_num_rows($query) > 0) {
 
Jordi Kroon

Jordi Kroon

17/12/2012 18:27:57
Quote Anchor link
Dankje voor de verbetering, ook ik maak fouten.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/12/2012 18:35:31
Quote Anchor link
Zoals wij allemaal. Overigens laat ik met dit soort simpele query's de fouthandeling achterwege omdat er weinig mee mis kan gaan.
 
- Marco -

- Marco -

18/12/2012 09:27:17
Quote Anchor link
@Jordi ik heb jou code geprobeerd ( en zoals Ger zei de fout op regel 18 veranderd ) maar dan werkt het nog steeds niet.
Moet ik in de database wel een veld banned_until aanmaken want daar hoort die toch het uitgerekende resultaat op te slaan?

Mijn database:
Afbeelding

Link naar de pagina.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.