Síða 1 af 1

PHP & MySql timestamp

Sent: Mán 14. Mar 2005 08:45
af gnarr
É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.

Sent: Mán 14. Mar 2005 09:58
af Stutturdreki

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.

Sent: Mán 14. Mar 2005 11:12
af gnarr
É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()".

Sent: Mán 14. Mar 2005 13:02
af Stutturdreki
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.

Sent: Mán 14. Mar 2005 13:20
af gnarr
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!

Sent: Mán 14. Mar 2005 13:52
af Stutturdreki
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 :)

Sent: Mán 14. Mar 2005 14:50
af gnarr
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.

Sent: Mán 14. Mar 2005 15:01
af gnarr
Þetta er komið :D

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

Sent: Mán 14. Mar 2005 17:32
af Stutturdreki
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 ..

Sent: Mán 14. Mar 2005 23:49
af gnarr
É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?

Sent: Mið 16. Mar 2005 08:15
af gnarr
é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

Sent: Mið 16. Mar 2005 09:03
af Stutturdreki
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

Sent: Mið 16. Mar 2005 09:59
af gnarr
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.

Sent: Mið 16. Mar 2005 10:59
af Stutturdreki
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.

Sent: Mið 16. Mar 2005 12:42
af gnarr
:cry: ég ætla bara að fara uppí rúm að væla..

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

Sent: Mið 16. Mar 2005 23:56
af daremo
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

Sent: Fim 17. Mar 2005 00:12
af MezzUp
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.

Sent: Fim 17. Mar 2005 08:14
af gnarr
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());
?>

Sent: Fim 17. Mar 2005 12:30
af Pandemic
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í :)

Sent: Fim 17. Mar 2005 13:05
af gnarr
é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á í.

Sent: Fim 17. Mar 2005 18:32
af Gothiatek
É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.

Sent: Þri 05. Apr 2005 14:09
af gnarr
sýnidæmi takk ;)

Sent: Þri 05. Apr 2005 14:37
af Stutturdreki
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.

Sent: Þri 05. Apr 2005 15:15
af gnarr
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ð.