• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ocena CMS co źle, co dobrze?

Object Storage Arubacloud
0 głosów
480 wizyt
pytanie zadane 20 kwietnia 2015 w Rozwój zawodowy, nauka, praca przez damianmisztal Gaduła (4,730 p.)

witam, chciałbym prosić was o ocenę CMS który zrobiłem co prawda z pomocą tutorialu ale co byście w nim zmienili co wyrzucili lub co dodali. Bardzo liczę na waszą opinię nawet tą negatywną gdyż coś zawsze mnie to nauczy.

Więc tak na początek strona wyświetlająca wszystkie tytuły artykułów:
 

<!DOCTYPE html>
<?php
include_once('include/connection.php');
include_once('include/article.php');

$article = new Article;
$articles = $article->fetch_all();

?>

<html>
    <head>
        <title>CMS</title>
        <meta charset="UTF-8">
        <link href="syle.css" rel="stylesheet" type="text/css"/>
       
    </head>
    <body>
        <div class="container">
            <a href="index.php" id="logo">CMS</a>
            <ol>
                <?php foreach ($articles as $article) { ?>
                <li>
                    <a href="article.php?id=<?php echo $article['article_id'];?>">
                       
                        <?php echo $article['article_title']; ?>
                    </a>
                    
                    - <small>
                    posted <?php echo date('l jS', $article['article_timestamp']); ?>
                    </small>
                </li>
                
                <?php }  ?>
            </ol>
            <br />
            
            <small><a href="admin/">admin </a> </small>
            
            
        </div>
        
       
        
    </body>
</html>



Dalsza część kodu w komentarzach gdyż nie mogę wstawić tu całości, limit znaków.

3 odpowiedzi

+1 głos
odpowiedź 20 kwietnia 2015 przez efiku Szeryf (75,160 p.)
edycja 20 kwietnia 2015 przez efiku

Wyobraź sobie, że istnieje: http://pastebin.com/ gdzie możesz wkleic  kod i wybrać odpowiednią składnię.  Popraw pytanie wstawiając kod i będzie git.

Na razię widzę, że mżna pozbyć się tych includów i zrobić autoloader do klas ;)

2. oddzielić kod html od php , fajny system szablonów ma Twig, poczytaj sobie o nim:)

I jeżeli robisz to dla siebie, to jest to dobre ćwiczenie, ale nie używaj go gdzieś na produkcji :D

Wywal z klasy artykułów te global, a połączenie przesyłaj w konstruktorze

class Article{
   private $pdoHandle;
    public function __construct( \PDO $pdo ) {
         $this->pdoHandle = $pdo;
     }

    public function fetch_all() {
          $query =  $this->pdoHandle->prepare("SELECT * FROM articles");
          $query->execute();
         
        return $query->fetchALL();
    }
     
    public function fetch_data($article_id){
          $query = $this->pdoHandle->prepare("SELECT * FROM articles WHERE article_id=?");
          $query->bindValue(1,$article_id);
          $query->execute();
         
        return $query->fetch();
    }
     // kod moze zawierac bledy, nie mam IDE przy sobie. 
}

 

0 głosów
odpowiedź 20 kwietnia 2015 przez damianmisztal Gaduła (4,730 p.)

Wyświetlane treści artykuły:
 

<?php
include_once('include/connection.php');
include_once('include/article.php');

$article = new Article;

if (isset($_GET['id'])){
    $id = $_GET['id'];
    $data = $article->fetch_data($id);
   ?>
   <html>
    <head>
        <title>CMS</title>
        <meta charset="UTF-8">
        <link href="syle.css" rel="stylesheet" type="text/css"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div class="container">
            <a href="index.php" id="logo">CMS</a>
            
            
            <h4><?php echo $data['article_title'];?> -
                <small>
                    posted <?php echo date('l jS', $data['article_timestamp']); ?>
                </small>
            </h4>
            <p><?php echo $data['article_content']?> </p>
            <a href="index.php">&larr; Back</a>
            
        </div>
        
       
        
    </body>
</html>

<?php
    } else {
        header('Location: index.php');
        exit();
    }

?>



CSS:

 

body{
    padding-top: 120px;
    font-family: Arial;
    
}

.container{
    width : 500px;
    margin: 0 auto;
    
}

a:link, a:visited {
    color: slateGray;
    text-decoration: none;
    border-bottom: 1px dotted slategray;
    
}

a:hover {
    color: #444;
    border-bottom-color: #444;
}

small {
    color: #999;
    font-style: italic;
    
}
p {
    line-height: 30px;
    
}
ol li {
    line-height: 50px;
}
input[type=text], input[type=password], textarea {
    -webkit-appearance: none;
    padding: 5px;
    border: 1px solid #ccc;
}
input[type=text]:focus, input[type=password]:focus, textarea:focus {
    outline: none;
}

 

komentarz 20 kwietnia 2015 przez damianmisztal Gaduła (4,730 p.)

A tutaj kod który zawiera się w folderze admin:

Najpier admin/index.php:

<?php
session_start();

include_once ('../include/connection.php');

if(isset($_SESSION['logged_in'])){
    ?>
    <html>
    <head>
        <title>CMS</title>
        <meta charset="UTF-8">
        <link href="../syle.css" rel="stylesheet" type="text/css"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div class="container">
            <a href="index.php" id="logo">CMS</a>
            <br /><br />
           
            <ol>
                <li> <a href="add.php">Add Article </a> </li>
                <li> <a href="delete.php">Delete Article</a> </li>
                <li> <a href="logout.php">Logout </a> </li>
            </ol>
            
        </div>
        
       
        
    </body>
</html>    
    
    
    <?php
} else {
    if(isset($_POST['username'], $_POST['password'])){
        $username = $_POST['username'];
        $password = md5($_POST['password']);
        
        if(empty($username) or empty($password)){
            $error = 'All fields are required!';
        }  else {
            $query = $pdo->prepare("SELECT * FROM users WHERE user_name = ? AND user_password = ?"); 
            
            $query->bindValue(1, $username);
            $query->bindValue(2, $password);
            $query->execute();
            
            $num = $query->rowCount();
            
            if($num ==1){
                $_SESSION['logged_in'] = true;
                header('Location: index.php');
                exit();
            } else {
                $error = "Incorect detalis";
            }
        }
    }
    
    ?>
<html>
    <head>
        <title>CMS</title>
        <meta charset="UTF-8">
        <link href="../syle.css" rel="stylesheet" type="text/css"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div class="container">
            <a href="index.php" id="logo">CMS</a>
            <br /><br />
            
            <?php if(isset($error)){ ?>
            <small style='color: #aa0000;'><?php echo $error ?></small>
            <br /><br />
                <?php } ?>
            
            <form action='index.php' method="post" autocomplete="off">
                <input type="text" name="username" placeholder="Username" />
                <input type="password" name="password" placeholder="Password" />
                <input type="submit" value="Login"/>
                
            </form>
            <br><br>
            <a href="../index.php">&larr; Back</a>
            
            
        </div>
        
       
        
    </body>
</html>    



<?php
}

?>

Dodawanie artykułu:

<?php
session_start();

include_once ('../include/connection.php');

if (isset($_SESSION['logged_in'])){
    if (isset($_POST['title'], $_POST['content'])){
        $title = $_POST['title'];
        $content = nl2br($_POST['content']);
        
        if (empty($title) or empty($content)){
            $error = "All fields are required!";
        } else {
            $query = $pdo->prepare('INSERT INTO articles (article_title, article_content, article_timestamp) VALUES(?,?,?)');
       
            $query->bindValue(1, $title);
            $query->bindValue(2, $content);
            $query->bindValue(3, time());
            
            $query->execute();
            header('Location: index.php');
            
        }
    }
    
    ?>
<html>
    <head>
        <title>CMS</title>
        <meta charset="UTF-8">
        <link href="../syle.css" rel="stylesheet" type="text/css"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div class="container">
            <a href="index.php" id="logo">CMS</a>
            <br /><br />
           
            <h4>Add Article</h4>
            
            <?php if(isset($error)){ ?>
            <small style='color: #aa0000;'><?php echo $error ?></small>
            <br /><br />
                <?php } ?>
            <form action="add.php" method="post" autocomplete="off">
                <input type="text" name='title' placeholder="Title" /> <br /><br />
                <textarea rows="15" cols="50" placeholder="Content" name="content"></textarea><br /><br />
                <input type="submit" value="Add Article"/>
            </form>
            <br><br>
				<a href="index.php">&larr; Back</a>
        </div>
        
       
        
    </body>
</html>    


<?php
} else {
    header('Location: index.php');
}


?>

Kasowanie:

<?php

session_start();

include_once('../include/connection.php');
include_once('../include/article.php');

$article = new Article;

if (isset($_SESSION['logged_in'])){
    if (isset($_GET['id'])){
        $id = $_GET['id'];
        
        $query= $pdo->prepare('DELETE FROM articles WHERE article_id = ?');
        $query->bindValue(1, $id);
        $query->execute();
        
        header('Location: delete.php');
    }
    $articles = $article->fetch_all();
    
    ?>
<html>
    <head>
        <title>CMS</title>
        <meta charset="UTF-8">
        <link href="../syle.css" rel="stylesheet" type="text/css"/>
       
    </head>
    <body>
        <div class="container">
            <a href="index.php" id="logo">CMS</a>
            <br /><br />
            <h4>Select to delete</h4>
            <form action="delete.php" method="get">
                <select onchange="this.form.submit();" name="id">
                    <?php foreach ($articles as $article){ ?>
                    <option value="<?php echo $article['article_id']; ?>">
                        <?php echo $article['article_title']; ?>
                    </option>
                    
                    <?php }
                    ?>
                </select>   
                
            </form>
            <br><br>
				<a href="index.php">&larr; Back</a>
        </div>
        
       
        
    </body>
</html>    




<?php
    
} else{
    header('Location: index.php');
}
    

?>

 

komentarz 20 kwietnia 2015 przez damianmisztal Gaduła (4,730 p.)

Oraz zawartość katalogu 'include':

Klasy artykułów:

<?php

class Article{
    public function fetch_all() {
        global $pdo;
        $query = $pdo->prepare("SELECT * FROM articles");
        $query->execute();
        
        return $query->fetchALL();
    }
    
    public function fetch_data($article_id){
        global $pdo;
        $query = $pdo->prepare("SELECT * FROM articles WHERE article_id=?");
        $query->bindValue(1,$article_id);
        $query->execute();
        
        return $query->fetch();
    }
    
}





?>

oraz połączenie z bazą danych:

<?php

try {
$pdo = new PDO('mysql:host=localhost;dbname=cms','root','');
}   catch (PDOException $e){
    exit('Database error.');
}


?>

 

0 głosów
odpowiedź 20 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)

Too long, didn't read. Haha.

: -)

 

Podobne pytania

0 głosów
1 odpowiedź 214 wizyt
pytanie zadane 13 czerwca 2019 w PHP przez veryape Użytkownik (580 p.)
0 głosów
1 odpowiedź 212 wizyt
0 głosów
3 odpowiedzi 186 wizyt
pytanie zadane 11 kwietnia 2018 w HTML i CSS przez timati Bywalec (2,060 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...