Minulla on tiedosto jossa on käyttäjän yhteystiedot, jota voi editoida mielin määrin. Ohjelma toimii muutoin ihan hyvin, mutta osoitteen kanssa on ongelmia. Editoitaessa pudottaa kadun nimestä pois talon numeron ja/tai asunnon numeron. Mikä tekee siitä minulle ylivoimaisen ymmärtää on että kun tulostan echolla $tiedot[2] siellä tulostuu kaikki ihan hyvin, mutta kun yritän saada tiedon muuttujaan niin eipäs tieto välitykkään numeroiden osalta tai välittyy jos ei laita välilyöntiä osoitteeseen. Mikähän tuossa on ongelmana?
Olen karsinut koodista kaiken muun pois paitsi sen missä virhe tulee.
<?php $nimi=$_GET["nimi"]; if($nimi){ $tiedot = file("$nimi/tiedot.txt"); //luetaan viestit //$tiedot=file_get_contents("$nimi/tiedot.txt"); //$tiedot = explode("\n", $tiedot, 10); olen yrittänyt myös tällai, mutta sama homma echo $tiedot[2];// tässä on numerot mukana $osoite = $tiedot[2];//tähän taas ei tule numeroita ainoastaan kadun tai tien nimi echo" <form action='tieto.php' method='post'> <input type='text' name='osoite' size='30' value=$tiedot[2]>Osoite //tähän ei tule numeroita </form> "; } ?>
Sinulta puuttuu tekstikentän value-attribuutin yhteydestä lainausmerkit sekä tiedon oikea käsittely (kuten htmlspecialchars, turhien rivinvaihtojen poisto jne.). Nämä pitää aina muistaa sekä oikean toiminnan että vaarojen välttämisen vuoksi.
Debuggauksessa auttaa, jos opettelet katsomaan myös selaimen kautta sivun lähdekoodia: siellähän numerot näkyvät, mutta selaimessa elementin tarkastelu (inspect) varmasti näyttää, että ilman lainausmerkkejä numerot eivät tule osaksi tekstikentän arvoa.
Virheen vakavammat haitat näet, jos syötät seuraavanlaisen osoitteen: Testikatu><script>alert('HACKED');</script>
. Kannattaa ihan oikeasti kokeilla tätä, jotta ymmärrys nettiohjelmoinnista paranee.
Kiitos! Nyt toimii, joskus sitä ei näe vaikka kuinka tuijottaa.
Näkemistä helpottaisi se, että tulostuksen tekisi siististi.
<form action="foobar.php" method="post"> <input type="text" name="foo" value="<?= $foo ?>"/> </form>
Aihe on jo aika vanha, joten et voi enää vastata siihen.