Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Ilmoituspalsta heittää erroria

Sivun loppuun

vlaka [03.02.2007 19:07:26]

#

Elikkäs väsäilin ilmoituspalstaa sivuilleni, mutta heittää erroria. http://tjaa.zoorweb.net/~vlaka/ilmoitukset

Lomake.php on tälläinen:

<?php


echo '<form action="kirjoita.php" method="post">';
echo '<b>Nimimerkki</b>: <input type="text" name="nimi"><br>';
echo '<b>Sähköpostisi</b>: <input type="text" name="email"><br><br>';
echo '<b>Ilmoitus</b>:<br> <textarea name="ilmoitus"></textarea><br><br>';
echo '<input type="submit" value="lähetä">';
echo '</form>';
?>

Kirjoita.php tämmönen:

<?php

$nimi = $_POST['nimi'];
$email = $_POST['email'];
$ilmoitus = $_POST['ilmoitus']


$tiedosto = fopen("ilmoitukset.txt", "a");

//Asetetaan tekstiin kirjoitettavan rivin muoto.
$rivi = "<b>Lähettäjä:</b> <a href="mailto:$email">$nimi</a><br><br><b>Ilmoitus:</b> $ilmoitus<br>";

//Kirjoitetaan tiedostoon $rivi-muuttujan sisältö.
fwrite($tiedosto, $rivi);

//Suljetaan tiedosto.
fclose($tiedosto);

echo "Ilmoitus lähetetty!";

?>

Ja ilmoitukset.php tämmönen:

<?php
echo '<a href="lomake.php">Lähetä ilmoitus</a><br>';
echo '<br>'

$lukutiedosto = file("ilmoitukset.txt");


//tulostetaan rivit
for ($i = 0; $i < count($lukutiedosto); $i++) {
   echo ($i + 1) . ": " . $lukutiedosto[$i];
}
?>

Mikähän mättää, kun heittää kirjoita.php ja ilmoitukset.php tiedostossa samaa erroria? Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /home/vlaka/public_html/ilmoitukset/ilmoitukset.php on line 5 (ja 8)

Edit: osa koodista on vaan kopioitu jostain php-kouluista.

Antti Laaksonen [03.02.2007 19:11:02]

#

Tiedostoista puuttuu pari puolipistettä. Toinen puuttuu rivin $ilmoitus = $_POST['ilmoitus'] perästä ja toinen puuttuu rivin echo '<br>' perästä. Lisäksi kun $rivi-muuttujalle annetaan arvo, lainausmerkit pitää kirjoittaa muodossa \".

vlaka [03.02.2007 20:00:51]

#

Kiitoksia! Nyt toimii... Ensimmäinen "skriptini" php:llä.

vlaka [04.02.2007 18:15:06]

#

Noni... Nyt uusi ongelma. Eli nyt teen admin kirjautumista tähän hommeliin, mutta heittää taas erroria. Olen testannut kaikkea, mutta mikään ei auta.
Siinä pitäisi kirjautua, jos salasana on väärin, niin echo 'error!';
ja jos salasana on oikein, niin se päästää selaamaan admin tietoja, jotka ovat samassa tiedostossa.

Admin.php:

<?php

$pass="salasana"

echo 'Salasana: <input type=text name="salis">';

if (salis=$pass)
exit;
else
echo 'Error!';
}

?>

Edit: Ainiin! Unohdin sanoa, että se heittää tällästä erroria: "Parse error: syntax error, unexpected T_ECHO in /home/vlaka/public_html/ilmoitukset/admin.php on line 5"

Antti Laaksonen [04.02.2007 18:19:19]

#

Riviltä 3 puuttuu puolipiste, mutta PHP huomaa tämän vasta rivillä 5. Vertailussa täytyy käyttää kahta =-merkkiä. Jos salis on muuttuja, sen eteen täytyy laittaa $-merkki. Lisäksi tiedoston lopussa on aaltosulku, jolle ei löydy paria.

Koodi taitaa olla hieman kesken, mutta näillä muutoksilla virheitä ei pitäisi tulla.

vlaka [04.02.2007 18:49:21]

#

Kiitos! Nyt ei heitä erroria, mutta ei toimikkaan... Miten saisi, että jos salasana on oikea, niin silloin pääsisi tavallaan ohi tuosta kirjautumisesta, eli jatkaisi koodissa eteempäinadmin osiin. Ja sitten jos salis ois väärä, niin heittis errorin. Eli niinkuin salasanasuojattu alue, mutta en halua sellaista, mikä tulee http://kuvax.net :issä.

admin.php:

<?php

$pass="salasana";

echo '<form action="admin.php" method="GET"> ';
echo 'Salasana: <input type=text name="salis">';
echo '<input type="submit" value="Kirjaudu"> ';

if (salis==$pass)
exit;
else{
echo 'Error!';
}

?>

Bugaa paljon, ja ei hyväksy salista :S

Antti Laaksonen [04.02.2007 18:50:44]

#

Tämä voisi toimia paremmin:

<?php

if ($_POST['salis'] == "") {
?>
<form action="admin.php" method="post">
Kirjoita salasana:
<input type="password" name="salis">
<input type="submit" value="Lähetä">
</form>
<?php
    exit();
}
if ($_POST['salis'] != "salasana") {
    exit("Pieleen meni!");
}

echo "Tänne ei pääse ilman salasanaa!";

?>

vlaka [04.02.2007 18:58:00]

#

Kiitos. Jos käsitin oikein, niin toi "tänne ei pääse ilman salasanaa!" on se admin osio? Jos on toisin niin sano.

Antti Laaksonen [04.02.2007 19:24:06]

#

Juuri niin on asia. Käytännössä voisi olla parempi tallentaa kirjautuminen evästeeseen tai istuntoon, jotta admin-osiossa voi tehdäkin jotakin. Tässä on yksi esimerkki:
https://www.ohjelmointiputka.net/keskustelu/14043-hiomista-sisäänkirjautumiseen

vlaka [05.02.2007 19:41:39]

#

Nonnih... Taas yksi ongelma. Ajattelin silti jatkaa tässä ketjussa, koska tämäkin liittyy ilmoituspalsta skriptiini. Elikkäs tämä koodinpätkä printtaa Array, vaikka pitäisi printata tekstitiedoston sisältö.. Omituista.

Koodinpätkä ilmoitukset.php stä:

$otsikko = file("data/name.txt");
echo "<h1>$otsikko</h1><br>";

Antti Laaksonen [05.02.2007 19:44:32]

#

Funktio file lukee tekstitiedoston rivit taulukkoon, ja jos koko taulukon yrittää tulostaa echo-komennolla, käy juuri kuvaamallasi tavalla. Tässä tapauksessa parempi valinta on funktio file_get_contents, joka lukee tiedoston merkkijonoon (olettaen, että koko tiedoston sisältö on otsikko).

vlaka [05.02.2007 20:01:29]

#

Nonih... Taas uus ongelma. Poistin tuon vanhan viestini, että voisin postata uuden. Eli nyt taas heittää kirjoita.php erroria, kun yritän tehä tyhjien ilmotusten lähettämisen estoa. Mikäs mättää?

kirjoita.php:

<?php

$nimi = $_POST['nimi'];
$email = $_POST['email'];
$ilmoitus = $_POST['ilmoitus'];

if ($ilmoitus == "")
echo "Ei spämmiä, kiitos! | No spam, please!"
{
else
}

$tiedosto = fopen("ilmoitukset.txt", "a");

//Asetetaan tekstiin kirjoitettavan rivin muoto.
$rivi = "<b>Lähettäjä:</b> <a

href=\"mailto:$email\">$nimi</a><br><br><b>Ilmoitus:</b>

$ilmoitus<br><hr><br>";

//Kirjoitetaan tiedostoon $rivi-muuttujan sisältö.
fwrite($tiedosto, $rivi);

//Suljetaan tiedosto.
fclose($tiedosto);

echo "Ilmoitus lähetetty!<br><a href=\"ilmoitukset.php\">Takaisin</a>";


?>

Errori on: Parse error: syntax error, unexpected '{', expecting ',' or ';' in /home/vlaka/public_html/ilmoitukset/kirjoita.php on line 9

Ravver [05.02.2007 20:23:41]

#

Niin kuin errori sanoo; puolipilkut puuttuvat taas.

vlaka [05.02.2007 20:26:06]

#

Voehan kökkö! täytyypäs etsiä koko koodi kymmenettä kertaa.

Antti Laaksonen [05.02.2007 20:26:51]

#

Helpoin korjaus on korvata koko if-rakenne tällä:

if ($ilmoitus == "") exit("Ei spämmiä, kiitos!");

Yleisesti aaltosulut täytyy sijoittaa niin, että tietyn ehdon toteutuessa tapahtuva koodi tulee kahden aaltosulun sisään.

if (ehto 1) {
    // koodia
} else if (ehto 2) {
    // koodia
} else {
    // koodia
}

vlaka [05.02.2007 20:30:43]

#

Kiitosta Antti! Pääsen taas jatkamaan.

Nonih! Pistetäämpä väliin pikkusen näytettä: Ilmoituspalsta toiminnassa osoitteessa http://tjaa.zoorweb.net/~vlaka/ilmoitukset/ilmoitukset.php

vlaka [06.02.2007 19:03:45]

#

ööh... Nyt pitäisi estää html, php, ja javascript ilmotuksesta. itse ilmotusarkisto tekstitiedostossa näyttää tältä:

<b>Lähettäjä:</b> <a href="mailto:Email, joka on annettu">Nimi joka on annettu</a><br><br><b>Ilmoitus:</b> Teksti joka on annettu, mutta nyt tähän voi tunkea htmllää, javascriptiä, ja phptä ym.!<br><hr><br>

Mitenhän estettäs, ettei viestiä lähetetä, jos se sisältää html, php, ja javascript koodia.

Sais heittää ilmotuksen "Viesti sisältää kiellettyjä tageja!"

Mee [06.02.2007 19:26:59]

#

Kunhan vain pistät ennen ensimmäistä tarkistusta:

$ilmoitus = str_replace('<', '&lt;', $ilmoitus);
$ilmoitus = str_replace('>', '&gt;', $ilmoitus);

Tämä kylläkin vain vaihtaa <- merkkejä silleen että niitä ei suoriteta. Mietinpä ratkaisua vaikka itsekkin olen melko newb php:ssä. : (

vlaka [06.02.2007 19:38:42]

#

Kiitos! Toimii :)

GoldenDragon [06.02.2007 21:38:03]

#

Ehkä paremminkin näin:

<?php
$strip = array("<" => "&lt;", ">" => "&gt;");
$ilmoitus = strtr($ilmoitus,$strip);
?>

Tohon $strip taulukkoon voi sitten lisätä vielä merkkejä ja merkkijonoja, jotka haluaa korvata (esim. kielletyt sanat).


Sivun alkuun

Vastaus

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

Tietoa sivustosta