Elikkästä, rupeaa pukkaamaan $_GET virhettä kun koitan saada sitä käyttöön
virheenä on: Notice: Undefined index: area in D:\sivut\test\index.php on line 14
Ja rivillä 14 on:
$area = $_GET['area'];
Ei tässä mitään muuta, mutta kun asensin tässä nämä uudestaan vähän aikaa sitten niin rupesi herjaamaan tollaista täysin toimivilla sivuilla. Elikkä mikä voisi olla vikana?
PHP:nnä toimii versio 4.4.0 ja apache 2.x, jos nyt väsyneenä muistan oikein.
Veikkaus: voisiko syynä olla että apache ei toimi kunnolla PHP:n kanssa?
Ei kai.
Ilmeisesti sanoo että $_GET -taulukossa ei ole indeksiä area.
Voitko näyttää koodia? Lähettääkö se edes missään vaiheessa tuota areaa getillä?
Kyseessä on huomautus. Vika on enemmänkin koodissasi, kuin palvelimessa. Kuten Megant92 sanoi viittaat taulukon soluun jota ei ole olemassa. Tämä on tietyllä tavalla tietoturvariski. Jos koodi on tarkoitettu toimimaan ilman tuota $_GET['area']-muuttujaa (tai olettaen että se tietyillä ehdoilla on tyhjä), voi koodit mennä helpostikkin sekaisin, jos käyttäjä tajuaa tuossa vaiheessa kirjoittaakkin osoiteriville jotain ei-toivottua. Oma ratkaisuni on kirjoittaa koodit, niin, että moisia huomautuksia ei pääse syntymään. Eli yleensä jos muuttujaa johonkin käytetään, niin
if(isset($_GET['area') && muut_kriittiset_tarkistukset($_GET['area'])){ $area = $_GET['area']; else{ $area = NULL; $error[] = 'area muuttujaa ei ole määritelty, tai arvot eivät olleet sallitut'; }
Toinen, mielestäni huonompi ratkaisu on vääntää PHP:n virheenkäsittely-asetuksista ruuvit löysemmälle. Tietenkin loppusijoituspaikasta kaikki errorit pois päältä, jos vain mahdollista, mutta kehitysalustalla kaikkein tiukimmat asetukset päälle.
Kolmantena purkkaratkaisuna toimii myös $area = @$_GET['area']; tai error_reporting(0);
Ja kolmas:voit käyttää myös @-merkkiä.
Elikkästä, tässä on tän hetkisen sivun koko lähdekoodi.
<? echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"; echo "<HTML>\n"; echo "<HEAD>\n"; echo " <META http-equiv=\"content-type\" CONTENT=\"text/html; charset=iso-8859-1\">\n"; echo " <TITLE>-= Grim Gurnarok =-</TITLE>\n"; echo " <META NAME=\"description\" CONTENT=\"Jotain\">\n"; echo " <META NAME=\"author\" CONTENT=\"Ilari Saastamoinen\">\n"; echo " <LINK HREF=\"main.css\" TYPE=\"text/css\" REL=\"StyleSheet\">\n"; echo "</HEAD>\n\n"; echo "<BODY>\n"; $area = $_GET['area']; echo "<DIV ID=\"root\">\n\n"; echo " <DIV ID=\"menu\">\n"; echo " <P ALIGN=\"center\">[:: Table Of Content ::]</P>\n"; echo " <A HREF=\"index.php\">Main page</A><BR>\n"; echo " <A HREF=\"index.php?area=info\">Info</A><BR>\n"; echo " </DIV>\n\n"; echo " <DIV ID=\"txt\">\n"; if($area == "") { echo " Well, this is my homepage. You will find various things about me and some other stuff that you might not want to know. All images are mirrored"; echo " trough <A HREF=\"http://images.animeflix.info/\" TARGET=\"_blank\">Animeflix Images</A> and other various places.<BR><BR>Enjoy.\n"; } else { include("$area.txt"); } echo " </DIV>\n"; echo "\n</DIV>\n"; echo "</BODY>"; echo "</HTML>\n"; ?>
Tarkoituksena on soveltaa tota $_GET kohtaa lajittelemaan vähän kaikkea, ja MySQL tietokannasta hakemaan kirjojen tietoa kirjastosta jota teen.
Tuossa ei muuta kuin sovellukseen ja äkkiä tuo minun esimerkkini ylempänä. Tuon reijän kauttahan käyttäjä pystyy suoraan tulostamaa ruudulle minkä tahansa tekstitiedoston sisällön.
Ja turha tuota hötömölöä on echottaa, kun sen voi kirjoittaa suoraankin -> php-tulkin läpi menevän koodin määrä pienentyy, muistin käyttö vähentyy, koodin suoritus nopeutuu yms.
Aihe on jo aika vanha, joten et voi enää vastata siihen.