Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: query was empty

Sivun loppuun

manninen [24.06.2012 20:51:10]

#

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&auml;iv&auml;m&auml;&auml;r&auml;</td>
    <td>Seurantamenetelm&auml;</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;
    }
}
?>

makumaku [24.06.2012 21:14:27]

#

Arvaus. Eikös nuo kentät nimet, joissa on väliviivaa esim pvm-01, pitäisi laittaa hipsuihin.

Grez [24.06.2012 21:18:47]

#

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.

manninen [25.06.2012 00:28:15]

#

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;
    }
}
?>

Grez [25.06.2012 00:34:38]

#

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ä.

manninen [25.06.2012 08:44:44]

#

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.

Metabolix [25.06.2012 15:25:57]

#

Laita aina kehitysvaiheessa virheilmoitukset käyttöön, niin säästät aikaasi ja muiden hermoja.

The Alchemist [25.06.2012 15:54:15]

#

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ä.

manninen [25.06.2012 21:16:16]

#

to='%s',

ei käy, koska on mysql komento?

pitää olla esim

torstai ;)

Metabolix [25.06.2012 22:08:21]

#

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.

The Alchemist [25.06.2012 22:22:17]

#

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ä.

manninen [26.06.2012 00:11:37]

#

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.

Metabolix [26.06.2012 00:45:47]

#

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.

manninen [26.06.2012 08:02:44]

#

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.

Lebe80 [26.06.2012 09:34:42]

#

wtf am i reading....

manninen [26.06.2012 13:17:36]

#

Jotain todella mielenkiintoista ;)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta