PHP & MySql timestamp

Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

PHP & MySql timestamp

Pósturaf gnarr » Mán 14. Mar 2005 08:45

Ég er í þvílíkasta vanda með þetta! ég er búinn að vera að pirra mig á þessu alveg síðann á fimmtudag, og þetta virðist ekkert vera að ganga.

Málið er að ég þarf að setja færslu inní Sql með php, og það þarf að fylgja timestamp með.

ég er með þetta svona núna:

Kóði: Velja allt

<body>
<form method= 'get' action= 'action.php' >
  <p>    <br>
    Nafn :
      <input type= 'text' name= 'starfsmadur' >
    <br>
    <br>
    <input type= 'hidden' name= 'commented' value= 'set' >
    <input type= 'submit' value= 'Áfram' >
  </p>
</form>
</body>

<?php
$timi = date("Y-m-d H-i-s");

if(isset($_GET['commented']))
{
echo('Fært í gagnagrunn.');

$host = 'localhost';
$user = 'notandanafn';
$pass = 'password';
$db = 'database';
$table = 'nafnogtimi';

$skraninganr = $_GET['skraninganr'];
$starfsmadur = $_GET['starfsmadur'];

mysql_connect($host,$user,$pass) or die(mysql_error());
mysql_select_db($db) or die(mysql_error());
$add_all = "INSERT INTO $table (nafn, timi) values('$nafn','str_to_date('$timi','%Y-%m-%d %H:%i:%s')";
mysql_query($add_all) or die(mysql_error());
}
else
{
}
?>


Ég er búinn að prófa að setja líka now() í insert setninguna, setja bara $timi ýmislegt fleira.

"timi" er timestamp í sql.
Þegar ég breytti því í varchar, þá fæ ég "D M j" format (Mon Mar 14), á dagsetningunni inní gagnagrunninn. annars ekkert.


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Mán 14. Mar 2005 09:58

Kóði: Velja allt

insert into $table (nafn, timi) values('$nafn', timestamp($timi)
insert into $table (nafn, timi) values('$nafn', now())

Ætti bæði að virka en ættir alltaf að láta gagnagrunninn búa dagsettninguna til. Ertu búinn að prófa að keyra sqlið í gagnagrunninum sjálfum? Sérð betur þar ef það er villa.

Annars er lang snyrtilegast með svona dæmi að gera oninsert trigger í grunninum sem bætir timestamp sjálfkrafa við og þú þarft þá bara að gera:

Kóði: Velja allt

insert into $table (nafn) values('$name')


Svo segir 'the fine manual':
MySql Manual skrifaði:If str contains an illegal date, time, or datetime value, STR_TO_DATE() returns NULL.



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Mán 14. Mar 2005 11:12

Ég er hálfgerður nýliði :)

hvernig set ég oninsert í gagnagrunninn? það væri náttúrulega þægilegast.

get ég samt gert "update" án þess að það breyti tímanum?

ég prófaði bæði að setja "timestamp($timi)" og "timestamp('$timi','%Y-%m-%d %H:%i:%s')". kom NULL af báðum og það sama með "now()".


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Mán 14. Mar 2005 13:02

Well.. kann í raun ekkert á mySql (bara einu sinni unnið með hann og það var fyrir 4 árum) en í SQL staðlinum eru skilgreindir Triggers sem geta verið onupdate, oninsert, ondelete.. etc. Virka svona svipað og events í forritun.

MySql Manual skrifaði: Triggers are currently being implemented, with basic functionality in MySQL 5.0, with further development planned for MySQL 5.1.

Þannig að ég geri ráð fyrir því að þú getir hugsanlega ekki notað þetta :(

En ertu búinn að fara í gagnagrunninn sjálfan og skrifa insert skipuninna þína þar og sjá hvað gerist? Best að láta php prenta hana út á skjáinn og kópera hana þaðan yfir í sqlið, þá ertu örugglega að framkvæma það sama. Lang best að prófa allt SQL á grunninum áður en þú setur það inn í kóða.

Hefurðu prófað að nota DateTime í staðinn fyrir Timestamp á þennann dálk?

Í versta falli geturðu alltaf geymt tímann sem streng í grunninum.. bara vandræði ef þú ætlar að fara að gera einhverjar æfingar með dagsettninguna. Ef þú þarft bara að birta hana aftur skiptir það engu máli.



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Mán 14. Mar 2005 13:20

ef ég fer í sql-ið og geri:

Kóði: Velja allt

insert into nafnogtimi (nafn, timi) values('Gunnar',now());


þá kemur það rétt í gagnagrunninn.

líka ef ég geri:

Kóði: Velja allt

insert into nafnogtimi (nafn, timi) values('Gunnar','2005-03-14 13:18:05');



getur verið að php sé ekki að outputa rétt yfir í sql-ið?

það er eins og að þetta breytist á leiðinni..

ef ég set

Kóði: Velja allt

$timi = date("Y-m-d H-i-s");
echo $timi;


ekkóar php "$timi" sem "2005-03-14 13:18:05", en ef ég set sql-inn á að taka "timi" inn sem varchar, þá stendur "Mon Mar 14" í sql-inu.

*update*

sama þótt ég setji inn

Kóði: Velja allt

$now = "2005-03-14 13:18:05";
$add_all = "INSERT INTO $table (nafn, timi) values('$nafn','$now'";
mysql_query($add_all) or die(mysql_error());


þá kemur tíminn ekki inn í sql ;(

ég skil ekki bofs!


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Mán 14. Mar 2005 13:52

Skrítið ef:

Kóði: Velja allt

insert into nafnogtimi (nafn, timi) values('Gunnar',now());

.. virkar ekki úr PHPinu.

En hinsvegar er ekki alveg að marka það ef þú gerir:

Kóði: Velja allt

select time from nafnogtimi

í gagnagrunninum því það er ekki gefið að það sé með sama formati og þú notaðir í insert.. gagnagrunnurinn notar bara einhvert default format. Þarft því að formata aftur þegar þú velur upp úr grunninum.

*update*

Echoaðu út $add_all breytunni og pastaðu textanum yfir í sql grunninn til að sjá hvort sqlið keyri ekki örugglega þar líka. Annars vantar að loka sviga aftast hjá þér :)



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Mán 14. Mar 2005 14:50

snillingur ertu !

$add_all echo-aði:

Kóði: Velja allt

INSERT INTO nafnoftimi (nafn, timi) values('gunnar','Mon Mar 14')


þannig að tíminn er greinilega ekki að koma rétt útúr $add_All :D

núna er bara að skoða google, og finna út afhverju þetta kemur út sem "D M j" í staðin fyrir "Y-m-d H-i-s" :)


Stutturdreki skrifaði:Annars vantar að loka sviga aftast hjá þér


skrítið.. hann er í kóðanum hjá mér ;) ætli ég hafi ekki rekið mig í backspace.


"Give what you can, take what you need."

Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Mán 14. Mar 2005 15:01

Þetta er komið :D

miljón þakkir :8) =D> :sleezyjoe


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Mán 14. Mar 2005 17:32

Damn.. var að vona að þetta yrði vandamál hjá þér aðeins lengur :twisted:
Loksins þegar það kom eitthvað skemmtilegt fyrir forritunar nörd hérna ..



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Mán 14. Mar 2005 23:49

Ég lofa þér að ég verð með shitloads af vandamálum út þessa viku :) ég kann ekki shit á sql + php :lol:

Annars er ég núþegar kominn með annað vandamál :p ég get ekki gert cookies.

Er það ekki bara

Kóði: Velja allt

<?php

setcookie ("cookie", "það sem á að vera í kökunni");

?>


Er ég að gleyma einhverju?

já.. ég er með þetta efst í kóðanum. á línu 1.

Eða þarf ég kanski að kveikja á einhverju "enable cookies" dæmi í apache?


"Give what you can, take what you need."

Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Mið 16. Mar 2005 08:15

ég er kominn með annað vandamál.. held ég ;)

Kóði: Velja allt

  $max = "SELECT MAX(id) FROM nafnoftimi";
  $rmax = mysql_query($max);
  $id = $rmax + 1;


id er decimal númer.

ef ég geri echo á $rmax, þá fæ ég út "Resource id #5", þótt gagnagrunnurinn sé með hæst id númer 1 ;(

ég er með fleiri vandamál fyrir þann sem að leisir þetta. :P


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Mið 16. Mar 2005 09:03

Cookies:

set_cookies() fallið skilar boolean gildi, getur þar af leiðandi gert:

Kóði: Velja allt

if(set_cookie(..)==TRUE) { .. }

eða jafnvel bara:

Kóði: Velja allt

if(set_cookie(..)) { .. }

Og notað það til að debugga. Kann því miður ekkert á apache þeir eru með ágætis documentation svo það ætti ekki að vera mikið mál að finna það út. Minni líka á að cookies geta verið disablaðar í browser hjá notendum.. miklu betra og öruggara að nota session. Syntaxinn er réttur sýnist mér.

SQL:

Búinn að prófa þetta query í grunninum? (as in ekki í gegnum php)
Akkuru er id column decimal? Getur einhver fengið id=0,5 eða id = 74,123423 ? Id á í 99% tilfella að vera heiltala.
Og hvaðan kemur textinn "Resource id"? Spurning hvort 'id' sé reserved word í MySql, getur prófað að renama dálkinn eða nota [id] í queryinu (virkar í MS Sql server ef maður er að nota reserved words..)

*update*

Fletti þessu upp varðandi SQLið og það tengist því að niðurstaðan úr queryinu er array en ekki stakt gildi.

Kóði: Velja allt

$array = mysql_query(..);
$id = $array[0];

Ætti að skila því sem þú þarft



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Mið 16. Mar 2005 09:59

hvaða format á ég að hafa á id?

ég vill echo-a þetta:

Kóði: Velja allt

SELECT MAX(id) FROM nafnogtimi


er þetta ekki rétt?:

Kóði: Velja allt

  $max = mysql_query("SELECT MAX(id) FROM nafnogtimi");
  $row=mysql_fetch_row($max);
  $id = $row + 1;


*edit*

$max skilar "Resource id #5"
$row skilar "Array"

:?

*edit2*

Kóði: Velja allt

<?php

$table = mysql_query("SELECT MAX(id) FROM nafnogtimi");
echo "<pre>";
while ($row = mysql_fetch_assoc($table)) {
   print_r($row);
   echo "<br>";
}
echo "</pre>";

?>


skilar:

Kóði: Velja allt

Array
(
    [MAX(id)] => 1
)


sem að er rétt. ég er búinn að prófa að breyta id, og það kemur rétt útúr þessu. en ég þarf að fá "bara" id. en ekki "Array ( [MAX(id)] => )" í kringum.


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Mið 16. Mar 2005 10:59

Prófaðu:

Kóði: Velja allt

$result = mysql_query("SELECT MAX(id) FROM nafnogtimi");
$id = $result[0];
echo $id

Ætti að skila þér max(id) úr grunninum.



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Mið 16. Mar 2005 12:42

:cry: ég ætla bara að fara uppí rúm að væla..

þetta er of pirrandi! það kemur ekkert úr þessu :cry:


"Give what you can, take what you need."

Skjámynd

daremo
spjallið.is
Póstar: 465
Skráði sig: Mið 27. Okt 2004 00:39
Reputation: 73
Staða: Ótengdur

Pósturaf daremo » Mið 16. Mar 2005 23:56

prófaðu þetta:

Kóði: Velja allt

$max = mysql_query("SELECT MAX(id) AS id FROM nafnogtimi");
$row=mysql_fetch_object($max);
$id = $row->id + 1;


ef þú ert að nota mysql, ættirðu líka að geta notað auto_increment á id og losnað við allt þetta vesen :p



Skjámynd

MezzUp
Besserwisser
Póstar: 3694
Skráði sig: Þri 24. Sep 2002 15:19
Reputation: 0
Staða: Ótengdur

Pósturaf MezzUp » Fim 17. Mar 2005 00:12

Bara að skjóta inní að þessi þráður (og þessi t.d. líka) eru ákkúrat umræður sem að maður vill sjá hérna. Alvöru vandamál sem að ekki er hægt að leita uppi á netinu sjálfur á 5 mín. heldur eitthvað sem að reynir á tölvureynslu manna og aðrir geta lært af.



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Fim 17. Mar 2005 08:14

daremo skrifaði:prófaðu þetta:

Kóði: Velja allt

$max = mysql_query("SELECT MAX(id) AS id FROM nafnogtimi");
$row=mysql_fetch_object($max);
$id = $row->id + 1;


ef þú ert að nota mysql, ættirðu líka að geta notað auto_increment á id og losnað við allt þetta vesen :p


Kóði: Velja allt

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in d:\http\annad\id.php on line 23


annars fann ég aðra lausn á málinu.

í staðin fyrir að nota id á færslurnar í gagnagrunninn, þá læt ég tímann sem það er skráð í session, síðan kalla ég bara á tímann úr session.


Kóði: Velja allt

<?php
session_start();
$timi = $_SESSION['timi'];
$add_all = "update $fra set timie = '$fra' where timi = '$timi'";
mysql_query($add_all) or die(mysql_error());
?>


"Give what you can, take what you need."

Skjámynd

Pandemic
Stjórnandi
Póstar: 3760
Skráði sig: Fim 31. Júl 2003 15:25
Reputation: 123
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf Pandemic » Fim 17. Mar 2005 12:30

Bara smá off topic:
Hafið þið prófað að lesa php 5 for dummies?
Langar að læra php orðinn frekar þreyttur á að kunna bara að fikkta í því :)



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Fim 17. Mar 2005 13:05

ég er búinn að læra helling svona.. ákveða að gera eitthvað, og gera það :)

maður lendir á fullt af hlutum sem stoppa mann, en það er bara til að læra á :D

hérna eru nokkrar síður sem ég hef notað til að hjálpa mér.

alskonar sql:

http://webmaster.spray.se/topics/technic/php/php-workshop4/1/

http://dev.mysql.com/doc/mysql/en/column-types.html

http://www.phpbuilder.com/columns/joe20010104.php3?page=1

http://sqlcourse.com/intro.html <- Þessi er svaka góður

náðu svo í php gestabækur, forum og alskonar opensource hluti. fínt að finna út hvernig þeir gera hlutina sem maður er að spá í.


"Give what you can, take what you need."

Skjámynd

Gothiatek
Vélbúnaðarníðingur
Póstar: 311
Skráði sig: Fim 15. Maí 2003 18:14
Reputation: 0
Staðsetning: ptr->curr_loc
Staða: Ótengdur

Pósturaf Gothiatek » Fim 17. Mar 2005 18:32

Ég mæli nú ekki með því að nota session tíma sem id á töfluna, kannski ertu bara að fikta með session og þá er það hið besta mál.

Heldur er ekki sniðugt að vera sækja MAX(id) úr grunni og bæta við 1 (væntanlega þá til að skrifa nýja færslu í grunninn sem er einum hærri en sú fyrri)...því hvað ætlaru að gera ef tveir fara inn á síðuna "samtímis" og fá sama MAX(id) úr grunninum og vista svo :wink:

Mæli sterklega með því að nota auto_increment og láta mysql höndla þetta fyrir þig (eins og bent hefur verið á)...ég ætla ekki að segja þér kóðan strax heldur leyfa þér að garfa aðeins í þessu því þannig lærir maður mest.
Ef þú lendir í vandræðum eða skilur þetta ekki alveg þá get ég komið með smá sýnisdæmi handa þér.


pseudo-user on a pseudo-terminal

Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Þri 05. Apr 2005 14:09

sýnidæmi takk ;)


"Give what you can, take what you need."

Skjámynd

Stutturdreki
Of mikill frítími
Póstar: 1702
Skráði sig: Þri 27. Apr 2004 14:03
Reputation: 38
Staða: Ótengdur

Pósturaf Stutturdreki » Þri 05. Apr 2005 14:37

http://dev.mysql.com/doc/mysql/en/example-auto-increment.html

Með Auto Increment sér MySql algerlega um þetta fyrir þig. ID dálkur sem er jafnframt Primary Key í töflu á alltaf að vera einkvæmt hlaupandi tala, sem inniheldur engin gögn sem slík. Amk. samkvæmt góðri gagnagrunns hönnun.



Skjámynd

Höfundur
gnarr
Kóngur
Póstar: 6494
Skráði sig: Lau 29. Mar 2003 19:54
Reputation: 313
Staðsetning: Reykjavík
Staða: Ótengdur

Pósturaf gnarr » Þri 05. Apr 2005 15:15

snilld :D djöö.. þetta er svo einfalt. og ég er búinn að vera að finna upp hjólið með hinu. hehe :) en maður lærði bara helling á þetta fyrir vikið.


"Give what you can, take what you need."