Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ehdollinen tulostaulukon muotoilu

mercier [03.05.2018 14:35:24]

#

Esitetään taulukko, jossa on lukuja.
Nyt tuli toive saada lukua 100 isommat luvut punaisella.
Kokeilin joitakin tapoja, mutta sain vain virheilmoituksia.
Taustalla on koodi joka toimii, vaikka ei ole ehkä kauneimmalla tavalla toteutettu, mutta ratkaisunkaan ei tarvitse olla erikoinen. Solukohtainen ehdon tarkastelu riittää. Siitä olisi sekin etu, että ehto voi olla erilainen joka solussa.

<tr>
<th>Tuote1</th>
<th><?php echo $_POST['TAM']; ?></th>
<th><?php echo $_POST['HEL']; ?></th>
<th><?php echo $_POST['MAA']; ?></th>
<th><?php echo $_POST['HUH']; ?></th>

Metabolix [03.05.2018 17:04:45]

#

<?php
function luku($s) {
	// Varmistetaan, että kyseessä on luku:
	if (!is_numeric($s)) {
		return NAN;
	}
	return +$s;
}
function muotoile_yli_100($s) {
	// Muotoillaan luku:
	if ($s >= 100) {
		return '<span class="isoluku">' . $s . '</span>';
	}
	return $s;
}
?>
<style>
span.isoluku {
	color: red;
}
</style>

<th><?php echo muotoile_yli_100(luku($_POST['TAM'])); ?></th>
<th><?php echo muotoile_yli_100(luku($_POST['HEL'])); ?></th>

mercier [03.05.2018 17:46:51]

#

Isot kiitokset (taasen)! Tulos on varsin tyylikäs ja sitä myös koodina. Numeerisuuden tarkistus on oikeastaan tarpeeton, kun taulukko itsessään on jo laskutoimituksen tulos, mutta hyvä oppi oli sekin. Niin, muotoilimessa luku 100 piti korvata luvulla, joka on hieman isompi kuin 100.

Lebe80 [04.05.2018 09:18:18]

#

Jos luvut tulevat $_POST (tai $_GET tai $_REQUEST yms..) -taulusta, ne eivät välttämättä ole minkään laskutoimituksen tuloksia, vaan kuka tahansa pystyy syöttämään näihin arvoja.

The Alchemist [04.05.2018 11:37:21]

#

Käyttäjän syöte on aina varmistettava, ihan sama että mikä sen lähde on. Ja jos tässä on tehty niin, että laskutoimituksia on suoritettu käyttäjän selaimessa ja vain tulos on lähetetty palvelimelle, niin silloin kyse on aika suuresta ajanhukasta. Et voi koskaan luottaa siihen, että käyttäjältä tuleva data olisi oikein tai että se olisi edes turvallista. Kaikki merkitsevät laskutoimitukset on tehtävä palvelimella.

Grez [04.05.2018 12:33:22]

#

The Alchemist kirjoitti:

Kaikki merkitsevät laskutoimitukset on tehtävä palvelimella.

Tuo on aivan totta silloin kun tehdään jotain yleisesti järkevää, esim. kun tietoja lähetetään palvelimelle, jotta niitä voidaan siellä jatkokäsitellä ja näyttää muillekin käyttäjille yms.

Kuitenkin tässä tapauksessa weppisivu näyttää vaan käyttäjälle itselleen hänen lähettämiään arvoja, niin eipä sillä mitään merkitystä ole, onko syötetyt luvut ja laskutoimitukset tarkistettu vai ei. Jos käyttäjä haluaa väärentää noita lukuja omalle näytölleen, niin yhtä lailla se pystyy muokkaamaan sitä selaimelta tullutta sivua.

Enemmänkin olisi perusteltua varmistaa, että tuon käyttäjän selaimelta tulevan tavaran kautta ei pysty injektoimaan skriptejä tai muuta vastaavaa suoritettavaksi tuossa kohdedomainissa. Eli kysyjän tuotokseen htmlspecialchars tms. $_POST -ympärille. Toki myös esim. Metabolixin lähestymistapa huolehtii asian muuttamalla kaikki väkisin numeroiksi, jolloin mahdolliset skriptit yms. katoavat matkalla.

Sit voi palata tähän yleiseen järkevyyteen, eli miksi tuo lopputulos edes pyöräytetään palvelimen kautta, jos laskenta tehdään selaimessa? Voisihan se selaimella oleva ja lasekva skripti tehdä tuon muotoilunkin mikä kysyjällä nyt on PHP:ssä.

Vastaus

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

Tietoa sivustosta