Kirjautuminen

Haku

Tehtävät

Keskustelu: Projektit: PHP-projekti: Uutiset

Sivu 1 / 1

Sivun loppuun

Triton [01.01.2010 22:57:24]

Lainaa #

Tämä on osa PHP-projektia.

Nonniin nyt sain valmiiksi tämän uutisohjelman... Eli en ole tehnyt mitään muotoiluja vielä, sillä tarkoituksena on saada ensin logiikka kuntoon. Toivon paljon palautetta tästä, sillä yksi syy jonka takia osallistuin koko projektiin oli se, että oppisin php:tä paremmin.

Uutisia voi katsoa täältä.
Uutisia voi hallita täältä.
Sorsat saa ladattua täältä.

Jos jokin ei toimi tai löytyy bugeja/tietoturva-aukkoja, niin niistä siis ilmoitusta...

trilog [01.01.2010 23:55:06]

Lainaa #

Tässä muutamia kommentteja:

Tiedostojen jako on mielestäni looginen, ja tehtävät on hyvin jaettu eri funktioihin.

Näissä monitiedostoisissa toteutuksissa suosittelisin käyttämään require_once-lauseketta. Jos jossakin eri tiedostossa käytetään jonkin toisen tiedoston tarjoamia ominaisuuksia, se sisällytettäisiin tähän tiedostoon. Eli esimerkiksi tiedostossa features.functions.php sisällytettäisiin:

require_once("html.functions.php"); // ManageForm, DeleteSecure
require_once("inputs.functions.php"); // GenNews, CheckArticleId
require_once("file.functions.php"); // WriteToFile, GetLine, EditLine

Näin samoja tiedostoja ei sisällytetä moneen kertaan, ja koodin debuggaus on helpompaa. Tällä tavalla ei ole väliä minkä tiedoston sisällyttää: kaikki sen riippuvuudet sisällytetään tarvittaessa automaattisesti. Tämä tekee myös käyttämäsi functions.php-tiedoston turhaksi.

Käytä funktion oletusarvoja, niin ei tarvitse tehdä ruman näköisiä funktiokutsuja, esimerkiksi:

function ManageForm($title="", $content="") {
....
ManageForm("", "") => ManageForm()

list-funktio on kätevä, kun halutaan asettaa alkioita taulukosta muuttujiin, esimerkiksi:

$title = $lines[$i][0];
$content = $lines[$i][1];
$date = $lines[$i][2];

=>

list($title, $content, $date) = $lines[$i];

Itse käyttäisin mm. < ja > -merkkien korvaamiseen htmlspecialchars-funktiota tässä kontekstissa. Rivinvaihtoihin käyttäisin mieluummin nl2br-funktiota, sillä se ottaa huomioon kaikentyyppiset rivinvaihdot. Vinkki: array_map ajaa tietyn funktion kaikkiin taulukossa oleviin alkioihin.

admin.php:ssä ei tarkasteta lainkaan onko muuttujia $_GET['article_id'] ja $_GET['action'] asetettuna ennen käyttämistä, joka antaa noticen. Myöskin toimintojen käsittelyyn loogisempi ratkaisu olisi switch case.

Miksi admin.php-tiedoston alussa aloitetaan puskurointi?


Tällaisia ajatuksia tuli koodin pohjalta. Muuten kokonaisuutena oikein näppärä uutisskripti.

Triton [02.01.2010 00:07:33]

Lainaa #

Kiitos tästä palautteesta. Täytyy lähtee muokkaamaan tuota koodia, mutta tässä vastaus muutamiin kysymyksiin:

Käytin str_replace-funktiota htmlspecialchars-funktion sijasta siksi, että jostain syystä htmlspecialchars-funktio estää sen, ettei tuo str_replace-funktio saa muutettua pystyviivan entiteetti-merkintää merkkimuotoon, en tiedä miksi...

admin.php puskuroidaan sen takia, että uudelleenohjauksissa käytetään header-funktiota ja jos tiedostoa ei puskuroitaisi, niin tulisi "headers already sent" -virheilmoitus.

Tulikin jo nyt php:stä uusia "piirteitä" esille, joita en ollut aikaisemmin tiennyt :D

trilog [02.01.2010 00:26:20]

Lainaa #

Toni Oksanen kirjoitti:

Käytin str_replace-funktiota htmlspecialchars-funktion sijasta siksi, että jostain syystä htmlspecialchars-funktio estää sen, ettei tuo str_replace-funktio saa muutettua pystyviivan entiteetti-merkintää merkkimuotoon, en tiedä miksi...

Huomaa järjestys:

<?php
/*
 * Ei toimi, koska htmlspecialchars muuttaa myös &-merkin entiteetiksi:
 */
$s = str_replace("|", "&#124;", $s);
$s = htmlspecialchars($s);
echo $s;

/*
 * Toimii:
 */
$s = htmlspecialchars($s);
$s = str_replace("|", "&#124;", $s);
echo $s;

Toni Oksanen kirjoitti:

admin.php puskuroidaan sen takia, että uudelleenohjauksissa käytetään header-funktiota ja jos tiedostoa ei puskuroitaisi, niin tulisi "headers already sent" -virheilmoitus.

Pahoittelut, minun mokani. Olin jotenkin katsovinani, ettei virheilmoitussa tuossa tilanteessa voi tulla.

Triton [02.01.2010 00:37:40]

Lainaa #

Olinpas minä idiootti, kun en tajunnut, että tuo htmlspecialchars-funktio muuttaa myös noi &-merkit entiteeteiksi xD

Triton [02.01.2010 02:08:44]

Lainaa #

Nyt on muokkauksia tehty ja ne löytyvyt jo noista ladattavista sorsista sekä testisivuista.

trilog: En ymmärtänyt, mitä tarkoitit tällä: "admin.php:ssä ei tarkasteta lainkaan onko muuttujia $_GET['article_id'] ja $_GET['action'] asetettuna ennen käyttämistä". Myös jostain ihmeen syystä en saanut nl2br-funktiota toimimaan oikein (se sekotti news.txt-tiedoston rivirakenteen täysin) siispä jätin tuon str_replace-funktion ainakin toistaiseksi...

Lisää palautetta!

trilog [02.01.2010 11:25:11]

Lainaa #

Toni Oksanen kirjoitti:

En ymmärtänyt, mitä tarkoitit tällä: "admin.php:ssä ei tarkasteta lainkaan onko muuttujia $_GET['article_id'] ja $_GET['action'] asetettuna ennen käyttämistä".

Tarkoitin siis tätä:

<?php
$id = $_GET['article_id']-1; // Antaa noticen, jos article_id ei ole asetettu.

$id = ((isset($_GET['article_id'])) ? $_GET['article_id']-1 : null); // Ei tule noticea.

Kannattaa kehitysvaiheessa pitää kaikki virheilmoitukset päällä, tämä onnistuu laittamalla skriptin alkuun:

<?php
error_reporting(E_ALL | E_NOTICE);

Triton [02.01.2010 11:33:49]

Lainaa #

Kiitos, tämä selventi asiaa. En ole tuollaisesti virheilmoituksista aikaisemmin tiennytkään.

Edit.

Uudet sorsat löytyy täältä.


Sivun alkuun

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta