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äonnistui! "; echo "Virhe: " . mysql_error(); } else { require "../../../ilmoitukset/ok.html"; } } else { echo "Tallennus epäonnistui! "; echo " Virhe: Lomakkeen kaikkiin kenttiin on annettava arvo!"; } ?>
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ää.
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.
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?
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.
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ä.....
Aihe on jo aika vanha, joten et voi enää vastata siihen.