» »

HTML forma in datum

HTML forma in datum

Muzo ::

Pozdravljeni,

imam html formo kjer je datumsko polje. Potem bi rad to s php-jem dobil v bazo. Trenutno imam v htlm formi kot type določen date, v bazi pa imam pri polju datum določen format date in obliko 0000-00-00.

Problem je v tem, da bi rad vpisoval datum v normalni obliki dd.mm.yyyy in ga potem kot takega shranil v bazo. Prav tako bi rad imel kakšno validacijo, da je vnos v pravilni obliki.

Trenutno lahko vsesem karkoli, vendar gre v bazo samo format 0000-00-00 kar mi pa ni všeč.. mi lahko kdo pomaga kaj naj naredim?

Hvala

McAjvar ::

kaksno pa imas vnosno polje? je navadno tekstovno polje ali imas pull-down menije? v vsakem primeru se ti imo izplaca pregledati vnose, pogledati, ce je datum veljaven in koncno prirejeni niz vnesti v bazo.

naj ti podam nekaj zelo preprostih primerov, preverjanje za napakami in podobno dodaj sam.

* ce imas tekstovno vnosno polje, type="text", kjer zelis imeti vnos v obliki dd.mm.yyyy, v phpju pogledas npr:
$input = $_POST['imeInputPolja'];
if (! preg_match('/\d{1,2}\.\d{1,2}\.\d{4}/', $input))
{
	// javi neko napako in koncaj ali karkoli pac ze
	return;
}
// preberi vrednosti za dan, mesec in leto
list($day, $month, $year) = sscanf($input, '%d.%d.%d');


* ce imas npr. 3 pull-down menije, kjer si uporabnik lahko izbere dan, mesec in leto, je dokaj enostavno, najenostavneje morda, ce typecastas vrednosti v cela stevila:
$day = (int) $_POST['poljeDan'];
$month = (int) $_POST['poljeMesec'];
$year = (int) $_POST['poljeLeto'];


* zdaj si izberi enega izmed zgornjih dveh primerov in nadaljuj s tole kodo
// preveri pravilnost datuma
if (! checkdate ($month, $day, $year))
{
	// javi neko napako in koncaj ali karkoli pac ze
	return;
}
// naceloma bi naj datum bil ok... pripravi ga za vpis v bazo
$dbDate = sprintf('%04d-%02d-%02d', $year, $month, $day);

// zdaj bi naj imel v variabli $dbDate zapis, ki bi lahko sel v bazo


mmg, kodo sem pisal na pamet, tako da za 100% pravilnost ne garantiram :) vseeno pa mislim, da za silo kot neka smernica bo.
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

AndrejS ::

Potem pa v bazi nastavi pravilen format datuma.

McAjvar ::

andrejs: cak, cak :) naj se najprej malo potrudi in navadi preverjat in premlevat input. pol pa naprej na baze in na "set datestyle" (postgresql) variante :)
sicer pa, kako je pri mysql-u? ali nima mysql samo yyyy-mm-dd oblike? se mi zdi, da sem na njihovi strani enkrat bral, da podpirajo bolj kot ne samo to, ker bi naj sql standard to predpisoval.
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

Muzo ::

Hoj,

malo si prepozen :)

Sem našel nek javascript, ki čekira ta vnos nekako podobno kot si ti naredil. Potem pa kar s PHPjem pretvorim tisti format v YYYYMMDD in ga zapišem v bazo. Potem delam SQL query kjer datum primerjam z current_date() oz. now(), nato pa ponovno s PHPjem spremenim nazaj v obliko dd.mm.yyyy preden naredim izpis query-a. Mogoče je malo komplicirano in bi lahko res že takoj z JS spremenil v ustrezen format, ampak dela :)

Pravzaprav sem že skoraj vse rešil, razen tega, da bi rad imel še stran, kjer bo rezultat celotnega query-a, poleg pa bi imel edit in delete link.. iskal sem delujoče tutoriale in sem našel 2, ki pa meni nikakor ne delata :(

Ima kdo kakšno idejo kako naj to naredim? oz. rajši kar primer.. u toeriji vem kako naj bi šlo, ko delam query bi si moral zapomniti id, potem narediti ustrezna linka.. delete nekako še gre, delete from where id=$id al tko nekak, samo probleme imam pri edit.

Če ma kdo kaj podobnega bi ga res prosil, bi mi zelo pomagal.

McAjvar ::

err, ja. javascript za cekiranje. in ce uporabnik to izklopi, kaj potem? osebno rajsi vidim, ce za taksne primere javascripta ni sploh in vse potrebno opravi skript na strezniku, v tem primeru php. ali pa tudi ce je javascript, php se enkrat vse preveri. ziher je ziher.

ce te prav razumem, te zanima, kako urediti izbris in urejanje nekega vnosa? najbrz imas v bazi za vsak vnos nek unikaten id? za izbris je preprosto, si ze sam povedal. naredis link in preko linka posredujes id php kodi, ki potem iz baze izbrise ustrezen vnos s tem id-jem. seveda, ce imas id numericen, preverjaj, da je vrednost, ki jo dobis, tudi res numericna, da ne bos fasal kakega sql injectiona.

za edit pa... osnovna ideja: naredis link, kjer posredujes dalje tudi id zapisa in nato pokazes formo z vnosnimi polji, ki jih napolnis z vrednostmi iz baze. zraven posredujes preko hidden polja tudi id, da ves, za kateri vnos gre. ob submitu preveris input in na bazi izvedes update stavek, npr:
update "moja_tabela" set "starost" = '13', "st_cevljev" = '45' where "id" = '666';

pri cemer ustrezno v stavek napolnis vrednosti iz vnosnih polj, poves, id pa je tisti, ki ga neses naprej v hidden polju.

al sem te narobe razumel?
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

Muzo ::

Šele zdaj vidim, da je tisto kar si napisal pravzaprav php, ki preveri vnos. Najbrž bom dodal še to.

Glede edit in delete mi je kot vidiš stvar jasna, kako naj bi delovala, vendar mi nekako ne uspe napisati take skripte, ki bi dejansko delovala :)

Delal sem po tem tutorialu:
http://www.spoono.com/php/tutorials/tut...

Ampak nazadnje zadeva ni delala... še v originalu mi ne dela, če uporabit točno tiste fajle, ki so na razpolago. Mi mogoče lahko pomagaš najti napako, ker jst se ne razumem toliko v php.

Hvala :)

McAjvar ::

hehe, precej lazje bi bilo, ce bi bolj specificno navedel, kaj zaena napaka se ti je pojavila. ali katere, ce jih je bilo vec. se pravi tocno besedilo. sicer imas narejeno mysql bazo? se nanjo povezujes z ustreznim uporabniskim imenom in geslom in delas nato na ustrezni bazi? od oka bi naj oni tutorial bolj kot ne deloval, samo res pazi, da bos uporabil tocno tako kodo, kot je tam. namrec obakrat uporablja enako spremenljivko ($cmd), z enako vrednostjo, vendar enkrat potipa se po vrednosti "submit", kar je imo malce nerodno. ampak pustimo to, za tutorial je ok :P
skratka, povej prosim tocno, kaksne datoteke si naredil, kaj imas notri, kaksna napaka se ti pojavi, etc. mimogrede, php kodo lahko mirno prilepis semle na forum, med znacki "[ st.koda php ]" in "[ /st.koda ]". brez presledkov in narekovajev.
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

Muzo ::

Najbol hecno je ravno to, da sem delal točno copy/paste kode, ki je navedena na strani. Popravil sem samo uporabniško ime in password. Tabelo sem ustvari v phpMyAdmin in tabela je narejena.

Errorja ni bilo nobenega... ko sem dal submit, se je zgodilo naslednje.. izpis vrednosti v bazi z dodatkom - Edit, kot je v skripti, ni pa se izpisalo da so bili podatki popravljeni, tako da izglda kot da ne pride do sql query-a.

Tukaj je skripta

http://majoneza.gimb.net/test/news/edit...

Source

http://majoneza.gimb.net/test/news/edit...

Res bi bil hvaležen, če bi ti uspelo najti napako oz. celo na kakšen način izboljšati skripto.

Hvala :)

McAjvar ::

poskusi za zacetek vrstico
if ($_POST["$submit"])

spremeniti v
if (isset($_POST["submit"]))

in porocaj. sicer se, ce se ne bo prej nihce drug, oglasim nocoj.

edit: mimogrede, navadi se uporavljati polne znacke za zacetek php kode, se pravi <?php namesto <?. tudi ce uporabis neko ze obstojeco kodo, je najbolje to kar takoj popravit.
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

Zgodovina sprememb…

  • spremenil: McAjvar ()

Muzo ::

Živjo, hvala zaenkrat. Bom poročal popoldne oz. zvečer, ko pridem iz službe. Včeraj mi nikakor ni zneslo :)

Hvala še enkrat in bom poročal o uspehu/neuspehu.

Drugače tudi sam sumim ta submit.. ker ko sem spremenil čisto na koncu v $_POST['submit] namesto $submit je delalo.. sicer ne pravilno, ampak nek query se pa je izvedel.

Skratka poročam še danes in še enkrat hvala.

Muzo ::

Car si, ni kej :) Zadeva dela!

Edin neki bi te še prašal.. kako bi najbolj enostavno naredil linke za vsak zapis? Rad bi imel tabelo z vsemi zapisi, ki jih bom dobil...

naredim to z foreach in potem tisto array spremenljivko in lepo echo a href=edit.php?id in pa delete al tako nekako bi moralo to izgledati če se ne motim?

Uglavnem če maš slučajno voljo še za to, ti bom ful hvaležen, če pa ne se bom pa že nekako znajdu :) Važn da tole zdej dela, ker men je biu un submit ful sumljiv, na ta isset pa nism pomislu :)

Hvala :)

McAjvar ::

komentar k zgornjim postom:
v
if ($_POST["$submit"])
je problem ta, da je php smatral $Submit za spremenljivko. ker ni bila se nikjer uporabljena/dolocena, nima vrednosti, zato je php v bistvu gledal, kaj mu predstavlja $_POST[""]. in se to: odvisno sicer, kaj in kako uporabljas preverjanja, ampak ponavadi je dosti bolje uporabiti isset() namesto direktne vrednosti spremenljivke. namrec, spremenljivka lahko vsebuje prazen niz '' ali vrednost 0, ki npr. obe predstavljata phpju false. ampak ko tebe zanima, ce je spremenljivka nastavljena, ne glede na njeno vrednost, ti tu pomaga isset().


ok. ce imas array z vrednostmi ali pa ce izpisujes rezultate direktno iz seta podatkov, ki si ga dobil iz baze, je zadeva identicna: preleti ves array in izpisi, kar rabis.

npr., ce imas array
$menu = array ('bergle', 'orehi', 'aviacija');

potem lahko naredis izpis nekako takole:
foreach ($menu as $id => $ime)
{
	echo '<a href="imefajla.php?akcija=neki&amp;id='.$id.'">'.$ime."</a>\n";
}


kako, kaj in kdaj bos izpisal, pa je odvisno od tega, kaj rabis in kako imas seatavljen array.
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

Muzo ::

spet jst.. zadeva mi še kr noče delat..

če lahko kdo pogleda, kje ga serjem.. najbrž kar v več primerih :)

http://majoneza.gimb.net/test/news/edit...

Ne dela pa delete tko k bi blo treba, neki nagaja tisti id.. pa še error da php in sicer: PHP Notice: Undefined index: cmd in /home/gnagelj/www/test/news/edit.php on line 223

če bi lahko kdo mal pogledu no, jst sm z živci že čist na koncu :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

php vprašanje.

Oddelek: Programiranje
162133 (1377) fx
»

[php] Knjiga gostov

Oddelek: Izdelava spletišč
293091 (2294) darix
»

Html forms & php -> prikaz statusa

Oddelek: Izdelava spletišč
61654 (1568) mercury
»

Kako preveriti ali so vnosna polja izpolnjena?

Oddelek: Izdelava spletišč
111928 (1582) bluefish
»

[Java] Evidenca delovnega časa - Java v navezi z Accessom

Oddelek: Programiranje
393208 (2428) c0dehunter

Več podobnih tem