Académique Documents
Professionnel Documents
Culture Documents
Specializare Info 2
Lab 13
Descriere: Content Management System in PHP
Resurse
1. Manual PHP, http://www.php.net/manual/en/
Tutorial
1. Introducere Un Content Management System (CMS) este utilizat pentru a adauga, edita sau sterge continutul unui site web. CMS-ul faciliteaza adminstrarea unui site. Continutul paginilor este salvat intr-o baza de date. Formulare HTML sunt folosite pentru a edita textul. Baza de date pentru exemplul de mai jos este formata din 3 campuri (id, title, content). CREATE DATABASE `cms` ; CREATE TABLE `news` ( `id` int(11) NOT NULL auto_increment, `title` varchar(80) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`) ); 2. Add article script
//cmsadd.php <html> <head> <title>Add An Article</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> <!-.box { font-family: Arial, Helvetica, sans-serif; font-size: 12px; border: 1px solid #000000; } --> </style> </head> <body> <?php if(isset($_POST['save'])) { $title = $_POST['title']; $content = $_POST['content'];
Tehnologii Web
if(!get_magic_quotes_gpc()){ $title = addslashes($title); $content = addslashes($content); } include 'config.php'; include 'opendb.php'; $query = "INSERT INTO news (title, content) VALUES ('$title', '$content')"; mysql_query($query) or die('Error ,query failed'); include 'closedb.php'; echo "Article '$title' added"; }
?>
<form method="post"> <table width="700" border="0" cellpadding="2" cellspacing="1" class="box" align="center"> <tr> <td width="100">Title</td> <td><input name="title" type="text" class="box" id="title"></td> </tr> <tr> <td width="100">Content</td> <td><textarea name="content" cols="50" rows="10" class="box" id="content"></textarea></td> </tr> <tr> <td width="100"> </td> <td> </td> </tr> <tr> <td colspan="2" align="center"><input name="save" type="submit" class="box" id="save" value="Save Article"></td> </tr> </table> </form> </body> </html>
Folosim trei scripturi pentru a gestiona conexiunea cu baza de date: config.php, opendb.php si closedb.php
<?php //config.php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'somedatabase'; ?>
<?php // opendb.php $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql'); mysql_select_db($dbname); ?>
Tehnologii Web
<?php // closedb.php mysql_close($conn); ?>
3. View articles script Acest script afiseaza articolele disbonibile in baza de date sub forma de link-uri http://localhost/cms/cmsview.php?id=2
// cmsview.php <?php include 'config.php'; include 'opendb.php'; // if no id is specified, list the available articles if(!isset($_GET['id'])) { $self = $_SERVER['PHP_SELF']; $query = "SELECT id, title FROM news ORDER BY id"; $result = mysql_query($query) or die('Error : ' . mysql_error()); // create the article list $content = '<ol>'; while($row = mysql_fetch_array($result, MYSQL_NUM)) { list($id, $title) = $row; $content .= "<li><a href=\"$self?id=$id\">$title</a></li>\r\n"; } $content .= '</ol>'; $title = } else { // get the $query = $result = $row = 'Available Articles'; article info from database "SELECT title, content FROM news WHERE id=".$_GET['id']; mysql_query($query) or die('Error : ' . mysql_error()); mysql_fetch_array($result, MYSQL_ASSOC);
include 'closedb.php'; ?> <html> <head> <title> <?php echo $title;?> </title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> <!-h1 { font-family: Arial, Helvetica, sans-serif; font-size: 18px; color: #006699; font-weight: bold; }
Tehnologii Web
.main { padding: 10px; border: 1px solid #006699; position: relative; width: 580px; margin-top: 20px; margin-bottom: 20px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; } --> </style> </head> <body> <table width="600" border="0" align="center" cellpadding="10" cellspacing="1" bgcolor="#336699"> <tr> <td bgcolor="#FFFFFF"> <h1 align="center"><?php echo $title;?></h1> <?php echo $content; // when displaying an article show a link // to see the article list if(isset($_GET['id'])) { ?> <p> </p> <p align="center"> <a href="<?php echo $_SERVER['PHP_SELF']; ?>"> Article List</a></p> <?php } ?> </td> </tr> </table> </body> </html>
4. Pagina de administrare Pentru a fi eficient un CMS are nevoie de o sectiune de adminstrare. Pagina de adminstrare va afisa articolele disponibile in baza de date si va adauga link-uri pentru actiuni asupra articolelor. 4.1 Delete article script Atunci cand dorim sa stergem un articol folosim un javacript pentru a confirma actiunea.
// cmsadmin.php <?php include 'config.php'; include 'opendb.php'; if(isset($_GET['del'])){ // remove the article from the database $query = "DELETE FROM news WHERE id = '{$_GET['del']}'"; mysql_query($query) or die('Error : ' . mysql_error()); // redirect to current page so when the user refresh this page // after deleting an article we won't go back to this code block
Tehnologii Web
header('Location: ' . $_SERVER['PHP_SELF']); exit;
} ?> <html> <head> <title>Admin Page For Content Management System (CMS)</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script language="JavaScript"> function delArticle(id, title) { if (confirm("Are you sure you want to delete '" + title + "'")) { window.location.href = 'cmsadmin.php?del=' + id; } } </script> </head> <body> <?php $query = "SELECT id, title FROM news ORDER BY id"; $result = mysql_query($query) or die('Error : ' . mysql_error()); ?> <table width="600" border="0" align="center" cellpadding="5" cellspacing="1" bgc olor="#999999"> <tr align="center" bgcolor="#CCCCCC"> <td width="500"><strong>Title</strong></td> <td width="150"><strong>Action</strong></td> </tr> <?php while(list($id, $title) = mysql_fetch_array($result, MYSQL_NUM)) { ?> <tr bgcolor="#FFFFFF"> <td width="500"> <?php echo $title;?> </td> <td width="150" align="center"> <a href="cmsview.php?id=<?php echo $id;?>" target="_blank">view</a> | <a href="cmsedit.php?id=<?php echo $id;?>">edit</a> | <a href="javascript:delArticle('<?php echo $id;?>', '<?php echo $title;?>');"> delete</a> </td></tr> <?php } include 'closedb.php'; ?> </table> <p align="center"><a href="cmsadd.php">Add an article</a></p> </body> </html>
4.2 Edit article script Pentru a completa sistemul avem nevoie de o pagina de editare. Atunci cand formularul este trimis la server, are loc un proces de actualizare folosind un UPDATE query.
Tehnologii Web
Un aspect important este ca atunci cand o pagina este editata, continutul poate sa includa tag-uri html. Daca astfel de caractere speciale sunt folosite intr-un element textarea pot aparea probleme. Pentru a preveni acest lucru se foloseste functia htmlspecialchars() care transforma caracterele speciale HTML < si > in < si >.
// cmsedit.php <html> <head> <title>Edit An Article</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> <!-.box { font-family: Arial, Helvetica, sans-serif; font-size: 12px; border: 1px solid #000000; } --> </style> </head> <body> <?php include 'config.php'; include 'opendb.php'; if(isset($_GET['id'])) { $query = "SELECT id, title, content ". "FROM news ". "WHERE id = '{$_GET['id']}'"; $result = mysql_query($query) or die('Error : ' . mysql_error()); list($id, $title, $content) = mysql_fetch_array($result, MYSQL_NUM); $content = htmlspecialchars($content); }
// update the article in the database $query = "UPDATE news ". "SET title = '$title', content = '$content' ". "WHERE id = '$id'"; mysql_query($query) or die('Error : ' . mysql_error()); echo "<p align='center'>Article updated</p>"; // now we will display $title & content // so strip out any slashes
Tehnologii Web
$title = stripslashes($title); $content = stripslashes($content);
include 'closedb.php'; ?> <form method="post" action="cmsedit.php"> <input type="hidden" name="id" value="<?=$id;?>"> <table width="700" border="0" cellpadding="2" cellspacing="1" class="box" align="center"> <tr> <td width="100">Title</td> <td><input name="title" type="text" class="box" id="title" value="<?=$title;?>"></td> </tr> <tr> <td width="100">Content</td> <td><textarea name="content" cols="50" rows="10" class="box" id="content"> <?=$content;?></textarea></td> </tr> <tr> <td width="100"> </td> <td> </td> </tr> <tr> <td colspan="2" align="center"><input name="update" type="submit" class="box" id="update" value="Update Article"></td> </tr> </table> <p align="center"><a href="cmsadmin.php">Back to admin page</a></p> </form> </body> </html>
Exercitii 1. Realizati o aplicatie care sa indeplineasca urmatoarele cerinte: Creai baza de date student Creai tabela categorii cu cmpurile: ID (ntreg, auto_increment, nenull, cheie primar), Denumire (varchar, 100, not null, index unic) Inserai categoria Diverse n tabela categorii Creai tabela cduri cu campurile: ID (ntreg, auto_increment, nenull, cheie primar), Denumire (varchar, 100, not null, index unic), Descriere (text), Categorie (ntreg, not null, index) Creai fiierul categorii.php care afieaz un tabel cu categoriile din baza de date student i operaii ce se pot efectua cu acestea
Creai fisierul adauga_categorie.php care afiseaza un formular care permite adugarea de categorii noi. Formularul trimite datele prin POST la fisierul adauga_categorie.php, care adaug categoria nou sau afieaz un mesaj de eroare i revine la formularul de adugare
Tehnologii Web
Creai fisierul modifica_categorie.php care afiseaza un formular care permite modificarea categoriei al crei ID este specificat n Query String. Formularul trimite datele prin POST la fisierul modifica_categorie.php, care actualizeaz categoria sau afieaz un mesaj de eroare i revine la formularul de modificare