Terve! Tää on sitten ihan ihka eka oma yritys mun PHP-uralla, että plz be gentle ;>
Miksiköhän tää koodi ei toimi... painaa submittia niin ei tapahdu mitään. Ikään kuin !isset olis true, vaikka täyttää kaikki kohdat.
Kaikki vinkit on tervetulleita!
PS. Toivottavasti ette kuole nauruun :0
Muokkaus: Tosin nyt se antaa parse erroria, mut antakaa vinkkii ny kuitenki...
<?php if (!isset($_POST['nimi]'])) echo "Nimi puuttuu! Palaa <a href=\"lahetys.php\">tästä</a>!"; elseif (!isset($_POST['passu]'])) echo "Salasana puuttuu! Palaa <a href=\"lahetys.php\">tästä</a>!"; elseif (!isset($_POST['uutinen]'])) echo "Et kirjottanut uutista ollenkaa! Palaa <a href=\"lahetys.php\">tästä</a>!"; { ?> <html> <head> <style type="text/css"> <!-- body,td,th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #990000; } a { font-size: 12px; color: #CC9900; } a:link { text-decoration: none; } a:visited { text-decoration: none; } a:hover { text-decoration: underline; color: #CC6600; } a:active { text-decoration: none; } --> </style> <title>Lisaa uutinen</title> </head> <body> Lisää uutinen <form action="lahetys.php" method="post"> Nimi: <input type="text" name="nimi"><br> Maili: <input type="text" name="email"><br> Uutinen:<br> <textarea name="uutinen"></textarea><br> <hr style="border-style:dottet"> Salasana: <input type="password" name="passu"> <input type="submit" value="lähetä"> </form> </body> </html> <?php } else { $filu = fopen("uutiset.txt", "a"); $nimi = $_POST['nimi']; $email = $_POST['email']; $uutinen = $_POST['uutinen']; $passu = $_POST['passu']; $salasana = "omasalasana"; // tohon oma passu if ($passu <> $salasana) { echo "Väärä salasana! <a href=\"lahetys.php\">palaa!</a>"; brake 2; } //korjataan vähä tallennettavaa tietoo $uutinen = stripslashes($uutinen); $uutinen = str_replace("\r\n", "<br>", $uutinen); $aika = time(); $rivi = "$nimi|$email|$aika|$uutinen\r\n"; fwrite($filu, $rivi); fclose($filu); header("Location: uutiset.php"); } ?>
***uutiset.php <html> </head> <style type="text/css"> <!-- body,td,th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #990000; } a { font-size: 12px; color: #CC9900; } a:link { text-decoration: none; } a:visited { text-decoration: none; } a:hover { text-decoration: underline; color: #CC6600; } a:active { text-decoration: none; } --> </style> <title>Uutiset</title> </head> <body> <?php // taulukkoon --> $uutiset = file("uutiset.txt"); $uutiset = array_reverse($viestit); $uutisetyht = count($uutiset); echo "<hr style="border-style:dashed">; for ($i=0; $i<$uutisetyht; $i++) { $sisalto = explode("|", $uutiset[i$], 4); //jaetaan sisältö muuttujiin $nimi = $sisalto[0]; $email = $sisalto[1]; $aika = $sisalto[2]; $viesti = $sisalto[3]; echo "Nimi: <a href=\"mailto:$email\">$nimi</a> "; echo "Aika: " . date("d.m.Y H:i", $aika)"; echo "<hr style="border-style:dotted">"; echo "$viesti" echo "<hr style="border-style:dashed">"; } echo "Uutisia: <b>$uutisetyht</b>"; ?> </body> </html>
ööh.. tsekatkaas onks tos mitää järkee :>
laita kaarisulkeet kohdalleen. siitä se virhe näin äkkiseltään katsoen tulee.
Juu eli tuosta alkupään koodista kaarisulut pitäis korjata kohilleen kuten kasetti sanoi. Sitten tämä kohta tuottaa virheen:
koska et ole tiedostoa vielä avannut.
eli lisääppä ennen noita rivejä:
$filu = fopen("/polku/tiedosto.txt", "w"); // vaihda "w" -> "a" jos haluat että tiedoston vanha sisältö säilyy myös (kirjoitetaan tiedoston loppuun uusin rivi)
Edit: eiku äh mitä mä sekoilen, olihan sulla tuo siellä :)
eTe kirjoitti:
<?php if (!isset($_POST['nimi]'])) echo "Nimi puuttuu! Palaa <a href=\"lahetys.php\">tästä</a>!"; elseif (!isset($_POST['passu]'])) echo "Salasana puuttuu! Palaa <a href=\"lahetys.php\">tästä</a>!"; elseif (!isset($_POST['uutinen]'])) ?>
Noi POST-muuttujat on ainakin ihan perseellään. Pitäisi näyttää tältä:
if (!isset($_POST['nimi'])) echo "Nimi puuttuu! Palaa <a href=\"lahetys.php\">tästä</a>!"; elseif (!isset($_POST['passu'])) echo "Salasana puuttuu! Palaa <a href=\"lahetys.php\">tästä</a>!"; elseif (!isset($_POST['uutinen']))
Ja sitte kannattaa tarkistaa noi
echo "<hr style="border-style:dotted">";
sillä eikös noi " pitäis olla \"
echo "<hr style=\"border-style:dotted\">";
Eiks sen voi pistää myös
echo '<hr style="border-style:dotted;">';
En nyt viitsi kokeilla, mutta merkkijonot ympäröidään lainausmerkin ("), joten tuollainen merkintä ei kai toimi.
Voit merkitä tulostettavat lainausmerkit joko \" tai sitten kirjoittaa rivin muodossa:
echo "<hr style='border-style:dotted;'>";
PHP:ssä niitä merkkijonoja voi ympäröidä myös heittomerkeillä. Niiden käytännön toiminta on kuitenkin hiukan erilaista, lisätietoa tuolta: https://www.php.net/types.string
Laitoin ne kaarisulkeet ja korjasin nuo hr-tagit.
Nyt ei tuu mitää virheilmotuksia, mutta sivulla näkyy vaan "Nimi puuttuu! palaa tästä!" eli sillai et toi eka isset olis true..
No minä vähän muostaroin tuota koodia ja sain sen toimimaan ihan niinkun pitääkin. Siinä meni noin vartti. Muutokset olivat kuitenkin melko suuria, joten pitäisi oikeastaan pistää tähän koko muokattu koodi. Se taas ei olisi oikein reilua, koska et oppisi mitään.
No, pistän tähän pari vinkkiä, joita voisit noudattaa.
- Laitapa tuolle uutistenlähetysnapille joku nimi. Minä pistin "lahetysnappi". Siten se on saatavilla $_POST-taulukosta:
$nappi = $_POST['lahetysnappi'];
- Sitten voit testata isset()-funktiolla, onko nappi asetettu (ts. nappia on painettu), ja jos on, siirrytään tiedostoonkirjoitusosaan. Muutoin joudutaan else-ehdon kautta takaisin lähetyslomakkeeseen. (Siis lomakkeen koodi else:n sisään). Tällä tavoin skripti jakautuu kahteen selkeään osaan: uutisen lähetykseen ja uutisen lisäykseen.
-Tiedostoonkirjoitusosan alkuun voi laittaa parit !isset()-testit, joiden avulla voi tiirailla, josko käyttäjä olisi laittanut niihin lomakekenttiin jotain. Mikäli joku muuttuja on tyhjä (esim. nimeä ei ole annettu), ohjataan käyttäjä takaisin lomakkeeseen. Sen voi tehdä Header()-funktiolla:
Header("Location: lahetys.php?error=1");
Tämä heittää käyttäjän taas samaan skriptiin, mutta koska nappimuuttujaa ei ole nyt asetettu, joudutaan lomakkeeseen. Ennen lomakekoodia voi laittaa jotain tällaista:
if(isset($_GET['error'])) { if($_GET['error'] == 1) { echo "Nimi puuttuu!<BR><BR>"; } if($_GET['error'] == 2) ... }
Nyt surffailijaa informoidaan siitä, mikä meni pieleen.
Niin, ja tuo
koodi on siinä mielessä virheellinen, että brake ei ole mikään komento, ainakaan minun tietääkseni. Tarkoitit luultavasti break-komentoa. En myöskään tiedä, toimiiko tuo edes. exit-komento muistaakseni hyppää pois koko skriptistä, joten sitä voisi käyttää tuossa.
Vau! Kiitos paljon vaivannäöstä ja hyvistä vinkeistä. *kumarrus*
Tuosta submit-nappulasta vielä sen verran, että sen arvon lähetys vaihtelee hieman eri selainten kesken. Jotkut selaimet eivät lähetä submittia POSTina ollenkaan ellet _klikkaa_ sitä. Jotkut taas eivät ellet lähetä lomaketta enterin painalluksella.
Eli esimerkiksi seuraavanlainen tarkistus ei toimisi välttämättä halutulla tavalla:
if(isset($_POST['submit'])) { // validointi }
Sen sijaan kannattaa tarkistaa onko lomake lähetetty esimerkiksi näin:
if(isset($_POST)) { }
tai näin:
if(count($_POST) > 0) { }
Aihe on jo aika vanha, joten et voi enää vastata siihen.