Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrypt newsów do Waszej opinii
podgur
post 19.04.2010, 18:17:32
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 6.04.2009

Ostrzeżenie: (0%)
-----


Witam. Napisałem skrypt newsów i proszę Was o opinie( co można pozmieniać, co lepiej zrobić, co zmienić itd.) : )
Wiem że to nie wiele, ale wole wiedzieć jak można poprawić go tongue.gif
Za wszystkie opinie dziękuje:)

Class.php
  1. <?php
  2.  
  3. Class news
  4. {
  5.  
  6. public $mysqli;
  7. public $mysql="**";
  8. public $user="**";
  9. public $password="**";
  10. public $datebase="**";
  11.  
  12.  
  13. function __construct(){
  14.  
  15.  
  16. $this->mysqli = new mysqli($this->mysql,$this->user,$this->password,$this->datebase);
  17. $this->mysqli->query("SET NAMES utf8");
  18. if ($mysqli->connect_error){
  19. die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
  20. }
  21.  
  22.  
  23. }
  24.  
  25. function __deconstruct(){
  26. unset($mysql,$datebase,$password,$user);
  27. }
  28.  
  29.  
  30. public function ShowAll($howmuch){
  31.  
  32. $query=$this->mysqli->query("SELECT * from `news` ORDER BY id DESC LIMIT 0,$howmuch");
  33. while($results=$query->fetch_assoc())
  34. {
  35. echo"<div class=\"box\">
  36. <h1><a href=\"\">$results[temat]</a></h1>
  37. ".substr($results['tresc'],0,300)."...
  38. <div class=\"comments\"> <a href=\"index.php?page=read_more&id=".intval($results[id])."\">read more</a> | Autor: $results[autor] | $results[date]</div>
  39. </div>";
  40.  
  41. }
  42.  
  43. }
  44.  
  45.  
  46. public function readmore(){
  47.  
  48. $query=$this->mysqli->query("SELECT * from `news` WHERE `id`=$_GET[id]");
  49. while($results=$query->fetch_assoc())
  50. {
  51. echo"<div class=\"box\">
  52. <h1><a href=\"\">$results[temat]</a></h1>
  53. $results[tresc]
  54. <div class=\"comments\"><a href=\"index.php\">Back main page</a> | Autor: $results[autor] | $results[date]</div>
  55. </div>";
  56.  
  57. }
  58.  
  59. }
  60. }
  61.  
  62. ?>


Index.php
  1. <?php
  2. include_once("class.php");
  3. $news=new news();
  4.  
  5. ?>
  6. <!DOCTYPE html
  7. PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  8. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  9. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  10. <head>
  11. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  12. <link rel="stylesheet" type="text/css" href="css/style.css" />
  13. <title>Komentarz v1.0.0</title>
  14. </head>
  15. <body>
  16. <div id="content">
  17. <h4>System newsów oparty o MySql</h4>
  18.  
  19. <?php
  20. switch($_GET['page'])
  21. {
  22. case "read_more":
  23. $news->readmore();
  24. break;
  25. default:
  26. $news->ShowAll(3);
  27. }
  28. ?>
  29.  
  30. </div>
  31. </body>
  32. </html>

Mysql
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.2.4
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 19 Kwi 2010, 19:13
  7. -- Wersja serwera: 5.1.41
  8. -- Wersja PHP: 5.3.1
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12.  
  13. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  14. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  15. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  16. /*!40101 SET NAMES utf8 */;
  17.  
  18. --
  19. -- Baza danych: `news`
  20. --
  21.  
  22. -- --------------------------------------------------------
  23.  
  24. --
  25. -- Struktura tabeli dla `news`
  26. --
  27.  
  28. CREATE TABLE IF NOT EXISTS `news` (
  29. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id news',
  30. `autor` varchar(24) NOT NULL COMMENT 'autor',
  31. `temat` varchar(35) NOT NULL COMMENT 'temat newsa',
  32. `tresc` text NOT NULL COMMENT 'tresc',
  33. `date` date NOT NULL COMMENT 'data dodania',
  34. PRIMARY KEY (`id`)
  35. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13;
  36.  
  37. --
  38. -- Zrzut danych tabeli `news`
  39. --
  40.  
  41. INSERT INTO `news` (`id`, `autor`, `temat`, `tresc`, `date`) VALUES
  42. (12, 'Podgur', 'Siema jestem eniu', 'Eniu nowy kolega nasz.siala', '2010-04-19'),
  43. (11, 'Gues9000', 'Polska 0-6 Węgry', 'W dzisiejszym meczu polska reprezentacja hokeja przegrała 2 mecz na mistrzostwach świata pierwszej diwizji. Wynikiem 6-0 zakończył się mecz polaków.', '0000-00-00'),
  44. (10, 'Podgur', 'Lech Kaczyński żyje!?', 'Nulla elementum odio sit amet nibh commodo pharetra. Proin non luctus leo. Nunc mollis pharetra est aliquet tristique. Integer posuere magna in est placerat tempus. Maecenas adipiscing sodales mattis. Sed nec erat ac leo imperdiet eleifend vel id purus. Praesent nec libero quis dolor elementum vestibulum. Etiam turpis mi, viverra sit amet elementum ut, consequat nec ligula. Suspendisse in velit eu magna sagittis vestibulum. Quisque mattis nulla auctor neque scelerisque ut euismod tortor ultricies.', '2010-04-15');
  45.  
  46. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  47. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  48. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


Bless!

Ten post edytował podgur 19.04.2010, 18:30:03
Go to the top of the page
+Quote Post
Spawnm
post 19.04.2010, 18:21:46
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Proszę nadać poprawne bbcode.
Go to the top of the page
+Quote Post
podgur
post 19.04.2010, 18:31:08
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 6.04.2009

Ostrzeżenie: (0%)
-----


@Spawnm
Sorka, już dodałem:)
Go to the top of the page
+Quote Post
Spawnm
post 19.04.2010, 18:52:35
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




  1. `temat` varchar(35) NOT NULL COMMENT 'temat newsa',

spore ograniczenie ...
echo w klasie/modelu się nie daje ...

  1. if ($mysqli->connect_error){
  2. die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
  3. }


poczytaj o try{}
Go to the top of the page
+Quote Post
podgur
post 20.04.2010, 18:54:50
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 6.04.2009

Ostrzeżenie: (0%)
-----


czyli lepiej rozpocząć pętle w index.php i zwracac rekordy z bazy pobrane w klasie?
czy masz inny sposób?smile.gif

Co do wyjątków, to zaraz go dopiszęsmile.gif

W sumie masz racje:) 35 znaków to trochę mało:D

Dobra, pozamieniałem:) dzięki Spawnm
Mam do Ciebie pytanko:) masz pomysł do napisania skryptu, w którym mógł bym poćwiczyć używanie klas,metod wyjątków i sporo logiki?biggrin.gif bo sam wymyśliłem ten skrypt newsów, no i to nie był problem;/ a wolal bym coś do wykazania siębiggrin.gif
Go to the top of the page
+Quote Post
zend
post 20.04.2010, 23:19:33
Post #6





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


  1. function __deconstruct() {unset($mysql,$datebase,$password,$user);}
Ccccombo breaker! smile.gif) Poczytaj lepiej jeszcze troche o obiektówce, bo brakuje Ci najbardziej podstawowych podstaw. Poprawna metoda niszcząca powinna wyglądać tak:
  1. public function __destruct() {unset($this -> mysqli);}

Poza tym dobrym zwyczajem jest definiowanie pól w klasach jako protected lub private zaleznie od potrzeb
Go to the top of the page
+Quote Post
podgur
post 21.04.2010, 08:35:36
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 6.04.2009

Ostrzeżenie: (0%)
-----


Wiem wiem, to zostało z pierwszej wersji skryptu. Już wyrzuciłem dekonstruktora i zamieściłem dane do mysql w cfg (;
Go to the top of the page
+Quote Post
nospor
post 21.04.2010, 08:40:34
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$query=$this->mysqli->query("SELECT * from `news` WHERE `id`=$_GET[id]");
nie ma to jak ulatawiac hakerowi robote winksmiley.jpg
poczytaj o SQLInjection


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sniver
post 21.04.2010, 09:19:24
Post #9





Grupa: Zarejestrowani
Postów: 159
Pomógł: 5
Dołączył: 31.08.2007

Ostrzeżenie: (0%)
-----


warstwę wyglądu oddzielił bym jakimś gotowym systemem szablonów (np. Smarty).

z natury wiem że jeśli jest to tabela myissam, to wiadome że można dorobić fajną wyszukiwarke, a tu z pomocą przyjdzie fulltext

tak na mój chłopski rozum to taka pseudo obiektowa procedura...


--------------------
Go to the top of the page
+Quote Post
zend
post 21.04.2010, 13:18:54
Post #10





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


Klasa do newsów NIE powinna tworzyć połączenia do bazy danych, powinieneś je przekazywać przez parametr do konstruktora, albo jakieś inne ciekawsze rozwiązanie smile.gif
Poczytaj też trochę o interfejsach.
  1. interface Content
  2. {
  3. /*
  4. * @return Smarty
  5. * */
  6. public function execute(Smarty $smarty);
  7. }
  8.  
  9. interface Database
  10. {
  11. public function setDatabase(mysql $mysql);
  12. }
  13.  
  14. class Smarty
  15. {
  16. public function __toString()
  17. {
  18. }
  19.  
  20. public function __set($name , $value)
  21. {
  22. }
  23.  
  24. public function __get($name)
  25. {
  26. }
  27. }
  28.  
  29. class News implements Content, Database
  30. {
  31. public function setDatabase(mysql $mysql)
  32. {
  33. }
  34.  
  35. public function execute(Smarty $smarty)
  36. {
  37.  
  38. return $smarty;
  39. }
  40. }
  41.  
  42. class StaticContent implements Content
  43. {
  44. public function execute(Smarty $smarty)
  45. {
  46. $clonedInstance = clone $smarty;
  47. $clonedInstance -> contentCollection = array();
  48.  
  49. return $clonedInstance;
  50. }
  51. }
  52.  
  53. $class = $_GET['site']; //wymaga zabezpieczenia
  54. //index
  55. if(!class_exists($class))
  56. {
  57. //error handle
  58. }
  59.  
  60. $instance = new $class();
  61.  
  62. if($instance instanceOf Database)
  63. $instance -> setDatabase($mysql);
  64. if($instance instanceOf Content)
  65. echo $instance -> execute($smarty);

Pisane na szybko, mam nadzieje ze się przyda smile.gif

Ten post edytował zend 21.04.2010, 13:20:40
Go to the top of the page
+Quote Post
the_eater
post 21.04.2010, 14:29:35
Post #11





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 8.04.2010

Ostrzeżenie: (0%)
-----


i może cacheowanie widoków - strona z komentarzami bedzie wyświetlana x razy, ale tylko jeden user na kilkuset zostawi komentarz...


--------------------
www.check-it.pl - najlepszy katalog stron
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.08.2025 - 23:05