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ä".
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ä.)
"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.
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.
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.
Missä se validointi on? Ainakin tuossa yllä otat päivämäärän suoraan POST-taulukosta ilman mitään käsittelyä.
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.
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.