You are on page 1of 82

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΑ

τμήμα Ψηφιακών Συστημάτων

ΔΙΑΔΙΚΤΥΑΚΟ ΣΥΣΤΗΜΑ
ΔΙΑΧΕΙΡΙΣΗΣ ΒΙΒΛΙΟΘΗΚΗΣ

Φοιτητής : Ορέστης Πασχαλινάς – Ε/01123


Επιβλέπων καθηγητής : Συμεών Ρετάλης

1
Περίληψη

Η πτυχιακή εργασία περιλαμβάνει ένα διαδικτυακό σύστημα διαχείρισης


μιας βιβλιοθήκης. Σύστημα που απευθύνεται τόσο σε απλούς χρήστες που
αναζητούν ένα βιβλίο προς εξυπηρέτηση τους προτού την αναζήτηση στο
βιβλιοστάσιο όσο και στο προσωπικό της βιβλιοθήκης για τη διαχείριση της
κυκλοφορίας και του καταλόγου.

Λέξεις κλειδιά : διαδικτυακό σύστημα διαχείρισης, ηλεκτρονική βιβλιοθήκη


, PHP , βιβλιοθηκονομία

2
Περιεχόμενα

Περίληψη.......................................................................................................2
Περιεχόμενα..................................................................................................3
1.Εισαγωγή στα συστήματα διαχείρισης
βιβλιοθήκης .................................................................................................4
2.Υλοποίηση
2.1 Λογισμικό..................................................................................................6

2.2 Λειτουργίες

2.2.1 Counter επισκέψεων.............................................................................7


2.2.2 Εμφάνιση τυχαίου εισαγωγικού παραθέματος.....................................8
2.2.3 Αποστολή μηνύματος μέσω contact form ..........................................10
2.2.4 Περιήγηση μέσω GET method.............................................................11
2.2.5 Εγγραφή χρήστη και ενεργοποίηση λογαριασμού
μέσω email και activation key.............................................................12
2.2.6 Javascript validation για την εγγραφή χρήστη....................................17
2.2.7 Εντοπισμός βιβλίου σε τρισδιάστατη απεικόνιση βιβλιοθήκης.........20
2.2.8 Σύνδεση χρήστη ή προσωπικού..........................................................22
2.2.9 Καταχώριση δανεισμού βιβλίου.........................................................35
2.2.10 Καταχώριση επιστροφής βιβλίου.....................................................43
2.2.11 Ανακοινώσεις (εμφάνιση και προσθήκη).........................................45
2.2.12 Προσθήκη ανακοίνωσης ..................................................................49
2.2.13 Προσθήκη παραθέματος..................................................................53
2.2.14 Εμφάνιση δανεισμένων βιβλίων .....................................................54
2.2.15 Δημιουργία απλού και λειτουργικού φόρουμ..................................56
2.2.16 Προβολή προσωπικού προφίλ .........................................................68

2.3 Βάση δεδομένων και μεταδιδόμενα καταλόγου βιβλίων......................70

3. Βιβλιογραφία............................................................................................82

3
1.Εισαγωγή

Οι βιβλιοθήκες, διαδραματίζουν πολύ σημαντικό ρόλο στη διαχείριση και


παροχή της πληροφορίας (έντυπης και ψηφιακής) και έχουν σημαίνουσα
θέση στην κοινωνία. Από την άλλη πλευρά, οι ακαδημαϊκές βιβλιοθήκες,
λόγω της φύσης τους, αποτελούν το κέντρο της γνώσης για την ακαδημαϊκή
και ερευνητική κοινότητα. Εξυπηρετούν πολλούς χρήστες, φοιτητές,
καθηγητές, ακαδημαϊκούς, ερευνητές με ποικίλες ανάγκες, γεγονός που τις
ωθεί στην υιοθέτηση πρωτοποριακών λύσεων, όπως για παράδειγμα, να
δημιουργούν ιδρυματικά αποθετήρια για την παροχή ψηφιακού
περιεχομένου και γενικότερα να δίνουν ιδιαίτερη βαρύτητα στην ανάπτυξη
και στη δημιουργία ψηφιακών βιβλιοθηκών. Οι πρακτικές τους, μπορούν
εύκολα να διαχυθούν σε άλλους τύπους βιβλιοθηκών, όπως δημόσιες,
ειδικές, κλπ.

Ένα ενσωματωμένο σύστημα βιβλιοθήκης (Integrated Library System) , η


αλλιώς ένα σύστημα διαχείρισης βιβλιοθήκης (Library Management system)
είναι ένα σύστημα για το σχεδιασμό μιας βιβλιοθήκης πρόσφορο για χρήση
για την καταγραφή αντικειμένων που έχουν δανειστεί , τους δανεισμούς
που έχουν γίνει και τους χρήστες που έχουν δανειστεί.

Ένα ενσωματωμένο σύστημα βιβλιοθήκης συνήθως περιλαμβάνει μια


σχεσιακή βάση δεδομένων , λογισμικό για την αλληλεπίδραση με τη βάση
και 2 γραφικά περιβάλλοντα (GUI) ένα για τους χρήστες ένα για το
προσωπικό. Τα περισσότερα ενσωματωμένα συστήματα βιβλιοθήκης
χωρίζουν τις λειτουργίες του λογισμικού σε διακριτά προγράμματα
αποκαλούμενα Modules , καθένα από τα οποία ενσωματώνεται με ενιαία
διεπιφάνεια.

Παραδείγματα modules μπορεί να περιλαμβάνουν :

Αποκτήματα (παραγγελία, παραλαβή , τιμολόγηση)


Δημιουργία καταλόγου (ταξινόμηση και κατηγοριοποίηση υλικού)
Κυκλοφορία υλικού
Καταχώριση σειριακών αριθμών (εντοπισμός υλικού περιοδικών και
εφημερίδων)
OPAC (online public access catalog) Διαδικτυακός κατάλογος δημόσιας
χρήσης

4
Κάθε χρήστης και αντικείμενο έχει ένα μοναδικό ID στη βάση δεδομένων
που επιτρέπει στο ενσωματωμένο σύστημα να καταγράφει την
δραστηριότητα του.
Οι μεγαλύτερες βιβλιοθήκες χρησιμοποιούν ενσωματωμένα συστήματα για
να παραγγείλουν και να αποκτήσουν, λάβουν και τιμολογήσουν,
καταχωρίσουν, διακινήσουν , εντοπίσουν και αποθηκεύσουν υλικό.
Οι βιβλιοθηκονόμοι συχνά αποκαλούσαν τα ενσωματωμένα συστήματα ως
συστήματα αυτοματοποίησης βιβλιοθηκών τη δεκαετία του 70 και στις
αρχές του 80. Πριν τη εξάπλωση των υπολογιστών οι βιβλιοθήκες συνήθως
χρησιμοποιούσαν ένα κατάλογο καρτών για να καταχωρίσουν τα υπάρχοντα
τους. Οι υπολογιστές επέφεραν την αλλαγή μέσω της αυτοματοποίησης του
καταλόγου καρτών , εξού και ο όρος αυτόματο σύστημα. Η
αυτοματοποίηση του κατάλογου εκμηδενίζει την εργασία που χρειάζεται
για το ξεδιάλυμα του κατάλογου καρτών και τη γενικότερη χρονοβόρα
διαχείριση του. Άλλες εργασίες που έχουν αυτοματοποιηθεί είναι ο
δανεισμός και η επιστροφή βιβλίων (check in -out) , η παραγωγή
στατιστικών και αναφορών , αποκτήσεις και συνδρομές. ταξινόμηση
άρθρων περιοδικών και η παραπομπή τους όπως και η διεκπεραίωση
δανεισμών μεταξύ βιβλιοθηκών.

Με το τέλος της δεκαετίας του 80 και την εμφάνιση συστημάτων 'windows'


και πολλαπλών δυνατοτήτων εκτέλεσης έχουν καταστήσει την ενσωμάτωση
επιχειρησιακών λειτουργιών. Αντί της χρήσης πολλών μεμονωμένων
εφαρμογών πλέον το προσωπικό της βιβλιοθήκης μπορεί να
χρησιμοποιήσει μόνο μια εφαρμογή με ενσωματωμένα πολλαπλά modules.

Καθώς το διαδίκτυο αναπτύχθηκε , τα ενσωματωμένα συστήματα


προσέφεραν περισσότερη λειτουργικότητα σχετιζόμενη με τα δίκτυα
υπολογιστών. Από το 2009 πολλά ενσωματωμένα συστήματα βιβλιοθήκης
προσέφεραν διαδικτυακούς κόμβους όπου οι χρήστες βιβλιοθήκες
μπορούσαν να συνδεθούν στο λογαριασμό τους , να ανανεώσουν τα βιβλία
τους και να έχουν πρόσβαση στις διαδικτυακές βάσεις δεδομένων.

5
2.Υλοποίηση

Το αποτέλεσμα της υλοποίησης του συστήματος είναι αναρτημένο


στον κόμβο : http://www.opweb.gr/

2.1 Λογισμικό

Το λογισμικό που χρησιμοποιήθηκε για την υλοποίηση του διαδικτυακού


συστήματος ήταν το εξής :

– Notepad++ 5.8.2: Για τη σύνταξη του συντριπτικού κομματιού του


κώδικα.
– Mozilla Firefox 3.6.12 : Φυλλομετρητής (browser) Για τον έλεγχο και
εμφάνιση των αποτελεσμάτων του κώδικα. Χρησιμοποιήθηκαν και τα εξής
πρόσθετα (add-ons) του εν λόγω φυλλομετρητή:
-Web developer: για την διευκόλυνση στον έλεγχο και την εμφάνιση
στοιχείων και μέρων της ιστοσελίδας
-FireFTP: για το ανέβασμα(upload) και κατέβασμα (download) των
αρχείων στον server.
– Open Office 3.2: για την σύνταξη κειμένων και της τεκμηρίωσης της
πτυχιακής εργασίας
– WAMP server 2: πακέτο για τοπικό server που περιλαμβάνει
APACHE,MySQL,PHP. Στον online server χρησιμοποιήθηκαν MySQL client
version: 4.1.22 , phpMyAdmin 3.2.4 , PHP 5.2.13 , APACHE 2.1
– Adobe Photoshop CS4: για τη δημιουργία γραφικών και επιλογής
κατάλληλων χρωμάτων στην ιστοσελίδα.
– Artisteer 2: για τη δημιουργία του CSS.
– Google SketchUp 8: για τη δημιουργία της τρισδιάστατης απεικόνισης
μιας βιβλιοθήκης και του animation της περιήγησης για τον εντοπισμό
βιβλίου.
– 4Media AVI to SWF Conventer: για την μετατροπή των παραγόμενων .avi
από το GoogleSketchUP σε μορφή .swf
– Free flash player: για τη δοκιμή και εμφάνιση των flash προτού την
ανάρτηση τους.

6
2.2 Λειτουργίες

Γενικές λειτουργίες

Counter επισκέψεων

1ο βήμα : Δημιουργία Πίνακα στην SQL βάση

Προσθέτουμε ένα πίνακα μέσω του PHPmyadmin βάζοντας ένα όνομα της
αρεσκείας μας και 1 μόνο field. Κατόπιν βαπτίζουμε το field με όνομα της
αρεσκείας μας επιλέγουμε τύπο INT και βάζουμε ένα λογικό μήκος π.χ.4-5-6
αναλόγως τον αριθμό επισκέψεων που θεωρούμε πως θα έχουμε στην
ιστοσελίδα μας.

2ο βήμα : Προσθήκη κώδικα PHP στο index.php ή άλλης σελίδας που


θέλουμε να μετρήσουμε τις επισκέψεις της. Βρίσκουμε το σημείο που
θέλουμε να εμφανίζεται το counter μας και πληκτρολογούμε τα εξής :

<?php
include ("config.php");
$con=mysql_connect
($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");
mysql_select_db('opwebgr_elibrary');

γραμμές για τη σύνδεση με τη βάση μέσω κλήσης ξένου php (config.php)


που
περιλαμβάνει τα όνομα του ξενιστή , χρήστη και του κωδικού εδώ το όνομα
που χρησιμοποιήθηκε για τον πίνακα είναι counter για το πεδίο num_views

$query = "SELECT * FROM `counter` " ;


$result = mysql_query ($query) or die (mysql_error());

7
$views = mysql_result ($result, 0 , `counter`) ;
echo "Αυτή η σελίδα έχει επισκεφτεί " . $views." φορές" ;
$views++ ;

διαλέγουμε όλα τα fields/στηλες ( = * , σημ. Στην περίπτωση μας έχουμε


μόνο ένα) από τον πίνακα που δημιουργήσαμε ( στην περίπτωση μας
counter)
κατόπιν εισάγουμε σε μια μεταβλητή μέσω της εντολής mysql_result που
συντάσσεται με το δεδομένο (=$result) τον αριθμό της στήλης ξεκινώντας
από το 0 και το όνομα του πίνακα. Μετά μέσω της εντολής echo
εμφανίζουμε το
πεδίο εν μέσω του μηνύματος text της αρεσκείας μας. Κατόπιν
προσθέτουμε μονάδα στον αριθμό του πεδίου (τα ++ δεξιά μιας
μεταβλητής αυτό συνεπάγονται)

$query = "UPDATE `counter` SET `num_views` = $views" ;


mysql_query ($query, $con) or die (mysql_error()) ;

?>

Τέλος ανανεώνουμε το πεδίο της βάσης SQL με την κατάλληλη εντολή


(UPDATE) ώστε να έχει τη νέα αξία (προσαυξημένη κατά 1) . Αυτό
συνεπάγεται πως κάθε φορά αριθμός που εμφανίζεται online ως αριθμός
επισκέψεων που έχει παραχεθεί από τον κωδικά PHP υπολείπεται κατά μια
μονάδα της ταυτόχρονης τιμής στο πεδίο της βάσης της SQL.

Εμφάνιση τυχαίου εισαγωγικού παραθέματος

1ο βήμα : Δημιουργία Πίνακα στην SQL βάση

Προσθέτουμε ένα πίνακα μέσω του PHPmyadmin βάζοντας ένα όνομα της
αρεσκείας μας και 3 μόνο field. Κατόπιν βαπτίζουμε τα field μας με
ενδεικτικά ονόματα id όπου δίνουμε τύπο int και λαμβάνει το χαρακτήρα
primary key κατόπιν ένα text όπου θα φιλοξενεί το κείμενο του
παραθέματος μας και ένα τρίτο who ή author ή όπως αλλιώς θέλουμε για
να φιλοξενεί το όνομα του συγγραφέα ή της προσωπικότητας στον οποίο
ανήκει το παράθεμα. Για τα δυο τελευταία fields διαλέγουμε ανάλογο τύπο
είτε varchar είτε text μας κάνει και κατάλληλο μήκος. Εν προκειμένω έχουν
χρησιμοποιηθεί varchar(800) και varchar(50) το id έχει τύπο int και μήκος 2

8
εφόσον δεν επιθυμούμε να εισάγουμε 100 και πάνω παραθέματα.

2ο βήμα : Προσθήκη κώδικα

Αφού συνδεθούμε με τη βάση βλ.παραπάνω προσθέτουμε τα εξής στο php


που θέλουμε να εμφανίζονται τα παραθέματα, εν προκειμένω στο
index.php.

$query1="SELECT COUNT(id) FROM quotes;" ;


$result1=mysql_query($query1);
$row1=mysql_fetch_array($result1) ;
$numberofquotes= $row1['COUNT(id)'] ;

Εισάγουμε τον αριθμό των γραμμών της στήλης id από τον πίνακα quotes
σε μεταβλητή.

$quotenumber= mt_rand(1, $numberofquotes) ;

Με την παραπάνω εντολής επιλέγεται ένας τυχαίος αριθμός από 1 μέχρι


τον αριθμό των στηλών id που πήραμε προηγουμένω.

$queryfortextquote="SELECT text FROM quotes WHERE id =$quotenumber" ;


$queryforwriterquote="SELECT who FROM quotes WHERE id
=$quotenumber" ;
$result2=mysql_query($queryfortextquote);
$quoterow=mysql_fetch_array($result2) ;
$result3=mysql_query($queryforwriterquote);
$quoterow2=mysql_fetch_array($result3) ;

Επιλέγεται η γραμμή και τα ανάλογα πεδία που θέλουμε (text και who)
βάσει του τυχαίου αριθμού που επιλέχθηκε.

Εντός php delimiters (= <?php …. ?>) προσθέτουμε τα εξής :


<blockquote>
<p>
&#8220;$quoterow[text]&#8221;
<br />

9
- $quoterow2[who]
</p>
</blockquote>

Το αποτέλεσμα :

Αποστολή μηνύματος μέσω contact form


(Βίντεο :) http://www.youtube.com/watch?v=sr7Aq8qj_oo

1ο βήμα: Δημιουργούμε μια απλή HTML form

<form method='post' action='index.php?view=contact'>


email : <input name='email' type='text' /><br />
Θέμα : <input name='subject' type='text' /><br />
Κείμενο:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' value='Αποστολή' />
</form>

2ο βήμα : Δημιουργία PHP κώδικα για την αποστολή του μηνύματος

if (isset($_POST['email']))

$body = "A user has left the following information \n \n


Text: " . stripslashes($_POST['message']) ;

$sender= $_POST['email'] ;
$message = $_POST['message'] ;

mail ('orepas@yahoo.gr', 'message from opweb.gr contact us form',$body,

10
'From:'.$sender.'<'.$sender.'>'."\nContent-Type: text; charset=utf-8\n") ;
echo "Το κείμενο σας εστάλη. Θα επικοινωνήσουμε όσο πιο γρήγορα
μπορούμε.<hr/>";
}

Περιήγηση μέσω GET method

Η περιήγηση μέσω GET γίνεται ως εξής :


-Διαλέγουμε τα κουμπιά/κείμενο ή ότι άλλο που θέλουμε να είναι
σύνδεσμοι για άλλες σελίδες. Εμπερικλείουμε το εν λόγω αντικείμενο με τη
γνωστή σύνταξη
<a href="index.php?view=news"> αντικείμενο </a> ή εναλλακτικά σε μια
html form γράφουμε στο πεδίο action= το url της αρεσκείας. Η παραπομπή
μέσω GET συντάσσεται με την παράθεση της υφιστάμενης σελίδα που είναι
χρήστης μετά ένα αγγλικό ερωτηματικό και κατόπιν δυο ονόματα της
αρεσκείας μας με το = ανάμεσα τους όπου το πρώτο συμβολίζει την
μεγαλύτερη υποκατηγορία που θα έχει διάφορες τιμές αναλόγως τη σελίδα
που θέλουμε να εμφανιστεί. Έτσι θα μπορούμε να έχουμε index.php?
view=news , index.php?view=faq, index.php?view=contactform κοκ.

Στο ίδιο PHP γράφουμε τον κώδικα για κάθε μια από τις σελίδες μας
(news,faq,contactform) στο σημείο που θέλουμε να αλλάζει το περιεχόμενο
ώστε να διατηρείται ο σκελετός αλλά να αλλάζει μόνο αυτό που
επιθυμούμε.
Αυτό επιτυγχάνεται με την εξής σύνταξη κώδικα :

<?php
switch ($_GET['view'])
{
default:
κώδικας
break;

case news :
κώδικας
break;

11
case faq :
κώδικας
break ;

Ανάμεσα σε κάθε ένα break και case (το πρώτο default είναι ο κώδικας που
θα εκτελείται ανεξαρτήτως την τιμή που παίρνει το 'view') γράφουμε τον
κώδικα της αρεσκείας μας.

Εγγραφή χρήστη και ενεργοποίηση λογαριασμού μέσω email και


activation key

(Βίντεο :) http://www.youtube.com/watch?v=VvJLmrdcWno

1ο Βήμα : Δημιουργία ενός πίνακα SQL. Στην περίπτωση μας η δομή του
είναι η εξής :

2ο βήμα : Δημιουργία HTML φόρμας

<form onsubmit=\"return formValidator()\" action=\"index.php?


view=register\" method='POST' accept-charset='UTF-8'>
<table align=center border='1'>

12
<tr><td>Όνομα χρήστη(6-20χαρακτήρες):</td><td><input type='text'
name=\"username\"/></td></tr>

<tr><td>Κωδικός(6-20χαρακτήρες):</td><td> <input type='password'


name='password' /></td></tr>

<tr><td>Πραγματικό ονοματεπώνυμο: </td><td><input type='text'


name='realname' /></td></tr>

<tr><td>Κλειδί: </td><td><input type='text' name='key'/></td></tr>

<tr><td>Μητρώο (μόνο τον αριθμό)(E/... :</td><td> <input type='text'


name='mhtroo' value='' /></td></tr>

<tr><td>Τηλεφωνο:</td> <td><input type='text' name='phone'/></td></tr>

<tr><td>Τμημα:</td> <td><select name='tmhma'>


<option>Επιλέξτε</option>
<option value=\"ds\">Ψηφιακών Συστημάτων</option>
<option value=\"cs\">Πληροφορικής</option>
<option value=\"marine\">Ναυτιλιακό</option>
<option value=\"des\">ΔΕΣ</option>
<option value=\"ode\">ΟΔΕ</option>
<option value=\"stats\">Στατιστικό</option>
<option value=\"xrhma\">Χρηματοοικονομικό</option>
<option value=\"industrial\">Βιομηχανικό</option>
<option value=\"economics\">Οικονομικό</option>
</select></td></tr>

<tr><td>Email:</td> <td><input type='text' name='email' /></td></tr>

<tr><td></td><td> <input type='reset' /><input type='submit'


value='Εγγραφή' /></td><input type=\"hidden\" name=\"form_submitted\"
value=\"1\"/></tr>

</table>
</form>

13
Κώδικας που παράγει το εξής ως αποτέλεσμα :

3ο βήμα : Δημιουργία PHP κώδικα

if ($_POST['form_submitted'] == '1')
{
include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die
("Cannot connect to database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Πάγιες γραμμές κώδικα για τη σύνδεση με τη βάση.

$activationKey= mt_rand() . mt_rand() . mt_rand() . mt_rand() . mt_rand();


$realname= $_POST['realname'];
$username = $_POST['username'];
$password = $_POST['password'];
$mhtroo = $_POST['mhtroo'];
$tmhma=$_POST['tmhma'];
$phone=$_POST['phone'];
$email = $_POST['email'];

mysql_query('set names utf8;');

Καταχώριση όλων των πεδίων που έχουν δοθεί μέσω της φόρμας συν

14
τη καταχώριση ενός τυχαίου αριθμού ως activationkey που θα σταλεί μέσω
email.

$sql= "INSERT INTO `users` (`user_id` ,`username` ,`password`, `realname`,


`email`, `idiothta`, `tmhma`, `mhtroo`, `phone`,`activationkey`, `status`)
VALUES (NULL , '$username', '$password', '$realname', '$email','user',
'$tmhma', '$mhtroo','$phone','$activationKey', 'verify');";

Εισαγωγή στοιχείων στη βάση μέσω της σύνταξη INSERT INTO όνομα πίνακα
(πεδία πίνακα) VALUES ( τιμές/μεταβλητές που θα εισαχθούν στα πεδία).

if (!mysql_query($sql))
{ die('Σφάλμα: ' . mysql_error());}

mysql_query("set names utf8;");


$to = $_POST['email'];
$subject = "Εγγραφή στην e-Βιβλιοθήκη μας";
$message = "Για να ολοκληρώσετε την εγγραφή σας στη βιβλιοθήκη μας
!\r\rκάντε κλικ στο εξής :\rhttp://www.opweb.gr/index.php?
view=verify&key=$activationKey\r\r ";
$headers = 'From:orepas@otenet.gr' . "\r\n" .
'Reply-To:orepas@otenet.gr' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);

Αποστολή μηνύματος στο email που δόθηκε στη φόρμα μαζί με το


παραγόμενο activationkey. Για να εγγραφεί ο χρήστης καλείται να κλικάρει
στο url.

Το κλικ στέλνει για εκτέλεση τον εξής κώδικα :

case verify:

switch ($_GET['key'])
{

default:

15
$queryString = $_GET[key];

Καταχώριση του τυχαίου κλειδιού

include ("config.php");
$con=mysql_connect
($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Σύνδεση με τη βάση.

$query = "SELECT * FROM users";


$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result))
{
mysql_query("set names utf8;");

Επιλογή όλων των πεδίων/στήλων από τον πίνακα users.

if ($queryString == $row["activationkey"])
{
echo "Συγχαρητήρια! $row[username] η εγγραφή ολοκληρώθηκε . Τώρα
μπορείτε να πάτε να συνδεθείτε." ;
mysql_query("set names utf8;");
$sql="UPDATE users SET activationkey = '', status='activated' WHERE
(user_id = $row[user_id])";

Αν το τυχαίο κλειδί που έχει παραχθεί από τον προηγούμενο κώδικα βρεθεί
στην βάση SQL τότε προβάλλεται ένα μήνυμα επιτυχίας εγγραφής και
μετέπειτα αλλάζει το πεδίο status με την τιμή activated.

if (!mysql_query($sql))
{die('Error: ' . mysql_error());}

}
}
break;

16
Javascript validation για την εγγραφή χρήστη

1ο βήμα : Προσθέτουμε την εντολή στη φόρμα <form onsubmit='return


formValidator()' ...που θέλουμε να ελέγξουμε. Όπου formValidator() το
όνομα της λειτουργίας javascript.

2ο βήμα : Προσθέτουμε στην αρχή του PHP μετά το <head> τον javascript
κώδικα.

<script type='text/javascript'>

function formValidator(){

var username = document.getElementById('username');


var password = document.getElementById('password');
var realname = document.getElementById('realname');
var key = document.getElementById('key');
var mhtroo = document.getElementById('mhtroo');
var phone = document.getElementById('phone');
var tmhma = document.getElementById('tmhma');
var email = document.getElementById('email');

if(lengthRestriction(username, 6, 20)) {
if(lengthRestriction(password, 6, 20)) {
if(isAlphabet(realname, "Παρακαλώ πληκτρολογήστε ένα έγκυρο
ονοματεπώνυμο μόνο με γράμματα")){
if(isAlphanumeric(key, "Το κλειδί που σας έχει δωθεί από τη
γραμματεία περιέχει μόνο αριθμούς και γράμματα.Παρακαλώ εισάγετε το
ξανά.")){
if(isNumeric(mhtroo, "Παρακαλώ πληκτρολογήστε ένα
έγκυρο μητρώο")){
if(isNumeric(phone, "Παρακαλώ πληκτρολογήστε ένα
έγκυρο τηλέφωνο")){
if(madeSelection(tmhma, "Παρακαλώ επιλέξτε
τμήμα")){

17
if(emailValidator(email, "Παρακαλώ
πληκτρολογήστε ένα έγκυρο email")) {
return true;
}
}
}
}
}
}
}
}

return false;

function notEmpty(elem, helperMsg){


if(elem.value.length == 0){
alert(helperMsg);
elem.focus();
return false;
}
return true;
}

function isNumeric(elem, helperMsg){


var numericExpression = /^[0-9]+$/;
if(elem.value.match(numericExpression)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}

function isAlphabet(elem, helperMsg){

18
var alphaExp = /^[a-zA-Z]|
[ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏαβγδεζηθικλμνξοπρστυφχψωάέ
ήίόύώ]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}

function isAlphanumeric(elem, helperMsg){


var alphaExp = /^[0-9a-zA-Z]|
[ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΆΈΉΊΌΎΏαβγδεζηθικλμνξοπρστυφχψωάέ
ήίόύώ]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}

function madeSelection(elem, helperMsg){


if(elem.value == "Επιλέξτε"){
alert(helperMsg);
elem.focus();
return false;
}else{
return true;
}
}

function lengthRestriction(elem, min, max){


var uInput = elem.value;
if(uInput.length >= min && uInput.length <= max){

19
return true;
}else{
alert("Παρακαλώ εισάγετε μεταξύ " +min+ " και " +max+ "
χαρακτήρες");
elem.focus();
return false;
}
}

function emailValidator(elem, helperMsg){


var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
if(elem.value.match(emailExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
</script>

Εντοπισμός βιβλίου σε τρισδιάστατη απεικόνιση βιβλιοστασίου


(Βίντεο :) http://www.youtube.com/watch?v=HuC7v3H6JZc

Περιλαμβάνει τα εξής : Ο χρήστης αναζητεί το βιβλίο του και με την


εμφάνιση του υπάρχει ένα κουμπί για να επιλέξει αν θέλει να δει που θα
εντοπίσει το βιβλίο στο βιβλιοστάσιο.

20
Τα στάδια υλοποίησης του είναι :

1ο βήμα : Δημιουργια animations μέσω του GoogleSketchUp. Πιο


συγκεκριμένα :
α)Δημιουργία τρισδιάστατης απεικόνισης μιας βιβλιοθήκης
β)Χωρισμός των διαδρομών και ράφιων βιβλιοθήκης βάσει του
συστήματος DEWEY
γ) Δημιουργία δεκάδων animations μέσω σκηνών (scenes) και εξαγωγή
τους
δ) Μετατροπή των αρχείων σε .swf

2ο βήμα :

Δημιουργία κώδικα javascript για την ορθή ενσωμάτωση flash σε PHP.


Ο κώδικας είναι open source και υπάρχει εδώ :
http://code.google.com/p/swfobject/

3ο βήμα :

Δημιουργία κώδικα HTML και παραμετροποίηση του στο PHP που θέλουμε
να καλεί τα flash.

21
Προσθέτουμε κάτω από τα tags title το γνώριμο tag για την κλήση του
javascript
<script type="text/javascript" src="swfobject.js"></script>

Μετά προσθέτουμε το παρακάτω κομμάτι εκεί που θέλουμε να εμφανίζεται


το FLASH. Οι παράμετροι για το μέγεθος , την επανάληψη (Loop) , αυτόματη
εκκίνηση (play) , ποιότητα κ.α. μπορεί να αλλάξουν ανάλογα με τις
προτιμήσεις σας. (περισσότερα εδώ :
http://kb2.adobe.com/cps/127/tn_12701.html )

<object width='400' height='300' >


<param name='movie' value='/flash/0_70.swf'>
<embed src='/flash/0_70.swf' width='400' height='300' loop='false'
play='true' quality='best' >
</embed>
</object>

Σύνδεση χρήστη ή προσωπικού


(Βίντεο :) http://www.youtube.com/watch?v=L-BB8cZiP4A

1ο βήμα : Δημιουργία βάσης SQL

Βλέπε παραπάνω στο κομμάτι για την εγγραφή

2ο βήμα : Δημιουργία HTML form

<form method="post" action="index.php">

22
<tr> Όνομα χρήστη :</tr><input type="text" value="" name="username" />
<tr>Κωδικός:</tr><input type="password" value="" name="password1" />
<input type="radio" name="idiothta" value="user"checked> Επισκέπτης
<br><input type="radio" name="idiothta" value="staff" > Προσωπικό
<input type="submit" name="submit" value="Σύνδεση" />
<br> <tr>Δεν είστε μέλος ;</tr>
<a href='index.php?view=register'> Εγγραφή</a><br> </tr>
</form>

Αποτέλεσμα με τη χρήση κατάλληλου CSS :

3o Βήμα : Δημιουργία PHP κώδικα

<?php
include ("config.php");
$con=mysql_connect($dbhost,$dbuser,$dbpass)or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');

Σύνδεση με βάση.

$post_submit = $_POST['submit'];
$post_username = $_POST['username'];

23
$post_password = $_POST['password1'];
$post_idiothta = $_POST['idiothta'];

Καταχώριση σε μεταβλητές τα στοιχεία που έχουν εισαχθεί στη φόρμα


HTML

if ($post_submit)
{
include ("config.php");
$con=mysql_connect($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

$status = ("SELECT status FROM users WHERE username = '$post_username'


");
$result = mysql_query($status);
mysql_query("set names utf8;");
$row = mysql_fetch_array($result) ;
mysql_query("set names utf8;");

Επιλογή του πεδίου status από τον πίνακα users από τη γραμμή όπου το
πεδίο username ισούται με το στοιχείο που εισήχθη στην HTML φόρμα.

if ($post_username&&$post_password)
{
$login = ("SELECT * FROM `users` WHERE username= '$post_username' AND
password='$post_password' AND idiothta= '$post_idiothta' " );
$rowcount = mysql_num_rows(mysql_query($login));

Εφόσον εισαχθεί το πεδίο username και το password τότε επιλέγονται όλα


τα πεδία και γραμμές από τον πίνακα users όπου το πεδίο idiothta και
password και username συμφωνούν με αυτά που ετέθησαν στη φόρμα.
Κατόπιν μετριούνται οι γραμμές που έχουν επιλεχθεί.

if ($row['status']=='activated')
{
if ($rowcount==1)
{

24
$_SESSION ['username']=$post_username;
$_SESSION ['idiothta']=$post_idiothta;

Εφόσον το πεδίο status έχει την τιμή activated και έχει επιλεχθεί μια μόνο
γραμμή τότε γίνεται καταχώριση σε μεταβλητές session το όνομα και η
ιδιότητα,

if ($_SESSION ['idiothta']=='user')
{
echo $_SESSION['username'].",<br>συνδεθήκατε επιτυχώς!<br><a
href='user.php'>είσοδος στη σελίδα των μελών.</a>" ;
}

Αν η ιδιότητα είναι user τότε εμφανίζεται το ανάλογο μήνυμα και η


ανάλογη παραπομπή.

if ($_SESSION ['idiothta']=='staff')
{
echo $_SESSION['username'].",<br>συνδεθήκατε επιτυχώς! <br><a
href='admin.php'>είσοδος στη σελίδα του προσωπικού.</a>" ;
}

Αν η ιδιότητα είναι staff τότε εμφανίζεται το ανάλογο μήνυμα και η


ανάλογη παραπομπή.

}
else
{
echo ("<hr><font face='verdana' color='blue'><center>Απαιτείται σωστός
ενεργοποιημένος λογαρισμός με όνομα χρήστη, κωδικό και
ιδιότητα</center></font>");
}
}
else
{
echo ("<hr /><font face='verdana' color='blue'><center>! Απαιτείται
σωστός ενεργοποιημένος λογαρισμός με όνομα χρήστη, κωδικό και
ιδιότητα</center></font>");
}

25
}
else
{echo ("<hr /><font face='verdana' color='green'><center>Απαιτείται
σωστός ενεργοποιημένος λογαρισμός με όνομα χρήστη, κωδικό και
ιδιότητα!</center></font>");}
}

Αν δεν πληρούνται οι όροι σύνδεσης εμφανίζεται μήνυμα λάθους.

?>

1ο βήμα : Δημιουργία της HTML φόρμας.


Η αρχική σελίδα του καταλόγου και τα αποτελέσματα της αναζήτησης έχουν
επιλεχθεί στην παρούσα εργασία να υλοποιηθούν σε 2 ξεχωριστά PHP
(index.php και search.php) αρχεία υπό το φάκελο catalogue.

<form action='search.php' method='GET'>


<center><table border='1'><br><br>
<tr><td>Κριτήριο</td><td>Λέξι-κλειδί</td></tr>
<tr> <td><select name='category'>
<option value='all'>Όλα</option>
<option value='author'>Συγγραφέας</option>
<option value='title'>Τίτλος</option>
</td>
<td>
<input type='text' size='40' name='search'>
<input type='submit' name='submit' value='Αναζήτηση'></td></tr>
<tr><td>Κατηγορία</td></tr>
<tr><td>
<select name='field'>
<option value='all'>όλες</option>
<option value='computeretal'>Πληροφορική και γενικές εργασίες</option>
<option value='philosophy'>Φιλοσοφία και ψυχολογία</option>
<option value='religion'>Θρησκεία</option>
<option value='social'>Κοινωνικές επιστήμες</option>
<option value='language'>Γλώσσες</option>
<option value='science'>Επιστήμη</option>

26
<option value='technology'>Τεχνολογία εφαρμοσμένη επιστήμη</option>
<option value='art'>Τέχνες και αναψυχή</option>
<option value='literature'>Λογοτεχνία</option>
<option value='history'>Ιστορία και γεωγραφία και
βιογραφία</option></td>
</tr>
</table></center></form>

Το παραγόμενο αποτέλεσμα :

Οι κατηγορίες είναι οι 10 βασικές κατηγορίες του διεθνούς συστήματος


ταξινόμησης DEWEY

2ο Βήμα : Δημιουργία πίνακα στη βάση SQL

27
Στην παρούσα εργασία έχουν χρησιμοποιηθεί τα εξής πεδία και τύποι και
μήκη :

3ο Βήμα : Δημιουργία PHP κώδικα

$search = $_GET['search'] ;
$field = $_GET['field'] ;
$category = $_GET['category'];

Καταχώριση των πεδίων που έχουν εισαχθεί κατά την αναζήτηση.

if (mb_strlen($search, 'UTF-8') <=3)


{
echo "<a href='http://www.opweb.gr/catalogue/index.php'>Νέα
αναζήτηση</a><br>Ο όρος αναζήτησης παρά ήταν μικρός." ;
}
Η εντολή mb_strlen επιστρέφει το μήκος μιας μεταβλητής και είναι
συμβατή με το ελληνικό αλφάβητο εφόσον συνταχθεί με το collation UTF-
8 . Το παραπάνω κομμάτι δηλαδή ελέγχει αν ο όρος αναζήτησης είναι ίσος ή
μικρότερος από 3 χαρακτήρες αν ναι εμφανίζει το ανάλογο μήνυμα

28
if ($field =='all' && $category =='all' && mb_strlen($search, 'UTF-8') >3 )

Αυτή είναι μια από τις έξι συνθήκες αναλόγως την επιλογή από τα drop-
down menus. Εδώ εκτελείται ο παρακάτω κώδικας αν ισχύουν πως έχει
διαλέξει όλα στο πρώτο μενου (ούτε αποκλειστικά συγγραφέας ή τίτλος) και
αν έχει διαλέξει αναζήτηση σε όλες τις κατηγορές συν αν ο ορος
αναζήτησης είναι πάνω από 3 χαρακτήρες.

{
echo "<a href='http://www.opweb.gr/catalogue/index.php'>Νέα
αναζήτηση</a><br>" ;
echo "Αναζήτηση για <b>$search</b> : <hr size='1'>" ;
include ("../config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Εμφάνιση επιλογής νέας αναζήτησης και σύνδεση με τη βάση SQL.

$query="SELECT title,isbn,author,publisher,dewey,status,pages,copy,tags
FROM books WHERE authorforeign LIKE '%$search%' OR author LIKE '%
$search%' OR title LIKE '%$search%' OR publisher LIKE '%$search%' OR tags
LIKE '%$search%' " ;
$result=mysql_query($query);
while ($row=mysql_fetch_array($result))

Διαλεγει τα πεδια από τον πίνακα books όπου το κριτήριο αναζήτησης είναι
παρόμοιο με τα πεδία authorforeign, author, title , publisher , tags

{
echo "<b><font color=darkred>Τίτλος : </b></font>";
echo $row['title'] ;
cho "<br>" ;
echo "<b><font color=darkred>Συγγραφέας/είς : </b></font> " ;
echo $row['author'] ;
echo "<br>" ;
echo "<b><font color=darkred>Εκδόσεις : </b></font> " ;
echo $row['publisher'] ;

29
echo "<br>" ;
echo "<b><font color=darkred>Κατάσταση : </b></font> " ;
echo $row['status'] ;
echo "<br>" ;
echo "<b><font color=darkred>Σελίδες : </b></font> " ;
echo $row['pages'] ;
echo "<br>" ;
echo "<b><font color=darkred>Θέμα : </b></font> " ;
echo $row['tags'] ;
echo "<br>" ;
echo "<b><font color=darkred>ISBN : </b></font> " ;
echo $row['isbn'] ;
echo "<br>" ;
echo "<b><font color=darkred>Ταξινομικός Κώδικας Dewey : </b></font>" ;
echo $row['dewey'] ;
echo "<hr>" ;

}
}

Εμφάνιση των αποτελσμάτων , η γραμμή


while ($row=mysql_fetch_array($result)) εξασφαλίζει ώστε να εμφανιστούν
πέρα της μιας γραμμής.

if ($field =='all' && $category =='author' && mb_strlen($search, 'UTF-8') >3 )

Εμφάνιση κώδικα αν έχει επιλεχθεί όλα στο μενου field και στο μενου
κατηγορία author. Δηλαδή αν κάποιος θέλει να εισάγει κριτηριο αναζήτησης
βάσει του ονόματος του συγγραφέα αλλά δεν τον απασχολεί σε ποια
κατηγορία βιβλίο αναφέρεται.

{
echo "<a href='http://www.opweb.gr/catalogue/index.php'>Νέα
αναζήτηση</a><br><br>" ;
echo "Αναζήτηση για <b>$search</b> : <hr size='1'>" ;
include ("../config.php");

30
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");
$query="SELECT title,isbn,author,publisher,dewey,status,pages,copy,tags
FROM books WHERE authorforeign LIKE '%$search%' OR author LIKE '%
$search%' " ;
$result=mysql_query($query);

Όπως παραπάνω απλώς περιορίζεται η εντολή SELECT σε λιγότερα πεδία ,


αυτά που αφορούν δηλαδή μόνο τον συγγραφέα.

while ($row=mysql_fetch_array($result))
{
echo "<b><font color=darkred>Τίτλος : </b></font>"; echo $row['title']
;echo "<br>" ;echo "<b><font color=darkred>Συγγραφέας/είς :</b></font>
" ; echo $row['author'] ;echo "<br>" ;echo "<b><font
color=darkred>Εκδόσεις : </b></font> " ; echo $row['publisher'] ; echo
"<br>" ;echo "<b><font color=darkred>Κατάσταση : </b></font> " ; echo
$row['status'] ; echo "<br>" ;echo "<b><font color=darkred>Σελίδες :
</b></font> " ; echo $row['pages'] ; echo "<br>" ; echo "<b><font
color=darkred>Θέμα : </b></font> " ; echo $row['tags'] ; echo "<br>" ; echo
"<b><font color=darkred>ISBN : </b></font> " ; echo $row['isbn'] ; echo
"<br>" ; echo "<b><font color=darkred>Ταξινομικός Κώδικας Dewey :
</b></font> " ; echo $row['dewey'] ; echo "<hr>" ;
}
}
if ($field =='all' && $category =='title' && mb_strlen($search, 'UTF-8') >3 )
{

Παρόμοια με την παραπάνω περίπτωση μόνο που εδώ εχεί επιλεγεί


αναζήτηση βάσει του τίτλου του βιβλίου.

echo "<a href='http://www.opweb.gr/catalogue/index.php'>Νέα


αναζήτηση</a><br>" ;
echo "Αναζήτηση για <b>$search</b> : <hr size='1'>" ;
include ("../config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die("Cannot connect to
database");

31
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");
$query="SELECT title,isbn,author,publisher,dewey,status,pages,copy,tags
FROM books WHERE title LIKE '%$search%' " ;
$result=mysql_query($query);

while ($row=mysql_fetch_array($result))
{
echo "<b><font color=darkred>Τίτλος : </b></font>"; echo $row['title']
;echo "<br>" ;echo "<b><font color=darkred>Συγγραφέας/είς :</b></font>
" ; echo $row['author'] ;echo "<br>" ;echo "<b><font
color=darkred>Εκδόσεις : </b></font> " ; echo $row['publisher'] ; echo
"<br>" ;echo "<b><font color=darkred>Κατάσταση : </b></font> " ; echo
$row['status'] ; echo "<br>" ;echo "<b><font color=darkred>Σελίδες :
</b></font> " ; echo $row['pages'] ; echo "<br>" ; echo "<b><font
color=darkred>Θέμα : </b></font> " ; echo $row['tags'] ; echo "<br>" ; echo
"<b><font color=darkred>ISBN : </b></font> " ; echo $row['isbn'] ; echo
"<br>" ; echo "<b><font color=darkred>Ταξινομικός Κώδικας Dewey :
</b></font> " ; echo $row['dewey'] ; echo "<hr>" ;
}
}

if ($field !='all' && $category =='all' && mb_strlen($search, 'UTF-8') >3 )


{
echo "<a href='http://www.opweb.gr/catalogue/index.php'>Νέα
αναζήτηση</a><br>" ;
echo "Αναζήτηση για <b>$search</b> : <hr size='1'>" ;
include ("../config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass)or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");
$query="SELECT title,isbn,author,publisher,dewey,status,pages,copy,tags
FROM books WHERE field='$field' AND authorforeign LIKE '%$search%' OR
author LIKE '%$search%' OR title LIKE '%$search%' OR publisher LIKE '%
$search%' OR tags LIKE '%$search%' " ;
$result=mysql_query($query);

while ($row=mysql_fetch_array($result))
{

32
echo "<b><font color=darkred>Τίτλος : </b></font>"; echo $row['title']
;echo "<br>" ;echo "<b><font color=darkred>Συγγραφέας/είς :</b></font>
" ; echo $row['author'] ;echo "<br>" ;echo "<b><font
color=darkred>Εκδόσεις : </b></font> " ; echo $row['publisher'] ; echo
"<br>" ;echo "<b><font color=darkred>Κατάσταση : </b></font> " ; echo
$row['status'] ; echo "<br>" ;echo "<b><font color=darkred>Σελίδες :
</b></font> " ; echo $row['pages'] ; echo "<br>" ; echo "<b><font
color=darkred>Θέμα : </b></font> " ; echo $row['tags'] ; echo "<br>" ; echo
"<b><font color=darkred>ISBN : </b></font> " ; echo $row['isbn'] ; echo
"<br>" ; echo "<b><font color=darkred>Ταξινομικός Κώδικας Dewey :
</b></font> " ; echo $row['dewey'] ; echo "<hr>" ;
}
}

if ($field !='all' && $category =='author' && mb_strlen($search, 'UTF-8') >3 )

Εδώ η συνθήκη είναι αν το πεδίο field δεν είναι όλα και το category εχει
επιλεχθεί ως author.

{
echo "<a href='http://www.opweb.gr/catalogue/index.php'>Νέα
αναζήτηση</a><br>" ;
echo "Αναζήτηση για <b>$search</b> : <hr size='1'>" ;
include ("../config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass)or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");
$query="SELECT title,isbn,author,publisher,dewey,status,pages,copy,tags
FROM books WHERE field='$field' AND authorforeign LIKE '%$search%' OR
author LIKE '%$search%' " ;
$result=mysql_query($query);

Η μοναδική αλλαγή είναι πως η αναζήτηση γίνεται στο πεδίο field που έχει
επιλεχθεί. π.χ. Αναζήτηση για βιβλία μόνο Λογοτεχνίας κλπ.

while ($row=mysql_fetch_array($result))
{

33
echo "<b><font color=darkred>Τίτλος : </b></font>"; echo $row['title']
;echo "<br>" ;echo "<b><font color=darkred>Συγγραφέας/είς :</b></font>
" ; echo $row['author'] ;echo "<br>" ;echo "<b><font
color=darkred>Εκδόσεις : </b></font> " ; echo $row['publisher'] ; echo
"<br>" ;echo "<b><font color=darkred>Κατάσταση : </b></font> " ; echo
$row['status'] ; echo "<br>" ;echo "<b><font color=darkred>Σελίδες :
</b></font> " ; echo $row['pages'] ; echo "<br>" ; echo "<b><font
color=darkred>Θέμα : </b></font> " ; echo $row['tags'] ; echo "<br>" ; echo
"<b><font color=darkred>ISBN : </b></font> " ; echo $row['isbn'] ; echo
"<br>" ; echo "<b><font color=darkred>Ταξινομικός Κώδικας Dewey :
</b></font> " ; echo $row['dewey'] ; echo "<hr>" ;
}
}

if ($field !='all' && $category =='title' && mb_strlen($search, 'UTF-8') >3 )

Παρεμφερής λογική με την παραπάνω απλώς έχει επιλεγεί αναζήτηση


βάσει τίτλου συν καποια συγκεκριμένη κατηγορία DEWEY από το πεδίο
field.

{
echo "<a href='http://www.opweb.gr/catalogue/index.php'>Νέα
αναζήτηση</a><br>" ;
echo "Αναζήτηση για <b>$search</b> : <hr size='1'>" ;
include ("../config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass)or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");
$query="SELECT title,isbn,author,publisher,dewey,status,pages,copy,tags
FROM books WHERE field='$field' AND title LIKE '%$search%' " ;
$result=mysql_query($query);

while ($row=mysql_fetch_array($result))
{

echo "<b><font color=darkred>Τίτλος : </b></font>"; echo $row['title']


;echo "<br>" ;echo "<b><font color=darkred>Συγγραφέας/είς :</b></font>
" ; echo $row['author'] ;echo "<br>" ;echo "<b><font
color=darkred>Εκδόσεις : </b></font> " ; echo $row['publisher'] ; echo

34
"<br>" ;echo "<b><font color=darkred>Κατάσταση : </b></font> " ; echo
$row['status'] ; echo "<br>" ;echo "<b><font color=darkred>Σελίδες :
</b></font> " ; echo $row['pages'] ; echo "<br>" ; echo "<b><font
color=darkred>Θέμα : </b></font> " ; echo $row['tags'] ; echo "<br>" ; echo
"<b><font color=darkred>ISBN : </b></font> " ; echo $row['isbn'] ; echo
"<br>" ; echo "<b><font color=darkred>Ταξινομικός Κώδικας Dewey :
</b></font> " ; echo $row['dewey'] ; echo "<hr>" ;
}
}

Λειτουργίες administrator

Καταχώριση δανεισμού βιβλιου

1ο Βήμα : Δημιουργία πίνακα στην βάση SQL

2ο Βήμα : Δημιουργία HTML form / table

35
case loan:
echo " <h3>Δανεισμός βιβλίου</h3>" ;

echo "Αμεση καταχώριση<br>" ;


echo "<br>" ;
echo " <form method='post' action='admin.php?view=verifyloan'>
<table border=1>

<tr><td>ISBN:</td><td colspan='6'> <input name='isbn' type='text'


value='0' /></td></tr>
<tr><td>ID Χρήστη:</td><td colspan='6'> <input name='userid' type='text'
value='0' /></td></tr>

<tr><td>Ημερομηνία Δανεισμού :</td>


<td>Έτος:</td><td><select name=\"yearloaned\">
<option value=\"2010\">2010</option>
<option value=\"2011\">2011</option>
<option value=\"2012\">2012</option>
<option value=\"2013\">2013</option>
<option value=\"2014\">2014</option>
<option value=\"2015\">2015</option>
<option value=\"2016\">2016</option>
<option value=\"2017\">2017</option>
<option value=\"2018\">2018</option>
<option value=\"2019\">2019</option>
<option value=\"2020\">2020</option>
<option value=\"2021\">2021</option>
<option value=\"2022\">2022</option>
<option value=\"2023\">2023</option>
<option value=\"2024\">2024</option>
<option value=\"2025\">2025</option>
<option value=\"2026\">2026</option>
<option value=\"2027\">2027</option>
<option value=\"2028\">2028</option>
<option value=\"2029\">2029</option>
<option value=\"2030\">2030</option>

</select></td>

36
<td>Μήνας :</td>
<td><select name=\"monthloaned\">
<option value=\"01\">01</option>
<option value=\"02\">02</option>
<option value=\"03\">03</option>
<option value=\"04\">04</option>
<option value=\"05\">05</option>
<option value=\"06\">06</option>
<option value=\"07\">07</option>
<option value=\"08\">08</option>
<option value=\"09\">09</option>
<option value=\"10\">10</option>
<option value=\"11\">11</option>
<option value=\"12\">12</option>

</select></td>

<td>Μέρα :

<select name=\"dayloaned\">
<option value=\"01\">01</option>
<option value=\"02\">02</option>
<option value=\"03\">03</option>
<option value=\"04\">04</option>
<option value=\"05\">05</option>
<option value=\"06\">06</option>
<option value=\"07\">07</option>
<option value=\"08\">08</option>
<option value=\"09\">09</option>
<option value=\"10\">10</option>
<option value=\"11\">11</option>
<option value=\"12\">12</option>
<option value=\"13\">13</option>
<option value=\"14\">14</option>
<option value=\"15\">15</option>
<option value=\"16\">16</option>
<option value=\"17\">17</option>
<option value=\"18\">18</option>
<option value=\"19\">19</option>
<option value=\"20\">20</option>

37
<option value=\"21\">21</option>
<option value=\"22\">22</option>
<option value=\"23\">23</option>
<option value=\"24\">24</option>
<option value=\"25\">25</option>
<option value=\"26\">26</option>
<option value=\"27\">27</option>
<option value=\"28\">28</option>
<option value=\"29\">29</option>
<option value=\"30\">30</option>
<option value=\"31\">31</option>
</select></td></tr>

<tr><td>Ημερομηνία Επιστροφής : </td>


<td>Έτος:</td><td><select name=\"yearreturn\">
<option value=\"2010\">2010</option>
<option value=\"2011\">2011</option>
<option value=\"2012\">2012</option>
<option value=\"2013\">2013</option>
<option value=\"2014\">2014</option>
<option value=\"2015\">2015</option>
<option value=\"2016\">2016</option>
<option value=\"2017\">2017</option>
<option value=\"2018\">2018</option>
<option value=\"2019\">2019</option>
<option value=\"2020\">2020</option>
<option value=\"2021\">2021</option>
<option value=\"2022\">2022</option>
<option value=\"2023\">2023</option>
<option value=\"2024\">2024</option>
<option value=\"2025\">2025</option>
<option value=\"2026\">2026</option>
<option value=\"2027\">2027</option>
<option value=\"2028\">2028</option>
<option value=\"2029\">2029</option>
<option value=\"2030\">2030</option>

</select></td>

<td>Μήνας :</td>

38
<td><select name=\"monthreturn\">
<option value=\"01\">01</option>
<option value=\"02\">02</option>
<option value=\"03\">03</option>
<option value=\"04\">04</option>
<option value=\"05\">05</option>
<option value=\"06\">06</option>
<option value=\"07\">07</option>
<option value=\"08\">08</option>
<option value=\"09\">09</option>
<option value=\"10\">10</option>
<option value=\"11\">11</option>
<option value=\"12\">12</option>
</select></td>
<td>Μέρα :
<select name=\"dayreturn\">
<option value=\"01\">01</option>
<option value=\"02\">02</option>
<option value=\"03\">03</option>
<option value=\"04\">04</option>
<option value=\"05\">05</option>
<option value=\"06\">06</option>
<option value=\"07\">07</option>
<option value=\"08\">08</option>
<option value=\"09\">09</option>
<option value=\"10\">10</option>
<option value=\"11\">11</option>
<option value=\"12\">12</option>
<option value=\"13\">13</option>
<option value=\"14\">14</option>
<option value=\"15\">15</option>
<option value=\"16\">16</option>
<option value=\"17\">17</option>
<option value=\"18\">18</option>
<option value=\"19\">19</option>
<option value=\"20\">20</option>
<option value=\"21\">21</option>
<option value=\"22\">22</option>
<option value=\"23\">23</option>
<option value=\"24\">24</option>

39
<option value=\"25\">25</option>
<option value=\"26\">26</option>
<option value=\"27\">27</option>
<option value=\"28\">28</option>
<option value=\"29\">29</option>
<option value=\"30\">30</option>
<option value=\"31\">31</option>
</select></td></tr>

<tr><td colspan='5'></td><td>
<input type='submit' value='καταχώριση' /></td></tr>
</form></table>
<br/>
";
break;

Το αποτέλεσμα αυτής της φόρμας και αυτού του πίνακα :

3ο Βήμα : Δημιουργία κώδικα PHP για καταχώριση στη βάση SQL

Με την εισαγωγή των στοιχείων παραπέμπεται ο διαχειριστής στο


παρακάτω κομμάτι κώδικα :

case verifyloan:

$isbn= $_POST['isbn'];
$id= $_POST['userid'];
$yearloaned= $_POST['yearloaned'];
$monthloaned= $_POST['monthloaned'];
$dayloaned= $_POST['dayloaned'];

40
$yearreturn= $_POST['yearreturn'];
$monthreturn= $_POST['monthreturn'];
$dayreturn= $_POST['dayreturn'];
$submit= $_POST['submit'];

Γίνεται καταχώριση όλων των πεδίων που είχε εισάγει προηγουμένως.

include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Σύνδεση με τη βάση SQL.

$query="SELECT isbn FROM books WHERE isbn=$isbn" ;


$result=mysql_query($query);
$num_rows = mysql_num_rows($result);
$row=mysql_fetch_array($result) ;
$query2="SELECT user_id FROM users WHERE user_id=$id" ;
$result2=mysql_query($query2);
$num_rows2 = mysql_num_rows($result2);
$row2=mysql_fetch_array($result2) ;

Επιλέγονται τα πεδία isbn και user_id από τους πίνακες books και users
αντίστοιχα και μετριούνται οι γραμμές που έχουν επιλεχθεί.

if ($num_rows !=1 OR $num_rows2!=1)


{

echo "<font color=darkred>Δεν πληκτρολογήσατε σωστό ISBN βιβλίου ή id


χρήστη!</font></br>"; echo "<br>" ;
echo "<br> Επανεισαγωγή παρακαλώ : <br/> " ;
echo " <form method='post' action='admin.php?view=verifyloan'>...
}

Αν οι γραμμές είναι διάφορες του ενός τότε εμφανίζεται μήνυμα λάθους


και επανεμφανίζεται η ίδια φόρμα για να εισαχθούν πάλι τα πεδία.

Διαφορετικά , δηλαδη αν ισούνται με ένα τότε εκτελείται ο εξής κώδικας :

41
else {
include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Εισαγωγή στη βάση SQL

$isbn= $_POST['isbn'];
$query8="SELECT author,title,publisher,dewey,year FROM books WHERE
isbn=$isbn" ;
$result8=mysql_query($query8);
$row8=mysql_fetch_array($result8) ;

Επιλογή πεδίων author,title,publisher,dewey,year από τον πίνακα books


όπου το πεδίο isbn ισούται με το isbn που έχει εισαχθεί.

$query13="SELECT realname FROM users WHERE user_id=$id" ;


$result13=mysql_query($query13);
$row13=mysql_fetch_array($result13) ;
$loaner= $row13['realname'];

Επιλέγεται το πεδίο realname από τον πίνακα users όπου το user_id πεδίο
ισούται με το id που έχει εισαχθεί προηγουμένως στη φόρμα HTML.

$queryrandom="SELECT COUNT(loan_id) FROM loans;" ;


$resultrandom=mysql_query($queryrandom);
$rowrandom=mysql_fetch_array($resultrandom) ;
$numberofloans= $rowrandom['COUNT(loan_id)'] ;
$random= ($rowrandom['COUNT(loan_id)']*mt_rand(3,15)) ;

Παραγωγή ενός τυχαίου αριθμού για να εισαχθεί μετέπειτα στην SQL βάση.

$query100="UPDATE `opwebgr_elibrary`.`books` SET `status` = 'Δανεισμένο'


WHERE `books`.`isbn` =$isbn";
$result100=mysql_query($query100);

Αλλαγή του πεδίου status στον πίνακα books με την τιμή Δανεισμένο όπου

42
το πεδιο SQL isbn ισούται με το isbn της HTML φόρμας.

$query9="INSERT INTO `opwebgr_elibrary`.`loans` (


`loan_id` ,`user_id` ,`username` ,`author` ,`title` ,`publisher` ,`year`
,`bookdewey` ,`yearloaned` ,`monthloaned` ,`dayloaned` ,`yearreturn`
,`monthreturn` ,`dayreturn`
)
VALUES (
'$random', '$id', '$loaner', '$row8[author]', '$row8[title]', '$row8[publisher]',
'$row8[year]', '$row8[dewey]', '$yearloaned', '$monthloaned', '$dayloaned',
'$yearreturn', '$monthreturn', '$dayreturn'
)" ;
$result9=mysql_query($query9);

Εισαγωγή στη βάση loans των ανάλογων πεδίων.

echo "Ο δανεισμός του βιβλίου <font color=darkred> -$row8[title]- </font>


εγινε επιτυχώς και χρεώθηκε στο χρήστη με ονομα: $loaner ";
}
break;

Εμφάνιση μηνύματος επιτυχούς καταχώρισης.

Καταχώριση επιστροφής βιβλίου


(Βίντεο:) http://vimeo.com/17415701
1ο Βήμα δημιουργία HTML φόρμας

<form method='post' action='admin.php?view=verifyreturn'>


ISBN: <input name='isbn' type='text' value='0'/> <br/>
<br/> <input type='submit' value='Επιστροφή' />
</form>

Που παράγει το εξής αποτέλεσμα :

43
2ο βήμα δημιουργία PHP κώδικα :

case verifyreturn:

$isbn= $_POST['isbn'];

Καταχώριση του πεδίου isbn που έχει δωθεί προηγουμένως.

include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Σύνδεση με τη βάση.

$query66="SELECT isbn,dewey,status FROM books WHERE isbn=$isbn" ;


$result66=mysql_query($query66);
$row66=mysql_fetch_array($result66) ;
$bookdewey= $row66['dewey'];
$num_rows = mysql_num_rows($result66);

Επιλογή από τον πίνακα books των πεδίων isbn,dewey,status όπου το πεδίο
isbn της SQL είναι ίσο με το isbn που δώθηκε στην HTML form.
Μέτρηση των γραμμών που έφερε το παραπάνω.

if ($num_rows !=1 OR $row66[status]=='Στο ράφι')


{

echo "<font color=darkred>Δεν πληκτρολογήσατε σωστό ISBN δανεισμένου


βιβλίου!</font><br>"; echo "<br>" ;
echo "<br/> Επανεισαγωγή παρακαλώ : <br/> " ;
echo " <br/><form method='post' action='admin.php?view=verifyreturn'>
ISBN: <input name='isbn' type='text' value='0'/> <br>
<br> <input type='submit' value='Επιστροφή' />

44
</form>" ;
}

Αν υπάρχουν διάφορες του ενός γραμμές ή το πεδίο status ισούται με 'στο


ράφι' τότε εμφάνιση μηνύματος λάθους και επανεισαγωγής του ISBN του
βιβλίου.

else

$query77="SELECT title,author FROM books WHERE isbn=$isbn" ;


$result77=mysql_query($query77);
$row77=mysql_fetch_array($result77) ;
$title= $row77['title'];
$author= $row77['author'];
$query130="DELETE FROM `opwebgr_elibrary`.`loans` WHERE
`loans`.`author` ='$author' AND `loans`.`title`='$title'" ;
$result130=mysql_query($query130);
$query120="UPDATE `opwebgr_elibrary`.`books` SET `status` = 'Στο ράφι'
WHERE `books`.`isbn` =$isbn";
$result120=mysql_query($query120);
echo "Η καταχώριση της επιστροφής του βιβλίου -<font
color=darkred>$title</font>- εγινε επιτυχώς!";
}
Ειδάλλως αν δηλαδή η γραμμή είναι μια και το status ειναι Δανεισμένο τότε
διαγράφεται το βιβλίο από τον πίνακα loans και αλλάζει το πεδίο status
στον πίνακα books πάλι πίσω στην τιμή 'Στο ράφι'. Τέλος εμφανίζεται
μήνυμα επιτυχούς επιστροφής.

Ανακοινώσεις (εμφάνιση και προσθήκη)

Εμφάνιση

1ο βήμα δημιουργία πίνακα SQL :

45
2ο βήμα δημιουργία κώδικα PHP :

include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Σύνδεση με τη βάση.

$query1="SELECT title,year,month,day FROM news WHERE id ='1'" ;


$result1=mysql_query($query1);
$row1=mysql_fetch_array($result1) ;

$query2="SELECT title,year,month,day FROM news WHERE id ='2'" ;


$result2=mysql_query($query2);
$row2=mysql_fetch_array($result2) ;

$query3="SELECT title,year,month,day FROM news WHERE id ='3'" ;


$result3=mysql_query($query3);
$row3=mysql_fetch_array($result3) ;

$query4="SELECT title,year,month,day FROM news WHERE id ='4'" ;


$result4=mysql_query($query4);
$row4=mysql_fetch_array($result4) ;

$query5="SELECT title,year,month,day FROM news WHERE id ='5'" ;


$result5=mysql_query($query5);
$row5=mysql_fetch_array($result5) ;

$query6="SELECT title,year,month,day FROM news WHERE id ='6'" ;

46
$result6=mysql_query($query6);
$row6=mysql_fetch_array($result6) ;

$query7="SELECT title,year,month,day FROM news WHERE id ='7'" ;


$result7=mysql_query($query7);
$row7=mysql_fetch_array($result7) ;

$query8="SELECT title,year,month,day FROM news WHERE id ='8'" ;


$result8=mysql_query($query8);
$row8=mysql_fetch_array($result8) ;

$query9="SELECT title,year,month,day FROM news WHERE id ='9'" ;


$result9=mysql_query($query9);
$row9=mysql_fetch_array($result9) ;

$query10="SELECT title,year,month,day FROM news WHERE id ='10'" ;


$result10=mysql_query($query10);
$row10=mysql_fetch_array($result10) ;

Επιλογή των πεδίων από τη βάση news μέσω 10 εντολών όπου το πεδίο id
ισούται από το 1 ως το 10.

<ul>
<li>
<a href='/index.php?view=news&article=1'> $row1[day] - $row1[month] -
$row1[year] : $row1[title]</a>
</li>
<br>
<li>
<a href='/index.php?view=news&article=2'> $row2[day] - $row2[month] -
$row2[year] : $row2[title]</a>
</li>
<br>
<li>
<a href='/index.php?view=news&article=3'> $row3[day] - $row3[month] -
$row3[year] : $row3[title]</a>
</li>
<br>
<li>

47
<a href='/index.php?view=news&article=4'> $row4[day] - $row4[month] -
$row4[year] : $row4[title]</a>
</li>
<br>
<li>
<a href='/index.php?view=news&article=5'> $row5[day] - $row5[month] -
$row5[year] : $row5[title]</a>
</li>
<br>
<li>
<a href='/index.php?view=news&article=6'> $row6[day] - $row6[month] -
$row6[year] : $row6[title]</a>
</li>
<br>
<li>
<a href='/index.php?view=news&article=7'> $row7[day] - $row7[month] -
$row7[year] : $row7[title]</a>
</li>
<br>
<li>
<a href='/index.php?view=news&article=8'> $row8[day] - $row8[month] -
$row8[year] : $row8[title]</a>
</li>
<br>
<li>
<a href='/index.php?view=news&article=9'> $row9[day] - $row9[month] -
$row9[year] : $row9[title]</a>
</li>
<br>
<li>
<a href='/index.php?view=news&article=10'> $row10[day] - $row10[month]
- $row10[year] : $row10[title]</a>
</li> </ul>
";

Εμφάνιση της λίστας ανακοινώσεων σε unordered list.

48
Προσθήκη ανακοίνωσης

1ο βήμα δημιουργία HMTL form :

echo "

<h3>Προσθήκη ανακοίνωσης</h3>
<hr>
<form method='post' action='admin.php?view=addnews'>
Ημερομηνία : <br>
Έτος:<select name=\"year\">
<option value=\"2010\">2010</option>
<option value=\"2011\">2011</option>
<option value=\"2012\">2012</option>
<option value=\"2013\">2013</option>
<option value=\"2014\">2014</option>
<option value=\"2015\">2015</option>
<option value=\"2016\">2016</option>
<option value=\"2017\">2017</option>
<option value=\"2018\">2018</option>
<option value=\"2019\">2019</option>
<option value=\"2020\">2020</option>
<option value=\"2021\">2021</option>
<option value=\"2022\">2022</option>
<option value=\"2023\">2023</option>
<option value=\"2024\">2024</option>
<option value=\"2025\">2025</option>
<option value=\"2026\">2026</option>
<option value=\"2027\">2027</option>
<option value=\"2028\">2028</option>
<option value=\"2029\">2029</option>
<option value=\"2030\">2030</option>

</select>

Μήνας :
<select name=\"month\">
<option value=\"01\">01</option>
<option value=\"02\">02</option>

49
<option value=\"03\">03</option>
<option value=\"04\">04</option>
<option value=\"05\">05</option>
<option value=\"06\">06</option>
<option value=\"07\">07</option>
<option value=\"08\">08</option>
<option value=\"09\">09</option>
<option value=\"10\">10</option>
<option value=\"11\">11</option>
<option value=\"12\">12</option>

</select>

Μέρα :

<select name=\"day\">
<option value=\"01\">01</option>
<option value=\"02\">02</option>
<option value=\"03\">03</option>
<option value=\"04\">04</option>
<option value=\"05\">05</option>
<option value=\"06\">06</option>
<option value=\"07\">07</option>
<option value=\"08\">08</option>
<option value=\"09\">09</option>
<option value=\"10\">10</option>
<option value=\"11\">11</option>
<option value=\"12\">12</option>
<option value=\"13\">13</option>
<option value=\"14\">14</option>
<option value=\"15\">15</option>
<option value=\"16\">16</option>
<option value=\"17\">17</option>
<option value=\"18\">18</option>
<option value=\"19\">19</option>
<option value=\"20\">20</option>
<option value=\"21\">21</option>
<option value=\"22\">22</option>
<option value=\"23\">23</option>
<option value=\"24\">24</option>

50
<option value=\"25\">25</option>
<option value=\"26\">26</option>
<option value=\"27\">27</option>
<option value=\"28\">28</option>
<option value=\"29\">29</option>
<option value=\"30\">30</option>
<option value=\"31\">31</option>
</select>

<br>
<br>
Τίτλος :
<input name='title' type='text' /> <br/>

<br>Κείμενο :
<br>
<textarea name='message' rows='15' cols='40'>
</textarea>
<br>
<input type='submit' name='submit' value='Προσθήκη' />
</form> " ;

2o βήμα δημιουργία PHP κώδικα :

if (isset($_POST['submit']))

$post_year=$_POST['year'] ;
$post_month=$_POST['month'] ;
$post_day=$_POST['day'] ;
$post_title=$_POST['title'] ;
$post_message=$_POST['message'] ;

Αν πατηθεί το κουμπί προσθήκη τότε γίνεται καταχώριση των στοιχείων


που εισήχθησαν προυηγουμένως.

include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass)

51
or die("Cannot connect to database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Σύνδεση με τη βάση SQL.

$query20="DELETE FROM news WHERE id='10' " ;


$result20=mysql_query($query20);

Διαγραφή της τελευταίας ανακοίνωσης.

$query10="UPDATE `opwebgr_elibrary`.`news` SET `id` = '10' WHERE


`news`.`id` =9;";
$result10=mysql_query($query10);
$query9="UPDATE `opwebgr_elibrary`.`news` SET `id` = '9' WHERE
`news`.`id` =8;";
$result9=mysql_query($query9);
$query8="UPDATE `opwebgr_elibrary`.`news` SET `id` = '8' WHERE
`news`.`id` =7;";
$result8=mysql_query($query8);
$query7="UPDATE `opwebgr_elibrary`.`news` SET `id` = '7' WHERE
`news`.`id` =6;";
$result7=mysql_query($query7);
$query6="UPDATE `opwebgr_elibrary`.`news` SET `id` = '6' WHERE
`news`.`id` =5;";
$result6=mysql_query($query6);
$query5="UPDATE `opwebgr_elibrary`.`news` SET `id` = '5' WHERE
`news`.`id` =4;";
$result5=mysql_query($query5);
$query4="UPDATE `opwebgr_elibrary`.`news` SET `id` = '4' WHERE
`news`.`id` =3;";
$result4=mysql_query($query4);
$query3="UPDATE `opwebgr_elibrary`.`news` SET `id` = '3' WHERE
`news`.`id` =2;";
$result3=mysql_query($query3);
$query2="UPDATE `opwebgr_elibrary`.`news` SET `id` = '2' WHERE
`news`.`id` =1;";
$result2=mysql_query($query2);

Αλλαγή θέσων προς τα κατω όλων των 9 υπολοίπων ανακοινώσεων.

52
$query1="INSERT INTO `opwebgr_elibrary`.`news` (
`id` ,`title` ,`year` ,`month` ,`day` ,`text`
)
VALUES (1,'$post_title', '$post_year', '$post_month', '$post_day',
'$post_message'
);";
$result1=mysql_query($query1);
}

Προσθήκη ανακοίνωσης στη πρώτη θέση ώστε να εμφανίζεται ως η πιο


πρόσφατη.

Προσθήκη παραθέματος
(Βίντεο) : http://www.youtube.com/watch?v=zPXl55E-pqQ

1ο βήμα : Δημιουργία HTML φόρμας

echo "
<form method='post' action='admin.php?view=addquote'><br> <br>
Συγγραφέας :
<input name='who' type='text' /> <br/>
<br>Κείμενο : <br>
<textarea name='text' rows='15' cols='40'>
</textarea><br>
<input type='submit' name='submit' value='Προσθήκη' />
</form> " ;

2ο βήμα : Δημιουργία PHP κώδικα

if (isset($_POST['submit']))

$post_who=$_POST['who'] ;
$post_text=$_POST['text'] ;

Αν πατηθεί το κουμπί προσθήκη στην φόρμα αποθηκεύονται τα στοιχεία


που εστάλησαν.

53
include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Σύνδεση με τη βάση.

$query1="SELECT COUNT(id) FROM quotes;" ;


$result1=mysql_query($query1);
$row1=mysql_fetch_array($result1) ;
$newid= ++$row1['COUNT(id)'] ;

$query1="INSERT INTO `opwebgr_elibrary`.`quotes` (


`id` ,`text` ,`who`)
VALUES ('$newid', '$post_text', '$post_who');";
$result1=mysql_query($query1);
}

Μετριούνται οι γραμμές του πεδίου id στον πίνακα και δημιουργείται νέα


μεταβλητή προσαυξημένη κατά ένα για να εισαχθεί στη βάση μαζί με τα
προηγούμενα στοιχεία που έχουν δωθεί μέσω της HTML φορμας.

Εμφάνιση δανεισμένων βιβλίων

1ο βήμα : Δημιουργία PHP κώδικα

include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass) or die("Cannot connect to
database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Σύνδεση με βάση.

$query="SELECT
title,author,publisher,bookdewey,username,yearloaned,monthloaned,
dayloaned,yearreturn,monthreturn,dayreturn FROM loans " ;

54
$result=mysql_query($query);

Επιλογή των πεδίων από τον πίνακα των δανεισμένων (loans).

while ($row=mysql_fetch_array($result))
{
echo "<b><font color=darkred>Τίτλος : </b></font>";
echo $row['title'] ;
echo "<br>" ;
echo "<b><font color=darkred>Συγγραφέας/είς : </b></font> " ;
echo $row['author'] ;
echo "<br>" ;
echo "<b><font color=darkred>Εκδόσεις : </b></font> " ;
echo $row['publisher'] ;
echo "<br>" ;
echo "<b><font color=darkred>Ταξινομικός Κώδικας Dewey : </b></font> " ;
echo $row['bookdewey'] ;
echo "<br>" ;
echo "<b><font color=darkred>Όνομα δανειστή : </b></font> " ;
echo $row['username'] ;
echo "<br>" ;
echo "<b><font color=darkred>Ημερομηνία Δανεισμού: </b></font> " ; echo
$row['yearloaned']."-".$row['monthloaned']."-".$row['dayloaned'] ;
echo "<br>" ;
echo "<b><font color=darkred>Ημερομηνία Επιστροφής : </b></font> " ;
echo $row['yearreturn']."-".$row['monthreturn']."-".$row['dayreturn'] ;
echo "<hr>" ;

Εμφάνιση των αποτελεσμάτων.

Αποτέλεσμα :

55
Λειτουργίες user

Δημιουργία απλού και λειτουργικού φόρουμ

Πρώτα πρέπει να δημιουργήσουμε τον πίνακα SQL που θα αποθηκεύει τα


δεδομένα για τα θέματα και τα μηνύματα μας για αυτό το φόρουμ

CREATE TABLE forum_posts (

postid bigint(20) NOT NULL auto_increment,

author varchar(255) NOT NULL default '',

title varchar(255) NOT NULL default '',

post mediumtext NOT NULL,

showtime varchar(255) NOT NULL default '',

56
realtime bigint(20) NOT NULL default '0',

lastposter varchar(255) NOT NULL default '',

numreplies bigint(20) NOT NULL default '0',

parentid bigint(20) NOT NULL default '0',

lastrepliedto bigint(20) NOT NULL default '0',

PRIMARY KEY (postid)

Το παραπάνω δημιουργεί τα πεδία για το id του post (αυτός είναι ο τρόπος


με τον οποίο κάθε μήνυμα/post προσδιορίζεται), συγγραφέα, τίτλο, ωρα
δημοσίευσης, αριθμό των απαντήσεων, αν ήταν απάντηση, το νήμα στο
οποίο είναι απάντηση, το τελευταίο πρόσωπο που απάντησε και ποτε ήταν
η τελευταία απάντηση στο νήμα.

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

Μετά ένα αρχείο PHP (connect.php) για τη σύνδεση με τη βάση μας :

<?php
$dbhost = 'localhost';//host
$dbuser = 'oti_exete_balei';//username
$dbpass = 'oti_exete_balei';//password
$dbname = 'onoma_ths_bashs_sas';// database name
?>

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

57
Μετά η δημιουργία ενός stylesheet για να δώσουμε χρώμα και δομή στο
φόρουμ :

body {

a:link, a:visited, a:active { text-decoration: none}

font-family:Verdana, Sans-serif;

color; #000000;

font-size: 12px

input,textarea, select,{

color : #000000;

font: normal 12px;

border-collapse: collapse; border: 1px solid #000000;

.maintable {border: 0px ; width: 100%; padding: 0px; background-color:


#FFFFFF}
/*κύριος πίνακας για το φόρουμ*/

.regrow {font-family: Verdana,Sans-serif; color: #000000; font-weight: bold;


background-color: #FFFFFF;font-size: 12px;}

/*σειρα εγγραφής , κυρίως για συμμετρία*/

.headline {font-family: Verdana,Sans-serif;font-weight: bold;color:


#FFFFFF;background-color: #003366;font-size: 11px;}

58
/*η σειρά επικεφαλίδας, η πρώτη σειρά που αναφέρει όνομα φόρουμ,
θέματα , μηνύματα κλπ.*/

.forumrow {font-family: Verdana,Sans-serif; color: #000000;background-


color: #F2F2F2;font-size: 12px;}

/*χρώμα των σειρών του φόρουμ*/

.mainrow a:link, a:visited, a:active { text-decoration: none;}

.mainrow {font-family: Verdana,Sans-serif; color: #000000;background-


color: #F2F2F2;font-size: 12px; a:link, a:visited, a:active { text-decoration:
none}}

/*χρώμα των σειρών του φόρουμ */

.maintables{background-color: #FFFFFF; width: 95%; padding: 0px; border:


1px solid; cellspacing: no}

/*κύριος πίνακας για το φόρουμ*/

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

Μετά τα πραγματικά αρχεία του φόρουμ. Χρειαζόμαστε 4 αρχεία.


index.php (αρχείο για την εμφάνιση όλων των νημάτων) , post.php (το
αρχείο για να ξεκίνησει ένας χρήστης νέο θέμα/νήμα) , message.php (το
αρχείο που εμφανίζει τα μηνύματα) και reply.php (το αρχείο που απαντάει
σε ήδη αναρτημένα νήματα).

Πρώτα το index.php:

<?php

include ("config.php");
$con=mysql_connect

59
($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");

mysql_select_db('opwebgr_elibrary');

print "<link rel='stylesheet' href='style.css' type='text/css'>";

print "<A href='post.php'>Νέο θέμα</a><br>";

print "<table class='forum-maintable'>";

print "<tr class='forum-headline'><td width=50%>Θέμα</td><td


width=20%>Δημιουργός θέματος</td><td>Απαντήσεις</td><td>Ώρα
τελευταίας απάντησης</td></tr>";

$getthreads="SELECT * from forum_posts where parentid='0' order by


lastrepliedto DESC";

$getthreads2=mysql_query($getthreads) or die("Could not get threads");

while($getthreads3=mysql_fetch_array($getthreads2))

$getthreads3[title]=strip_tags($getthreads3[title]);

$getthreads3[author]=strip_tags($getthreads3[author]);

print "<tr class='forum-mainrow'><td><A href='message.php?


id=$getthreads3[postid]'>$getthreads3[title]</a></td><td>$getthreads3[au
thor]</td><td>$getthreads3[numreplies]</td><td>$getthreads3[showtime]
<br>Τελευταίο μήνυμα από <b>$getthreads3[lastposter]</b></td></tr>";

print "</table>";

?>

60
Ο παραπάνω κώδικας επιλέγει όλα τα νήματα με parentid 0 , δηλαδή όλα τα
νήματα που δεν είναι απαντήσεις και τα επιλέγει βάσει της τελευταίας
απάντησης τους, ξεκινώντας από το τελευταίο.Μετά κάνει μια λούπα για να
τα εμφανίσει όλα μαζί με τον αριθμό απαντήσεων και τον συντάκτη του
αρχικού νήματος . Συνδέει το νήμα με ένα αναγνωριστικό του μηνύματος
στο message.php ώστε κάποιος να μπορει να δει το νήμα πατώντας πάνω
σε αυτό. Τα strip_tags αφαιρεί τις τυχόν SQL εισαγωγές που ο χρήστης
μπορεί να έχει εισάγει .

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

Μετά το message.php :

<?php

include ("config.php");
$con=mysql_connect ($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");
mysql_select_db('opwebgr_elibrary');
$id=$_GET['id'];
print "<link rel='stylesheet' href='styleforum.css' type='text/css'
media='screen' />";
print "<A href='index.php'>Πίσω στο κεντρικό φόρουμ</a>-<A
href='post.php'>Νέο θέμα</a>-<A href='reply.php?id=$id'>Απάντηση<br>";
print "<table class='forum-maintable'>";
print "<tr class='forum-headline'><td width=20%>Συντάκτης</td><td
width=80%>Μήνυμα</td></tr>";
$gettopic="SELECT * from forum_posts where postid='$id'";
$gettopic2=mysql_query($gettopic) or die("Δεν εμφανίζεται το θέμα");
$gettopic3=mysql_fetch_array($gettopic2);
print "<tr class='forum-mainrow'><td
valign='top'>$gettopic3[author]</td><td vakign='top'>Τελευταία απάντηση
στο $gettopic3[showtime]<br><hr>";
$message=strip_tags($gettopic3['post']);
$message=nl2br($message);

print "$message<hr><br>";
print "</td></tr>";
$getreplies="Select * from forum_posts where parentid='$id' order by postid

61
desc";
//getting replies

$getreplies2=mysql_query($getreplies) or die("Could not get replies");


while($getreplies3=mysql_fetch_array($getreplies2))

print "<tr class='forum-mainrow'><td


valign='top'>$getreplies3[author]</td><td vakign='top'>Last replied to at
$getreplies3[showtime]<br><hr>";
$message=strip_tags($getreplies3['post']);
$message=nl2br($message);
print "$message<hr><br>";
print "</td></tr>";
}
print "</table>";

?>

Αυτό το αρχείο λαμβάνει μερικά δεδομένα υπό τη μορφή $id από το


URL.Αυτό που κάνει ο κώδικας είναι πρώτα να διαλέξει το θέμα του
μηνύματος στο $gettopic, να το εμφανίζει και μετά να διαλέγει όλα τα
μηνύματα στο $getreplies και να τα εμφανίζει. Το $strip_tags
What this code does is it first selects the topic post in $gettopic, printing it
and then selects all the posts in $getreplies and prints them. Τα strip_tags
αφαιρεί τις τυχόν SQL εισαγωγές που ο χρήστης μπορεί να έχει εισάγει και
το nl2br έτσι ώστε να είναι σίγουρο πως τα br δουλεύουν ορθά.

------------------------
Μετά το post.php :

<?php

include ("config.php");
$con=mysql_connect

($dbhost,$dbuser,$dbpass)

62
or die("Cannot connect to database");

mysql_select_db('opwebgr_elibrary');

print "<link rel='stylesheet' href='styleforum.css' type='text/css'


media='screen' />";
print "<A href='index.php'>Πίσω στο κεντρικό φόρουμ</a>";
print "<table class='forum-maintables'>";

print "<tr class='forum-headline'><td>Δημοσιεύστε ένα μήνυμα</td></tr>";

print "<tr class='forum-maintables'><td>";

if(isset($_POST['submit']))

$name=$_POST['name'];

$yourpost=$_POST['yourpost'];

$subject=$_POST['subject'];

if(strlen($name)<1)

print "Δεν πληκτρολογήσατε όνομα.";

else if(strlen($yourpost)<1)

print "Δεν πληκτρολογήσατε μήνυμα.";

else if(strlen($subject)<1)

63
{

print "Δεν πληκτρολογήσατε τίτλο.";

else

$thedate=date("U"); // εισαγωγή unix timestamp

$displaytime=date("F j, Y, g:i a");

//αφαίρεση HTML injections

$subject=strip_tags($subject);

$name=strip_tags($name);

$yourpost=strip_tags($yourpost);

$insertpost="INSERT INTO
forum_posts(author,title,post,showtime,realtime,lastposter)
values('$name','$subject','$yourpost','$displaytime','$thedate','$name')";

mysql_query($insertpost) or die("Could not insert post");

print "Το θέμα σας αναρτήθηκε , επιστροφή στο <A


href='index.php'>φόρουμ</a>.";

else

64
{

print "<form action='post.php' method='post'>";

print "Όνομα:<br>";

print "<input type='text' name='name' size='20'><br>";

print "Τίτλος:<br>";

print "<input type='text' name='subject' size='20'><br>";

print "Μήνυμα:<br>";

print "<textarea name='yourpost' rows='5' cols='40'></textarea><br>";

print "<input type='submit' name='submit' value='Ανάρτηση'></form>";

print "</td></tr></table>";

?>

Αυτό το αρχείο έχει δύο συνθήκες , αν το submit πατηθεί και αν δεν


πατηθεί. Αν δεν πατηθεί τότε εμφανίζει μια φορμα ώστε να εισαχθούν
στοιχεία, το ονομα σου, ενα θεμα μηνύματος και το μήνυμα. Αν έχει
πατηθεί το submit, ελέγχει πρώτα αν τα απαιτούμενα πεδία name, subject
και post έχουν εισαχθεί και εμφανίζει μήνυμα λάθους αν όχι. Αν όλα έχουν
εισαχθεί τα πάντα τότε εξάγει την τοπική ώρα τόσο σε UNIX μορφή όσο και
σε αναγνώσιμη και εισάγε όλα τα δεδομένα στη βάση.

--------------------------------
Τέλος το reply.php :

<?php

65
include ("config.php");
$con=mysql_connect

($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");

mysql_select_db('opwebgr_elibrary');

print "<link rel='stylesheet' href='styleforum.css' type='text/css'


media='screen' />";

print "<table class='forum-maintables'>";


print "<A href='index.php'>Πίσω στο κεντρικό φόρουμ</a>";
print "<tr class='forum-headline'><td>Απάντηση</td></tr>";

print "<tr class='forum-maintables'><td>";

if(isset($_POST['submit']))

$name=$_POST['name'];

$yourpost=$_POST['yourpost'];

$subject=$_POST['subject'];

$id=$_POST['id'];

if(strlen($name)<1)

print "Δεν πληκτρολογήσατε όνομα.";

else if(strlen($yourpost)<1)

66
print "Δεν πληκτρολογήσατε μήνυμα.";

else

$thedate=date("U");

$displaytime=date("F j, Y, g:i a");


$subject=strip_tags($subject);
$name=strip_tags($name);
$yourpost=strip_tags($yourpost);
$insertpost="INSERT INTO
forum_posts(author,title,post,showtime,realtime,lastposter,parentid)
values('$name','$subject','$yourpost','$displaytime','$thedate','$name','$id')
";

mysql_query($insertpost) or die("Could not insert post");

$updatepost="Update forum_posts set numreplies=numreplies+'1',


lastposter='$name',showtime='$displaytime', lastrepliedto='$thedate' where
postid='$id'";

mysql_query($updatepost) or die("Could not update post");

print "Το θέμα σας αναρτήθηκε , επιστροφή στο <A href='message.php?


id=$id'>αρχικό μήνυμα</a>.";

else

67
$id=$_GET['id'];
print "<form action='reply.php' method='post'>";
print "<input type='hidden' name='id' value='$id'>";
print "Όνομα:<br>";
print "<input type='text' name='name' size='20'><br>";
print "Μήνυμα:<br>";
print "<textarea name='yourpost' rows='5' cols='40'></textarea><br>";
print "<input type='submit' name='submit' value='Απάντηση'></form>";

print "</td></tr></table>";

?>

Παρόμοιος κώδικας με το post.php εκτός ό,τι περνάει μια μυστική


παράμετρο id που δείχνει σε ποιο νήμα απαντάει κανείς. Αφού πατηθεί το
submit , ελέγχει αν τα απαιτούμενα πεδία έχουν εισαχθεί , εισάγει το
μήνυμα μαζί με τα timestamps και μετά αλλάζει το αρχικό μήνυμα στο
οποίο απάντησε κάποιος με τα νεα timestamps και προσθέτει 1 στον
αριθμό των απαντήσεων που έχει λάβει το μήνυμα και θέτει εσάς ως τον
τελευταίο που απάντησε.

Προβολή προσωπικού προφιλ με δανεισμένα βιβλία

1ο βήμα δημιουργία PHP κώδικα :

include ("config.php");
$con=mysql_connect
($dbhost,$dbuser,$dbpass)or die("Cannot connect to database");
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");
$user_id = $_SESSION['username'] ;
mysql_select_db('opwebgr_elibrary');
mysql_query("set names utf8;");

Σύνδεση με τη βάση

68
$query="SELECT user_id FROM users WHERE username ='$user_id'" ;
$result=mysql_query($query);
$row=mysql_fetch_array($result) ;

$query2="SELECT title,year, author,bookdewey,publisher ,datereturn FROM


loans WHERE user_id ='$row[user_id]' " ;
$result2=mysql_query($query2);

Επιλογή από τη βάση users του πεδίου user_id όπου το username ισουται
με το username με το οποιο εχεί εισέλθει ο χρήστης. Κατόπιν επιλογή από
τον πίνακα loans των πεδίων title , year, author,bookdewey,publisher
,datereturn όπου το user_id ισούται με την επιλογή που έγινε
προηγουμένως.

echo " Έχετε δανειστεί τα εξής βιβλία :<br>" ;


while ($row2=mysql_fetch_array($result2))
{

echo "
<table border=1>
<tr><td> Τίτλος:</td> <td><font color=darkred>
$row2[title]</font></td>
</tr>
<tr><td>Συγγραφέας:</td><td> <font
color=darkred>$row2[author]</font></td> </tr>

<tr><td>ΕκδοτικόςΟίκος:</td><td><font
color=darkred>$row2[publisher]</font></td></tr>

<tr><td>Έτος έκδοσης:</td> <td><font


color=darkred>$row2[year]</font></td></tr>

<tr><td>Ημ/νια επιστροφής:</td> <td><font color=darkred><strong>


$row2[datereturn]</strong></font></td> </tr>
</table>

"; }

Εμφάνιση των αποτελεσμάτων / βιβλίων.

69
2.3 Βάση δεδομένων και μεταδεδομένα για τον κατάλογο της
βιβλιοθήκης

Η βάση για όλο το σύστημα έχει τους εξής πίνακες :

Πίνακας books για τα βιβλία , πίνακας counter για τον μετρητή


επισκέψεων , πίνακας forum_posts για τις αναρτήσεις στο φόρουμ ,
πίνακας loans για τους δανεισμούς , πίνακας news για τις ανακοινώσεις ,
πίνακας quotes για τα παραθέματα , πίνακας staff για το προσωπικό ,
πίνακας textweb για κείμενα της σελίδας , πίνακας users για τους χρήστες.

Ο πίνακας counter:

70
Ο πίνακας forum_posts :

Ο πίνακας loans :

71
Ο πίνακας news:

Ο πίνακας quotes:

72
Ο πίνακας staff :

Ο πίνακας textweb :

73
Ο πίνακας users:

Ο πίνακας books :

74
Τα μεταδεδομένα για τον πίνακα των βιβλίων σε μορφή XML :

<?xml version="1.0" encoding="utf-8" ?>


<!--

75
- phpMyAdmin XML Dump
- version 3.2.4
- http://www.phpmyadmin.net
-
- Σύστημα: localhost
- Χρόνος δημιουργίας: 30 Νοε 2010, στις 07:21 AM
- Έκδοση Διακομιστή: 5.0.91-
- Έκδοση PHP: 5.2.6

-->
- <!--
- Βάση: 'opwebgr_elibrary'

-->
- <opwebgr_elibrary>
- <!--
Πίνακας books

-->
- <books>
<isbn>960405998</isbn>
<title>Ασφάλεια δικτύων WEB: ένας βήμα προς βήμα οδηγός</title>
<author>Stein, Lincoln D., Γκαρμπολά, Αθηνά,, Γκαρμπολάς,
Δημήτρης,</author>
<authorforeign>Stein, Lincoln D., Γκαρμπολά, Αθηνά,, Γκαρμπολάς,
Δημήτρης,</authorforeign>
<publisher>ΙΩΝ</publisher>
<dewey>005.8 ST ΜΤΦ</dewey>
<strip>5</strip>
<status>Στο ράφι</status>
<pages>477</pages>
<copy>1</copy>
<tags>Δίκτυα υπολογιστών -- Μέτρα διασφάλισης</tags>
<field>computeretal</field>
<year>2000</year>
</books>
- <books>
<isbn>9603102237</isbn>
<title>Θεωρία του πολέμου : Πόλεμος και πολιτική - πόλεμος, οικονομία
και κοινωνία πόλεμος και επανάσταση - ο θερμός πόλεμος με</title>
<author>Κονδύλης, Παναγιώτης</author>
<authorforeign>Κονδύλης, Παναγιώτης</authorforeign>
<publisher>Θεμέλιο</publisher>
<dewey>355.02 ΚΟΝ</dewey>
<strip>355</strip>
<status>Στο ράφι</status>
<pages>435</pages>

76
<copy>1</copy>
<tags>Στρατιωτική τέχνη και επιστήμη -- Ευρώπη -- Ιστορία</tags>
<field>social</field>
<year>1999</year>
</books>
- <books>
<isbn>9603511706</isbn>
<title>Ανάλυση συστημάτων τεχνολογίας : παραγωγή, κατασκευές,
επικοινωνίες, μεταφορές</title>
<author>Καρβούνης, Σωτήρης Κ.</author>
<authorforeign>Καρβούνης, Σωτήρης Κ.</authorforeign>
<publisher>Σταμούλης</publisher>
<dewey>600 KA</dewey>
<strip>600</strip>
<status>Στο ράφι</status>
<pages>666</pages>
<copy>1</copy>
<tags>Τεχνολογία -- Συστήματα</tags>
<field>technology</field>
<year>1998</year>
</books>
- <books>
<isbn>9603930261</isbn>
<title>Το Εκκρεμές του Φουκώ</title>
<author>Ουμπέρτο Έκο</author>
<authorforeign>Umberto Eco</authorforeign>
<publisher>Ελληνικά Γράμματα</publisher>
<dewey>853 ECO ΜΤΦ</dewey>
<strip>853</strip>
<status>Στο ράφι</status>
<pages>902</pages>
<copy>1</copy>
<tags>Ξένη Λογοτεχνία - Ιταλική Λογοτεχνία</tags>
<field>literature</field>
<year>2000</year>
</books>
- <books>
<isbn>9604105575</isbn>
<title>Οικονομικά και φιλοσοφικά χειρόγραφα</title>
<author>Καρλ Μαρξ</author>
<authorforeign>Karl Marx</authorforeign>
<publisher>Γλάρος</publisher>
<dewey>335.43 MA</dewey>
<strip>335</strip>
<status>Στο ράφι</status>
<pages>200</pages>
<copy>1</copy>

77
<tags>Πολιτική , ΦΙλοσοφία</tags>
<field>social</field>
<year>1975</year>
</books>
- <books>
<isbn>9605383365</isbn>
<title>Βιοκλιματικός σχεδιασμός κτιρίων και περιβάλλοντος χώρου</title>
<author>Ζαχαρόπουλος, Κωνσταντίνος Σ</author>
<authorforeign />
<publisher>Ελληνικό Ανοικτό Πανεπιστήμιο</publisher>
<dewey>720.472 ΒΙΟ</dewey>
<strip>720</strip>
<status>Στο ράφι</status>
<pages>435</pages>
<copy>1</copy>
<tags>Βιοκλιματική αρχιτεκτονική - Αρχιτεκτονική</tags>
<field>art</field>
<year>2001</year>
</books>
- <books>
<isbn>9605383446</isbn>
<title>Κατανόηση της γλώσσας και του πολιτισμού :από τα λατινικά στη
σύγχρονη ισπανική γλώσσα : εγχειρίδιο μελέτης</title>
<author>Μικρός, Γιώργος</author>
<authorforeign />
<publisher>Ελληνικό Ανοικτό Πανεπιστήμιο</publisher>
<dewey>460.9 ΚΑΤ</dewey>
<strip>460</strip>
<status>Στο ράφι</status>
<pages>448</pages>
<copy>1</copy>
<tags>Iσπανική γλώσσα - Ιστορία</tags>
<field>language</field>
<year>2001</year>
</books>
- <books>
<isbn>9607105192</isbn>
<title>Μελέτες για την ψυχανάλυση</title>
<author>Σίγκουντ Φρόϋντ</author>
<authorforeign>Freud Sigmund</authorforeign>
<publisher>Επίκουρος</publisher>
<dewey>150.1952 FRE ΜΤ</dewey>
<strip>150</strip>
<status>Στο ράφι</status>
<pages>446</pages>
<copy>2</copy>
<tags>Ψυχανάλυση - Ψυχολογία</tags>

78
<field>philosophy</field>
<year>1996</year>
</books>
- <books>
<isbn>9607577116</isbn>
<title>Στατιστική</title>
<author>Μπαγιάτης, Κώστας Β.</author>
<authorforeign />
<publisher>Χριστοδουλίδη</publisher>
<dewey>519.5 ΜΠΑ</dewey>
<strip>519</strip>
<status>Στο ράφι</status>
<pages>318</pages>
<copy>1</copy>
<tags>Στατιστική - Μαθηματικά</tags>
<field>science</field>
<year>2000</year>
</books>
- <books>
<isbn>9608105579</isbn>
<title>Ασφάλεια πληροφοριακών συστημάτων</title>
<author>Κάτσικας Σωκράτης, Γκρίτζαλης Δημήτρης, Γκρίτζαλης
Στέφανος</author>
<authorforeign />
<publisher>Εκδόσεις Νέων Τεχνολογιών</publisher>
<dewey>005.8 ΑΣΦ</dewey>
<strip>5</strip>
<status>Δανεισμένο</status>
<pages>532</pages>
<copy>1</copy>
<tags>Πληροφοριακά συστήματα -- Ασφάλεια</tags>
<field>computeretal</field>
<year>2004</year>
</books>
- <books>
<isbn>9608512255</isbn>
<title>Συστήματα βάσεων δεδομένων SQL</title>
<author>Γιαννακουδάκης, Εμμανουήλ Ι.</author>
<authorforeign>Γιαννακουδάκης, Εμμανουήλ Ι.</authorforeign>
<publisher>Ευγ. Μπένου</publisher>
<dewey>001.642 5 ΓΙΑ</dewey>
<strip>1</strip>
<status>Στο ράφι</status>
<pages>542</pages>
<copy>1</copy>
<tags>Γλώσσα προγραμματισμού SQL</tags>
<field>computeretal</field>

79
<year>1999</year>
</books>
- <books>
<isbn>9608573513</isbn>
<title>Η Αποκάλυψη του Ιωάννη : εξηγημένη από τον δάσκαλο Νικόλαο Α.
Μαργιώρη</title>
<author>Κατσιάμπας, Ηλίας Λ</author>
<authorforeign />
<publisher>Ομακοείο Τρικάλων</publisher>
<dewey>228 KA</dewey>
<strip>228</strip>
<status>Στο ράφι</status>
<pages>191</pages>
<copy>1</copy>
<tags>Χριστιανισμός - Θρησκεία</tags>
<field>religion</field>
<year>1999</year>
</books>
- <books>
<isbn>9609133908</isbn>
<title>Ψηφιακή επεξεργασία σήματος : εισαγωγή θεωρία και
εφαρμογές</title>
<author>Σύρκος, Γεώργιος Π.</author>
<authorforeign />
<publisher>Παπασωτηρίου</publisher>
<dewey>621.38 ΣΥ</dewey>
<strip>621</strip>
<status>Στο ράφι</status>
<pages>413</pages>
<copy>1</copy>
<tags>Κυκλώματα - Ψηφιακά φίλτρα</tags>
<field>technology</field>
<year>2000</year>
</books>
- <books>
<isbn>9789600333084</isbn>
<title>Μαθήματα HTML Από το απλό στο σύνθετο Μάθετε με απλό τρόπο
να κατασκευάζετε σελίδες για τον παγκόσμιο ιστό</title>
<author>Ρετάλης Συμεών</author>
<authorforeign>Ρετάλης, Συμεών</authorforeign>
<publisher>ΚΑΣΤΑΝΙΩΤΗ</publisher>
<dewey>005.72 ΡΕΤ</dewey>
<strip>5</strip>
<status>Στο ράφι</status>
<pages>90</pages>
<copy>1</copy>
<tags>Ιστοσελίδες - HTML</tags>

80
<field>computeretal</field>
<year>2003</year>
</books>
- <books>
<isbn>9789601903262</isbn>
<title>Γιατί το Βυζάντιο</title>
<author>Γλύκατζη-Ahrweiler, Ελένη</author>
<authorforeign>Ahrweiler</authorforeign>
<publisher>Ελληνικά Γράμματα</publisher>
<dewey>949.5 ΓΛΥ</dewey>
<strip>949</strip>
<status>Στο ράφι</status>
<pages>287</pages>
<copy>1</copy>
<tags>Βυζαντινή αυτοκρατορία - Ιστορία</tags>
<field>history</field>
<year>2009</year>
</books>
</opwebgr_elibrary>

81
3.Βιβλιογραφία

Larry Ullman, "PHP for the World Wide Web: Visual QuickStart Guide, 3rd
Edition" , Peachpit Press , 2008

Leon Atkinson, Core PHP Programming, Prentice Hall 2003

Andrew Curioso, Ronald Bradford, Patrick Galbraith , Expert PHP and MySQL,
Wrox 2010

Συμεών Ρετάλης , Γεώργιος Τσέλιος , Μαθήματα HTML: Από το απλό στο


σύνθετο,Καστανιώτη,2003

Matt Zandstra , Sams Teach Yourself PHP in 24 Hours, Sams , 2002

Julie C. Meloni, Sams Teach Yourself PHP, MySQL and Apache All in One ,
Sams ,2008

Ryan Stephens, Sams Teach Yourself SQL in 24 Hours,Sams. 2002

82