Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: aliohjelman käynnistys

volume [01.09.2010 15:55:20]

#

tämänkertainen ongelma olisi seuraava:

alla olevasta koodista pitäisi saada harjoitusmielessä käynnistymään ilmoitussivut, jotka kertovat talletustapahtuman onnistumisesta. kaikista if-else-lohkoista käynnistyisi oma html-sivu, joka pitää sisällään tarvittavan informaation.

yhteen if-else-lohkoon kokeilin require-komentolla liittämää haluttua html-dokumenttia. siinä on vain sellainen ongelma, että html-dokumentin tyylitiedosto on eri hakemistossa kuin itse html ja siten tyylitiedot tippuvat pois. samoin käy kuville, jotka ovat myös omassa hakemistossaan.

eli miten saan ok.html dokumentin liitettyä if-else-lohkoihin siten, että tyylit ja kuvat tulevat mukaan ja että dokumentti käynnistyy automaattisesti ohjelman tullessa kyseiseen else-lohkoon?

<?php
require "../../../../funktiot.php";
$yhteys = AvaaTietokanta();

//WWW-lomakkeen kaikkiin kenttiin on annettava syöte
if ((!empty($_POST['nimi']))   and
    (!empty($_POST['osoite'])) and
    (!empty($_POST['puh']))    and
    (!empty($_POST['email']))  and
    (!empty($_POST['huom'])))
    {
      $nimi    =  mysql_real_escape_string(stripslashes($_POST['nimi']));
      $osoite  =  mysql_real_escape_string(stripslashes($_POST['osoite']));
      $puh     =  mysql_real_escape_string(stripslashes($_POST['puh']));
      $email   =  mysql_real_escape_string(stripslashes($_POST['email']));
      $huom    =  mysql_real_escape_string(stripslashes($_POST['huom']));

      // SQL-kysely - lisäys
      $sql="INSERT INTO johtokunta (nimi, osoite, puhelin, email, huom, pvm)
         VALUES
         ('$nimi','$osoite','$puh','$email','$huom',CurDate())";

         if (!mysql_query($sql,$yhteys))
         {
           echo "Tallennus ep&auml;onnistui! ";
           echo "Virhe: " . mysql_error();
         }
         else
         {
           require "../../../ilmoitukset/ok.html";
         }
    }
      else
    {
      echo "Tallennus ep&auml;onnistui! ";
      echo " Virhe: Lomakkeen kaikkiin kenttiin on annettava arvo!";
    }

?>

-tossu- [01.09.2010 17:31:16]

#

volume kirjoitti:

eli miten saan ok.html dokumentin liitettyä if-else-lohkoihin siten, että tyylit ja kuvat tulevat mukaan ja että dokumentti käynnistyy automaattisesti ohjelman tullessa kyseiseen else-lohkoon?

Käytät "käynnistyä"-verbiä aika hämäävästi, eivät ne HTML-tiedostot ole mitään ohjelmia. Sen tiedoston sisältö vain liitetään siihen requiren kohdalle. Require ei muuta kuvien ja tyylien toimintaa millään tavalla.

Muista ottaa huomioon, että linkität kuvat joko PHP-tiedoston suhteen tai absoluuttisilla poluilla, jotka lienevät helpompia ymmärtää.
Yksinkertaistettuna: anna kuville ja tyyleille koko URL-osoite esim. "http://mundomain.com/kuvat/kuva1.jpg", niin ne näkyvät siitä riippumatta, missä osoitteessa sivu on. Mikäli kuvat ja sivut ovat saman domainin alla, voi domainin jättää pois, eli "/kuvat/kuva1.jpg" riittää.

trilog [01.09.2010 17:37:58]

#

Huomioi myös, että require ajaa tiedoston PHP-tulkin läpi, joten tiedostossa oleva mahdollinen PHP-koodi (= merkkijono, jonka PHP-tulkki tulkitsee PHP-koodiksi) voi aiheuttaa ihmeellisyyksiä. Pelkän HTML:n tulostamiseen parempi vaihtoehto on PHP:n funktio file_get_contents.

volume [01.09.2010 18:54:16]

#

eikö se että käytetään koko URL-osoitetta ole tietoriski: siinähän paljastetaan tiedostorakenne (olkoonkin että se on <?php ?> merkkien välissä)?

siksi käytän koodin alussa muotoa: require "../../../../funktiot.php" toiminnolle jossa avaan tietokantayhteydet.

olenko ymmärtänyt oikein että tietokantayhteyksien avaaminen kannattaa sijoittaa tietoturvasyistä nimenomaan juuren ulkopuolelle?

-tossu- [01.09.2010 20:15:20]

#

volume kirjoitti:

eikö se että käytetään koko URL-osoitetta ole tietoriski: siinähän paljastetaan tiedostorakenne (olkoonkin että se on <?php ?> merkkien välissä)?

Eihän käyttäjä saa mitenkään selville sitä, mitä on <?php ja ?> -merkkien välissä, ellei palvelin jostain syysta tarjoa sivua sellaisenaan. Ja mitä sitten vaikka käyttäjä saisi selville kansiorakenteen, jos se sivu on kunnolla tehty, sillä ei ole mitään väliä.

volume kirjoitti:

olenko ymmärtänyt oikein että tietokantayhteyksien avaaminen kannattaa sijoittaa tietoturvasyistä nimenomaan juuren ulkopuolelle?

Enemmän olisin huolissani siitä, että käyttäjä saa vaikka XSS-aukon avulla tietokantayhteyden avaamisen sisältävän tiedoston esille, kuin siitä, että palvelin jättäisi .php-tiedoston ajamatta PHP-tulkin läpi.

Enkä tarkoittanut edellisessä viestissäni niitä polkuja, mitä annat requirelle, vaan kuvien ja tyylien URL:eja.

volume [01.09.2010 20:18:32]

#

tänks tossu,

sait ajattelemaan asiaa vähän toisin päin: otin ilmoituksen pohjaksi sopivan html-dokumentin ja lisäsin siihen kantaan tietueen lisäävän php-koodin. sitten vain echo-toiminnolla tulostin dokumentin työtilaan kannasta tulleen ilmoituksen font color-komennolla värittäen.

sama tietueen poistossa ja muutoksessa.

näinhän se pitää mennä.....

Vastaus

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

Tietoa sivustosta