Вы находитесь на странице: 1из 9

Note de seminar Tehnologii Web

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">&nbsp;</td> <td>&nbsp;</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);

$title = $row['title']; $content = $row['content'];

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>&nbsp;</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 &lt; si &gt;.
// 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); }

else if(isset($_POST['title'])){ $id = $_POST['id']; $title = $_POST['title']; $content = $_POST['content'];

if(!get_magic_quotes_gpc()){ $title = addslashes($title); $content = addslashes($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">&nbsp;</td> <td>&nbsp;</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

Creai fisierul sterge_categorie.php care sterge o categorie al crui ID este specificat n Query String. Creai fiiere PHP pentru listarea, adugarea, modificare i tergerea de CD-uri n colecie. Modificai fiierul stergere_categorie.php, astfel nct s tearg toate cd-urile din categoria care va fi tears.

2. Creai o aplicaie PHP conform urmtoarelor specificaii: Afiai la client valorile de mediu ale serverului Web. Preluai ntr-o form numele i prenumele utilizatorului precum i un text scurt. La server se valideaz completarea tuturor cmpurilor i se rspunde cu un mesaj de ntmpinare sau se foreaz revenirea n pagina de preluare date pentru completarea integral a formularului. Mesajul de ntmpinare se va adresa cu numele utilizatorului i-i va prezenta acestuia un text scurt propriu. Afiai fiecrui client informaii despre browser-ul su. Folosii variabila globala $_SESSION sau obiectul Session pentru a contoriza numrul de accese ale unui utilizator. La al treilea acces, utilizatorul va fi redirectat ctre o alt pagin. La fiecare acces n cadrul aceleiai sesiuni utilizatorul va primi un mesaj de ntmpinare cu numele, prenumele su i cu textul propriu. Creai posibilitatea ca utilizatorul s modifice textul propriu. 3. Creai o aplicaie PHP care acceseaz o baz de date conform urmtoarelor specificaii: Creai o baz de date pentru gestionarea cursurilor opionale. Baza de date va conine cel puin dou tabele cu informaii despre cursuri, profesori i studenii nscrii. Interfaa aplicaiei va conine mai multe frame-uri . ntr-unul din acesta va fi disponibil permament urmtorul menu: - CURSURI - STUDENI - PROFESORI - EXAMINARE Opiunile CURSURI, STUDENI i PROFESORI au operaii de afiare, adugare, modificare i tergere informaii din tabelele corespunztoare. Opiunea de EXAMINARE are operaii diferite, n funcie de cine o acceseaz. Dac este accesat de un profesor atunci acesta poate pune sau modifica notele studenilor nscrii la cursul su. Dac este accesat de un student atunci acesta i poate vedea doar situaia proprie la cursurile opionale.

Tehnologii Web
Bibliografie 1. Conf.dr.Cristina Mndruta, Programare in Web, Note de curs. 2. Cristina Mndru, Arhitecturi, Tehnologii si Programare in Web, Matrix Rom Bucuresti 2005 3. PHP/MySQL Programming for the Absolute Beginner, Andrew Harris, Premier Press 2003 4. PHP MySQL Tutorial, http://www.php-mysql-tutorial.com/

Вам также может понравиться