|
You last visited: Today at 14:24
Advertisement
PHP & SQL Datetime
Discussion on PHP & SQL Datetime within the Fiesta Online forum part of the MMORPGs category.
08/23/2019, 04:00
|
#1
|
elite*gold: 0
Join Date: Oct 2011
Posts: 334
Received Thanks: 32
|
PHP & SQL Datetime
hi ich hab ma ne frage zum datetime
$old_date = date("Y-m-d H:i:s");
$old_date_timestamp = strtotime($old_date);
$new_date = date("Y-m-d H:i:s", $old_date_timestamp);
if ($old_date_timestamp = date("Y-m-d H:i:s"))
$db_eintragen_rRebirthDate = $new_date = date("Y-m-d H:i:s", $old_date_timestamp);
if($db_auslesen_chars_trebirthinfo_save[0]->rRebirthNo == 0)
{
$db_eintragen_syntax_trebirthinfo = "
INSERT INTO [dbo].[tRebirthInfo]
(
nCharNo,rRebirthDate,rRebirthNo
)
VALUES
(
'".$_POST['character']."','".$db_eintragen_rRebirthDate."','".$db_eintra gen_rRebirthNo."'
)
";
}
else
{
$db_eintragen_syntax_trebirthinfo = "
UPDATE
[dbo].[tRebirthInfo]
SET
rRebirthDate='".$db_eintragen_rRebirthDate."',
rRebirthNo='".$db_eintragen_rRebirthNo."'
WHERE
nCharNo='".$_POST['character']."'
";
}
das wäre der so genannte datums und uhrzeit eintrag und co so nun hab ich folgendes vor das man zwischen den rebirth 24 stunden warten muss wie das geht ist ja klar aber ich hab halt nen ganz anderes problem er trägt mir zwar ein datum in die SQL DB ein aber leider nicht das aktulle halt er trägt mir das hier immer ein [ 1970-01-01 00:00:23.000 ]
hab ich da vielleicht irgend ein fehler gemacht oder liegt es am SQL Server oder der PHP version
was ich nutze ist im moment
Windows 10
IIS
PHP v7.2
SQL Server 2017
|
|
|
08/23/2019, 04:38
|
#2
|
elite*gold: 127
Join Date: Nov 2018
Posts: 186
Received Thanks: 21
|
Beispiel :
PHP Code:
<td><?php echo date('d.m.y H:i:s', $row['Time']); ?></td>
|
|
|
08/24/2019, 09:29
|
#3
|
elite*gold: 0
Join Date: Apr 2018
Posts: 180
Received Thanks: 31
|
Also als ich mal für meine Website ein Posting system gemacht habe aus lw hatte ich da auch ein Datum Column inserted hab ich es einfach indem ich mir ein String gemacht habe mit
PHP Code:
$date = date('Y-m-d H:i:s');
und dann mit insert code eingefügt zeigt mir auch jetzt noch den heutigen datum an wenn ich was poste.
|
|
|
08/24/2019, 10:32
|
#4
|
elite*gold: 0
Join Date: Sep 2013
Posts: 562
Received Thanks: 361
|
Quote:
Originally Posted by Terrorkrieger
hi ich hab ma ne frage zum datetime
$old_date = date("Y-m-d H:i:s");
$old_date_timestamp = strtotime($old_date);
$new_date = date("Y-m-d H:i:s", $old_date_timestamp);
if ($old_date_timestamp = date("Y-m-d H:i:s"))
$db_eintragen_rRebirthDate = $new_date = date("Y-m-d H:i:s", $old_date_timestamp);
if($db_auslesen_chars_trebirthinfo_save[0]->rRebirthNo == 0)
{
$db_eintragen_syntax_trebirthinfo = "
INSERT INTO [dbo].[tRebirthInfo]
(
nCharNo,rRebirthDate,rRebirthNo
)
VALUES
(
'".$_POST['character']."','".$db_eintragen_rRebirthDate."','".$db_eintra gen_rRebirthNo."'
)
";
}
else
{
$db_eintragen_syntax_trebirthinfo = "
UPDATE
[dbo].[tRebirthInfo]
SET
rRebirthDate='".$db_eintragen_rRebirthDate."',
rRebirthNo='".$db_eintragen_rRebirthNo."'
WHERE
nCharNo='".$_POST['character']."'
";
}
das wäre der so genannte datums und uhrzeit eintrag und co so nun hab ich folgendes vor das man zwischen den rebirth 24 stunden warten muss wie das geht ist ja klar aber ich hab halt nen ganz anderes problem er trägt mir zwar ein datum in die SQL DB ein aber leider nicht das aktulle halt er trägt mir das hier immer ein [ 1970-01-01 00:00:23.000 ]
hab ich da vielleicht irgend ein fehler gemacht oder liegt es am SQL Server oder der PHP version
was ich nutze ist im moment
Windows 10
IIS
PHP v7.2
SQL Server 2017
|
Hier mal ein paar winks mit dem Zaunpfahl, ich kenne das rebirth system und seine funktionsweise leider nicht aber im grunde genommen sollte es vermutlich so laufen, dass du aus der datenbank, das zuletzt eingetragene Datum ausliest, in einer variable speicherst und die differenz zum aktuellen datum ermittelst und dann vergleichst ob diese größer als 24std ist. Sollte dem so sein, dann skript ausführen, wenn nich dann nich.
$old_date = date("Y-m-d H:i:s");
//also altes datum ist gleich aktuelles Datum???
$old_date_timestamp = strtotime($old_date);
//ok dann machen wir nen timestamp aus dem "alten-aktuellen-Datum"???
$new_date = date("Y-m-d H:i:s", $old_date_timestamp);
// super, jetzt machen wir aus dem zuvor erstelltem timestamp vom "alten-aktuellen-Datum" also wieder das neue Datum???
if ($old_date_timestamp = date("Y-m-d H:i:s"))
//naja, macht ja alles nix, setzen wir halt hier wieder den timestamp zu nem normalen datum!?!?! soll das ein vergleich sein? dann == ansonsten ist es immer wahr
$db_eintragen_rRebirthDate = $new_date = date("Y-m-d H:i:s", $old_date_timestamp);
// hm warte mal warum formatieren wir jetzt nicht nochmal den timestamp der ja gar keiner mehr ist zu nem normalem Date und speichern es in newdate,
// nur um newdate dann nochmal in die eintragen variable zu speichern wobei newdate eigentlich doch schon lange im richtigen format sein sollte...???? hmmmmmmmm
// wobei, eigentlich ists jetzt eh wurscht denn $new_date = date("Y-m-d H:i:s", $old_date_timestamp) funzt nun eh nich mehr da das format von $old_date_timestamp
// ja vorhin mit date("Y-m-d H:i:s") überschrieben wurde
//nachfolgender code macht soweit sinn
if($db_auslesen_chars_trebirthinfo_save[0]->rRebirthNo == 0)
{
$db_eintragen_syntax_trebirthinfo = "
INSERT INTO [dbo].[tRebirthInfo]
(
nCharNo,rRebirthDate,rRebirthNo
)
VALUES
(
'".$_POST['character']."','".$db_eintragen_rRebirthDate."','".$db_eintra gen_rRebirthNo."'
)
";
}
else
{
$db_eintragen_syntax_trebirthinfo = "
UPDATE
[dbo].[tRebirthInfo]
SET
rRebirthDate='".$db_eintragen_rRebirthDate."',
rRebirthNo='".$db_eintragen_rRebirthNo."'
WHERE
nCharNo='".$_POST['character']."'
";
}
dass dir 1970 eingetragen wird liegt vermutlich daran, dass du mit leeren bzw. falschen werten arbeitest und damit meine ich ganz speziell die zeile
Code:
if ($old_date_timestamp = date("Y-m-d H:i:s"))
denn hier setzt du den timestamp den du später bei
Code:
$db_eintragen_rRebirthDate = $new_date = date("Y-m-d H:i:s", $old_date_timestamp);
benutzen willst wieder in ein normales datumsformat und zerstörst dir so den wert.
also mein tipp fürs erste, ändere zuallererst mal
Code:
if ($old_date_timestamp = date("Y-m-d H:i:s"))
zu
Code:
if ($old_date_timestamp == date("Y-m-d H:i:s"))
das sollte dir zumindest schonmal das problem mit den 70ern beheben
edit: Hatte grad noch etwas langeweile und hab dir mal eine möglichkeit zusammengebastelt wie man
den 24Stunden Check vollziehen könnte.
Code:
<?php
####################################################################################
## zu Debugzwecken, sollte in der Entwicklungsphase immer benutzt,
## später aber auskommentiert werden um ungewollten output bei fehlern zu vermeiden.
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
###################################################################################
## Zeitzonen sollten festgelegt werden um Probleme zu vermeiden,
## Standard in php ist meistens Asia/Kuwait nach neuinstallation
## und müsste soweit ich mich entsinne in der php.ini geändert werden können.
date_default_timezone_set('Europe/Berlin');
## hier sollte der alte wert aus der Datenbank landen, also new DateTime(Datenbankwert)
$old_date = new DateTime('2019-08-24 07:35:00');
## ermittelt aktuelles Datum/Uhrzeit, new DateTime('now') würde auch gehen
$current_date = new DateTime(date("Y-m-d H:i:s"));
## die maximale Differenz der Daten in Stunden
$max_diff_hours = 24;
## hier wird bereits die differenz beider Daten ermittelt
$calculated_diff = $current_date->diff($old_date);
## hier rechnen wir die differenz in Stunden um
$hours = $calculated_diff->h + ($calculated_diff->days*24);
## wenn dann
if($hours >= $max_diff_hours){
## wenn die verglichene Differenz größer ist als der festgelegte maximalwert dann mach was
echo "Es sind bereits ".$hours." Stunden vergangen, von mir aus darfste widergeboren werden.";
}else{
## wenn nich mach was anderes oder nix
echo "Sorry, du musst noch ".($max_diff_hours-$hours)." Stunden auf die Wiedergeburt warten.";
}
?>
|
|
|
08/24/2019, 13:10
|
#5
|
elite*gold: 0
Join Date: Oct 2011
Posts: 334
Received Thanks: 32
|
danke D0n ich werd es dann ma versuchen und geb dann bescheid wenn noch ne frage offen sein sollte
|
|
|
08/24/2019, 21:02
|
#6
|
elite*gold: 0
Join Date: Aug 2016
Posts: 114
Received Thanks: 90
|
So vielleicht?
PHP Code:
$db_eintragen_rRebirthDate = time(); if ($db_auslesen_chars_trebirthinfo_save[0]->rRebirthNo == 0) { $db_eintragen_syntax_trebirthinfo = "INSERT INTO tRebirthInfo (nCharNo, rRebirthDate, rRebirthNo) VALUES ('".$_POST['character']."', '".$db_eintragen_rRebirthDate."', '".$db_eintra gen_rRebirthNo."')"; } else { $sth = $dbh->prepare('SELECT rRebirthDate FROM tRebirthInfo WHERE nCharNo = ?'); $sth->bindValue(1, $_POST['character'], PDO::PARAM_INT); $sth->execute(); if ($sth->fetchColumn() + 86400 <= time()) { $db_eintragen_syntax_trebirthinfo = "UPDATE [dbo].[tRebirthInfo] SET rRebirthDate= '".$db_eintragen_rRebirthDate."', rRebirthNo= '".$db_eintragen_rRebirthNo."' WHERE nCharNo= '".$_POST['character']."'"; } }
Keine Ahnung blicke bei dem Script auch net so ganz durch. Wenn du das verwendest muss rRebirthDate ein int bzw bigint sein wenn du vorhast es nach 2038 noch zu verwenden
|
|
|
08/25/2019, 03:29
|
#7
|
elite*gold: 0
Join Date: Sep 2013
Posts: 562
Received Thanks: 361
|
Quote:
Originally Posted by Amanecer
So vielleicht?
PHP Code:
$db_eintragen_rRebirthDate = time(); if ($db_auslesen_chars_trebirthinfo_save[0]->rRebirthNo == 0) { $db_eintragen_syntax_trebirthinfo = "INSERT INTO tRebirthInfo (nCharNo, rRebirthDate, rRebirthNo) VALUES ('".$_POST['character']."', '".$db_eintragen_rRebirthDate."', '".$db_eintra gen_rRebirthNo."')"; } else { $sth = $dbh->prepare('SELECT rRebirthDate FROM tRebirthInfo WHERE nCharNo = ?'); $sth->bindValue(1, $_POST['character'], PDO::PARAM_INT); $sth->execute(); if ($sth->fetchColumn() + 86400 <= time()) { $db_eintragen_syntax_trebirthinfo = "UPDATE [dbo].[tRebirthInfo] SET rRebirthDate= '".$db_eintragen_rRebirthDate."', rRebirthNo= '".$db_eintragen_rRebirthNo."' WHERE nCharNo= '".$_POST['character']."'"; } }
Keine Ahnung blicke bei dem Script auch net so ganz durch. Wenn du das verwendest muss rRebirthDate ein int bzw bigint sein wenn du vorhast es nach 2038 noch zu verwenden 
|
Laut seinem script ist rRebirthDate vom typ Datum im Format "Y-m-d H:i:s" aber ja, sollte er auf typ Datum verzichten und stattdessen nen timestamp dort speichern (bigint vllt. bevorzugt) sollte das ganze genau so problemlos funktionieren, wenns denn genau das ist was er erreichen möchte.
|
|
|
08/25/2019, 14:46
|
#8
|
elite*gold: 0
Join Date: Oct 2011
Posts: 334
Received Thanks: 32
|
also wie schon Amanecer sagte so ungefähr sieht mein script aus also muss ich in der SQL DB die spalte rRebirthDate auf bigint umstellen dann ja ?
|
|
|
Similar Threads
|
[FIX] SQL Error to convert Varchar in Datetime
04/12/2016 - Shaiya PServer Guides & Releases - 13 Replies
Hi many guys asked me why they were getting in their log, the SQL error: error to convert "Varchar in Datetime", so i took a look on EPvPers and i didn't see (maybe i'm wrong o.o) any post with the problem solved.
It happens with Warehouse dcing when trying to store items or the notice board !
It's not really a Fix but more a specific attention to pay on SQL configurations.
SQL maybe tried to save the datas in a wrong date format !
To check if you're in this case, run the next query:
|
[php][sql] php-sql query fetch JID as '0'
04/02/2016 - SRO Private Server - 1 Replies
fghfhgfhgfhgfh
|
[HELP] Datetime error
06/23/2009 - CO2 Private Server - 0 Replies
Ok im geting this error when i try to load 10 expballs per day here it is http://img188.imageshack.us/img188/8279/erroryfn.p ng
|
All times are GMT +1. The time now is 14:25.
|
|