Jump to content
php.lv forumi

Komentāri / Viesu grāmata!


Kemito
 Share

Recommended Posts

Sveiki visiem, es aiz gara laika vienkārši uzcepu tā uz domāšanu komentāru sistēmu / viesu grāmatu tādu parastu vienkāršu neko tur nedaiļoju, nekādus BB kodus utml.! Vēlējos saņemt vērtējumu tādu, kā pielabot, kas man darīts nepareizi ir utml.! Vēlos vienk. dzirdēt ko teiks vismaz 3 cilvēki - Briedis, 2easy, rATRIJS par šito darbiņu! Zinu jau ka nav nekā liela, be tomēr, kā 2easy teica, ka jāsāk ar mazumiņiem, kautvai sāc ar prastu string izvadīšanu kamēr sanāk pareizi, nevis čakarē laiku čurājot uz pirkstiem!

 

Kods ir šeit:

http://paste.php.lv/c1d5cbf7d8f34558c60c776b2b9383db?lang=php

Datubāze ir šeit:

http://paste.php.lv/64bda711649a904a2109737374b9c744?lang=mysql

 

Paldies jau iepriekš! Protams, vēl kāda gudra persona var novērtēt!

Doma ir - Saprast kļūdas, un izvērtēt tās.

Link to comment
Share on other sites

  • Replies 39
  • Created
  • Last Reply

Top Posters In This Topic

Atceries, ka uz PHP6 vairs nav tāda funkcijā kā get_magic_quotes_gpc()!

htmlspecialchars() varēji likt pie ievades nevis izvades.

Izskatās daudzsološi, tā turēt ;)!

 

Gandrīz nobijos ieraugot šo:

mysql_select_db($database) or die(mysql_error()." MYSQL ERROR");;

Augstāk minētajā es ievēroju 1 kļūdu :)!!

 

Es ceru, ka tu arī to ievēroji, jo hostinga serveru PHP versijas ir ļoti strikti noskaņotas pret kļūdām kuras neparāda lokālajā serverī.

Edited by emsy
Link to comment
Share on other sites

Ko tad darīt ar datu filtrēšanu? Runājot par to - get_magic_quotes_gpc() ?

Pielabosiet kāds kā ievadīt '$vaards', iekš kverija, lai varu lietot htmlspecialchars?

Kā aizsargāties pret to ko anonīms teica? Kādi ieteikumi?

Tas kā pieslēdzas/-os datubāzei nebūtu šajā skatījumā tas svarīgākais! Reāli taisot mājaslapu taisa jau mazliet tāka savādāk :) - Man mācīja taisīt ar globālajiem mainīgajiem un tur vēl izmantot define() !

Edited by Kemito
Link to comment
Share on other sites

Nu ja jau mans niks ir pieminēts, tad būtu grēks neatbildēt :)

 

Ko es labotu:

- visu sadalītu pa moduļiem (db, ieraksts, skati, helperi, ...). Vienalga ko izmantojot - klases/funkcijas. Tas pie viena nodalītu HTML no PHP

- obligāti aizpildāmos laukus nočekotu pašā sākumā (empty, strlen), jo savādāk tiks uzģenerēts E_NOTICE līmeņa warnings

- date vietā izmantotu time un noformētu to pareizi pie izvades. Datubāzē to var glabāt kā int

- mysql_fetch_array vietā izmantotu mysql_fetch_assoc, jo cipariskie indeksi tāpat netiek izmantoti

- htmlspecialchars izmantotu pie datu insertošanas datu bāzē nevis pirms izvades (pie tam IP un laiks tāpat neko sliktu nevar saturēt)

- SELECT * vietā es rakstītu ko tieši man vajag, īpaši ja visu neizmanto

- vai tiešām vards vajag būt 255 simbolus garam? (laiks arīdzan - bet kā jau teicu es to pārvestu uz int un lietotu time)

 

Kaut kā tā ^_^

 

Bet prieks ka kāds kaut ko dara ne tikai forumos prasa kā izveidot php mainīgo...

 

EDIT:

 

ā un par to ka var iemest space - vajag lietot trim.

Un par magic quotes. PHP6 vēl tāpat tik drīz nebūs pieejams. (vispār un kur nu vēl uz šārētajiem hostingiem). Bet nu var jau skatīties vai attiecīgā funkcija eksistē.

 

Ā un HTMLam nepievērsu uzmanību, vet font tags un tables lietošani ir SLIKTI!!!

Edited by rATRIJS
Link to comment
Share on other sites

Ko es ieteiktu, iemest arī pie komentāra izvades wordwrap funkciju, lai kāds ļaundaris nesačakarē dizainu (vai vienkārši netaisa nesmukumus).

Vēl var provēt izmantot nl2br() funkciju, lai komentāros var rakstīt rindkopās, nevis vienā strīpā :)

 

Kā jau rATRIJS teica par moduļos dalīšanu. Sākumā vismaz ieteiktu provēt nodaīt php no html kaut vai tādā veidā, ka visi aprēķini, darbības notiek pašā augšā, bet htmls vadās ārā apakšā (jo tavā gadījumā html jau sāc izvadīt pašā sākumā, tādējādi turpmāt aizliedzot lietot header(), session_start(), setcookie() funkcijas, kuras var izpildīt, kad vēl nav nosūtīt headeri)

 

Kā jau minēja, samazināt vārda garumu db, laiku turēt kā int (glabāt kā unix timestampu, pie izvades formatēt).

Link to comment
Share on other sites

pāris lietas...

 

1) lai nu ko, bet htmlspecialchars() Kemito tagad prot pareizi pielietot :)) tb izvadot datus. tur viss pareizi. hmm, bet tā kā šie dati ir paredzēti tikai kā plain text, tad šajā gadījumā, to varētu izdarīt jau uzreiz pie inserta. ehh, gaumes lieta... galvenais, jau ka tas htmlspecialchars() vsp tiek lietots

 

2) secureString() funkciju var droši dzēst ārā. pirms kko liec kverijā, pietiek ar mysql_real_escape_string($_POST['...']) priekš teksta, un (float) $_POST['...'] priekš skaitliskas vērtības

 

3) savukārt, ja uz servera ir ieslēgts magic_quotes_gpc (piemēram, uz nano tā ir), tad skripta sākumā (kkur pat pirms db konekcijas izveidošanas) var ielikt kaut vai šādu kodu

if (get_magic_quotes_gpc()) {
$f = create_function('$v', 'return is_array($v) ? $v : stripslashes($v);');
$_GET = array_map($f, $_GET);
$_POST = array_map($f, $_POST);
$_COOKIE = array_map($f, $_COOKIE);
}

 

4) tabulā laiku es definēju kā datetime, bet ip kā varbinary(15)

protams, ka abos gadījumos var izmantot int (atnāks vilks un tā arī pateiks :D), taču man labāk patīk naturālas vērtības, tb tādas, kuras uzreiz bez apstrādes dod cilvēkam viegli saprotamu info

 

5) un htmlā rakstīt font tagu sen jau vairs nav stilīgi ;)

 

 

aa un jā ir vērts ieklausīties gan rATRIJā, gan briedī par to, ka html ir ieteicams izvadīt tikai pašās beigās. vispirms izdari visas darbības ar datu bāzi (inserto, selektē, ko vien vajag), tad saformē datus/stringu ar lapas saturu, un beigās to izvadi lapā kaut vai ar <?= $content ?> (pa vidu statiskajam html, kuru šajā gadījumā varētu saukt arī par template)

Edited by 2easy
Link to comment
Share on other sites

Paldies liels par ieteikumiem, protams centos kā varēju tā lūk arī top otrais mēģinājums! Zinu, ka neesmu izpildījis visu, jo neesmu sapratis sekojošas lietas!

 

1. Par to SPACE izvadi, ja ieliek vienkārši tukšumus!

2. Par to kā izvadīt masīvu pēc tam iekš HTML, kā tur 2easy teica ar shortagiem! Jēga ir jeb var atstāt šādi pat?

3. Kā noformēt tad kautko skaitu teiksim, ja man vaig tikai tekstu sarkanā krāsā? - Neizmantot <font> tagu?

4. Par čekošanu sākumā - Mazliet apjuku par to kā to darīt!

4.1 - Taisu pārbaudi ( Jā ), ko darīt ja pārbaudam un lauks ir tukšs?, bet ja lauks ir aizpildīts?

4.2 - Ja lauks man nav sākumā aizpildīts, tad visu laiku stāv kautkāds manis likts paziņojums!

5. Ar laiku liku šādi, kā teica 2easy, vai labot arī katuko pie ievades? Vai šeit arī date vietā izmantot time("gads, mēnesis, diena") utml. ?

 

Izmantoju gan pie ievades, gan pie izvades htmlspecialchars, kā jau redzams jaunajā kodā!

Atteicos no secureString() funkcijas, kā izmantoju defaulto funkciju!

 

Jaunā DB struktūra:

http://paste.php.lv/7a38f27f0c2a250c8f683cc1d35a5924?lang=mysql

Pēc briedis teiktā

http://paste.php.lv/6b4ca9976b10658cf49abbc8778e31a3?lang=php

Jaunais kods:

http://paste.php.lv/2b9d8cae84e748dc1e3353481ab96a67?lang=php

 

Turpinam tematu :D Vismaz šādi ir intresantāk! :)

Edited by Kemito
Link to comment
Share on other sites

1)

$vards = ..htmlspecial..(trim($_POST['vards'))..;
if(!empty($vards) && !empty($komentars)){
//pievienojam
}else{
//norājam, ka nav kāds no laukiem nav aizpildīts
}

 

3) <span style="color:red;">sarkanais</span> - šā formatē in-line teksta izskatu.. Vēl labāk piešķir klasi un glabā css failā...

 

Ja izmanto pie ievades specialchars, tad pie izvades vairs nevajag lietot, jo tad tur sanāks šmuces :))

 

Apskatot kodu ieteikums - mysql_real_esc... funkciju izmantot tikai pašās beigās, pirms liek datubāzē, tas ir, visas citas apstrādes funkcijas izmantot pirms mysql_real_esc...

Edited by briedis
Link to comment
Share on other sites

3) savukārt, ja uz servera ir ieslēgts magic_quotes_gpc (piemēram, uz nano tā ir), tad skripta sākumā (kkur pat pirms db konekcijas izveidošanas) var ielikt kaut vai šādu kodu

 

Vai tad nevar vienkārši .htaccess failā ielikt:

 

php_flag magic_quotes_gpc Off

 

?

Link to comment
Share on other sites

uz nano apache server api ir "CGI", nevis "Apache 2.0 Handler"

līdz ar to .htaccess php_flag php_value izraisa smuku: Error 500 — Internal server error

taču uz nano var nolikt savu mazu php.ini failu (direktoriju augstāk virs www roota), kurā var būt kaut vai 1x rindiņa: magic_quotes_gpc = Off

 

vnk es ieliktu to kodu ar stripslashes() kā galējo variantu, jo ir arī tādi hosti, kur iespējas kko mainīt ir ļoti ierobežotas

anyway, protams, ka labāk ir noregulēt konfigurāciju, nevis izmantot kkādus koda workaroundus

Edited by 2easy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share


×
×
  • Create New...