Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: MySQL ja PHP, poiminta päivämäärien väliltä

Sivun loppuun

mercier [12.07.2019 21:52:15]

#

Tämä toimii:

$total = "SELECT COUNT(*) FROM rolls WHERE date BETWEEN '2019-07-12' AND '2020-07-12'";

Mitä pitäisi tehdä että tämä toimisi?
Käyttäjä antaa alkupäivä ja siitä eteenpäin 12 kk ajalta haetaan määrä.

$start_date = ($_POST['start_date']);
$end_date = date('Y-m-d', strtotime($start_date. ' + 12 months'));
$total = "SELECT COUNT(*) FROM rolls WHERE date BETWEEN start_date AND end_date";

echo näyttää päivät ihan ok.
"Search between dates 2019-07-12 and 2020-07-12 found 12 rolls"
Päivämäärien muotoilemiseksi on kokeiltu googlailun tuloksena "vaikka mitä".

Metabolix [12.07.2019 22:13:39]

#

Katsotko ollenkaan esim. virheilmoituksia? Tuossahan et laita muuttujia ollenkaan kyselyyn, vaan kyselyssä lukee kirjaimellisesti start_date AND end_date. (Muista lisätä dollarimerkkien lisäksi myös hipsut ja edeltävästi escape, kuten yleensäkin käyttäjän dataa käsitellessä. Kannattaa myös tarkastaa, että start_date on sallitussa muodossa, jotta ei tule bugeja siitä.)

mercier [12.07.2019 22:28:32]

#

"Muista lisätä dollarimerkkien lisäksi myös hipsut..."
Siinä se oli, eipähän sattunut silmiin yhtään selkeätä esimerkkiä tästä, joten ei kun kiitokset.

The Alchemist [13.07.2019 07:40:19]

#

Tässä tapauksessa oikeastaan tulisi ennemmin validoida päivämäärien muoto ja sen jälkeen SQL-eskapointi on turhaa. Yleensäkin pitäisi varmistaa se, että onko syötettä edes olemassa ennen kuin sitä yritetään lukea.

Myskylä näyttää sallivan minkä tahansa roskan syöttämisen päivämääränä ja silloin tulosjoukko voi näyttää arvaamattomalta, jos päivämäärän muotoilussa on käynyt kämmi.

Eikä ole rajapinnan stabiiliuden kannalta järkevää hyväksyä millä tahansa tavalla muotoiltuja sattumanvaraisia päivämääriä, jotka sattuvat menemään läpi jostain standardikirjaston parserista.

mercier [14.07.2019 16:10:21]

#

Kyllä, tietoja on pyritty validoimaan niitä annettaessa. Päivämääriksi kelpaa vain päivämäärät ja luvuiksi vain luvut jne. Tietty on asiaa kuitenkin muistuttaa kaikanlaisesta, varsinkin turvallisuudesta. Tässä casessa käyttäjiä on vähän ja tunnettuja, joten erilaiset pahanteon yritykset voi käydä omaan nilkkaan. Varmuuskopioitakin ajetaan.

Metabolix [14.07.2019 18:36:00]

#

Missä se validointi on? Ainakin tuossa yllä otat päivämäärän suoraan POST-taulukosta ilman mitään käsittelyä.

mercier [14.07.2019 20:20:56]

#

Ehkä ei ihan aukotonta, mutta toisessa tiedostossa päivämäärä annetaan osapuilleen näin:

<input type="date" style="width:120px;height:30px;color:black;font-weight:bold" name="start_date" value="<?php echo date ('Y-m-d'); ?>" />

Olen käsityksessä, että silloin ei voi antaa muita arvoja.

Lebe80 [14.07.2019 23:34:12]

#

mercier kirjoitti:

(14.07.2019 20:20:56): Ehkä ei ihan aukotonta, mutta toisessa...

Olet väärässä. Käyttäjä voi lähettää lomakkeen arvot haluamallaan tavalla, vaikka kokonaan ulkopuolisella sovelluksella.

HTML5 [15.07.2019 01:17:31]

#

Käyttäjän syöte pitää tosiaan aina tarkistaa (myös) palvelimen puolella. Selaimen päässä tapahtuva validointi tehdään lähinnä vain käyttökokemuksen parantamiseksi.


Sivun alkuun

Vastaus

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

Tietoa sivustosta