Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Apua nyypille

Sivun loppuun

eTe [23.06.2005 02:47:01]

#

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>

eTe [23.06.2005 04:06:15]

#

ööh.. tsekatkaas onks tos mitää järkee :>

kasetti [23.06.2005 08:40:35]

#

laita kaarisulkeet kohdalleen. siitä se virhe näin äkkiseltään katsoen tulee.

tuomas [23.06.2005 09:11:58]

#

Juu eli tuosta alkupään koodista kaarisulut pitäis korjata kohilleen kuten kasetti sanoi. Sitten tämä kohta tuottaa virheen:

fwrite($filu, $rivi);
fclose($filu);

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ä :)

pwc [23.06.2005 10:22:28]

#

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']))

Spongi [23.06.2005 10:49:44]

#

Ja sitte kannattaa tarkistaa noi

echo "<hr style="border-style:dotted">";

sillä eikös noi " pitäis olla \"

echo "<hr style=\"border-style:dotted\">";

Firsti [23.06.2005 10:54:19]

#

Eiks sen voi pistää myös

echo '<hr style="border-style:dotted;">';

Heikki [23.06.2005 11:24:41]

#

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;'>";

Blaze [23.06.2005 13:34:58]

#

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

eTe [23.06.2005 15:44:23]

#

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..

Teuvo Töhvelö [25.06.2005 13:05:13]

#

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

if ($passu <> $salasana) {

    echo "Väärä salasana! <a href=\"lahetys.php\">palaa!</a>";
    brake 2;
}

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.

eTe [25.06.2005 22:20:25]

#

Vau! Kiitos paljon vaivannäöstä ja hyvistä vinkeistä. *kumarrus*

Asdin [26.06.2005 00:46:28]

#

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) { }

Sivun alkuun

Vastaus

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

Tietoa sivustosta