Otsikko kertookin jo ongelmani ytimen, mutta en vain löydä ongelmaa
<!DOCTYPE HTML > <html> <head> <title> Marevan seuranta</title> <?php require_once("sessio.inc.php"); /* 20.01.2012 Otetaan käyttöön sessio.inc.php */ require_once("config.php"); require_once("sessio_login.inc.php"); /* 20.01.2012 Otetaan käyttöön sessio.inc.php */ require_once("def.php"); $sivunOtsikko = 'Marevan seuranta'; ?> <link rel="stylesheet" type="text/css" href="eggplant/jquery-ui.css"> <link rel="stylesheet" type="text/css" href="eggplant/jquery.ui.theme.css"> <link rel="stylesheet" type="text/css" href="eggplant/jquery.ui.datepicker.css"> <script src="jquery.js"></script> <script src="jquery.ui.core.min.js"></script> <script src="jquery.ui.datepicker.min.js"></script> <script src="jquery.ui.datepicker-fi.min.js"></script> <script> jQuery(function() { $(".kalenteri").datepicker({ changeMonth: true, changeYear: true }); }); </script> </head> <body> <?php require_once("footer.php"); ?> <?php require_once("menu2.php"); ?> <form method="post" name="marevan_seuranta" action=""> <input type="text" name="marevan_seuranta_submit" value="tallenna"> <?php if(!empty($_POST['marevan_seuranta_submit'])){ //print_r($_POST); TallennaSeuranta(); } ?> <?php require_once("runkoStart.php"); ?> <table border="0" width="100%" style="background:white;"> <tr> <td>Viitealue</td> <td>Tavoiteltu hoitoalue</td> </tr> </table> <br> <table border="1" width="100%" style="background:white;"> <tr class="header"> <td>Päivämäärä</td> <td>Seurantamenetelmä</td> <td>Ma</td> <td>Ti</td> <td>Ke</td> <td>To</td> <td>Pe</td> <td>La</td> <td>Su</td> <td>Seuraava kontrolli</td> </tr> <tr> <td><input type="text" value="" MAXLENGTH=10 name="pvm-01" class="kalenteri" placeholder="12.12.2012" size="10"></td> <td><input type="text" value="" placeholder="esim. Pika INR" name="seurantamenetelma"></td> <?php for($i = 1; $i <= 7; $i++){ echo <<<EOS <td> <select name="arvo_$i"> <option value="0" >0</option> <option value="0.5">0.5</option> <option value="1.0">1.0</option> <option value="1.5">1.5</option> <option value="2.0">2.0</option> <option value="2.5">2.5</option> <option value="3.0">3.0</option> <option value="3.5">3.5</option> <option value="4.0">4.0</option> </select> </td> EOS; } ?> <td><input type="text" value="" name="pvm-02" class="kalenteri" placeholder="13.12.2012" size="10"></td> </tr> </table> <br> <table border="0" width="100%" style="background:white;"> <tr> <td><input type="submit" value="Tallenna"></td> </tr> </table> <?php require_once("runkoEnd.php"); ?> </form> </body> </html> <?php function TallennaSeuranta(){ $k = sprintf("INSERT INTO marevan_seuranta SET pvm-01='%s', seurantamenetelma='%s', ma='%s', ti='%s', ke='%s', to='%s', pe='%s', la='%s', su='%s', pvm-0d2='%s', kirjasi='%s'", $_POST['pvm-01'], mysql_real_escape_string($_POST['seurantamenetelma']), $_POST['arvo_1'], $_POST['arvo_2'], $_POST['arvo_3'], $_POST['arvo_4'], $_POST['arvo_5'], $_POST['arvo_6'], $_POST['pvm-02'], mysql_real_escape_string($_SESSION['kayttaja']) ); echo $k; if(!($t = mysql_query($k))){ echo 'testi' . mysql_error(); return; } } ?>
Arvaus. Eikös nuo kentät nimet, joissa on väliviivaa esim pvm-01, pitäisi laittaa hipsuihin.
Vai että rotanmyrkkyseurantaa...
Vaikka järjestelmä ilmeisesti on rajoitetulle käyttäjäkunnalle, niin korjaisin silti aluksi SQL Injektiomahdollisuudet..
Mutta otsikko ei oikeastaan kerro ihan hirveästi mitä haluat tietää? Ilmeisesti saat jostain tuollaisen ilmoituksen. Mitä tuo ohjelma käytännössä tulostaa. Äkkiseltään tulisi mieleen, että ehkä erikoisemmat kenttien nimet (pvm-0d2) pitäisi olla ` -hipsuissa.
Rotan myrkkyä tosiaan ;)
Edelleen, vaikka kentät laittaa hipsuihin väittää kyselyn olevan tyhjä. POST muuttujat tarkistettu, ja sisältävät arvoa.
<?php function TallennaSeuranta(){ $k = sprintf("INSERT INTO marevan_seuranta SET \"pvm-01\"='%s', seurantamenetelma='%s', ma='%s', ti='%s', ke='%s', to='%s', pe='%s', la='%s', su='%s', \"pvm-02\"='%s', kirjasi='%s'", mysql_real_escape_string($_POST['pvm-01']), mysql_real_escape_string($_POST['seurantamenetelma']), mysql_real_escape_string($_POST['arvo_1']), mysql_real_escape_string($_POST['arvo_2']), mysql_real_escape_string($_POST['arvo_3']), mysql_real_escape_string($_POST['arvo_4']), mysql_real_escape_string($_POST['arvo_5']), mysql_real_escape_string($_POST['arvo_6']), mysql_real_escape_string($_POST['pvm-02']), mysql_real_escape_string($_SESSION['kayttaja']) ); echo $k; if(!($t = mysql_query($k))){ echo 'testi' . mysql_error(); return; } } ?>
sprintf() [function.sprintf]: Too few arguments in manninen/marevan.php on line 27
Arvokenttinä näyttäisi olevan ma-su mutta syötekenttiä vain 6.
Jos olisit vastannut kysymykseeni "mitä tuo ohjelma käytännössä tulostaa?", niin olisit huomannut itsekin että echo $k; ei tulosta odottamaasi kyselyä.
Grez, pahoittelen epäselvää kuvausta ja tuollainen ongelma olisi pitänyt itskkin huomata. Toivonpa vain, että se on sitten siitä kiinni.
Ongelmakseni koitui myös se, että en saanut muuta ilmoitusta kuin : query was empty. joka tuli tuosta mysql_error(); functiosta.
echo $k, ei tulostanut minulle mitään.
Laita aina kehitysvaiheessa virheilmoitukset käyttöön, niin säästät aikaasi ja muiden hermoja.
manninen kirjoitti:
Grez, pahoittelen epäselvää kuvausta ja tuollainen ongelma olisi pitänyt itskkin huomata. Toivonpa vain, että se on sitten siitä kiinni.
Ongelmakseni koitui myös se, että en saanut muuta ilmoitusta kuin : query was empty. joka tuli tuosta mysql_error(); functiosta.
echo $k, ei tulostanut minulle mitään.
No saithan sinä useitakin ilmoituksia. Syötit mielestäsi $k-muuttujaan hirveän liudan tekstiä mutta tulosteena ei tullut mitään -> selkeä ilmoitus virheestä.
to='%s',
ei käy, koska on mysql komento?
pitää olla esim
torstai ;)
Varattujen sanojen ja muiden erikoisten nimien ympärillä pitää käyttää niitä `-merkkejä, kuten Grez sanoi jo kauan sitten. Viisaampaa on minusta kuitenkin käyttää kunnollisia nimiä, niin kyselyt pysyvät siisteinä eikä tule tällaisia virheitä.
Itse asiassa on aika typerää tallentaa tietoja viikko kerrallaan, koska jokainen mittaustulos on tietona muista riippumaton eikä mikään ei takaa, että mittaukset alkavat maanantaina. Kannattaisi vain tallentaa jokainen mittauskerta erikseen tauluun, jossa on tulos, käyttäjä, aika (DATE tai jopa DATETIME) sekä tarvittaessa tuo seurantatapa, jonka merkitys on kuitenkin minulle täysin epäselvä; ehkä järkevämpi tieto olisi, onko kyseessä pikamittaus vai oikea verikoe.
Kiinnostaa myös, mihin tällaista sovellusta edes tarvitaan, kun kuitenkin mittaukset käsittääkseni tehdään nykypäivänä vielä terveydenhuollon yksiköissä, joissa pitäisi olla omat sovelluksensa tulosten kirjaamiseen.
Minun mielestäni ei ole kovin järkeä edes käyttää varattuja sanoja taulujen tai sarakkeiden nimeämiseen. Tulee vain turhaa sotkua SQL-kyselyihin, kun pitää erilaisia hipsuja heitellä sinne ja tänne. Sillä vain kylvetään koodiin potentiaalisia virheitä.
Metabolix
Inr - tulos, käyttäjä sekä aika kirjataan kyllä. Ne eivät vain ole oleellisia ongelman kanssa, jonka toin julki.
Tieto onko kyseessä pikamittaus vai verikoe, kirjataan seurantamenetelmään.
Kentät ma,ti,ke,to,pe,la,su
eivät ole kenttiä, johon kirjataan inr tulos vaan sille on oma paikkansa, joka minulta näköjään puuttuukin :)
kyseisiin kenttiin kirjataan marevan annostus, jonka perusteella hoitohenkilökunta kykenee jakamaan marevan annostuksen oiken. Se on riippuvainen viikonpäivistä.
Huomaan kuitenkin puheestasi, että tiedät myös mistä puhut koodauksen ulkopuolella, joten katsoin profiilisi.
"Opiskelen Helsingin yliopistossa lääketiedettä."
Itse toimin aikoinani lähihoitajan tehtävissä, joskaan en niitä enää tee vaan pyöritän perheorganisaatiota. Siinä sivussa naputtelen sitten koodia.
1. Kyseistä ominaisuutta tarvitaan yksityisen palvelualan tehtävissä. Tämän avulla työntekijä kirjaa itselleen marevan annostuksen, sekä seuraavan mittauskerran jonka pohjalta uusi mittaus tehdään sekä lääke jaetaan.
Jos haluat lisätietoja projektistani, tai sinua kiinnostaa muuten minkälaisesta sovelluksesta kokonaisuudessaan on kyse niin ilmoita. Laitan mielelläni sinulle linkin sovellukseeni ja otan vastaan kehitysapua.
Lisäys:
Metabolix kirjoitti:
Kiinnostaa myös, mihin tällaista sovellusta edes tarvitaan, kun kuitenkin mittaukset käsittääkseni tehdään nykypäivänä vielä terveydenhuollon yksiköissä, joissa pitäisi olla omat sovelluksensa tulosten kirjaamiseen.
Mittausta ei tarvitse suorittaa terveyskeskuksessa, jos siihen on asianmukaiset luvat. Marevan annostuksen muutos kysytään lääkäriltä, jolle inr tulos ilmoitetaan.
manninen kirjoitti:
Tieto onko kyseessä pikamittaus vai verikoe, kirjataan seurantamenetelmään.
Ohjelmoinnissa on tärkeää käyttää asioista oikeita nimiä, jotta muutkin ymmärtävät koodia ja jotta myös itse muistaa vuosien päästä helpommin, mitä on ajatellut. Seuranta tarkoittaa yleensä usean peräkkäisen tuloksen vertailua. Siksi seurantamenetelmä on harhaanjohtava nimi asialle, joka on mittauskohtainen ja voi vaihdella eri kerroilla. Parempi nimi olisi esimerkiksi tutkimustapa tai mittaustapa.
manninen kirjoitti:
Kentät ma,ti,ke,to,pe,la,su eivät ole kenttiä, johon kirjataan inr tulos vaan sille on oma paikkansa, joka minulta näköjään puuttuukin :)
No sitähän minäkin. Ei ihme, että näytti omituiselta touhulta. En silti ymmärrä, miksi tuolla on kaksi päivämäärää.
Annostusta ei kuitenkaan ole loogista tallentaa samaan tauluun kuin mittaustuloksia, ja annokset eivät ainakaan kuulu tauluun nimeltä marevan_seuranta.
Toki nappien jakamista varten voi olla näppärää pitää yllä potilaskohtaista viikkokaaviota, mutta se on huono tallennusmuoto pidemmällä aikavälillä, joten itse pitäisin siinä muodossa enintään potilaan nykyistä suunnitelmaa. Varsinkin potilaalle annetut lääkkeet olisi viisainta tallentaa päivä kerrallaan, kuten mittaustuloksetkin. Tietojen näyttäminen viikko kerrallaan on käyttöliittymän huoli.
Mutta teet tietenkin sen mukaan, mitä tilaaja haluaa ja mitä käyttäjät oppivat käyttämään. Jos annettujen lääkkeiden kirjaaminen on ihan ylivoimaista, pitää varmaan vain säilyttää listaa määrätyistä lääkkeistä ja luottaa siihen, että lista pitää paikkansa. Tosin tutkimusten mukaan huomattava osa potilaista saa sairaalassa vääriä lääkkeitä, joten nyt kannattaisi tehdä kunnollinen järjestelmä ja varmistaa, että hoitajat viitsivät kirjata sinne, mitä ovat oikeasti potilaille antaneet.
Mielenkiintoisia näkökulmia.
Tuohon annettujen lääkkeiden kirjaamiseen sanon sen verran, että kokemuksen myötä se on ylivoimaista hoitajilta. Se miten lääketurvallisuutta voisi parantaa on hankalaa, muttei mahdotonta. Siihen on pyrittävä.
Kuitenkaan sovellus ei voi olla liian raaka, sen pitää huomautttaa muttei takertua asiaan jotta käyttöliittymä on sujuva.
wtf am i reading....
Jotain todella mielenkiintoista ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.