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.
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 \"
.
Kiitoksia! Nyt toimii... Ensimmäinen "skriptini" php:llä.
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"
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.
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
Tämä voisi toimia paremmin:
Kiitos. Jos käsitin oikein, niin toi "tänne ei pääse ilman salasanaa!" on se admin osio? Jos on toisin niin sano.
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/
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ä:
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).
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
Niin kuin errori sanoo; puolipilkut puuttuvat taas.
Voehan kökkö! täytyypäs etsiä koko koodi kymmenettä kertaa.
Helpoin korjaus on korvata koko if-rakenne tällä:
Yleisesti aaltosulut täytyy sijoittaa niin, että tietyn ehdon toteutuessa tapahtuva koodi tulee kahden aaltosulun sisään.
Kiitosta Antti! Pääsen taas jatkamaan.
Nonih! Pistetäämpä väliin pikkusen näytettä: Ilmoituspalsta toiminnassa osoitteessa http://tjaa.zoorweb.net/~vlaka/ilmoitukset/
öö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!"
Kunhan vain pistät ennen ensimmäistä tarkistusta:
$ilmoitus = str_replace('<', '<', $ilmoitus); $ilmoitus = str_replace('>', '>', $ilmoitus);
Tämä kylläkin vain vaihtaa <- merkkejä silleen että niitä ei suoriteta. Mietinpä ratkaisua vaikka itsekkin olen melko newb php:ssä. : (
Kiitos! Toimii :)
Ehkä paremminkin näin:
Tohon $strip taulukkoon voi sitten lisätä vielä merkkejä ja merkkijonoja, jotka haluaa korvata (esim. kielletyt sanat).
Aihe on jo aika vanha, joten et voi enää vastata siihen.