Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt newsów do Waszej opinii
Forum PHP.pl > Forum > PHP
podgur
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!
Spawnm
Proszę nadać poprawne bbcode.
podgur
@Spawnm
Sorka, już dodałem:)
Spawnm
  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{}
podgur
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
zend
  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
podgur
Wiem wiem, to zostało z pierwszej wersji skryptu. Już wyrzuciłem dekonstruktora i zamieściłem dane do mysql w cfg (;
nospor
$query=$this->mysqli->query("SELECT * from `news` WHERE `id`=$_GET[id]");
nie ma to jak ulatawiac hakerowi robote winksmiley.jpg
poczytaj o SQLInjection
sniver
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...
zend
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
the_eater
i może cacheowanie widoków - strona z komentarzami bedzie wyświetlana x razy, ale tylko jeden user na kilkuset zostawi komentarz...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.