Professional Documents
Culture Documents
ΨΗΦΙΑΚΟ ΒΙΒΛΙΟΠΩΛΕΙΟ
ΨΗΦΙΑΚΟ ΒΙΒΛΙΟΠΩΛΕΙΟ
Πηπρηαθή Δξγαζία
Σελίδα | 1
ABSTRACT
"Digital Books" is a website where users can choose their favorite books, and then
purchase them into the internet.
This application is a 3-level users website (administrator, registered user, user as a
guest), where each of them can perform the functions that correspond to him, according to his
rights, as they will be described below.
The Web application was developed with the programming languages PHP, MYSQL
and Html, and enables access and navigation to users through the Internet. The administrator
has unlimited rights, as he can change, modify and correct details of the application. He can
also supervise the actions of the members and their profile information.
According to the above, a user friendly website was developed which meets all the
requirements of usability and security of personal data. At the same time it ensures the
security of information which every registered member enters or modifies.
Various programs were used. More specifically, the program Dreamweaver CS3 for
the website design, Flash CS3 for the creation of graphics and a combination of PHP -
MySQL – Apache tools for the creation of the database, which are free distributed on the
internet and they are analyzed in detail in forthcoming chapters. Moreover, the freeware tool
phpMyAdmin was used which provides a graphical environment of the database system
management. The HTML language in conjunction with the PHP language were used for the
website programming, and SQL language for the database programming.
For any further questions that users may have, there has been developed a
communication form with the administrator, who could offer users further details via e-mail.
Σελίδα | 2
ΤΝΟΦΗ
Ζ ηζηνζειίδα “ΦΖΦΗΑΚΟ ΒΗΒΛΗΟΠΧΛΔΗΟ” είλαη έλαο ηζηνρψξνο ζηνλ νπνίν νη ρξήζηεο
κπνξνχλ λα δηαιέγνπλ ηα αγαπεκέλα ηνπο βηβιία, θαη έπεηηα λα κεηαβαίλνπλ ζηελ αγνξά ηνπο κέζσ
ηνπ Παγθφζκηνπ Ηζηνχ.
Ζ ζπγθεθξηκέλε εθαξκνγή απνηειεί κηα ηζηνζειίδα 3 επηπέδσλ ρξεζηψλ, (δηαρεηξηζηήο,
ρξήζηεο κε πξνλφκηα, ρξήζηεο επηζθέπηεο), φπνπ ν θαζέλαο απφ απηνχο κπνξεί λα εθηειέζεη ηηο
ιεηηνπξγίεο πνπ ηνπ αληηζηνηρνχλ, ζχκθσλα κε ηα δηθαηψκαηα ηνπ, φπσο ζα πεξηγξαθνχλ παξαθάησ.
Ζ Ηζηνζειίδα αλαπηχρζεθε κε ηηο γιψζζεο πξνγξακκαηηζκνχ PHP, MYSQL θαη Html, θαη
δίλεη ηε δπλαηφηεηα πξφζβαζεο θαη πινήγεζεο ζηνπο ρξήζηεο κέζσ ηνπ Παγθφζκηνπ Ηζηνχ. Ο
δηαρεηξηζηήο έρεη απεξηφξηζηα δηθαηψκαηα, δειαδή λα αιιάδεη, λα ηξνπνπνηεί θαη λα δηνξζψλεη
ζηνηρεία ηεο εθαξκνγήο θαη λα επηβιέπεη ηηο ελέξγεηεο ησλ κειψλ θαη ηα ζηνηρεία απηψλ.
Με βάζε ηα παξαπάλσ αλαπηχρζεθε κηα θηιηθή πξνο ην ρξήζηε ηζηνζειίδα, πνπ πιεξνί φιεο
ηηο πξνυπνζέζεηο επρξεζηίαο θαη αζθάιεηαο πξνζσπηθψλ δεδνκέλσλ. Σαπηφρξνλα δηαζθαιίδεη ηνλ
έιεγρν ησλ ζηνηρείσλ πνπ εηζάγεη ή ηξνπνπνηεί θάζε εγγεγξακκέλν κέινο.
Πην ζπγθεθξηκέλα, ρξεζηκνπνηήζεθε ην πξφγξακκα Dreamweaver CS3 γηα ηνλ ζρεδηαζκφ ηεο
ηζηνζειίδαο, ην Flash CS3 γηα ηελ δεκηνπξγία γξαθηθψλ θαη γηα ηελ δεκηνπξγία ηεο βάζεο δεδνκέλσλ
ρξεζηκνπνηήζεθε ν ζπλδπαζκφο ησλ εξγαιείσλ PHP – MySQL – Apache πνπ δηαλέκνληαη δσξεάλ
ζην δηαδίθηπν θαη αλαιχνληαη δηεμνδηθά ζηα επφκελα θεθάιαηα. Αθφκε ρξεζηκνπνηήζεθε θαη ην
εξγαιείν phpMyAdmin ην νπνίν επίζεο δηαλέκεηαη δσξεάλ θαη παξέρεη έλα γξαθηθφ πεξηβάιινλ
δηαρείξηζεο ηνπ ζρεζηαθνχ ζπζηήκαηνο βάζεο δεδνκέλσλ. Υξεζηκνπνηήζεθε ε γιψζζα
πξνγξακκαηηζκνχ HTML ζε ζπλδπαζκφ κε ηελ γιψζζα PHP γηα ηνλ πξνγξακκαηηζκφ ηεο
ηζηνζειίδαο, θαη ε γιψζζα πξνγξακκαηηζκνχ SQL γηα ηνλ πξνγξακκαηηζκφ ηεο βάζεο δεδνκέλσλ.
Γηα νπνηαδήπνηε απνξία ηνπ ρξήζηε έρεη ζρεδηαζηεί θφξκα επηθνηλσλίαο κε ηνλ δηαρεηξηζηεί
ηεο ηζηνζειίδαο, ν νπνίνο ζηέιλεη ηηο αλάινγεο δηεπθξηλήζεηο ζην email ηνπ ρξήζηε.
Σελίδα | 3
ΠΗΝΑΚΑ ΠΔΡΗΔΥΟΜΔΝΧΝ
ABSTRACT ........................................................................................................................................... 2
ΤΝΟΦΗ ............................................................................................................................................... 3
ΚΔΦΑΛΑΙΟ 1: ΔΙΑΓΧΓΗ ................................................................................................................ 7
1.1 Πξφινγνο ..................................................................................................................... 7
1.2 Κίλεηξν γηα ηελ δηεμαγσγή ηεο εξγαζίαο .................................................................... 7
1.3 θνπφο θαη ηφρνη ηεο εξγαζίαο.................................................................................. 7
1.4 Γνκή ηεο εξγαζίαο ....................................................................................................... 8
ΚΔΦΑΛΑΙΟ 2: ΜΔΘΟΓΟΛΟΓΙΑ ΤΛΟΠΟΙΗΗ ......................................................................... 9
2.1 Μέζνδνο Αλάιπζεο θαη Αλάπηπμεο Πηπρηαθήο .......................................................... 9
2.1.1 Γλσζηά ειεθηξνληθά βηβιηνπσιεία................................................................................. 9
2.1.2 Γηακφξθσζε .................................................................................................................. 10
2.2 Σερλνινγία................................................................................................................. 10
2.2.1 Γπλακηθέο Σνπνζεζίεο................................................................................................... 11
2.2.2 HTML............................................................................................................................ 11
2.2.3 PHP................................................................................................................................ 12
2.2.4 ρεδίαζε Βάζεσλ δεδνκέλσλ ....................................................................................... 19
2.2.5 Καλνληθέο Παξαζηάζεηο ζπκβαηέο κε Perl ................................................................... 21
2.2.6 Γνκή Σνπνζεζίαο .......................................................................................................... 22
ΚΔΦΑΛΑΙΟ 3: ΥΔΓΙΟ ΓΡΑΗ ΓΙΑ ΣΗΝ ΔΚΠΟΝΗΗ ΣΗ ΔΡΓΑΙΑ .......................... 24
3.1 State of Art ζην ρψξν ησλ ειεθηξνληθψλ βηβιηνπσιείσλ. ........................................ 24
3.2 State Of Art ζηελ ηερλνινγία .................................................................................... 30
3.2.1 Γηαδίθηπν....................................................................................................................... 30
3.2.2 Παγθφζκηνο Ηζηφο.......................................................................................................... 30
3.2.3 Σνπνζεζίεο Ηζηνχ θαη Ηζηνζειίδεο ................................................................................ 31
3.2.4 ρεδηαζκφο ειίδσλ Ηζηνχ ............................................................................................ 31
3.2.5 Φφξκεο Ηζηνχ................................................................................................................. 32
3.2.6 Γηεχζπλζε IP ................................................................................................................. 32
3.2.7 Domain Name System ................................................................................................... 32
3.2.8 Φπιινκεηξεηήο Ηζηνχ .................................................................................................. 33
3.2.9 URL ............................................................................................................................... 33
3.2.10 Δπηθνηλσλία κέζσ Internet ............................................................................................ 34
3.2.11 Μεραλή αλαδήηεζεο ..................................................................................................... 34
3.2.12 Ζιεθηξνληθφ Δκπφξην ................................................................................................... 35
Σελίδα | 4
3.2.13 Αζθάιεηα ζην Internet................................................................................................... 35
3.3 Υξνλνδηάγξακκα Δξγαζίαο ....................................................................................... 37
ΚΔΦΑΛΑΙΟ 4: ΚΤΡΙΟ ΜΔΡΟ ΠΣΤΥΙΑΚΗ ............................................................................. 38
4.1 Ρφινη θαη δηθαηψκαηα πξφζβαζεο ............................................................................. 38
4.1.1 Λεηηνπξγίεο Γηαρεηξηζηή................................................................................................ 38
4.1.2 Λεηηνπξγίεο Υξήζηε-Μέινπο ........................................................................................ 38
4.1.3 Λεηηνπξγίεο Υξήζηε-Δπηζθέπηε ................................................................................... 39
4.1.4 Γεκηνπξγία Υξεζηψλ θαη Πξνλνκίσλ........................................................................... 39
4.2 ρεδηαζκφο Ηζηνρψξνπ .............................................................................................. 41
4.2.1 Μνξθνπνίεζε ειίδσλ κε Φχιια CSS......................................................................... 41
4.2.2 Γεκηνπξγία Γηαηάμεσλ κε Πίλαθεο ............................................................................... 46
4.2.3 χλδεζκνη ...................................................................................................................... 47
4.2.4 Γηαδηθαζία θαηαζθεπήο ηνπ ηζηνρψξνπ ........................................................................ 47
4.3 Γεκηνπξγία Flash Animation..................................................................................... 62
4.4 Γεκηνπξγία Βάζεο Γεδνκέλσλ – Bookstore ............................................................. 66
4.4.1 Ολνκαζία ηνηρείσλ ...................................................................................................... 66
4.4.2 Δπηινγή ηχπνπ ζηειψλ .................................................................................................. 66
4.4.3 Πεξηγξαθή Πηλάθσλ ...................................................................................................... 68
4.5 Πξνγξακκαηηζκφο κε ηελ PHP .................................................................................. 77
4.5.1 Δγγξαθή Υξήζηε ........................................................................................................... 77
4.5.2 Δίζνδν – Έμνδν απφ ηνλ Λνγαξηαζκφ ηνπ Υξήζηε ...................................................... 85
4.5.3 Δπηθνηλσλία κε ηνλ δηαρεηξηζηή .................................................................................... 90
4.5.4 Γεκηνπξγία Forum......................................................................................................... 92
4.5.5 Δκθάληζε Υξεζηψλ ....................................................................................................... 95
4.5.6 Γηαγξαθή Υξήζηε ......................................................................................................... 98
4.5.7 Αιιαγή ηνηρείσλ Λνγαξηαζκνχ ................................................................................ 101
4.4.8 Δκθάληζε Βηβιίσλ ....................................................................................................... 106
4.5.9 Αλαδήηεζε Βηβιίσλ .................................................................................................... 113
4.5.10 Λίζηα αγαπεκέλσλ βηβιίσλ ........................................................................................ 116
4.5.11 Καιάζη Αγνξψλ ........................................................................................................... 122
4.5.12 Οινθιήξσζε Αγνξάο .................................................................................................. 130
4.5.13 Παξαγγειία ηνπ ρξήζηε .............................................................................................. 132
4.5.14 Πίλαθαο αγνξψλ .......................................................................................................... 134
4.5.15 Αγνξέο Υξεζηψλ ......................................................................................................... 135
Σελίδα | 5
4.5.16 Γηαγξαθή Παξαγγειίαο ............................................................................................... 136
4.5.17 Πξνζζήθε Βηβιίνπ ...................................................................................................... 138
4.6 Αζθάιεηα Ηζηνρψξνπ .............................................................................................. 151
4.7 Γηαδηθαζία Πιεξσκήο ............................................................................................. 152
ΚΔΦΑΛΑΙΟ 5: ΑΠΟΣΔΛΔΜΑΣΑ .............................................................................................. 153
5.1 πκπεξάζκαηα ......................................................................................................... 153
5.2 Μειινληηθή Δξγαζία θαη Δπεθηάζεηο ..................................................................... 153
ΒΙΒΛΙΟΓΡΑΦΙΑ ............................................................................................................................... 155
ΠΑΡΑΡΣΗΜΑΣΑ ............................................................................................................................. 156
ΠΑΡΑΡΣΖΜΑ Α ............................................................................................................... 156
Οδεγίεο Δγθαηάζηαζεο ............................................................................................................... 156
ΠΑΡΑΡΣΖΜΑ Β ................................................................................................................ 156
DreamWeaver CS3 ...................................................................................................................... 156
MYSQL ....................................................................................................................................... 156
Πξνγξάκκαηα ζρεδίαζεο βάζεο δεδνκέλσλ ............................................................................... 156
χλδεζε ζηε MySQL .................................................................................................................. 156
Σνπηθφο Server Apache ............................................................................................................... 156
Photoshop CS3 ............................................................................................................................ 156
Flash CS3 .................................................................................................................................... 156
phpMyAdmin .............................................................................................................................. 156
Σελίδα | 6
ΚΔΦΑΛΑΙΟ 1: ΔΙΑΓΧΓΗ
1.1 Πξόινγνο
ην πιαίζην ησλ ζπνπδψλ ζην ηκήκα Πιεξνθνξηθήο ηνπ Σ.Δ.Η. Ζξαθιείνπ
εθπνλήζεθε πηπρηαθή εξγαζία κε ζέκα «Φεθηαθφ Βηβιηνπσιείν» φπνπ γίλεηαη κηα
πξνζπάζεηα λα δεκηνπξγεζεί έλαο ηξφπνο επηθνηλσλίαο ηεο επηρείξεζεο κε ηνπο πειάηεο ηεο.
Θα είλαη κηα εθαξκνγή παξαγγειίαο βηβιίσλ. Θα παξνπζηαζηεί κηα ηζηνζειίδα φπνπ ζα
κπνξεί θάπνηνο πειάηεο λα έρεη ηε δπλαηφηεηα λα παξαγγέιλεη πξντφληα δηακέζνπ ηνπ
Γηαδηθηχνπ απφ ην ζπίηη ηνπ. Ο πειάηεο ζα έρεη ηε δπλαηφηεηα λα επηιέμεη φπνην βηβιίν
επηζπκεί θαη λα δψζεη ηελ παξαγγειία ηνπ. Ο θάζε πειάηεο απαηηείηαη λα γίλεη κέινο έηζη
ψζηε λα πξαγκαηνπνηήζεη θάπνηα αγνξά.
Δπίζεο, ππάξρεη δπλαηφηεηα επηθνηλσλίαο ησλ ρξεζηψλ ζε κηα ζειίδα ε νπνία
εκπεξηέρεη ζρνιηαζκνχο ησλ βηβιίσλ. Ο θάζε ρξήζηεο ζπκπιεξψλνληαο ηελ θφξκα ηεο ζειίδαο
κπνξεί λα θάλεη ηελ δηθή ηνπ θξηηηθή. Ζ επηθνηλσλία κε ηνλ δηαρεηξηζηή πξαγκαηνπνηείηαη ζε
δηαθνξεηηθή ζειίδα ζηελ νπνία ν ρξήζηεο ζηέιλεη έλα κήλπκα απεπζείαο ζην email ηνπ δηαρεηξηζηή.
Σέινο γηα λα γίλεη ε ηζηνζειίδα πην ειθπζηηθή πξνο ηνλ πειάηε είλαη απαξαίηεηε ε
ρξήζε γξαθηθψλ.
Σελίδα | 7
1.4 Γνκή ηεο εξγαζίαο
ην 1ν θεθάιαην, παξνπζηάδεηαη ε εηζαγσγή, ζηελ νπνία πεξηγξάθνληαη ν ζθνπφο
δεκηνπξγίαο ηεο ηζηνζειίδαο, ην θίλεηξν γηα ηελ πινπνίεζή ηεο, κηα κηθξή πεξίιεςε θαη ε δνκή ηεο
εξγαζίαο.
ην 2ν θεθάιαην, παξνπζηάδεηαη ε κεζνδνινγία πινπνίεζεο ηεο εξγαζίαο.
ην 3ν θεθάιαην, παξνπζηάδεηαη ην ζρέδην κε ην νπνίν αλαπηχρζεθε ε ηζηνζειίδα.
Στθ ςυνζχεια, παρουςιάηεται ην Κχξην Μέξνο ηεο πηπρηαθήο. πγθεθξηκέλα, ζην 4ν
θεθάιαην, παξνπζηάδεηαη αλαιχνληαη νη εηδηθέο απαηηήζεηο ηνπ ινγηζκηθνχ θαη ζπγθεθξηκέλα νη
ιεηηνπξγηθέο απαηηήζεηο γηα θάζε επίπεδν ρξεζηψλ. Ο ηξφπνο δεκηνπξγίαο ηεο Βάζεο Γεδνκέλσλ. Ζ
δηαδηθαζία κε ηελ νπνία ζρεδηάζηεθε ν ηζηνρψξνο. Καζψο θαη νη κέζνδνο δεκηνπξγίαο ινγαξηαζκνχ
θαη αγνξάο ησλ βηβιίσλ πνπ ν ρξήζηεο επηζπκεί.
Έπεηηα παξαηίζεηαη ε Βηβιηνγξαθία πάλσ ζηελ νπνία βαζίζηεθε ε πξαγκάησζε ηεο
ηζηνζειίδαο.
Καη ηέινο, παξνπζηάδνληαη ηα παξαξηήκαηα. Αξρηθά παξαηίζεληαη ν ηξφπνο εγθαηάζηαζεο
ηνπ πξνγξάκκαηνο XAMPP ην νπνίν εκπεξηέρεη ηελ PHP, ηελ MySQL, ηνλ Apache server θαη ην
πξφγξακκα phpMyAdmin.
Σελίδα | 8
ΚΔΦΑΛΑΙΟ 2: ΜΔΘΟΓΟΛΟΓΙΑ
ΤΛΟΠΟΙΗΗ
2.1 Μέζνδνο Αλάιπζεο θαη Αλάπηπμεο Πηπρηαθήο
Με ηελ είζνδν ηεο ηερλνινγίαο ε έλλνηα ηνπ βηβιηνπσιείνπ κεηεμειίρζεθε. Ζ δηαθίλεζε ηνπ
βηβιίνπ κέζσ ηνπ Παγθφζκηνπ Ηζηνχ είλαη πιένλ κηα πξαγκαηηθφηεηα. Με ηελ εκθάληζε ηνπ
Γηαδηθηχνπ, ινηπφλ, ην βηβιηνπσιείν απνθηά λέεο δηαζηάζεηο θαη γίλεηαη πξνζβάζηκν απφ φιν ηνλ
θφζκν γηα λα πξνζθέξεη κεγαιχηεξε επθνιία ζηηο ζπλαιιαγέο ησλ πειαηψλ-ρξεζηψλ. Δίλαη
απηνλφεην φηη ην ειεθηξνληθφ βηβιηνπσιείν δηαθνξνπνηείηαη απφ ην ζπκβαηφ φζνλ αθνξά ηε
εκθάληζε, ηελ εμππεξέηεζε ησλ πειαηψλ-ρξεζηψλ θαζψο θαη ζηνλ ηξφπν ζπλαιιαγήο καδί ηνπο. Με
ηελ εκθάληζε ηνπ ειεθηξνληθνχ εκπνξίνπ νη ρξήζηεο ηνπ Γηαδηθηχνπ, αθφηνπ επηιέμνπλ ην βηβιίν
πνπ επηζπκνχλ απφ ην site ηνπ εθάζηνηε βηβιηνπσιείνπ, έρνπλ ηελ δπλαηφηεηα λα πξνβνχλ ζηελ
online αγνξά ηνπ.
Σν ειεθηξνληθφ βηβιηνπσιείν, ινηπφλ, δελ είλαη ηίπνηα άιιν απφ κηα δηεχζπλζε θαη κηα
ζειίδα ζην Γηαδίθηπν. Δίλαη έλα θαηάζηεκα ρσξίο ηνπηθνχο θαη ρξνληθνχο πεξηνξηζκνχο (ρσξίο νπξέο
θαη θαζπζηεξήζεηο) πνπ δηαζέηεη απεξηφξηζηεο δπλαηφηεηεο θαη πειάηεο απφ φιν ηνλ θφζκν. Ο
θαζέλαο κπνξεί λα αγνξάζεη ην βηβιίν νπνηνπδήπνηε ζπγγξαθέα θαη εθδφηε, αλεμαξηήησο γιψζζαο,
αιιά κφλν ειεθηξνληθά. Ζ επηθνηλσλία γίλεηαη κέζσ ειεθηξνληθνχ ηαρπδξνκείνπ (email) θαη νη
ζπλαιιαγέο πξαγκαηνπνηνχληαη κέζσ πηζησηηθψλ θαξηψλ.
Greek books
Πξφθεηηαη γηα ηνλ ηζηφηνπν ελφο απφ ηα κεγαιχηεξα ειιεληθά ειεθηξνληθά βηβιηνπσιεία.
Φξνληίδνπλ λα θάλνπλ ηηο αγνξέο ειθπζηηθφηεξεο κε πξνζθνξέο, λέεο θπθινθνξίεο,
πξνηεηλφκελνπο ηίηινπο, δσξεάλ απνζηνιέο απφ θάπνην χςνο αγνξψλ. Δπίζεο, πξνζθέξεηαη
κία εθηελήο ζπιινγή απφ ηίηινπο πνπ θπθινθνξνχλ απηή ηε ζηηγκή ζηα βηβιηνπσιεία ηεο
ρψξαο. Δθηφο απφ βηβιία φκσο παξέρεη παηδηθά είδε, ηαηλίεο, ειεθηξνληθά παηρλίδηα θ.α. Ζ
Σελίδα | 9
εκθάληζε ηνπ θαιαζηνχ αγνξάο θαη ηεο Wishlist ηεο ηζηνζειίδαο καο βαζίζηεθε ζε απηήλ ηνπ
ζπγθεθξηκέλνπ ηζηφηνπνπ.
Bibliohora
Ζ Bibliohora είλαη έλαο ηζηφηνπνο θαζαξά αθηεξσκέλνο ζην βηβιίν. Πάλσ ζηελ δηακφξθσζε
απηνχ ηνπ ηζηνρψξνπ βαζίζηεθε ε δεκηνπξγία ηεο ηζηνζειίδαο. ηελ αξρή βξίζθεηαη ην
κελνχ θαη αθξηβψο απφ θάησ έλα γξαθηθφ κέζσ ηνπ νπνίνπ εκθαλίδνληαη ηα πξνηεηλφκελα
βηβιία. Αξηζηεξά, φπσο θαη ζηα πεξηζζφηεξα ειεθηξνληθά βηβιηνπσιεία, βξίζθνληαη νη
θαηεγνξίεο ησλ βηβιίσλ. Ζ εκθάληζε ηεο κεραλήο αλαδήηεζεο θαη ν ρψξνο πνπ
θαηαιακβάλεη ζηελ ηζηνζειίδα βαζίζηεθε ζηελ κεραλή αλαδήηεζεο ηεο Bibliohoras.
Δπίζεο, ζηελ αξρηθή ζειίδα γίλεηαη ε εκθάληζε ησλ λέσλ θαηεγνξηψλ. Ζ δηαθνξά βξίζθεηαη
ζηελ θφξκα εηζφδνπ πνπ ζηελ πεξίπησζε ηνπ δηθνχ καο ηζηνρψξνπ ηνπνζεηήζεθε ζηελ
αξρηθή ζειίδα.
2.1.2 Γηακόξθσζε
Φπζηθά, θάζε βηβιηνπσιείν αθνινπζεί ηελ δηθή ηνπ πνιηηηθή θαη ηαθηηθή ζηελ νξγάλσζε ηνπ
θαηαζηήκαηνο. Σηο πεξηζζφηεξεο θνξέο ηα γξαθηθά είλαη ιίγα, ελψ κεγαιχηεξε ζεκαζία δίλεηαη ζηελ
πεξηγξαθή ησλ βηβιίσλ. Σα ζηνηρεία πεξηγξαθήο, εθηφο απφ ηνλ ηίηιν, ην ζπγγξαθέα θαη ηνλ εθδφηε
πεξηιακβάλνπλ θαη κηα θσηνγξαθία ηνπ εμψθπιινπ, ην ISBN, ηνλ αξηζκφ ησλ ζειίδσλ θαη ελλνείηαη
ηελ ηηκή. Δπίζεο, ππάξρεη κηα ιίζηα κε ηα Best Sellers, δειαδή ηα θαιχηεξα βηβιία ζχκθσλα κε ηηο
πσιήζεηο, κηα άιιε κε ηηο πην πξφζθαηεο θπθινθνξίεο, θαη κηα ιίζηα κε ηα βηβιία πνπ πξνηείλεη ην
εθάζηνηε βηβιηνπσιείν. Δθηφο απφ ιίζηεο βηβιίσλ είλαη πηζαλφ ε χπαξμε κηαο ελφηεηαο ζρνιηαζκνχ
ησλ βηβιίσλ, φπνπ ν ρξήζηεο κπνξεί λα δηαβάζεη ηα ζρφιηα θαη ηελ θξηηηθή ησλ αλαγλσζηψλ πξηλ
απνθαζίζεη γηα θάπνηα αγνξά ηνπ.
Ζ δηακφξθσζε ηεο θεληξηθή ζειίδα δηαθέξεη ζε θάζε ειεθηξνληθφ βηβιηνπσιείν. ηηο
πεξηζζφηεξεο πεξηπηψζεηο ππάξρεη ην βαζηθφ κελνχ κε ηηο θχξηεο ελφηεηεο ηνπ ηζηφηνπνπ, θαζψο θαη
κηα κεραλή αλαδήηεζεο ψζηε ν ρξήζηεο λα εληνπίζεη πην εχθνια ην βηβιίν πνπ επηζπκεί. Δπίζεο,
πνιχ ζεκαληηθή είλαη ε θαηεγνξηνπνίεζε ησλ βηβιίσλ γηα ηελ θαιχηεξε πινήγεζε ηνπ ρξήζηε. πρλά
ππάξρεη ζειίδα κε πιεξνθνξίεο γηα ην ηζηνξηθφ, ηνπο ζηφρνπο θαη ηελ αηηία δεκηνπξγίαο ηνπ
ειεθηξνληθνχ βηβιηνπσιείνπ.
Γηα ηελ δηεθπεξαίσζε ηεο ζπλαιιαγήο ν ρξήζηεο πξέπεη λα ζπκπιεξψζεη ηα ζηνηρεία ηνπ ζε
κηα ειεθηξνληθή θφξκα πνπ είλαη απαξαίηεηα γηα λα πξαγκαηνπνηεζεί ε παξαγγειία. ε φια ηα
ειεθηξνληθά βηβιηνπσιεία ππάξρεη ην θαιάζη αγνξψλ ζην νπνίν ν ρξήζηεο ηνπνζεηεί βηβιία πνπ ησλ
ελδηαθέξνπλ, επηιέγεη ηελ πνζφηεηα ησλ βηβιίσλ πνπ ζέιεη λα αγνξάζεη θαη πξνρσξεί ζηελ πιεξσκή
ή ζηελ αθχξσζε ηεο παξαγγειίαο.
2.2 Σερλνινγία
Ζ ηζηνζειίδα ζα θαηαζθεπαζηεί κε ην πξφγξακκα ζρεδίαζεο ηζηνζειίδσλ DreamWeaver. To
DreamWeaver είλαη ην θνξπθαίν πξφγξακκα δεκηνπξγίαο θαη επεμεξγαζίαο ηζηνζειίδσλ πνπ
επηηξέπεη ζην δηαρεηξηζηή ζπζηήκαηνο λα νξγαλψλεη ην πεξηερφκελν θαη λα πξνζαξκφδεη ηελ
παξνπζίαζε ηνπ ηζηνρψξνπ. Με ην DreamWeaver κπνξνχκε λα δεκηνπξγήζνπκε θφξκεο (forms),
Σελίδα | 10
πιαίζηα (frames), πίλαθεο (tables) θαη άιια αληηθείκελα ηεο HTML. Δπίζεο, κπνξεί λα
ρξεζηκνπνηεζεί θαη γηα ηε δεκηνπξγία εθαξκνγψλ πνιπκέζσλ. Έρεη δπλαηφηεηεο γηα δεκηνπξγία
δπλακηθήο HTML (DHMTL), δεκηνπξγία επηπέδσλ (layers) θαη ζπγγξαθή ζελαξίσλ (scripts). Σέινο,
πεξηέρεη δηθέο ηνπ ζπκπεξηθνξέο (behaviors), πνπ είλαη έηνηκα scripts ηα νπνία κπνξνχκε λα
πξνζζέζνπκε πνιχ εχθνια ζ‟ έλα αληηθείκελν.
2.2.2 HTML
Σα αξρηθά HTML ( HyperText Markup Language) είλαη κηα γιψζζα ζήκαλζεο δειαδή
απνηεινχληαη απφ ιέμεηο-θιεηδηά, κέζα ζε γσληαθέο αγθχιεο (φπσο <html>). Οη εηηθέηεο HTML
θαλνληθά έξρνληαη ζε δεχγε, φπσο <h1> θαη </ h1>. Σα HTML ζηνηρεία απνηεινχλ ηα δνκηθά
ζηνηρεία ηνπ ζπλφινπ ησλ ηζηνρψξσλ. Ο ζθνπφο ελφο web browser είλαη λα δηαβάζεηε έγγξαθα
HTML θαη λα ηα ζπλζέζεη ζε νπηηθφ ή αθνπζηηθφ ηζηνζειίδεο. Σν πξφγξακκα πεξηήγεζεο δελ
εκθαλίδεη ηηο εηηθέηεο HTML, αιιά ρξεζηκνπνηεί ηηο εηηθέηεο γηα λα εξκελεχζεη ην πεξηερφκελν ηεο
ζειίδαο. Δπίζεο, παξέρεη έλα κέζν γηα ηε δεκηνπξγία δνκεκέλσλ εγγξάθσλ ππνδειψλνληαο δνκηθή
ζεκαζηνινγία γηα ην θείκελν, φπσο είλαη νη θεθαιίδεο, νη παξάγξαθνη, θαηάινγνη, ζπλδέζεηο, θαη
άιια ζηνηρεία. Δίλαη δπλαηή ε ελζσκάησζε scripts ζε γιψζζεο φπσο JavaScript πνπ επεξεάδνπλ ηε
ζπκπεξηθνξά ησλ HTML ηζηνζειίδσλ. Αθφκε φκσο ππάξρνπλ δηαθνξέο ζηελ απεηθφληζε θάπνηαο
ζειίδαο απφ δηαθνξεηηθνχο browsers εηδηθά φηαλ πεξηιακβάλνληαη θαη εθαξκνγέο Javascript.
Σα πξνεπηιεγκέλεο ραξαθηεξηζηηθά γηα θάζε ζηνηρείν ηεο HTML νξίδνληαη ζην πξφγξακκα
πεξηήγεζεο, θαη ηα ραξαθηεξηζηηθά απηά κπνξνχλ λα ηξνπνπνηεζνχλ κε πξφζζεηε ρξήζε ηνπ
ζρεδηαζηή ηζηνζειίδα CSS. Σα θχιια CSS παξέρνπλ ηε δπλαηφηεηα νξηζκνχ θνηλψλ θαλφλσλ
κνξθνπνίεζεο γηα έλα ζχλνιν ηζηνζειίδσλ ζε εμσηεξηθά αξρεία.
Σέινο, αμίδεη λα ζεκεησζεί φηη ε html είλαη ε πξψηε θαη πην δηαδεδνκέλε γιψζζα πεξηγξαθήο
ηεο δνκήο κηαο ηζηνζειίδαο. Παξ‟ φια απηά πνιινί είλαη εθείλνη πνπ δεκηνπξγνχλ κηα ηζηνζειίδα
ρσξίο ηελ ζπγγξαθή θψδηθα γη‟ απηφ θαη έρεη δεκηνπξγεζεί εηδηθφ ινγηζκηθφ, πνπ επηηξέπεη ην
δεκηνπξγία κηαο ζειίδαο κφλν νπηηθά, ρσξίο ηε ζπγγξαθή θψδηθα, δίλνληαο φκσο ηε δπλαηφηεηα
παξέκβαζεο θαη ζηνλ θψδηθα. Έλα ηέηνην πξφγξακκα είλαη ην Dreamweaver ηεο Adobe θαη ην
FrontPage ηεο Microsoft.
Σελίδα | 11
2.2.3 PHP
Ζ ΡΖΡ είλαη κηα scripting γιψζζα πξνγξακκαηηζκνχ ζρεδηαζκέλε εηδηθά γηα ηελ παξαγσγή
δπλακηθψλ ηζηνζειίδσλ ζην Γηαδίθηπν. Ζ PHP ελζσκαηψλεηαη κέζα ζε κηα HTML θαη εθηειείηαη
θάζε θνξά πνπ ζα επηζθεπηφκαζηε κηα ζειίδα. Σα αξρεία πνπ ζπκπεξηιακβάλνπλ θψδηθα PHP ζα
πξέπεη λα έρνπλ ηελ θαηάιιειε επέθηαζε, φπσο *.php, *.php4, *.phtml θ.ά. Όκσο αθφκε θη φηαλ έλα
αξρείν έρεη ηελ επέθηαζε .php, ζα πξέπεη ν server λα είλαη θαηάιιεια ξπζκηζκέλνο έηζη ψζηε λα
επεμεξγαζηεί ηνλ θψδηθα. Ο δηαθνκηζηήο Apache, πνπ ρξεζηκνπνηείηαη ζηα ιεηηνπξγηθά ζπζηήκαηα
GNU/Linux θαη Microsoft Windows, ππνζηεξίδεη εμ νξηζκνχ ηελ εθηέιεζε ηνπ θψδηθα PHP.
Δπίζεο, ε PHP βξίζθεηαη ζηελ πιεπξά ηνπ δηαθνκηζηή. Απηφ ζεκαίλεη πσο νηηδήπνηε θάλεη ν θψδηθαο
ηεο PHP ζπκβαίλεη ζην δηαθνκηζηή.
Ζ ΡΖΡ δεκηνπξγήζεθε απφ έλα θνηηεηή, ηνλ Rasmus Lerdorf, ην 1994, ν νπνίνο
ρξεζηκνπνίεζε ηελ γιψζζα πξνγξακκαηηζκνχ Perl γηα λα θηηάμεη έλα απιφ script. Τηνζεηήζεθε θαη
απφ άιια άηνκα θαη έρεη πεξάζεη απφ ηξεηο βαζηθέο εθδφζεηο . Απηή ηε ζηηγκή νη πεξηζζφηεξνη
ηζηφηνπνη ρξεζηκνπνηνχλ θπξίσο ηηο εθδφζεηο 4 θαη 5 ηεο PHP. ήκαηλε Personal Home Page (
πξνζσπηθή αξρηθή ζειίδα ), αιιά άιιαμε ζχκθσλα κε ηελ ζχκβαζε GNU θαη ηψξα ζεκαίλεη PHP
Hypertext Preprocessor ( πξνεπεμεξγαζηήο θεηκέλνπ PHP).
Ζ ΡΖΡ δηαηίζεληαη ζε φινπο ηνπο ρξήζηεο ρσξίο ρξέσζε απφ ηελ ζειίδα www.php.net.
Πνιιέο γιψζζεο ππάξρνπλ γηα ηελ δεκηνπξγία δπλακηθψλ ηζηνζειίδσλ: Perl, Microsoft
Active Server Pages (ASP) , Java Server Pages ( JSP ) θαη Allaire Cold Fusion.
Ζ ΡΗΡ έρεη πνιιά πιενλεθηήκαηα έλαληη ησλ παξαπάλσ γισζζψλ πξνγξακκαηηζκνχ, φπσο :
Τςειή απφδνζε (κε έλαλ θηελφ server κπνξνχλ λα εμππεξεηεζνχλ εθαηνκκχξηα
ρξήζηεο θαζεκεξηλά).
Δπηηπγράλεηαη εχθνιε ζπλεξγαζία κε ηνπο πεξηζζφηεξνπο database servers.
Δλζσκαησκέλεο βηβιηνζήθεο γηα πνιιέο ζπλεζηζκέλεο Web δηαδηθαζίεο
(δπλακηθή δεκηνπξγία εηθφλσλ, απνζηνιή email, ρεηξηζκφο cookies).
Υακειφ θφζηνο (δηαηίζεληαη δσξεάλ).
Σελίδα | 12
Δπθνιία κάζεζεο θαη ρξήζεο (ε ζχληαμή ηεο κνηάδεη κε ηηο γιψζζεο Java θαη C).
Μεηαθεξζηκφηεηα (ν ίδηνο θψδηθαο δνπιεχεη ρσξίο αιιαγέο θαη ζε άιιν
ιεηηνπξγηθφ ζχζηεκα).
Γηαζεζηκφηεηα ηνπ θψδηθα πξνέιεπζεο (κπνξνχλ λα πξαγκαηνπνηεζνχλ αιιαγέο
ζηε γιψζζα).
1. Γεκηνπξγία Φνξκώλ
Ο ρεηξηζκφο ησλ θνξκψλ κε ηελ γιψζζα PHP είλαη πνιχ ζεκαληηθή δηεξγαζία ζε κηα
δπλακηθή ηνπνζεζία. Πξψηα δεκηνπξγνχκε ηελ θφξκα HTML, θαη έπεηηα κε έλα PHP ζελάξην
επεμεξγαδφκαζηε ηα δεδνκέλα ηεο θφξκαο.
Μηα θφξκα HTML δεκηνπξγείηαη κε ηελ ρξήζε εηηθεηψλ form νη νπνίεο έρνπλ ηελ εμήο
ζχληαμε:
<form action=”script.php” method=”post”>
</form>
Σν πην ζεκαληηθφ ραξαθηεξηζηηθφ ηεο εηηθέηαο είλαη ην action, πνπ ππαγνξεχεη ζε πνηα
ζειίδα ζα ζηαινχλ ηα δεδνκέλα. Σν method ραξαθηεξηζηηθφ θαζνξίδεη ηνλ ηξφπν απνζηνιήο ησλ
δεδνκέλσλ ζηε ζειίδα πνπ ζα ρεηξηζηεί ηα απνηειέζκαηα. Οη δχν επηινγέο – get θαη post –
αλαθέξνληαη ζηε κέζνδν HTTP (Hypertext Transfer Protocol) πνπ ζα ρξεζηκνπνηεζεί.
Ζ κέζνδνο get ζηέιλεη ηα δεδνκέλα πνπ έρεη ππνβάιιεη ν ρξήζηεο ζηε ζειίδα-απνδέθηε σο
κηα ζεηξά δεπγψλ όνομα-ηιμή πξνζαξκνζκέλα ζηε δηεχζπλζε URL.
πρ. http://www.example.com/script.php?name=Sofia&age=25
Έηζη, ε ζειίδα script.php δέρεηαη ηηο ηηκέο ησλ κεηαβιεηψλ mane θαη age. Γεληθά ε κέζνδνο
get ρξεζηκνπνηείηαη γηα ηε δήηεζε πιεξνθνξηψλ, φπσο είλαη ηα απνηειέζκαηα κηαο αλαδήηεζεο. Ζ
κέζνδνο post ρξεζηκνπνηείηαη φηαλ απαηηείηαη απφ ην ρξήζηε ε εθρψξεζε θάπνηα ηηκήο ζηα δηάθνξα
πεδία ηεο θφξκαο.
Σελίδα | 13
Δπίζεο, ππάξρνπλ ηα πιαίζηα θεηκέλνπ (text fields) πνπ επηηξέπνπλ ζην ρξήζηε λα θαηαρσξεί
δεδνκέλα.
Καζψο θαη ηα πιαίζηα θεηκέλνπ password κέζσ ησλ νπνίσλ εθρσξείηαη ν θσδηθφο ηνπ ρξήζηε
ζηε βάζε δεδνκέλσλ, αθνχ πξψηα θσδηθνπνηεζεί θαηάιιεια απφ ηελ ζπλάξηεζε SH1() ηεο PHP. Ζ
ζπλάξηεζε απηή δεκηνπξγεί κηα θξππηνγξαθεκέλε ζπκβνινζεηξά κήθνπο αθξηβψο 40 ραξαθηήξσλ.
Σα ξαδηνπιήθηξα (radio buttons) επηηξέπνπλ κηα επηινγή, ε νπνία απνθιείεη ηηο άιιεο, θαζψο
ε επηινγή ελφο θνπκπηνχ αθπξψλεη νπνηαδήπνηε άιιε επηινγή. Έηζη, έρνπλ ην ίδην φλνκα, αιιά
δηαθνξεηηθέο ηηκέο.
Σελίδα | 14
Σν πηπζζφκελν κελνχ μεθηλάεη κε ηελ εηηθέηα select, θαη κεηά θάζε εηηθέηα option δεκηνπξγεί
κηα αθφκε γξακκή ζηε ιίζηα ησλ επηινγψλ.
<select>
<option value="walther">Walther</option>
<option value="henderson">Henderson</option>
<option value="smith">Smith</option>
</select>
Μηα πεξηνρή θεηκέλνπ (textarea) δηαθέξεη απφ ην πιαίζην θεηκέλνπ (text), γηαηί παξνπζηάδεηαη
σο πιαίζην θαη φρη σο κηα γξακκή. Δπηηξέπνπλ ηελ πιεθηξνιφγεζε πνιιψλ πιεξνθνξηψλ θαη είλαη
ρξήζηκεο γηα ζρφιηα ηνπ ρξήζηε.
<p><b>Comments:</b>
<textarea name=”comments”
rows=”10” cols=”50”>
</textarea>
</p>
Σελίδα | 15
Καηά ηελ επηθχξσζε κηαο θφξκαο πξψηα ειέγρνπκε αλ ν ρξήζηεο θαηαρσξήζεη ή επηιέμεη
θάπνην ζηνηρείν, αλ ππάξρεη θάπνηα ιίζηα ηηκψλ. Έπεηηα πξέπεη λα εμαζθαιίζνπκε φηη ηα
ππνβαιιφκελα δεδνκέλα έρνπλ ηνλ θαηάιιειν ηχπν, ηελ ζσζηή κνξθή, ή είλαη θάπνηα ζπγθεθξηκέλε
απνδεθηή ηηκή.
Σν “ζψκα” ηεο HTML θαζνξίδεηαη απφ ηελ εηηθέηα body. H PHP, φπσο είπακε,
ελζσκαηψλεηαη ζηελ HTML, δειαδή αλακηγλχνπκε θψδηθα PHP θαη HTML κέζα ζην ίδην αξρείν.
Γηα λα πξνζζέζνπκε ηνλ θψδηθα PHP πξέπεη λα ηνλ γξάςνπκε αλάκεζα ζηηο εηηθέηεο PHP:
<?php
?>
Ό,ηη βξίζθεηαη κέζα ζηηο εηηθέηεο απηέο ν δηαθνκηζηή ην ζεσξεί θψδηθαο PHP. Αιιηψο, αλ βξίζθεηαη
δειαδή έμσ απφ ηηο εηηθέηεο ζεσξείηαη σο θψδηθαο HTML. Γηα λα ζηείιεη ε PHP ηα δεδνκέλα ζην
θπιινκεηξεηή ρξεζηκνπνηεί ηηο ζπλαξηήζεηο echo() θαη print().
4. Πίλαθεο
Μέζα ζε έλα πίλαθα έρνπκε ηε δπλαηφηεηα λα απνζεθεχζνπκε πνιιέο μερσξηζηέο
πιεξνθνξίεο. αλ απνηέιεζκα πξνθχπηεη κηα ιίζηα ηηκψλ, θάζε κηα απφ ηηο νπνίεο κπνξεί λα είλαη
ζπκβνινζεηξά, αξηζκφο, ή έλαο άιινο πίλαθαο. Ζ PHP ππνζηεξίδεη δχν είδε πηλάθσλ: απιθμοδεικηών,
πνπ ρξεζηκνπνηνχλ αξηζκνχο σο θιεηδηά θαη ζςνειπμικούρ, πνπ ρξεζηκνπνηνχλ σο θιεηδηά
ζπκβνινζεηξέο.
Γηα λα αλαθεξζνχκε ζε κηα ζπγθεθξηκέλε ηηκή ελφο πίλαθα γξάθνπκε πξψηα ην φλνκα ηνπ
πίλαθα θαη έπεηηα ην θιεηδί κέζα ζε αγθχιεο:
echo $authors[0];
echo $books[„BK‟];
Ζ εθηχπσζε ελφο πίλαθα είλαη πην δχζθνιε ζε ζρέζε κε εθείλε ησλ ζπκβνινζεηξψλ ιφγσ ηεο
δηαθνξεηηθήο ζχληαμεο. Αλ ζέινπκε λα εθηππψζνπκε έλα κεκνλσκέλν ζηνηρείν γξάθνπκε:
echo “Ο ζπγγξαθέαο απηνύ ηνπ βηβιίνπ είλαη ν $author[0]”;
Αλ φκσο ζέινπκε λα εθηππψζνπκε έλα πίλαθαο πνπ ρξεζηκνπνηεί ζπκβνινζεηξέο σο θιεηδηά, πξέπεη
λα θιείζνπκε ζε άγθηζηξα ην φλνκα ηνπ πίλαθα.
Σελίδα | 16
echo “Ο ζπγγξαθέαο απηνύ ηνπ βηβιίνπ είλαη ν {$author[„AT‟]}”;
Τπεξθαζνιηθνί Πίλαθεο
5. Υξήζε cookies
Μέζσ ησλ κπηζθφησλ δίλεηαη ε δπλαηφηεηα ζηνλ δηαθνκηζηή ηεο απνζήθεπζεο πιεξνθνξηψλ
ζηνλ ππνινγηζηή ηνπ ρξήζηε. Έηζη κηα ηνπνζεζία κπνξεί λα ζπκάηαη ηνλ ρξήζηε πνπ ηελ
επηζθέπηεηαη. Πνιινί ρξήζηεο λνκίδνπλ πσο κέζσ ηελ ρξήζε κπηζθφησλ ν δηαθνκηζηή ζα κπνξεί λα
έρεη πξφζβαζε ζε πξνζσπηθά ηνπο ζηνηρεία. Αιιά, κέζα ζε έλα κπηζθφην απνζεθεχνληαη κφλνλ νη
πιεξνθνξίεο ηη νπνίεο δίλεη ν ρξήζηεο.
Δίλαη πνιχ ζεκαληηθφ ηα κπηζθφηα λα ζηέιλνληαη απφ ην δηαθνκηζηή ζηνλ πειάηε πξηλ απφ
νπνηαδήπνηε άιιε πιεξνθνξία. Γη‟ απηφ ην ιφγν πξέπεη λα ξπζκίδεηαη ν θπιινκεηξεηήο γηα ηελ
εξγαζία πνπ πξέπεη λα εθηειέζεη φηαλ δέρεηαη έλα κπηζθφην. Έηζη, ν θπιινκεηξεηήο αθφηνπ ιάβεη
έλα κπηζθφην απφ ηελ PHP ζα ελεκεξψλεη πξψηα γηα ηηο πιεξνθνξίεο πνπ πεξηέρεη απηφ.
H ζπλάξηεζε κέζσ ηεο νπνίαο ζηέιλνληαη ηα κπηζθφηα νλνκάδεηαη setcookie(). Ζ ζπλάξηεζε
απηή είλαη κηα απφ ηηο ιίγεο ζπλαξηήζεηο ηεο PHP πνπ κπνξνχλ λα έρνπλ δηαθνξεηηθά απνηειέζκαηα
ζε δηαθνξεηηθνχο θπιινκεηξεηέο.
Σν φξηζκα ιήμεο θαζνξίδεη ηε δηάξθεηα δσήο ηνπ κπηζθφηνπ ζε δεπηεξφιεπηα απφ ηελ επνρή ηνπ
Unix.
πρ. setcookie(όλνκα, ηηκή, time()+1800);
Μηα άιιε κέζνδνο γηα ηελ δηάζεζε ησλ δεδνκέλσλ ζε πνιιέο ζειίδεο είλαη νη πεξίνδνη
εξγαζίαο. Με ηελ ρξήζε πεξηφδσλ εξγαζίαο ηα δεδνκέλα δελ απνζεθεχνληαη ζην θπιινκεηξεηή, αιιά
ζην δηαθνκηζηή. Μέζσ ηνπ ραξαθηεξηζηηθνχ πεξηφδνπ εξγαζίαο κπνξνχκε λα εληνπίζνπκε ηα
Σελίδα | 17
δεδνκέλα εγγξαθήο ελφο ρξήζηε. Σν αλαγλσξηζηηθφ απηφ απνζεθεχεηαη ζην θπιινκεηξεηή ηνπ
ρξήζηε κέζσ ελφο κπηζθφηνπ, αιιά ηα επαίζζεηα δεδνκέλα παξακέλνπλ πάληα ζην δηαθνκηζηή.
Γηα λα ρξεζηκνπνηήζεη κηα ζειίδα ηηο πεξηφδνπο εξγαζίαο πξέπεη λα θαιέζεη ηελ ζπλάξηεζε
session_start() ε νπνία πιεξνθνξεί ηελ PHP ψζηε λα μεθηλήζεη κηα λέα πεξίνδν εξγαζίαο ή λα
πξνζπειάζεη κηα ππάξρνπζα. Όηαλ ε ζπλάξηεζε απηή θαιείηαη γηα πξψηε θνξά πξνζπαζεί λα ζηείιεη
έλα κπηζθφην ζην θπιινκεηξεηή κε φλνκα PHPSESSID (ην φλνκα ηεο πεξηφδνπ εξγαζίαο) γη‟ απηφ
θαη πξέπεη λα θαιείηαη πξηλ απφ ηελ απνζηνιή νπνηνλδήπνηε δεδνκέλσλ.
χληαμε κεηξψνπ:
$_SESSION[„θιεηδί‟] = ηηκή;
$_SESSION[„name‟] = „Sofia‟;
$_SESSION[„id‟] = 10;
Γηα λα ρξεζηκνπνηεζεί θάπνηα απφ απηέο ηηο κεζφδνπο ε ζειίδα πξέπεη λα μεθηλάεη κε ηελ
θιήζε ηεο session_start().
Πρ. include_once(„filename.php‟);
require(„path/to/filename.html‟);
Ζ ζρεηηθή δηαδξνκή μεθηλάεη απφ ηε ζέζε ηνπ γεληθνχ αξρείνπ, δειαδή απηφ πνπ θαιεί ην
εμσηεξηθφ. Γηα λα αλεβνχκε θαηά έλα θάθειν ζηε ηεξαξρία, ρξεζηκνπνηνχκε δχν ηειείεο (..). Γηα λα
κεηαθεξζνχκε κέζα ζε έλα θάθειν, ρξεζηκνπνηνχκε ην φλνκα ηνπ θαθέινπ πνπ αθνινπζεί απφ κηα
θάζεην. Γηα παξάδεηγκα, αλ ην ζελάξην βξίζθεηαη ζην θάθειν www/file1 θαη ζέινπκε λα
ζπκπεξηιάβνπκε έλα αξρείν πνπ βξίζθεηαη ζην θάθειν www/file2, γξάθνπκε:
Σελίδα | 18
include(„../flie2/example.php‟);
Οη ζπλαξηήζεηο include() θαη require() δηαθέξνπλ ζηε ιεηηνπξγία ηνπο κφλν φηαλ
απνηπγράλνπλ. Αλ κηα ζπλάξηεζε include() δελ επηηχρεη, ην ζελάξην ζα εμαθνινπζήζεη λα εθηειείηε
θαλνληθά θαη απιά ζην θπιινκεηξεηή ζα εκθαληζηεί κηα πξνεηδνπνίεζε. Αλ απνηχρεη ε require(),ην
ζελάξην ζα δηαθνπεί εκθαλίδνληαο έλα κήλπκα ζθάικαηνο.
Δπίζεο, φηαλ γξάθνπκε θαη ην ραξαθηεξηζηηθφ *_once(), ηφηε ην εμσηεξηθφ αξρείν
ζπκπεξηιακβάλεηαη ζηνλ θψδηθα κφλν κία θνξά.
πρ. require_once(„filename.php‟);
include_once(„filename.php‟);
1. Καλνληθνπνίεζε
Καλνληθνπνίεζε είλαη ε δηαδηθαζία νξγάλσζεο κηαο βάζε δεδνκέλσλ. Ο εξεπλεηήο E. F.
Codd αλαθάιπςε ηελ ζρεζηαθή βάζε δεδνκέλσλ (κηα ζπιινγή δεδνκέλσλ νξγαλσκέλσλ κε
ζπγθεθξηκέλν ηξφπν). Δπίζεο, δεκηνχξγεζε κηα ζεηξά απφ θαλφλεο, ηηο κανονικέ μοπθέρ (normal
forms), πνπ ζπληεινχλ ζηελ νξγάλσζε ησλ δεδνκέλσλ.
Πξηλ αξρίζνπκε ηελ θαλνληθνπνίεζε πξέπεη πξψηα λα νξίζνπκε ηνλ ζθνπφο ηεο εθαξκνγήο.
Ζ θαηαλφεζε ηνπ ηξφπνπ πξνζπέιαζεο ησλ δεδνκέλσλ θαζνξίδεη ηε κνληεινπνίεζε. ηε
ζπγθεθξηκέλε ηζηνζειίδα ζα πξέπεη νη ρξήζηεο λα εγγξάθνληαη θαη έπεηηα λα ζπλδένληαη κε ην email
θαη ην θσδηθφ πξφζβαζήο ηνπο. Έπεηηα ζα πξνζζέηνπλ φπνην βηβιίν επηζπκνχλ ζην θαιάζη αγνξψλ
ηνπο, ή ζηε ιίζηα κε ηα αγαπεκέλα ηνπο βηβιία. Δπίζεο, ν δηαρεηξηζηήο ζα πξνζζέηεη ηα βηβιία ζε έλα
πίλαθα κε ηα αλάινγα ραξαθηεξηζηηθά απφ φπνπ ζα εκθαλίδνληαη ζηελ ηζηνζειίδα. Γηα ηελ
ιεηηνπξγία ηνπ forum είλαη αλαγθαία ε χπαξμε ελφο πίλαθα ν νπνίνο ζα απνζεθεχεη ηα κελχκαηα ησλ
ρξεζηψλ.
Μηα θαιή κέζνδνο γηα ηνλ πξνζδηνξηζκφ ησλ πιεξνθνξηψλ πνπ ζα απνζεθεχνληαη ζηε βάζε
δεδνκέλσλ είλαη ν πξνζδηνξηζκφο ησλ εξσηεκάησλ πνπ ζα ππνβάιινληαη θαη ησλ δεδνκέλα πνπ ζα
πεξηιακβάλνληαη ζηηο απαληήζεηο ησλ εξσηεκάησλ απηψλ.
Σελίδα | 19
2. Κιεηδηά
Σα θιεηδηά παίδνπλ ζεκαληηθφ ξφιν ζε κία θαλνληθνπνηεκέλε βάζε δεδνκέλσλ, γηαηί κέζσ
απηψλ γίλεηαη ε ζπζρέηηζε ησλ πηλάθσλ. Τπάξρνπλ δχν είδε θιεηδηψλ: ην ππωηεύων θιεηδί (primary
key) θαη ην ξένο θιεηδί (foreign key).
Πξσηεχσλ θιεηδί είλαη έλα πεδίν ή ζπλδπαζκφο πεδίσλ πνπ ραξαθηεξίδεη κνλαδηθά κηα
εγγξαθή. Πξσηεχσλ θιεηδί πξέπεη λα έρεη πάληα ηηκή (λα κελ είλαη δειαδή NULL), ε ηηκή ηνπ λα κελ
αιιάδεη πνηέ θαη λα είλαη κνλαδηθή γηα θάζε εγγξαθή ηνπ πίλαθα. Σν θαιχηεξν παξάδεηγκα
πξσηεχνληνο θιεηδηνχ είλαη ν αξηζκφο θνξνινγηθνχ κεηξψνπ (ΑΦΜ). πρλά πξέπεη λα δεκηνπξγνχκε
έλα πξσηεχσλ θιεηδί, επεηδή θαλέλα απφ ηα ππάξρνληα πεδία δελ είλαη θαηάιιειν. H MySQL
επηηξέπεη κφλν έλα πξσηεχσλ θιεηδί αλά πίλαθα. ηελ ηδαληθή πεξίπησζε, πξέπεη λα είλαη αθέξαηνο
αξηζκφο ψζηε λα ππάξρεη θαιχηεξε απφδνζε.
Σν μέλν θιεηδί είλαη έλα πεδίν πνπ έρεη ην ίδην ζχλνιν ηηκψλ κε ην πξσηεχνλ θιεηδί ελφο
άιινπ πίλαθα. Γηα λα κπνξνχλ δχν πίλαθεο λα ζπλδένληαη, πξέπεη ην πξσηεχσλ θιεηδί ηνπ ελφο λα
ζπλδέεηαη κε ην μέλν θιεηδί ηνπ άιινπ.
3. ρέζεηο
ηηο Στεζιακές βάζεηο δεδνκέλσλ ηα δχν πίλαθεο ζπλδένληαη κεηαμχ ηνπο κέζσ ησλ θνηλψλ
πεδίσλ πνπ δηαζέηνπλ. Οη ζρέζεηο ησλ πηλάθσλ ρσξίδνληαη ζε ηξείο θαηεγνξίεο:
Ακθηκνλνζήκαληε ή έλα πξνο έλα.
Μνλνζήκαληε ή έλα πξνο πνιιά.
Πνιπζήκαληε ή πνιιά πξνο πνιιά.
ε κία ακθηκνλνζήκαληε ζρέζε, έλα κνλαδηθφ ζηνηρείν ηνπ Πίλαθα Α αληηζηνηρεί ζε έλα
κνλαδηθφ ζηνηρείν ηνπ πίλαθα Β. Γηα παξάδεηγκα, θάζε ρξήζηεο έρεη έλα κνλαδηθφ θσδηθφ θαη θάζε
θσδηθφο αληηζηνηρεί ζε έλαλ κφλν ρξήζηε.
ε κηα κνλνζήκαληε ζρέζε, έλα ζηνηρείν ηνπ Πίλαθα Α κπνξεί λα αληηζηνηρεί ζε πνιιά
ζηνηρεία ηνπ πίλαθα Β. Γηα παξάδεηγκα, έλαο βηβιίν κπνξεί λα έρεη έλαλ εθδφηε θαη έλαο εθδφηεο
κπνξεί λα έρεη πνιιά βηβιία.
ε κηα πνιπζήκαληε ζρέζε, πνιιά ζηνηρεία ηνπ πίλαθα Α αληηζηνηρνχλ ζε πνιιά ζηνηρεία
ηνπ πίλαθα Β. Γηα παξάδεηγκα, έλα βηβιίν κπνξεί λα πεξηέρεηαη ζε δηάθνξα θαιάζηα αγνξψλ θαη θάζε
θαιάζη αγνξάο κπνξεί λα έρεη πνιιά βηβιία. Γηα ιφγνπο πιενλαζκνχ ησλ δεδνκέλσλ θαη είλαη
πξνηηκφηεξν λα απνθεχγνπκε ηηο πνιπζήκαληεο ζρέζεηο θαη λα ηηο δηαηξνχκε ζε δχν κνλνζήκαληεο
ρξεζηκνπνηψληαο ενδιάμεζοςρ πίνακερ.
Σελίδα | 20
αλαζέηεη έλα πξσηεχσλ θιεηδί ζε θάζε ζπγγξαθέα. Γηα ηελ ζπζρέηηζε ησλ δχν πηλάθσλ ην πξσηεχσλ
θιεηδί ηνπ θάζε ζπγγξαθέα ζα γίλεηαη μέλν θιεηδί ζηνλ πίλαθα ησλ βηβιίσλ.
Αλ ην κνηίβν πεξηέρεη θάζεην ηφηε ζαλ νξηνζέηε ρξεζηκνπνηνχκε ην ραξαθηήξα δηαθπγήο (|).
Μεηαραξαθηήξεο
ΥΑΡΑΚΣΗΡΑ ΗΜΑΙΑ
\ Υαξαθηήξαο Γηαθπγήο
^ Αξρή πκβνινζεηξάο
$ Σέινο πκβνινζεηξάο
. Οπνηνζδήπνηε ραξαθηήξαο εθηφο απφ ηελ αιιαγή γξακκήο
Σελίδα | 21
| Δλαιιαθηηθφ (ή)
[ Αξρή θιάζεο
] Σέινο θιάζεο
( Αξρή ππνκνηίβνπ
) Σέινο ππνκνηίβνπ
{ Αξρή πνζνδείθηε
} Σέινο πνζνδείθηε
Πνζνδείθηεο
ΥΑΡΑΚΣΗΡΔ ΔΜΦΑΝΙΔΙ
? 0ή1
* 0 ή πεξηζζφηεξεο
+ 1 ή πεξηζζφηεξεο
{x} Αθξηβψο x εκθαλίζεηο
{x, y} Μεηαμχ x θαη y
{x,} Σνπιάρηζηνλ x εκθαλίζεηο
Μεηαραξαθηήξεο
ΚΛΑΗ ΤΝΣΟΜΔΤΗ ΗΜΑΙΑ
[0-9] \d Οπνηνδήπνηε ςεθίν
[\f\r\t\n\v] \s Οπνηνδήπνηε ραξαθηήξαο
[A-Za-z0-9_] \w Οπνηνδήπνηε ραξαθηήξαο ιέμεο
[^0-9] \D Όρη ςεθίν
[^\f\r\t\n\v] \S Με θελφο ρψξνο
[^A-Za-z0-9_] \W Όρη ραξαθηήξαο ιέμεο
Σελίδα | 22
πλήζσο, δεκηνπξγνχκε έλαλ θαηάινγν includes ζηνλ νπνίν απνζεθεχνληαη ηα αξρεία, μερσξηζηά απφ
ηα βαζηθά ζελάξηα.
Σέινο, κπνξνχκε λα ρξεζηκνπνηνχκε ηελ πξνέθηαζε .inc ή .html γηα έγγξαθα πνπ δελ καο
απαζρνιεί ηφζν πνιχ ε αζθάιεηά ηνπο, θαη ηελ πξνέθηαζε .php γηα αξρεία πνπ πεξηέρνπλ πην
επαίζζεηα δεδνκέλα.
Σελίδα | 23
ΚΔΦΑΛΑΙΟ 3: ΥΔΓΙΟ ΓΡΑΗ ΓΙΑ
ΣΗΝ ΔΚΠΟΝΗΗ ΣΗ ΔΡΓΑΙΑ
3.1 State of Art ζην ρώξν ησλ ειεθηξνληθώλ βηβιηνπσιείσλ.
Έλα απφ ηα θαιχηεξα θαη πην δηαδεδνκέλα ειεθηξνληθφ βηβιηνπσιείν ζηνλ θφζκν είλαη ην
Amazon.com ιφγσ ηνπ πιήζνο ησλ δεδνκέλσλ θαη ππεξεζηψλ πνπ πξνζθέξεη ζηνπο ρξήζηεο. Σνλ
Ηνχιην ηνπ 2002 ρξεζηκνπνηψληαο ην Γηαδίθηπν κεηέηξεςε ηελ αγνξά ηνπ βηβιίνπ ζε κηα γξήγνξε θαη
επράξηζηε εκπεηξία. Δίλαη ε πην δεκνθηιήο εηαηξία ζηελ νπνία εθαξκφζηεθε ην ειεθηξνληθφ εκπφξην,
γη‟ απηφ θαη ζήκεξα απνηειεί ηνλ πην θνξπθαίν εκπνξηθφ θφκβν.
Σελίδα | 24
Δηθόλα 3.2: Λίζηεο Βηβιίσλ ηνπ Amazon.com
Σελίδα | 25
Δηθόλα 3.3: Δκθάληζε βηβιίσλ ζηε Wishlist
Δθηφο απφ ηελ πξνζζήθε ησλ βηβιίσλ ζηε ιίζηα κε ηα αγαπεκέλα βηβιία ν ρξήζηεο κπνξεί λα
κεηνλνκάζεη ηελ ιίζηα ηνπ δίλνληάο ηεο έλα πην πξνζσπηθφ φλνκα (Sofia‟s Wishlist), λα πξνζζέζεη ηα
βηβιία ζην θαιάζη ηνπ, αιιά θαη λα δεκηνπξγήζεη κηα θαηλνχξηα ιίζηα απφ ην link (Create another
Wish list). Σέινο, έρεη δεκηνπξγεζεί εθαξκνγή απνθιεηζηηθά γηα ην Firefox έηζη ψζηε λα έρεη ν θάζε
ρξήζηεο πξφζβαζε ζηε Wishlist φπνηε εθείλνο επηζπκεί.
Σελίδα | 26
Απηφ πνπ θάλεη ηελ δηαθνξά ζην θαιάζη απηφ είλαη φηη ν θάζε ρξήζηεο κπνξεί λα ζηείιεη
θάπνην βηβιίν ζαλ δψξν γξάθνληαο ηελ δηεχζπλζε ζηελ νπνία ζα ζηαιεί φηαλ ζπκπιεξψζεη ηελ
θφξκα κε ηα πξνζσπηθά ηνπ ζηνηρεία.
Σελίδα | 27
ηελ αξρή ηεο ζειίδαο εκθαλίδνληαη δηάθνξεο πξνζθνξέο πνπ παξέρεη ην Amazon ζηνπο
ρξήζηεο. Δπίζεο, ε ζειίδα πξνηείλεη ζηνπο ρξήζηεο πνηα άιια βηβιία ζα κπνξνχζε λα αγνξάζεη καδί
κε ην αξρηθφ βηβιίν πνπ επέιεμε.
ηε ζπλέρεηα έλα script εκθαλίδεη ηα βηβιία πνπ αγφξαζαλ άιινη ρξήζηεο καδί κε ην
ζπγθεθξηκέλν βηβιίν αθνινπζνχκελν απφ ηελ πεξηγξαθή ηνπ βηβιίνπ.
Σελίδα | 28
Δηθόλα 3.9: Βηνγξαθία ηνπ πγγξαθέα
Σν Amazon.com παξέρεη πξφζβαζε ζηνπο ρξήζηεο ζην βηνγξαθηθφ ζεκείσκα ηνπ θάζε
ζπγγξαθέα, θαζψο θαη ζε βηβιία πνπ ν ίδηνο έρεη γξάςεη. Δπίζεο ππάξρεη ελεκέξσζε γηα ηα event πνπ
ν ζπγγξαθέαο έρεη θαζνξίζεη λα δηεμάγεη.
Σελίδα | 29
3.2 State Of Art ζηελ ηερλνινγία
3.2.1 Γηαδίθηπν
Σν Γηαδίθηπν, είλαη ην κεγαιχηεξν δίθηπν ππνινγηζηψλ ζην θφζκν ην νπνίν δεκηνπξγήζεθε
ην 1969 απφ ηέζζεξα παλεπηζηήκηα ησλ ΖΠΑ. ηελ νπζία απαξηίδεηαη απφ πνιιά δίθηπα θαη
ππνινγηζηέο πνπ είλαη ζπλδεδεκέλνη κεηαμχ ηνπο. Σα δίθηπα απηά κπνξεί λα είλαη ηνπηθά (LAN), ή
επξείαο πεξηνρήο (WAN).
Οη ππνινγηζηέο ηνπ δηαδηθηχνπ δηαρσξίδνληαη ζε εθείλνπο ησλ Παξνρέσλ Internet νπνίνη είλαη
κφληκα ζπλδεδεκέλνη ζην ππεξδίθηπν, επεηδή παξέρνπλ ζπλερψο δεδνκέλα θαη πιεξνθνξίεο. Δπίζεο,
ππάξρνπλ θαη απηνί ησλ ρξεζηψλ, ζπλδξνκεηψλ ηνπ Internet, νη νπνίνη ζπλδένληαη θαη δηαθφπηνπλ
ηελ επηθνηλσλία ηνπο κε απηφ αλάινγα κε ηηο αλάγθεο ηνπο.
Οη θπξηφηεξεο εθαξκνγέο θαη ππεξεζίεο πνπ καο παξέρεη ην Γηαδίθηπν είλαη νη εμήο:
Σν ειεθηξνληθφ ηαρπδξνκείν (e-mail)
Οη νκάδεο ζπδεηήζεσλ (newsgroups)
Ζ δηακνίξαζε αξρείσλ (file sharing)
Ζ επηθφξησζε αξρείσλ (file transfer)
Ο Παγθφζκηνο Ηζηφο (World Wide Web).
Πνιιέο ππεξεζίεο έρνπλ βαζηζηεί πάλσ ζην ειεθηξνληθφ ηαρπδξνκείν θαη ηνλ Παγθφζκηνο
Ηζηφο φπσο είλαη νη ηαρπδξνκηθέο ιίζηεο θαη ηα αξρεία θαηαγξαθήο ηζηνχ (blogs). Σν Γηαδίθηπν
θαζηζηά δπλαηή ηε δηάζεζε ππεξεζηψλ ζε πξαγκαηηθφ ρξφλν, ππεξεζίεο φπσο ην ξαδηφθσλν πνπ είλαη
πξνζπειάζηκεο απφ νπνπδήπνηε ζηνλ θφζκν.
Σα ηειεπηαία ρξφληα ζηελ Διιάδα παξαηεξείηαη ζεκαληηθή αχμεζε ηνπ αξηζκνχ ησλ ρξεζηψλ
(απφ 13% ην 2001 ζε 31% ην 2007) ειηθίαο 15 έσο 65 εηψλ πνπ θαηέρνπλ πξνζσπηθφ Ζ/Τ.
Αληίζηνηρα, παξαηεξείηαη αχμεζε ησλ σξψλ ρξήζεο ηνπ Γηαδηθηχνπ πνπ θηάλνπλ θαηά κέζσ φξν ηηο
8,6 αλά εβδνκάδα. Οη πην θχξηνη ιφγνη ρξήζεο ηνπ Γηαδηθηχνπ είλαη ε ελεκέξσζε θαη ε απνζηνιή
κελπκάησλ κέζσ ηνπ ειεθηξνληθνχ ηαρπδξνκείνπ. Αληίζεηα, δελ είλαη ηφζν εμεδεηεκέλε ε
αλαδήηεζε πξντφλησλ θαη ππεξεζηψλ. Μφλν ην 18% ησλ ρξεζηψλ πξνρψξεζε ζε κηα online αγνξά.
Παξφια απηά, νη αγνξέο πξαγκαηνπνηήζεθαλ θπξίσο απφ ειιεληθνχο ηζηνρψξνπο (41%) παξά απφ
μέλνπο (35%). Οη ρξήζηεο πξνβαίλνπλ ζε κηα αγνξά κέζσ ηνπ Γηαδηθηχνπ ιφγν ηεο πξνζηηήο ηηκήο
θαη ηεο θαιήο εμππεξέηεζεο. Σέινο, πνιινί ρξήζηεο πηζηεχνπλ φηη ν θίλδπλνο δηαξξνήο πξνζσπηθψλ
δεδνκέλσλ θαηά ηηο ειεθηξνληθέο αγνξέο είλαη πνιχ κεγάινο.
Σελίδα | 30
3.2.3 Σνπνζεζίεο Ιζηνύ θαη Ιζηνζειίδεο
Έλαο ηζηφηνπνο, ηζηνρψξνο ή δηθηπαθφο ηφπνο (web site) είλαη κία ζπιινγή απφ ηζηνζειίδεο,
εηθφλεο, βίληεν θαη άιια ςεθηαθά ζηνηρεία, ηα νπνία θηινμελνχληαη ζην ίδην domain (πεξηνρή) ηνπ
Παγθφζκηνπ Ηζηνχ. Βαζίδεηαη ζηελ ππεξεζία www (world wide web), κε ηε ρξεζηκνπνίεζε ηνπ
πξσηνθφιινπ HTTP. Ζ ππεξεζία απηή δίλεη ηε δπλαηφηεηα ζηνπο ρξήζηεο ηνπ Internet λα
δεκηνπξγήζνπλ νπνηνπδήπνηε είδνπο πεξηερφκελν ζηηο ηζηνζειίδεο ηνπο. Σν ζχλνιν ησλ ηζηφηνπσλ
απνηειεί ην world wide web (www).
Μία Ηζηνζειίδα (web page) είλαη έλα είδνο εγγξάθνπ ηνπ Παγθφζκηνπ Ηζηνχ (WWW) πνπ
πεξηιακβάλεη πιεξνθνξίεο κε ηελ κνξθή θεηκέλνπ, ππεξθεηκέλνπ, εηθφλαο, βίληεν θαη ήρνπ. Οη
ηζηνζειίδεο αιιεινζπλδένληαη θαη κπνξεί ν ρξήζηεο λα κεηαβεί απφ ηε κία ζηελ άιιε θάλνληαο
«θιηθ», επηιέγνληαο δειαδή ζπλδέζκνπο πνπ ππάξρνπλ ζην θείκελν ή ζηηο θσηνγξαθίεο ηεο
ηζηνζειίδαο. Οη ζχλδεζκνη πξνο άιιεο ζειίδεο εκθαλίδνληαη ζπλήζσο ππνγξακκηζκέλνη θαη κε κπιε
ρξψκα γηα λα είλαη γξήγνξα μεθάζαξν ζηνλ επηζθέπηε φηη πξφθεηηαη γηα ζχλδεζκν πξνο άιιε
ηζηνζειίδα, ρσξίο φκσο πάληα λα είλαη απηφ απαξαίηεην.
Ζ θαηαζθεπή ηζηνζειίδσλ γίλεηαη κέζσ πξνγξακκάησλ πνπ θπθινθνξνχλ ειεχζεξα, αιιά
ππάξρνπλ θαη απηνκαηνπνηεκέλνη κεραληζκνί θαηαζθεπήο ηζηνζειίδσλ πνπ επηηξέπνπλ ζε απινχο
ρξήζηεο λα δεκηνπξγήζνπλ εχθνια θαη γξήγνξα πξνζσπηθέο ή θαη εκπνξηθέο ηζηνζειίδεο. Δπίζεο,
είλαη πνιιέο νη εηαηξίεο, πνπ εμεηδηθεχνληαη ζηε δεκηνπξγία ηζηνζειίδσλ πνπ ζηνρεχνπλ ζηελ αγνξά
θάπνηνπ πξντφληνο απφ ηνπο ρξήζηεο, ζηελ επηθνηλσλία κε ηνλ ηδηνθηήηε ηνπ ηζηφηνπνπ ή απιά ζην
αλέβαζκα ηνπ εηαηξηθνχ πξνθίι κηαο επηρείξεζεο.
Οη ηζηνζειίδεο κπνξνχλ λα είλαη ζηαηηθέο ή δπλακηθέο. πνπ αλαπξνζαξκφδνπλ απηφκαηα ην
πεξηερφκελφ ηνπο ή ηελ εκθάληζή ηνπο βαζηδφκελεο ζε κηα πνηθηιία παξαγφλησλ, φπσο κηα
θαηαρψξεζε απφ ηνλ ηειηθφ-ρξήζηε, κηα θαηαρψξεζε ή αιιαγή ζην πεξηβάιινλ πξνγξακκαηηζκνχ
απφ ηνλ ρεηξηζηή ηεο ηζηνζειίδαο ( φπσο ελ παξαδείγκαηη κηα κνξθνπνίεζε ηεο βάζεο δεδνκέλσλ).
Δμαηηίαο ηεο ζπλερνχο εμεηδίθεπζεο ζηνπο ηνκείο ηεο επηθνηλσληαθήο Πιεξνθνξηθήο, δεκηνπξγείηαη
κηα ζαθήο ηάζε δηαρσξηζκνχ ηνπ ζρεδηαζκνχ ζην Γηαδίθηπν απφ ηελ αλάπηπμε ηνπ δηαδηθηχνπ σο
κέζνπ ξνήο ηεο πιεξνθνξίαο θαη ησλ αγαζψλ πξνο φιεο ηηο δηαδηθηπαθέο ππεξεζίεο.
Σελίδα | 31
PNG) θαη θφξκεο κπνξνχλ λα ηνπνζεηεζνχλ ζηε ζειίδα κε ηε ρξήζε γισζζψλ ζήκαλζεο
ππεξθεηκέλνπ φπσο HTML/XHTML/XML. Ζ αλαπαξαγσγή πην ζχλζεησλ πνιπκέζσλ (αλπζκαηηθψλ
γξαθηθψλ, βίληεν, ήρσλ, γξαθηθψλ κε ελζσκαησκέλν ήρν θαη εηθφλα) κπνξεί λα γίλεη κε πξφζζεηα
(plug-ins) φπσο ην Flash, ην QuickTime, ην πεξηβάιινλ ρξφλνπ εθηέιεζεο Java, θ.α ή κε ηερλνινγίεο
φπσο νη γιψζζεο ζήκαλζεο HTML5, XML θαη MathML, θαη ην πξφηππν θχιισλ ζηπι CSS 3.
Οη θαηλνχξηεο εθδφζεηο ησλ πξνγξακκάησλ πεξηήγεζεο (Internet Explorer 7, 8, Firefox 3.6,
safari, chromium θιπ) πνπ αθνινπζνχλ ηα W3C πξφηππα νδήγεζαλ ζε κηα επξεία απνδνρή θαη ρξήζε
ησλ XHTML/XML ζε ζπλδπαζκφ κε ηα CSS (Cascading Style Sheets) γηα ηελ ηνπνζέηεζε θαη
δηαρείξηζε ησλ ζηνηρείσλ θαη αληηθεηκέλσλ ηεο ηζηνζειίδαο. Σα ηειεπηαία πξφηππα ζηνρεχνπλ ζην λα
απνθηήζνπλ ηα πξνγξάκκαηα πεξηήγεζεο ηελ δπλαηφηεηα λα πξνζθέξνπλ κηα επξεία γθάκα επηινγήο
πνιπκέζσλ θαη πξφζβαζεο ζηνπο πειάηεο ρσξίο ηε ρξήζε ησλ πξνζζέησλ (plug-ins).
Με ηελ ζπλερφκελε εηδίθεπζε ζηελ ηερλνινγίαο ηεο Πιεξνθνξηθήο δεκηνπξγείηαη ε αλάγθε
δηαρσξηζκνχ ηεο ρεδηαζκνχ Ηζηνζειίδσλ απφ ηελ Πξνγξακκαηηζηή Ηζηνζειίδσλ.
Γηα ηε δηαδηθαζία ζρεδηαζκνχ κηαο ηζηνζειίδαο, κηαο εθαξκνγήο ή ελφο πνιπκέζνπ γηα ην
δηαδίθηπν κπνξεί λα ζπλδπάδνληαη πνιινί θιάδνη φπσο animation, ζπγγξαθή, επηθνηλσληαθφο
ζρεδηαζκφο, εηαηξηθή ηαπηφηεηα, ζρεδηαζκφο γξαθηθψλ, αιιειεπίδξαζε αλζξψπνπ-ππνινγηζηή,
αξρηηεθηνληθή ππνινγηζηψλ, ζρεδηαζκφο αιιειεπίδξαζεο, marketing, θσηνγξαθία, βειηηζηνπνίεζε
κεραλψλ αλαδήηεζεο θαη ηππνγξαθία.
3.2.6 Γηεύζπλζε IP
Μία δηεχζπλζε IP (Internet Protocol address), είλαη έλαο κνλαδηθφο αξηζκφο πνπ
ρξεζηκνπνηείηαη γηα ηελ αλαγλψξηζε θαη ζπλελλφεζε ησλ ζπζθεπψλ πνπ βξίζθνληαη κέζα ζην
Γηαδίθηπν. Ο ζπζθεπέο απηέο κπνξεί λα είλαη δξνκνινγεηέο (routers), ππνινγηζηέο, time-servers,
εθηππσηέο, κεραλέο γηα fax κέζσ Internet, θαη νξηζκέλα ηειέθσλα. Κάζε κηα απφ ηηο ζπζθεπέο απηέο
πξέπεη λα έρνπλ ηελ δηθή ηεο κνλαδηθή δηεχζπλζε. Όπσο θάζε δηεχζπλζε θαηνηθίαο θαη αξηζκφο
ηειεθψλνπ αληηζηνηρνχλ ζε έλα θαη κνλαδηθφ έηζη θαη κηα IP address ρξεζηκνπνηείηαη γηα ηε κνλαδηθή
αλαγλψξηζε ελφο ππνινγηζηή ή άιιεο ζπζθεπήο πνπ ζπλδέεηαη ζην Γηαδίθηπν.
Μηα δηεχζπλζε IP κπνξεί λα "κνηξάδεηαη" ζε πνιιέο ζπζθεπέο είηε επεηδή απηέο είλαη κέξνο
ηνπ ίδηνπ web server environment, είηε ιφγσ ελφο proxy server (π.ρ. ελφο Παξνρέα Τπεξεζηψλ
Γηαδηθηχνπ (ISP) ή κηαο ππεξεζίαο γηα εμαζθάιηζε αλσλπκίαο - anonymizer service) πνπ ιεηηνπξγνχλ
σο κεζνιαβεηέο. ηελ ηειεπηαία πεξίπησζε (ρξήζε δηαθνκηζηή κεζνιάβεζεο) ε πξαγκαηηθή
δηεχζπλζε IP κπνξεί λα απνθξχπηεηαη απφ ην δηαθνκηζηή πνπ δέρεηαη αίηεζε.
Σελίδα | 32
Έλαο θφκβνο ηνπ Internet δηαζέηεη έλα ζπγθεθξηκέλν θαη κνλαδηθφ φλνκα πνπ απνηειεί θαη
ηελ ηαπηφηεηα ηνπ θφκβνπ. Γηα παξάδεηγκα, ε CyberNet έρεη ζπκβνιηθφ φλνκα “serres.hol.gr”, φπνπ
“serres” είλαη ην φλνκα ηνπ εμππεξέηε (server), ην “hol” ε επηθξάηεηα πνπ πεξηιακβάλεη ηνλ ελ ιφγσ
εμππεξέηε, θαη ε επηθξάηεηα “gr” πεξηιακβάλεη φινπο ηνπο εμππεξέηεο πνπ βξίζθνληαη ζηελ Διιάδα.
ε έλα φλνκα κπνξεί λα αληηζηνηρνχλ πνιιέο IP δηεπζχλζεηο. Γηα παξάδεηγκα, ε δηεχζπλζε
www.google.gr αληηζηνηρεί ζε ηξεηο IP δηεπζχλζεηο, ηελ 66.102.9.99, ηελ 66.102.9.104 θαη ηελ
66.102.9.147. ε απηήλ ηελ πεξίπησζε έρνπκε ηξεηο εμππεξεηεηέο πνπ ιεηηνπξγνχλ ηαπηφρξνλα
εθηειψληαο ηελ ίδηα εξγαζία, αιιά κνηξάδνληαη ηνλ θφξην εξγαζίαο δηά ηξία. ε απηήλ ηελ πεξίπησζε
ν δηαθνκηζηήο DNS εθηειεί εμηζνξξφπεζε θνξηίνπ κεηαμχ ησλ ηξηψλ άιισλ δηαθνκηζηψλ.
Domain names
Μηα ππεξεζία εχξεζεο δηθηχνπ, ην Domain Name System (DNS), δίλεη ηε δπλαηφηεηα λα
αληηζηνηρεζνχλ νλφκαηα ππνινγηζηψλ (hostnames) ζε κηα δηεχζπλζε IP. Με απηφ ηνλ ηξφπν νη
άλζξσπνη κπνξνχλ εχθνια λα ζπκνχληαη έλα φλνκα θαη φρη κηα ζεηξά αξηζκψλ. Σν DNS επηηξέπεη ζε
πνιιαπιέο δηεπζχλζεηο θαη νλφκαηα λα δείρλνπλ ζε έλα πφξν ηνπ Γηαδηθηχνπ.
Έλαο αθφκε ιφγνο χπαξμεο ηνπ DNS είλαη λα επηηξέπεη, γηα παξάδεηγκα, ζε έλαλ ηζηφηνπν
πνπ θηινμελείηαη ζε πνιινχο δηαθνκηζηέο (πνπ ν θαζέλαο απφ ηνπο νπνίνπο έρεη ηε δηθή ηνπ
δηεχζπλζε IP) λα παξέρεη ζηνηρεηψδε εμηζνξξφπεζε θφξηνπ (load balancing), δειαδή κία νξζή
δηακνίξαζε ηεο θίλεζεο πνπ δέρεηαη ν ηζηφηνπνο αλάκεζα ζηνπο ππνινγηζηέο πνπ ηνλ θηινμελνχλ.
3.2.9 URL
Χο URL (Uniform Recourse Location) νλνκάδεηαη ε δηεχζπλζε κηαο ηζηνζειίδαο. Ζ
δηεχζπλζε απηή ιεηηνπξγεί σο ηαπηφηεηα γηα ηηο ζειίδεο ηνπ Παγθφζκηνπ Ηζηνχ - θάζε ηζηνζειίδα
έρεη ηε δηθή ηεο κνλαδηθή δηεχζπλζε URL.
Μία δηεχζπλζε URL έρεη ηελ εμήο κνξθή:
http://www.example.com/sofia/photos.php
Σελίδα | 33
Σν πξψην κέξνο (http ://) καο ελεκεξψλεη γηα ην πξσηφθνιιν πνπ ζα πξέπεη λα
ρξεζηκνπνηήζεη ν θπιινκεηξεηήο γηα λα ζπλδεζεί κε ηνλ ππνινγηζηή ζηνλ νπνίν είλαη απνζεθεπκέλε
ε ηζηνζειίδα θαη λα θνξηψζεη ηα πεξηερφκελά ηεο. Οη ραξαθηήξεο :// ζε ζπλδπαζκφ καο ελεκεξψλνπλ
φηη ζα αθνινπζήζεη ην φλνκα ηνπ δηαθνκηζηή.
Σν δεχηεξν κέξνο (www.example.com )μεθηλάεη κε ην είδνο ηνπ δηαθνκηζηή θαη ην πιήξεο
φλνκα ηεο πεξηνρήο (domain name) ζηελ νπνία βξίζθεηαη ε ηζηνζειίδα.
Σν ηξίην κέξνο καο ελεκεξψλεη γηα ηνλ ππνθάθειν θαη ην φλνκα ηνπ αξρείνπ ηεο ηζηνζειίδαο.
Απνηειείηαη, δειαδή, απφ ην φλνκα ηνπ θαηαιφγνπ πνπ πεξηέρεη ηελ ηζηνζειίδα θαη ην φλνκα ηνπ
εγγξάθνπ.
Δκπνξηθή Δθαξκνγή
Οη κεραλέο αλαδήηεζεο ρξεζηκνπνηνχληαη πνιχ απφ ην αγνξαζηηθφ θνηλφ παγθνζκίσο γη‟
απηφ θαη πνιιέο εηαηξίεο επηζπκνχλ λα δηαθεκίδνληαη κέζσ απηψλ. Δπεηδή νη εηαηξίεο απηέο φιν θαη
πιεζαίλνπλ ππάξρεη κεγάινο αληαγσληζκφο γηα ηελ θαηάθηεζε ησλ πξψησλ ζέζεσλ ζηηο ηζηνζειίδεο
Σελίδα | 34
απνηειεζκάησλ αλαδήηεζεο. Σν θαηλφκελν απηφ νδήγεζε ζηελ αλάπηπμε ελφο άιινπ θιάδνπ, ηνπ
search engine optimization (Βειηηζηνπνίεζε γηα ηηο κεραλέο αλαδήηεζεο) πνπ πεξηιακβάλεη ηερληθέο
θαηαζθεπήο θαη δηθηχσζεο ηζηνζειίδσλ πνπ λα πξνζθέξνπλ θαιχηεξεο ζέζεηο ζηα απνηειέζκαηα.
Σελίδα | 35
δηθφ καο ππνινγηζηή φζν θαη ζην Γηαδίθηπν. Γηα ην ιφγν απηφ ππάξρεη ην ηείρνο πξνζηαζίαο
(firewall) ησλ Windows ην νπνίν ειέγρεη ηα δεδνκέλα πνπ απνζηέιινληαη θαη ιακβάλνληαη
απφ ηνλ ππνινγηζηή ή ην δίθηπν θαη έρεη ηε δπλαηφηεηα λα κπινθάξεη ηελ είζνδν θαη έμνδφ
ηνπο.
Απφ ηνχο ππνινγηζηψλ: Τπάξρνπλ πνιιά πξνγξάκκαηα πνπ εθηεινχλ αλεπηζχκεηεο ελέξγεηεο
ζην ζχζηεκά καο. Γη‟ απηφ θαη ζα πξέπεη λα έρνπκε εγθαηεζηεκέλν ζηνλ ππνινγηζηή καο έλα
πξφγξακκα antivirus πνπ ζα πξνζηαηεχεη ηνλ ππνινγηζηή καο ζθαλάξνληαο φια ηα αξρεία καο
θαη δηαγξάθνληαο εθείλα πνπ έρνπλ “κνιπλζεί” απφ θάπνην ηφ.
Απφ ηελ εκθάληζε ηζηνζειίδσλ κε αλεπηζχκεην πεξηερφκελν, ηελ εκθάληζε ελνριεηηθψλ
παξαζχξσλ θαηά ηελ πεξηήγεζε ζηνλ Ηζηφ, θαη απφ ηελ ιήςε ελνριεηηθψλ κελπκάησλ.
Αζθαιείο πλαιιαγέο
Οη πεξηζζφηεξεο ηνπνζεζίεο γηα λα νινθιεξψζνπλ κηα ειεθηξνληθή ζπλαιιαγή απαηηνχλε
απφ ηνπο ρξήζηεο ηελ ρξήζε πηζησηηθήο θάξηαο. Γη‟ απηφ θαη είλαη ζρεδηαζκέλεο κε ηέηνην ηξφπν
ψζηε λα πξνζηαηεχνλ ηνπο ρξήζηεο απφ πηζαλή ππνθινπή ησλ ζηνηρείσλ ηνπο απαγνξεχνληαο ζε κε
εμνπζηνδνηεκέλα άηνκα λα έρνπλ πξφζβαζε ζηηο πιεξνθνξίεο ησλ ρξεζηψλ.
Έλαο θπιινκεηξεηήο Ηζηνχ ππνζηεξίδεη πξσηφθνιια αζθαιείαο πνπ ρξεζηκνπνηνχληαη απφ
αζθαιείο ηνπνζεζίεο, έηζη ψζηε φηαλ απνζηέιιεη ηα δεδνκέλα ηνπ λα κελ ππάξρεη θίλδπλνο λα
πξνζπειαζηνχλ απφ κε εμνπζηνδνηεκέλα άηνκα.
Κάζε θνξά πνπ έλαο ρξήζηεο επηζθέπηεηαη κηα αζθαιή ηνπνζεζία, ε ηνπνζεζία ηνπ
απνζηέιιεη έλα πηζηνπνηεηηθφ, ην νπνίν εκθαλίδεηαη ζηελ γξακκή θαηάζηαζεο ζην θπιινκεηξεηή
Ηζηνχ κε ηε κνξθή ινπθέηνπ.
Φεθηαθά Πηζηνπνηεηηθά
Σν ςεθηαθφ πηζηνπνηεηηθφ είλαη έλα ειεθηξνληθφ έγγξαθν πνπ ρξεζηκεχεη ζηελ αλαγλψξηζε
κηαο νληφηεηαο. Μέζσ ησλ ςεθηαθφ πηζηνπνηεηηθφ γίλεηαη ε επηβεβαίσζε ηεο ηαπηφηεηαο ησλ
ρξεζηψλ πξνζηαηεχνληάο ηνπο απφ ππνθινπέο ή αιινηψζεηο ησλ δεδνκέλσλ πνπ αληαιιάζνπλ κέζσ
Internet. Δπίζεο, ηα ςεθηαθά πηζηνπνηεηηθά πξνθπιάγνπλ ηνλ ππνινγηζηή καο απφ κε αζθαιέο
ινγηζκηθφ πνπ δηαηίζεηαη ζην Γηαδίθηπν.
Τπάξρνπλ δχν θχξηνη ηχπνη πηζηνπνηεηηθψλ:
Σα πξνζσπηθά πηζηνπνηεηηθά, ηα νπνία επηβεβαηψλνπλ ηελ ηαπηφηεηα ελφο ρξήζηε θαη
ρξεζηκνπνηνχληαη γηα ηελ πξνζπέιαζε ηζηνζειίδσλ πνπ απαηηνχλ επηβεβαίσζε ησλ ρξεζηψλ.
Σα πηζηνπνηεηηθά ηνπνζεζηψλ Ηζηνχ, ηα νπνία επηβεβαηψλνπλ ηελ γλεζηφηεηα θαη ηελ
αζθάιεηα κηαο ηνπνζεζίαο Ηζηνχ θαη ρξεζηκεχνπλ ζην λα είκαζηε ζίγνπξνη φηη απνζηέιινπκε
ηα πξνζσπηθά καο ζηνηρεία ή φηη θαηεβάδνπκε αξρεία απφ αζθαιείο ηνπνζεζίεο.
Κξππηνγξάθεζε
Με ηελ θξππηνγξάθεζε ηξνπνπνηνχκε ηα δεδνκέλα ψζηε λα κελ είλαη δπλαηή ε αλάγλσζε
θαη ε θαηαλφεζή ηνπο απφ κε εμνπζηνδνηεκέλνπο ρξήζηεο. Έηζη είκαζηε ζίγνπξνη φηη ηα δεδνκέλα ζα
δηαβαζηνχλ κφλν απφ ηνλ παξαιήπηε πνπ έρνπκε θαζνξίζεη. Ζ θξππηνγξάθεζε κπνξεί λα
πξαγκαηνπνηεζεί απφ δηάθνξεο εθαξκνγέο θαη ιεηηνπξγηθά ζπζηήκαηα.
Ζ δηαδηθαζία κεηαηξνπήο ελφο θξππηνγξαθεκέλνπ αξρείνπ, ψζηε λα είλαη δπλαηή ε
αλάγλσζή ηνπ απφ εμνπζηνδνηεκέλνπο ρξήζηεο , ιέγεηαη αποκρσπηογράθηζη θαη πξαγκαηνπνηείηαη
κε αλάινγν ινγηζκηθφ.
Σελίδα | 36
3.3 Υξνλνδηάγξακκα Δξγαζίαο
2011
Ηαλνπάξηνο Φεβρουάριοσ Μάρτιοσ Απρίλιοσ Μάιοσ
15 30 15 30 15 30 15 30 15 30
ρεδηαζκφο Ηζηνρψξνπ
ρεδηαζκφο Animation
Γεκηνπξγία Βάζεο
Γεδνκέλσλ
Γεκηνπξγία Φνξκψλ κε
ηελ PHP
Δκθάληζε δεδνκέλσλ
κε ηελ PHP
Αλαθνξά Πηπρηαθήο
Σελίδα | 37
ΚΔΦΑΛΑΙΟ 4: ΚΤΡΙΟ ΜΔΡΟ
ΠΣΤΥΙΑΚΗ
4.1 Ρόινη θαη δηθαηώκαηα πξόζβαζεο
Δπεμεξγαζία ηνηρείσλ.
Σελίδα | 38
Γίλεηαη ε δπλαηφηεηα ζην ρξήζηε-κέινο λα επεμεξγαζηεί ηα πξνζσπηθά ζηνηρεία ηνπ, θαζψο
θαη ηα ζηνηρεία πξφζβαζεο.
Αλαδήηεζε (Απιή-χλζεηε).
Ζ ιεηηνπξγία απηή είλαη δηαζέζηκε θαη ζηα ηξία επίπεδα ρξεζηψλ, θαη είλαη κηα απφ ηηο
ζεκαληηθφηεξεο ιεηηνπξγίεο. Τπάξρνπλ δχν ηξφπνη αλαδήηεζεο, απηφο ηεο απιήο, θαη απηφο ηεο
ζχλζεηεο αλαδήηεζεο.
ηελ απιή αλαδήηεζε απαηηείηαη ε ζπκπιήξσζε ελφο κφλν θξηηεξίσλ αλαδήηεζεο, ελψ ζηελ
ζχλζεηε αλαδήηεζε δίλεηαη ζηνλ ρξήζηε ε δπλαηφηεηα λα εηζάγεη πεξηζζφηεξα θξηηήξηα αλαδήηεζεο,
ψζηε λα επηηεπρζνχλ ζπγθεθξηκέλα απνηειέζκαηα.
Απνζηνιή Μελχκαηνο.
Με ηελ ιεηηνπξγία απηή κπνξεί ν θάζε ρξήζηεο λα ζπκπιεξψζεη κηα θφξκα απνζηνιήο
ζηνηρείσλ καδί κε θάπνην κήλπκα θαη λα ηελ ζηείιεη ζηνλ δηαρεηξηζηή ψζηε λα κπνξέζεη λα
πιεξνθνξεζεί γηα θάπνην βηβιίν.
Σελίδα | 39
H MySQL ειέγρεη πξψηα αλ ν ρξήζηεο έρεη ηελ άδεηα λα ζπλδεζεί κε ην δηαθνκηζηή θαη ζηε
ζπλέρεηα ειέγρεη αλ ν ρξήζηεο έρεη ην δηθαίσκα λα εθηειέζεη ηε ζπγθεθξηκέλε εληνιή SQL ζηηο
ζπγθεθξηκέλεο βάζεηο δεδνκέλσλ.
Τπάξρνπλ πνιινί ηξφπνη θαζνξηζκνχ ρξεζηψλ ζηελ MySQL. Έλαο ηξφπνο είλαη κέζσ ηεο
δηαηαγήο GRAND ζηνλ πειάηε mysql.
Σελίδα | 40
Δηθόλα 4.2: Δκθάληζε δηθαησκάησλ ρξεζηώλ
Σελίδα | 41
πεξηγξάκκαηα γηα ηα ζηνηρεία επηπέδνπ ηκήκαηνο, λα ηα ηνπνζεηήζνπκε ζε κηα ζπγθεθξηκέλε ζέζε,
λα ηνπο πξνζζέζνπκε ρξψκα θφληνπ, λα ξπζκίζεηε ην θείκελν σο θηλνχκελν γχξσ απφ απηά, θ.ν.θ. Ο
ρεηξηζκφο ησλ ζηνηρείσλ επηπέδνπ ηκήκαηνο είλαη, νπζηαζηηθά, ν ηξφπνο κε ηνλ νπνίν δηακνξθψλνπκε
ζειίδεο κε ηε ρξήζε CSS.
Σα ζηπι πνπ έρνπλ δεκηνπξγεζεί κε CSS κπνξνχλ λα απνζεθεπηνχλ απεπζείαο κέζα ζην
έγγξαθν ή, γηα πεξηζζφηεξε επειημία, ζε έλα εμσηεξηθφ θχιιν ζηπι. Αλ επηζπλάςνπκε έλα εμσηεξηθφ
θχιιν ζηπι ζε κεξηθέο ζειίδεο, ηφηε νη αιιαγέο πνπ θάλεηε ζην θχιιν ζηπι ζα απεηθνλίδνληαη
απηφκαηα ζε φιεο απηέο ηηο ζειίδεο.
Πιαίζην CSS
Σελίδα | 42
Σύπνη θαλόλσλ CSS
Δηηθέηα (Tag) : Ο ζθνπφο κηαο εηηθέηαο είλαη ε αιιαγή ηεο εκθάληζεο κηαο ζπγθεθξηκέλεο
εηηθέηαο HTML. Σα ζηπι πνπ βαζίδνληαη ζε εηηθέηεο ζα κεηαβάινπλ ηελ εκθάληζε ηεο
εηηθέηαο θαη ησλ πεξηερφκελψλ ηεο.
Κιάζε (Class): Μηα πξνζαξκνζκέλε θιάζε κπνξεί λα απνθηήζεη έλα κνλαδηθφ φλνκα θαη λα
κε ζρεηίδεηαη κε κηα ζπγθεθξηκέλε εηηθέηα HTML. Μπνξνχκε λα ρξεζηκνπνηήζνπκε ηελ ίδηα
θιάζε γηα έλαλ πίλαθα, κηα παξάγξαθν, ή πεδίν θφξκαο φζεο θνξέο επηζπκνχκε. Ζ εθαξκνγή
κηαο θιάζεο ζε κηα εηηθέηα γίλεηαη κε ηνλ εμήο ηξφπν :
<body class="bookstore">….</body>
Όηαλ κνξθνπνηνχκε θείκελν απφ ην παξάζπξν Properties, ην Dreamweaver νλνκάδεη θαη
δεκηνπξγεί απηφκαηα ζηπι θιάζεο, ηα νπνία κπνξνχκε λα μαλαρξεζηκνπνηήζνπκε ζε άιια
ζηνηρεία. Σα ζηπι θιάζεηο κπνξνχκε εχθνια λα ηα αλαγλσξίζνπκε, γηαηί ην φλνκα ηνπο
αθνινπζεί πάληα κηα ηειεία. πρ. .bookstore
Πξνεγκέλε (Advanced) – Σαπηφηεηεο & Φεπδνθιάζζεηο: Ζ ηαπηφηεηα (ID) είλαη έλαο εηδηθφο
ηχπνο θαλφλα πνπ είλαη κνλαδηθφο γηα έλα ζπγθεθξηκέλν ζηνηρείν ηεο ζειίδαο. Οη ηαπηφηεηεο
πεξηέρνπλ πιεξνθνξίεο νη νπνίεο είλαη κνλαδηθέο γηα έλα πιαίζην, θαη έηζη δεκηνπξγείηαη κηα
κνλαδηθή ηαπηφηεηα απνθιεηζηηθά γηα ην ζπγθεθξηκέλν ζηνηρείν. Σέινο, ην φλνκα ηεο
ηαπηφηεηαο αθνινπζεί πάληα ην ζχκβνιν ηεο δίεζεο (#). ε θάζε θαλφλα ηαπηφηεηαο
αληηζηνηρεί κηα εηηθέηα <div> κέζσ ηνπ ραξαθηεξηζηηθνχ ηαπηφηεηαο.
πρ. <div id="block">…..</div>
Όηαλ πξνζζέηνπκε ζηπι απφ ην πιαίζην Styles εκθαλίδεηαη ην πιαίζην δηαιφγνπ CSS Rule
definition, ην νπνίν πεξηέρεη κία ζεηξά απφ θαηεγνξηνπνηεκέλα πεδία θεηκέλνπ θαη κελνχ πνπ
κπνξνχκε λα ρξεζηκνπνηήζνπκε γηα λα επηιέμνπκε ηδηφηεηεο γηα ην λέν καο θαλφλα.
Σελίδα | 43
ηελ θαξηέια Type πξνζζέηνπκε
ηδηφηεηεο γηα ηελ κνξθνπνίεζε ηνπ
θεηκέλνπ.
Σελίδα | 44
Δηθόλα 4.8: Move CSS Rules Δηθόλα 4.9: Attach Style Sheet
Δπηινγείο ςεπδνθιάζεσλ
Έλαο επηινγέαο ςεπδνθιάζεσλ επεξεάδεη έλα κέξνο ή θαηάζηαζε κηαο επηιεγκέλεο εηηθέηαο
ή θιάζεο. Μηα θαηάζηαζε αλαθέξεηαη ζπρλά ζηελ εκθάληζε ελφο ζηνηρείνπ θαζψο απηφ αληηδξά ζε
έλα ζπκβάλ, φπσο είλαη ην πέξαζκα ηνπ θέξζνξα πάλσ απφ απηφ. Έλαο επηινγέαο ςεπδνθιάζεο είλαη
ν a:hover, ν νπνίνο θαζνξίδεη ηελ εκθάληζε ησλ ζπλδέζκσλ φηαλ πεξλά πάλσ απφ απηνχο ν δείθηεο
ηνπ πνληηθηνχ.
Σελίδα | 45
Δηθόλα 4.11: Μνξθνπνίεζε Φεπδνθιάζεσλ
Σελίδα | 46
Δηθόλα 4.13: Δπεμεξγαζία Πηλάθσλ από ην Παξάζπξν Properties
Μπνξνχκε λα ρσξίζνπκε κηα γξακκή ηνπ πίλαθα ρξεζηκνπνηψληαο ην θνπκπί “Split cells”. Καζψο
θαη λα ελψζνπκε δχν πεδία ρξεζηκνπνηψληαο ην θνπκπί “Merge selected cells”.
4.2.3 ύλδεζκνη
Οη ηζηνζειίδεο αιιεινζπλδένληαη θαη κπνξεί ν ρξήζηεο λα κεηαβεί απφ ηε κία ζηελ άιιε
θάλνληαο «θιηθ», επηιέγνληαο δειαδή ζπλδέζκνπο πνπ ππάξρνπλ ζην θείκελν ή ζηηο θσηνγξαθίεο ηεο
ηζηνζειίδαο.
Ζ δηαδηθαζία δεκηνπξγίαο ζπλδέζκσλ γηα λα κεηαβαίλνπκε απφ ηελ κία ζειίδα ζηελ άιιε
είλαη πνιχ απιή. Σν κφλν πνπ ρξεηάδεηαη λα θάλνπκε είλαη λα επηιέμνπκε ην «αληηθείκελν» πνπ
ζέινπκε λα κεηαηξέςνπκε ζε ζχλδεζκν θαη έπεηηα λα πιεθηξνινγήζνπκε ην φλνκα ηνπ αξρείνπ πνπ
ζέινπκε λα κεηαβνχκε ζην πιαίζην Link.
Σελίδα | 47
Δηθόλα 4.15: Γεκηνπξγία αξρηθήο εηθόλαο ζην Photoshop CS3.
Σελίδα | 48
Γεκηνπξγία κελνύ
Όπσο βιέπνπκε θαη απφ ηνλ θψδηθα ην menu πνπ δεκηνπξγήζεθε παξαπέκπεη ζε έμη ζειίδεο.
Σελ Αξρηθή ζηελ νπνία εκθαλίδνληαη νη Νέεο Κπθινθνξίεο (index.php)
ηα πξνηεηλφκελα βηβιία (suggestions.php)
ηα Best Sellers (best_sellers.php)
ηελ θφξκα επηθνηλσλίαο (contact.php)
ηελ πεξηνρή ηνπ forum (forum.php)
ηελ θφξκα εγγξαθήο (register.php)
ηα αξρεία απηά έρεη πξφζβαζε ν θάζε ρξήζηεο πνπ επηζθέπηεηαη ηελ ζειίδα. Αλ φκσο είλαη
εγγεγξακκέλνο, κεηά απφ ηελ είζνδφ ηνπ ηα αξρεία αιιάδνπλ πξνζθέξνληάο ηνπ πεξηζζφηεξεο
δπλαηφηεηεο.
Γηα ηνλ ρξήζηε-κέινο:
Ζ Αξρηθή ζειίδα είλαη ε loggedin.php
Σα Πξνηεηλφκελα βηβιία εκθαλίδνληαη ζηελ ζειίδα suggestions_after.php
Ta Best Sellers ζηελ best_sellers_after.php
Ζ θφξκα επηθνηλσλίαο ζηελ contact_after.php
Ζ πεξηνρή ηνπ forum ζηελ forum_after.php
Ζ θφξκα ηεο εγγξαθήο δελ ππάξρεη.
Οη ζειίδεο απηέο πξνζθέξνπλ πξφζβαζε ζην θαιάζη αγνξψλ, θαη ζηε Wishlist πνπ έρνπλ
δεκηνπξγεζεί γηα ηνπο εγγεγξακκέλνπο ρξήζηεο.
Σελίδα | 49
Δηθόλα 4.19: Γεκηνπξγία ηνπ κελνύ ησλ ρξεζηώλ-κειώλ.
Σελίδα | 50
Φύιια CSS πνπ δεκηνπξγήζεθαλ γηα ηελ κνξθνπνίεζε
.bookstore #menu{ .bookstore #menu a {
margin-right: 30px; color: #FFFFFF;
margin-left: 30px; font-family: "Monotype Corsiva";
font-family: "Monotype Corsiva"; font-size: 20px;
font-size: 20px; text-decoration: none;
color: #FFFFFF; }
} .bookstore #menu a:hover {
color: #FFFFFF;
font-family: "Monotype Corsiva";
font-size: 20px;
text-decoration: underline;
}
Σελίδα | 51
Φύιια CSS πνπ δεκηνπξγήζεθαλ γηα ηελ κνξθνπνίεζε
.bookstore #table_flash_login { .bookstore #form_login {
margin-right: 30px; margin-right: 5px;
margin-left: 30px; margin-left: 5px;
padding-top: 20px; color: #CC9C0D;
color: #CC9C0D; font-size: 16px;
font-size: 18px; text-align: center;
font-family: "Monotype Corsiva"; }
font-weight: bold;
background-image: url(image_login.jpg);
background-repeat: no-repeat; }
Πίλαθαο 4.2: Φύιια CSS γηα ηελ κνξθνπνίεζε ηεο θόξκαο εηζόδνπ.
Σελίδα | 52
Γεκηνπξγία Φόξκαο Αλαδήηεζεο
ηελ απιή θφξκα αλαδήηεζεο ν ρξήζηεο επηιέγεη αλάκεζα ζηνλ ηίηιν, ηνλ ζπγγξαθέα θαη ηνλ
εθδφηε γηα ηελ εχξεζε ηνπ βηβιίνπ πνπ επηζπκεί. Όηαλ ν ρξήζηεο παηήζεη ην θνπκπί “OK”
θαηεπζχλεηαη ζηελ ζειίδα search_result.php (φπσο θαίλεηαη απφ ηελ ηηκή ηεο action) ζηελ νπνία
εκθαλίδνληαη ηα απνηειέζκαηα ηεο αλαδήηεζεο. Δπίζεο παηψληαο ζην link “χλζεηε Αλαδήηεζε”
κεηαθεξφκαζηε ζηελ ζειίδα search.php ζηελ νπνία εκθαλίδεηαη ε θφξκα ηελ ζχλζεηεο αλαδήηεζεο.
Πίλαθαο 4.4: Φύιια CSS γηα ηελ κνξθνπνίεζε ηεο θόξκαο απιήο αλαδήηεζεο
ηελ ζχλζεηε αλαδήηεζε ν ρξήζηεο κπνξεί λα ζπκπιεξψζεη πεξηζζφηεξα απφ έλα ζηνηρεία
γηα εχξεζε ηνπ βηβιίνπ πνπ επηζπκεί. Γηα ηνλ απιφ ρξήζηε ηα απνηειέζκαηα εκθαλίδνληαη ζηελ
ζειίδα search_result2.php, γηα ηνλ ρξήζηε-κέινο ζηελ ζειίδα search_result2_after.php θαη γηα ηνλ
administrator ζηελ ζειίδα search_result2_admin.php
Σελίδα | 53
Δηθόλα 4.24: Φόξκα ζύλζεηεο αλαδήηεζεο
Σελίδα | 54
Φύιια CSS πνπ δεκηνπξγήζεθαλ γηα ηελ κνξθνπνίεζε
.bookstore #search_erea { .bookstore #search_erea form{
margin-right: 30px; text-align: left;
margin-left: 30px; width: 570px;
color: #000000; font-weight: bold;
font-family: "Times New Roman", margin-right: 30px;
Times, serif; margin-left: 315px;
background-color: #000000; }
background-repeat: repeat-y;
background-image:
url(background%20img.jpg);
font-size: 16px;
padding-top: 50px; }
Πίλαθαο 4.5: Φύιια CSS γηα ηελ κνξθνπνίεζε ηελ θόξκα ζύλζεηεο αλαδήηεζεο
Πίλαθαο 4.6: Φύιια CSS γηα ηελ κνξθνπνίεζε ηνπ πίλαθα εμόδνπ
Σελίδα | 55
Δηθόλα 4.26: Κώδηθαο HTML ηνπ πίλαθα εμόδνπ.
Σελίδα | 56
Δηθόλα 4.28: Κώδηθαο HTML ηνπ πίλαθα εμόδνπ
Σα link πνπ αληηζηνηρνχλ ζηελ θάζε θαηεγνξία αιιάδνπλ αλάινγα κε ηελ ηδηφηεηα ηνπ
ρξήζηε. Αλ είλαη απιφο ρξήζηεο ηα αξρεία πνπ αληηπξνζσπεχνπλ ηελ θάζε θαηεγνξία είλαη:
Δθπαίδεπζε – education.php
Λνγνηερλία – logotexnia.php
Φπρνινγία – psychology.php
Θξεζθεία – riligion.php
Φηινζνθία – philosophy.php
Ηζηνξία, Γεσγξαθία – history.php
Μαγεηξηθή – cooking.php
Αλ έρεη ζπλδεζεί σο administrator ηα αξρεία πνπ αληηπξνζσπεχνπλ ηελ θάζε θαηεγνξία είλαη:
Δθπαίδεπζε – education_admin.php
Λνγνηερλία – logotexnia_admin.php
Φπρνινγία – psychology_admin.php
Θξεζθεία – religion_admin.php
Φηινζνθία – philosophy_admin.php
Ηζηνξία, Γεσγξαθία – history_admin.php
Μαγεηξηθή – cooking_admin.php
Σελίδα | 57
Αλ έρεη ζπλδεζεί σο ρξήζηεο-κέινο εκθαλίδνληαη ηα αθφινπζα αξρεία:
Δθπαίδεπζε – education_after.php
Λνγνηερλία – logotexnia_after.php
Φπρνινγία – psychology_after.php
Θξεζθεία – religion_after.php
Φηινζνθία – philosophy_after.php
Ηζηνξία, Γεσγξαθία – history_after.php
Μαγεηξηθή – cooking_after.php
Σελίδα | 58
Φύιια CSS πνπ δεκηνπξγήζεθαλ γηα ηελ κνξθνπνίεζε
.bookstore #categories { .bookstore #categories a {
float: left; font-family: "Times New Roman", Times,
width: 270px; serif;
margin-left: 10px; font-size: 16px;
color: #FFFFFF; color: #F5F1CE;
font-family: "Times New Roman", }
Times, serif; .bookstore #categories a:hover {
font-size: 16px; font-family: "Times New Roman", Times,
font-weight: normal; serif;
} font-size: 16px;
text-decoration: none;
color: #C10000; }
Πίλαθαο 4.7: Φύιια CSS γηα ηελ κνξθνπνίεζε ηνπ πίλαθα θαηεγνξηώλ
Σελίδα | 59
Φύιια CSS πνπ δεκηνπξγήζεθαλ γηα ηελ κνξθνπνίεζε
.bookstore #contact { .bookstore #contact form{
margin-right: 30px; text-align: right;
margin-left: 30px; width: 570px;
background-color: #000000; font-weight: bold;
background-repeat: repeat-y; margin-right: 30px;
background-image: margin-left: 280px;
url(background%20img.jpg); font-size: 16px;
padding-top: 50px; font-family: "Times New Roman",
color: #000000; Times, serif;
} color: #000000;
padding-top: 20px;
padding-bottom: 130px;
}
Πίλαθαο 4.8: Φύιια CSS γηα ηελ κνξθνπνίεζε ηεο θόξκαο επηθνηλσλίαο
Πίλαθα Σέινπο
Ζ θάζε ηζηνζειίδα πξέπεη λα έρεη έλα ηέινο. Οη πεξηζζφηεξεο ηζηνζειίδεο ηνπ Γηαδηθηχνπ ζην
ηέινο εκθαλίδνπλ δηάθνξνπο ρνξεγνχο. ην δηθφ καο ηζηνρψξν ζην ηέινο θάζε ζειίδαο ππάξρεη έλαο
πίλαθαο πνπ έρεη ίδηεο ζηήιεο κε απηέο ηνπ κελνχ.
Σελίδα | 60
Δκθάληζε πίλαθα ρξήζηε-κέινπο:
Σελίδα | 61
4.3 Γεκηνπξγία Flash Animation
Σν Flash κπνξεί λα ππνινγίδεη ηε δηαθνξά αλάκεζα ζε δχν δηαθνξεηηθέο θαηαζηάζεηο ελφο
αληηθεηκέλνπ θαη λα δεκηνπξγεί απηφκαηα ηα ελδηάκεζα ζηάδηα. Αλ έρνπκε, δειαδή, έλα αληηθείκελν
ζην αξηζηεξφ άθξν ελφο θακβά θαη ην κεηαθηλήζνπκε ζην δεμί άθξν ηνπ, κπνξνχκε λα πνχκε ζην
Flash “βξεο ηη άιιαμε θαη θηηάμε κνπ κηα θίλεζε”. Σν ίδην κπνξεί λα γίλεη κε ην κέγεζνο ελφο
αληηθεηκέλνπ, ην ρξψκα ηνπ θ.ιπ. Έηζη, ε δεκηνπξγία θίλεζεο κέζα απφ ην Flash είλαη, ηειηθά, αξθεηά
εχθνιε.
Αθφηνπ εηζάγνπκε ηελ εηθφλα πνπ επηζπκνχκε ζηε Βηβιηνζήθε έπεηηα ηελ ηνπνζεηνχκε ζηε
θελή καο. Απηνκάησο θαηαιακβάλεη ην πξψην Layer ηνπ Timeline κεηαβάιινληαο ην πξψην
frame ζε keyframe.
Γηα λα θαηαλνήζνπκε ηνλ ηξφπν ιεηηνπξγίαο ηνπ Flash, ζα πξέπεη λα αληηιεθζνχκε φηη
δεκηνπξγνχκε πάλσ ζην ρξφλν. Ο ρξφλνο θπιάεη πάλσ ζην Timeline θαη κεηξηέηαη ζε frames. Σν θάζε
Layer πεξηέρεη ην αληηθείκελν πνπ ζέινπκε λα εκθαληζηεί. Γηα λα κπνξεί λα είλαη νξαηφ έλα
αληηθείκελν ζα πξέπεη λα βξίζθεηαη κέζα ζηα πιαίζηα ηεο ζθελήο.
Αλ ην αληηθείκελφ καο είλαη κηα εηθφλα γηα λα ηεο δψζνπκε θίλεζε ζα πξέπεη λα θαζνξίζνπκε
ζην ρξφλν ην ζεκείν εθθίλεζεο θαη ην ζεκείν αθηλεηνπνίεζεο. Όπσο πξναλαθέξακε ν ρξφλνο
κεηξηέηαη ζε frames. Έηζη ην frame απφ ην νπνίν ζα μεθηλάεη ε θίλεζε ην κεηαβάισ ζε keyframe,
θαζψο θαη ην frame ζην νπνίν ζα ζηακαηάεη.
Σελίδα | 62
Δηθόλα 4.35: Δηζαγσγή keyframe
Αθνχ εηζάγακε ηα δχν keyframes, ηζεθάξνπκε ηελ απφζηαζε απφ ην έλα ζην άιιν θαη
επηιέγνπκε “Create Motion Teen”. Με απηφ ηνλ ηξφπν πξνζζέηνπκε θίλεζε ζε έλα
αληηθείκελν ηεο ζθελήο καο. Αλ εθηειέζακε ζσζηά ηελ δηεξγαζία απηή ηφηε έλα βέινο καο
δείρλεη ηελ αξρή θαη ην ηέινο ηεο κεηαθνξάο.
Σελίδα | 63
Γηα λα εκθαλίδνπκε θαη λα εμαθαλίδνπκε ζηαδηαθά κία εηθφλα πξέπεη πξψηα λα ηελ
κεηαηξέςνπκε ζε ζχκβνιν. Απηφ γίλεηαη κε ηελ επηινγή “Convert to Symbol”.
Όπσο θαίλεηαη θαη απφ ηελ Δηθφλα, ην παξάζπξν “ Convert to Symbol” καο δίλεη ηξείο
επηινγέο γηα ηελ κεηαηξνπή ελφο αληηθεηκέλνπ:
Movie clip
Button
Graphic
Απηφο είλαη θαη ν ηξφπνο πνπ δεκηνπξγνχκε έλα θνπκπί. ηελ πεξίπησζε ηεο εηθφλαο
επηιέγνπκε Graphic.
Μεηαηξέπνληαο κηα εηθφλα ζε ζχκβνιν, ζηελ θαξηέια ησλ Properties εκθαλίδεηαη ε επηινγή
Brightness. Αιιάδνληαο ηελ ηηκή ηνπ Brightness ε εηθφλα ράλεηαη.
Σελίδα | 64
Ζ δεκηνπξγία ελφο button γίλεηαη κε ηελ επηινγή
“Convert to Symbol”, φπσο είδακε πξηλ. Κάζε θνπκπί πνπ
δεκηνπξγείηαη ζην Flash έρεη 4 frame:
Up – Αξρηθά ραξαθηεξηζηηθά
Over – Καζνξηζκφο ηεο εκθάληζεο ελφο θνπκπηνχ
φηαλ πεξάζεη απφ πάλσ ηνπ ν θέξζνξαο.
Down – Καζνξηζκφο ηεο εκθάληζεο φηαλ ζα θχγεη
ν θέξζνξαο πάλσ απφ έλα θνπκπί.
Hit – Σα ραξαθηεξηζηηθά πνπ ζα πάξεη έλα θνπκπί
φηαλ παηεζεί.
Σελίδα | 65
4.4 Γεκηνπξγία Βάζεο Γεδνκέλσλ – Bookstore
Σελίδα | 66
Σα δεδνκέλα ηχπνπ CHAR απνζεθεχνληαη σο ζπκβνινζεηξέο κε ην πιήξεο κήθνο ηνπο (αλ
ππάξρνπλ άδεηεο ζέζεηο, απηέο ζπκπιεξψλνληαη κε θελά δηαζηήκαηα θαη θαηά ηελ αλάθηεζε ηεο ηηκήο
ηνπο απφ ηε βάζε δεδνκέλσλ, ηα ηπρψλ θελά αθαηξνχληαη). Αληίζεηα ηα δεδνκέλα ηχπνπ VARCHAR
θαηαιακβάλνπλ ρψξν ίζν κε ην κήθνο ηεο ίδηαο ηεο ζπκβνινζεηξάο. Καηά απηφλ ηνλ ηξφπν αλ έλα
πεδίν ζπκβνινζεηξάο ζα έρεη ζηαζεξφ κήθνο ρξεζηκνπνηνχκε ηνλ ηχπν CHAR, αιιηψο
ρξεζηκνπνηνχκε ηνλ ηχπν VARCHAR.
Δπίζεο, ν ηχπνο πεδίνπ TIMESTAMP ελεκεξψλεηαη απηφκαηα κε ηελ ηξέρνπζα εκεξνκελία
θαη ψξα φηαλ εθηειείηαη ε εληνιή INSERT ή UPDATE.
Δπξεηήξηα
Σα επξεηήξηα είλαη έλα εηδηθφ ζχζηεκα πνπ ρξεζηκνπνηνχλ νη βάζεηο δεδνκέλσλ γηα ηε
βειηίσζε ηεο απφδνζεο ησλ εξσηεκάησλ επηινγήο (SELECT). Σα επξεηήξηα ηνπνζεηνχληαη ζε κία ή
πεξηζζφηεξεο ζηήιεο νπνηαδήπνηε ηχπνπ, ιέγνληαο ζηε MySQL λα πξνζέμεη ηδηαίηεξα απηέο ηηο
ζηήιεο. Δπίζεο, εμππεξεηνχλ ζηηο αλαδεηήζεηο πνπ εθηεινχληαη ζπρλά ζην ίδην ζχλνιν ηηκψλ (πρ.
φλνκα θαη επψλπκν).
Ζ MySQL έρεη ηέζζεξα είδε επξεηεξίσλ:
INDEX (ηππηθφ)
UNIQUE (κνλαδηθφ – θάζε γξακκή πξέπεη λα έρεη δηαθνξεηηθή ηηκή ζηήιεο)
FULLTEXT ( γηα αλαδήηεζε πιήξνπο θεηκέλνπ)
PRIMARY KEY
Μηα ζηήιε ζα πξέπεη λα έρεη πάληα ην ίδην κνλαδηθφ επξεηήξην θαη φρη πεξηζζφηεξα.
Σελίδα | 67
Ζ επφκελε πην ζπλεζηζκέλε κεραλή απνζήθεπζεο είλαη ε InnoDB, ν πξνεπηιεγκέλνο ηχπνο
πίλαθα γηα ηα Windows. Οη πίλαθεο InnoDB είλαη θαηάιιεινη γηα ζπλαιιαγέο θαη εθηεινχλ
εξσηήκαηα ελεκέξσζεο ρσξίο πξφβιεκα. Σν κεηνλέθηεκα ηεο απέλαληη ζηε MyISAM είλαη φηη
ρξεηάδεηαη πεξηζζφηεξν ρψξν ζην δίζθν ηνπ δηαθνκηζηή, ιφγσ ηνπ φηη είλαη πην αξγή. Δπίζεο νη
πίλαθεο InnoDB δελ ππνζηεξίδνπλ FULLTEXT.
ηε δεκηνπξγία ησλ πηλάθσλ ηεο βάζεο δεδνκέλσλ “Bookstore” νη πίλαθεο είλαη ηχπνπ
InnoDB εθηφο απφ ηνλ πίλαθα ησλ ζπγγξαθέσλ ν νπνίνο πεξηέρεη επξεηήξην FULLTEXT.
Πίλαθαο authors
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
author_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
author_fn Μηθξφ φλνκα πξψηνπ ζπγγξαθέα
author_ln Δπψλπκν πξψηνπ ζπγγξαθέα
author2_fn Μηθξφ φλνκα δεχηεξνπ ζπγγξαθέα
author2_ln Δπψλπκν δεχηεξνπ ζπγγξαθέα
Σελίδα | 68
Δηθόλα 4.42: Δκθάληζε ζηειώλ ζηελ phpMyAdmin
ηελ ζχλζεζε ησλ νλνκάησλ επηιέγνπκε ηελ πεξηγξαθή greek_general_ci έηζη ψζηε λα
ελεκεξψλεηαη ε MySQL γηα ηελ γιψζζα πνπ ζα έρνπλ νη εγγξαθέο. ηε ζπγθεθξηκέλε εληνιή
επηηξέπνληαη κφλν ηα Διιεληθά θαη Αγγιηθά. Αλ ζέινπκε λα ζπκπεξηιάβνπκε πεξηζζφηεξεο γιψζζεο
επηιέγνπκε ηελ ζχλζεζε utf8_general_ci.
Πίλαθαο editors
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
editor_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
editor_name Όλνκα ηνπ εθδφηε
Πίλαθαο 4.12: ηήιεο ηνπ πίλαθα editors
Σελίδα | 69
Δηθόλα 4.44: Δκθάληζε ζηειώλ ζηελ phpMyAdmin
Πίλαθαο categories
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
category_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
category_name Όλνκα Καηεγνξίαο
Πίλαθαο 4.13: ηήιεο ηνπ πίλαθα categories
Σελίδα | 70
Δηθόλα 4.46: Δκθάληζε ζηειώλ ζηελ phpMyAdmin
Πίλαθαο books
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
book_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
author_id Ξέλν θιεηδί ηνπ πίλαθα authors
editor_id Ξέλν θιεηδί ηνπ πίλαθα editors
category_id Ξέλν θιεηδί ηνπ πίλαθα categories
book_name Σίηινο βηβιίνπ
price Σηκή βηβιίνπ
ISBN Κσδηθφο βηβιίνπ
description Πεξηγξαθή
image_name_big Όλνκα κεγάιεο εηθφλαο
image_name_small Όλνκα κηθξήο εηθφλαο
url URL θαηεγνξίαο βηβιίνπ – Γηα ηνλ απιφ ρξήζηε
url_after URL θαηεγνξίαο βηβιίνπ – Γηα ηνλ ρξήζηε-κέινο
url_admin URL θαηεγνξίαο βηβιίνπ – Γηα ηνλ administrator
Ζ ζηήιε απηή έρεη default ηηκή 0. Αλ ηεο δψζνπκε ηελ ηηκή 1, ην βηβιίν
new_book
ζπκπεξηιακβάλεηαη ζηηο Νέεο Κπθινθνξίεο.
new_url URL βηβιίνπ λέαο θπθινθνξίαο – Γηα ηνλ απιφ ρξήζηε
new_url_after URL βηβιίνπ λέαο θπθινθνξίαο – Γηα ηνλ ρξήζηε-κέινο
new_url_admin URL βηβιίνπ λέαο θπθινθνξίαο – Γηα ηνλ administrator
Ζ ζηήιε απηή έρεη default ηηκή 0. Αλ ηεο δψζνπκε ηελ ηηκή 1, ην βηβιίν
best_book
ζπκπεξηιακβάλεηαη ζηα Best Sellers.
best_url URL βηβιίνπ-best seller – Γηα ηνλ απιφ ρξήζηε
best_url_after URL βηβιίνπ-best seller – Γηα ηνλ ρξήζηε-κέινο
best_url_admin URL βηβιίνπ-best seller – Γηα ηνλ administrator
Ζ ζηήιε απηή έρεη default ηηκή 0. Αλ ηεο δψζνπκε ηελ ηηκή 1, ην βηβιίν
sug_book
ζπκπεξηιακβάλεηαη ζηα Πξνηεηλφκελα βηβιία.
sug_url URL πξνηεηλφκελνπ βηβιίνπ – Γηα ηνλ απιφ ρξήζηε
Σελίδα | 71
sug_url_after URL πξνηεηλφκελνπ βηβιίνπ – Γηα ηνλ ρξήζηε-κέινο
sug_url_admin URL πξνηεηλφκελνπ βηβιίνπ – Γηα ηνλ administrator
Πίλαθαο 4.14: ηήιεο ηνπ πίλαθα books
Σελίδα | 72
Πίλαθαο users
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
user_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
user_name Δκθαληδφκελν φλνκα ρξήζηε
first_name Όλνκα
last_name Δπψλπκν
e_mail Γηεχζπλζε Ζιεθηξνληθνχ Σαρπδξνκείνπ
pass Κσδηθφο Υξήζηε
telefone Σειέθσλν
fax Ννχκεξν - fax
city Πφιε
zip_code Σαρπδξνκηθφο Κψδηθαο
address Γηεχζπλζε
registration_date Ζκέξα εγγξαθήο
Πίλαθαο 4.15: ηήιεο ηνπ πίλαθα users
Πίλαθαο Καιαζηνύ
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
kal_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
book_id Ξέλν θιεηδί ηνπ πίλαθα books
user_id Ξέλν θιεηδί ηνπ πίλαθα users
kal_book Σίηινο βηβιίνπ πνπ πξνζηέζεθε ζην θαιάζη
pr Σηκή βηβιίνπ
Σελίδα | 73
quantity Πνζφηεηα
k_url URL θαηεγνξίαο βηβιίνπ
date Ζκεξνκελία πξνζζήθεο ηνπ βηβιίνπ ζην θαιάζη
Πίλαθαο 4.16: ηήιεο ηνπ πίλαθα kalathi
Πίλαθαο Wishlist
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
w_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
book_id Ξέλν θιεηδί ηνπ πίλαθα books
user_id Ξέλν θιεηδί ηνπ πίλαθα users
b_name Σίηινο βηβιίνπ πνπ πξνζηέζεθε ζηε wishlist
img Δηθφλα βηβιίνπ
w_url URL θαηεγνξίαο βηβιίνπ
date Ζκεξνκελία πξνζζήθεο ηνπ βηβιίνπ ζηε wishlist
Πίλαθαο 4.17: ηήιεο ηνπ πίλαθα Wishlist
Σελίδα | 74
Δηθόλα 4.50: Δκθάληζε ζηειώλ ζηελ phpMyAdmin
Πίλαθαο messages
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
msg_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
body_msg Μήλπκα Υξήζηε
date_entered Ζκεξνκελία απνζηνιήο κελχκαηνο
user_name Όλνκα Υξήζηε
user_email email Υξήζηε
Πίλαθαο 4.18: ηήιεο ηνπ πίλαθα messages
Σελίδα | 75
Πίλαθαο orders
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
order_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
user_id Ξέλν θιεηδί ηνπ πίλαθα users
total πλνιηθφ πνζφ παξαγγειίαο
νrder_date Ζκεξνκελία Παξαγγειίαο
Πίλαθαο 4.19: ηήιεο ηνπ πίλαθα orders
Πίλαθαο order_contents
ΣΗΛΔ ΠΔΡΙΓΡΑΦΗ
oc_id Πξσηεχσλ θιεηδί ηνπ πίλαθα
order_id Ξέλν θιεηδί ηνπ πίλαθα orders
book_id Ξέλν θιεηδί ηνπ πίλαθα books
quantity Πνζφηεηα
pr Σηκή βηβιίνπ
ship_date Ζκεξνκελία παξαγγειίαο βηβιίνπ
Πίλαθαο 4.20: ηήιεο ηνπ πίλαθα order_contents
Σελίδα | 76
Δηθόλα 4.53: Δκθάληζε ζηειώλ ζηελ phpMyAdmin
Σελίδα | 77
<input type="text" name="first_name" size="40" maxlength="20" /></p>
<p><span class="red">*</span> Δπώλπκν :
<input type="text" name="last_name" size="40" maxlength="40" /></p>
<p><span class="red">*</span> Γηεύζπλζε :
<input type="text" name="address" size="40" maxlength="40" /></p>
<p><span class="red">*</span> Πόιε :
<input type="text" name="city" size="40" maxlength="30" /></p>
<p><span class="red">*</span> Σ.Κ. :
<input type="text" name="zip_code" size="40" maxlength="10" /></p>
<p><span class="red">*</span> Σειέθσλν :
<input type="text" name="telefone" size="40" maxlength="30" /></p>
<p><span class="red">*</span> Fax :
<input type="text" name="fax" size="40" maxlength="30" /></p>
<p><span class="red">*</span> Email :
<input type="text" name="e_mail" size="40" maxlength="30" /></p>
<p><span class="red">*</span> Κσδηθόο πξόζβαζεο :
<input type="password" name="pass1" size="40" maxlength="40" /></p>
<p><span class="red">*</span> Δπηβεβαίσζε θσδηθνύ πξόζβαζεο :
<input type="password" name="pass2" size="40" maxlength="40" /></p>
<p align="right"> </p>
<p align="right">
<input type="submit" name="register" value="Καηαρώξεζε ηνηρείσλ" />
</p>
<input type="hidden" name="registered" value="TRUE" />
</form>
Πεξηγξαθή Φόξκαο
Απηφ πνπ πξέπεη λα πξνζέμνπκε ζηνλ θψδηθα ηεο θφξκαο απηήο είλαη ηα ραξαθηεξηζηηθά
method θαη action. Με ηελ ηηκή post πνπ δίλνπκε ε θφξκα θαηαρσξεί ηα δεδνκέλα ησλ πεδίσλ ζην
κεηξψν $_POST. Μέζσ ηεο action θαζνξίδνπκε ην αξρείν ην νπνίν ζα παξαιάβεη ηα δεδνκέλα απηά.
Δπίζεο, ε ηηκή ηνπ ραξαθηεξηζηηθνχ size θαζνξίδεη ην κέγεζνο ηνπ πεδίνπ φηαλ εκθαλίδεηαη ε
θφξκα ζην θπιινκεηξεηή, ελψ ε ηηκή ηνπ maxlength πξέπεη λα ζπκθσλεί κε ην κέγεζνο ηεο ζηήιεο
ηνπ πίλαθα (ηεο βάζεο δεδνκέλσλ Bookstore) ζηνλ νπνίν ζα θαηαρσξεζνχλ ηα δεδνκέλα πνπ ν
ρξήζηεο ζα δψζεη.
if (isset($_POST['registered']))
{
$errors = array();
$trimmed = array_map('trim',$_POST);
$un = $fn = $ln = $ad = $c = $zip = $tel = $fax = $e = $p =FALSE;
if (empty($trimmed['user_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Όλνκά ζαο.';
}else{
if (preg_match("|^\w.{2,20}$|i", $trimmed['user_name']))
Σελίδα | 78
{
$fn = mysqli_real_escape_string($dbc, $trimmed['user_name']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην όλνκα ρξήζηε.';
}
}
if (empty($trimmed['first_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Όλνκά ζαο.';
}else{
if (preg_match("|^\w.{2,20}$|i", $trimmed['first_name']))
{
$fn = mysqli_real_escape_string($dbc, $trimmed['first_name']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην κηθξό ζαο όλνκα.';
}
}
if (empty($trimmed['last_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Δπώλπκό ζαο.';
}else{
if (preg_match('/^\w.{2,40}$/i', $trimmed['last_name']))
{
$ln = mysqli_real_escape_string($dbc, $trimmed['last_name']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην επώλπκν ζαο.';
}
}
if (empty($trimmed['address']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηε Γηεύζπλζή ζαο.';
}else{
if (preg_match('/^\w.+[ ][0-9]{2,40}$/i', $trimmed['address']))
{
$ad = mysqli_real_escape_string($dbc, $trimmed['address']);
}else{
$errors[] = 'Μόλν ςεθία θαη ραξαθηήξεο επηηξέπνληαη γηα ην όλνκα
δηεύζπλζεο.';
}
}
if (empty($trimmed['city']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηελ Πόιε ζαο.';
}else{
if (preg_match('/^\w.{2,30}$/i', $trimmed['city']))
{
$c = mysqli_real_escape_string($dbc, $trimmed['city']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην όλνκα ηεο πόιεο ζαο.';
}
}
Σελίδα | 79
if (empty($trimmed['zip_code']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Σαρπδξνκηθό ζαο Κώδηθα.';
}else{
f (preg_match('/^[\d-]{2,10}$/i', $trimmed['zip_code']))
{
$zip = mysqli_real_escape_string($dbc, $trimmed['zip_code']);
}else{
$errors[] = 'Μόλν ςεθία θαη ε "-" επηηξέπνληαη γηα ηνv ηαρπδξνκηθό θώδηθα.';
}
}
if (empty($trimmed['telefone']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Σειέθσλό ζαο.';
}else{
if (preg_match('/^[\d-]{2,30}$/i', $trimmed['telefone']))
{
$tel = mysqli_real_escape_string($dbc, $trimmed['telefone']);
}else{
$errors[] = 'Μόλν ςεθία θαη ε "-" επηηξέπνληαη γηα ηνv αξηζκό ηειεθώλνπ.';
}
}
if (empty($trimmed['fax']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηνv αξηζκό FAX.';
}else{
if (preg_match('/^[\d-]{2,30}$/i', $trimmed['fax']))
{
$fax = mysqli_real_escape_string($dbc, $trimmed['fax']);
}else{
$errors[] = 'Μόλν ςεθία θαη ε "-" επηηξέπνληαη γηα ηνv αξηζκό Fax.';
}
}
if (empty($trimmed['e_mail']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Email ζαο.';
}else{
if (preg_match('/^[\w.-]+@[\w.]+\.[A-Za-z]{2,40}$/i', $trimmed['e_mail']))
{
$e = mysqli_real_escape_string($dbc, $trimmed['e_mail']);
}else{
$errors[] = 'Σν email δελ είλαη έγθπξν.';
}
}
if (empty($trimmed['pass1']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Κσδηθό ζαο.';
}else{
if (preg_match('/^\w{2,40}$/i', $trimmed['pass1']))
{
if ($trimmed['pass1'] == $trimmed['pass2'])
Σελίδα | 80
{
$p = mysqli_real_escape_string($dbc, $trimmed['pass1']);
}else{
$errors[] = 'Ο Κσδηθόο δελ επηβεβαηώζεθε ζσζηά.';
}
}else{
$errors[] = 'Μόλν ςεθία θαη ραξαθηήξεο επηηξέπνληαη γηα ην θσδηθό
πξόζβαζεο.';
}
}
}
if (empty($errors))
{
$q = "SELECT user_id FROM users WHERE e_mail='$e'";
$r = mysqli_query($dbc, $q);
if (mysqli_num_rows($r) == 0)
{
$q2 = "INSERT INTO users (user_name, first_name, last_name, e_mail, address, city,
zip_code, telefone, fax, pass, registration_date) VALUES ('$un', '$fn', '$ln', '$e', '$ad', '$c', '$zip',
'$tel', '$fax', SHA1('$p'), NOW() )";
$r2 = mysqli_query($dbc, $q2);
if (mysqli_affected_rows($dbc) == 1)
{
echo '<p>Δπραξηζηνύκε γηα ηελ εγγξαθή ζαο. Μπνξείηε λα ζπλδεζείηε ζηε
ζειίδα καο</p>';
}else{
echo '<p>Η ζύλδεζε κε ηελ Βάζε Γεδνκέλσλ δελ ήηαλ εθηθηή. Παξαθαινύκε
πξνζπαζήζηε μαλά.</p>';
}
mysqli_close($dbc);
}else{
echo '<p>Σν email πνπ δώζαηε ππάξρεη ήδε.</p>';
}
}else{
echo '<p>Βξέζεθαλ ιάζε</p>';
foreach ($errors as $msg)
{
echo " $msg\n<br />";
}
}
?>
Πεξηγξαθή θώδηθα
Ο παξαπάλσ θψδηθαο ζέινπκε λα εθηειείηαη φηαλ ν ρξήζηεο παηήζεη “Καηαρψξεζε
ηνηρείσλ”. Απηφ ην επηηπγράλνπκε κε ηε ζπλζήθε:
if (isset($_POST['registered']))
Σελίδα | 81
ηελ δεκηνπξγία ηεο θφξκαο δψζακε ζην θνπκπί κε φλνκα “Καηαρψξεζε ηνηρείσλ” ηελ
ηηκή registered.
<input type="submit" name="register" value="Καηαρώξεζε ηνηρείσλ" />
<input type="hidden" name="registered" value="TRUE" />
Έηζη ε PHP θαηαιαβαίλεη πνην θνπκπί έρεη παηεζεί απφ ηνλ ρξήζηε θαη ηξέρεη ηνλ αλάινγν
θψδηθα.
ηε ζπλέρεηα δειψλνπκε ηνλ πίλαθα πνπ θαηαγξάθνληαη ηα ζθάικαηα:
$errors = array();
Μέζα ζην κεηξψν $_POST θαηαρσξνχληαη ηα δεδνκέλα πνπ πιεθηξνινγεί ν ρξήζηεο ζηα
πεδία ηεο θφξκαο. Απφ ηα δεδνκέλα απηά πξέπεη λα πεξηθνπνχλ φια ηα θελά δηαζηήκαηα. Απηφ
γίλεηαη κε ηελ ζπλάξηεζε trim().
$trimmed = array_map('trim',$_POST);
H arrey_map δέρεηαη ζαλ 1ν φξηζκα κηα ζπλάξηεζε θαη ζαλ 2ν έλα κεηξψν. ε θάζε κεηξψν
$_POST εθαξκφδνπκε ηελ ζπλάξηεζε trim() θαη αλαζέηνπκε ηελ ηηκή ζε έλα θαηλνχξγην κεηξψν
$trimmed.
Φπζηθά ηίπνηα δελ είλαη ζίγνπξν, γη‟ απηφ θαη πξέπεη λα δψζνπκε αξρηθέο ηηκέο ζηηο
κεηαβιεηέο πνπ ζα ρξεζηκνπνηήζνπκε.
$un = $fn = $ln = $ad = $c = $zip = $tel = $fax = $e = $p =FALSE;
Γηα λα ειέγμνπκε αλ ν ρξήζηεο φληνο ζπκπιήξσζε ην πεδίν user_name – Όλνκα Υξήζηε
εθηεινχκε ηελ ζπλζήθε:
if (empty($trimmed['user_name']))
Με απηφ ηνλ ηξφπν ειέγρνπκε αλ είλαη άδεην ην κεηξψν $trimmed['user_name']. Αλ λαη ηφηε
ζηνλ πίλαθα errors[] πξνζζέηνπκε ην αλάινγν ζθάικα. Αλ φρη, δειαδή αλ ν ρξήζηεο έρεη δψζεη ηηκή,
ειέγρνπκε ηελ ηηκή απηή κέζσ ησλ παξαζηάζεσλ Perl:
if (preg_match("|^\w.{2,20}$|i", $trimmed['user_name']))
Σα δεδνκέλα πνπ ππνβάινπλ νη ρξήζηεο δελ είλαη πάληα αμηφπηζηα. Έλαο ζθνπφο ησλ
επηζέζεσλ κε "ελέζεηο" SQL είλαη ε δεκηνπξγία εζθαικέλσλ ζπληαθηηθά εξσηεκάησλ, πνπ ζα
απνθαιχςνπλ πιεξνθνξίεο γηα ην ζελάξην ή ηε ΒΓ ζην κήλπκα ζθάικαηνο πνπ ζα εκθαληζηεί. Ζ
mysql_real_escape_string() θηιηξάξεη("θαζαξίδεη") ηα δεδνκέλα γηα ιφγνπο αζθαιείαο ηνπνζεηψληαο
ην ραξαθηήξα δηαθπγήο πξηλ απφ ηνπο πηζαλφλ πξνβιεκαηηθνχο ραξαθηήξεο:
$fn = mysqli_real_escape_string($dbc, $trimmed['user_name']);
Οη ζπγθεθξηκέλνη έιεγρνη πξαγκαηνπνηνχληαη γηα φια ηα πεδία ηεο θφξκαο εγγξαθήο.
Σέινο, γηα λα ζηγνπξεπηνχκε φηη δελ ππήξμε θαλέλα ζθάικα θαηά ηελ θαηαρψξεζε ησλ
ζηνηρείσλ απφ ην ρξήζηε εθηεινχκε ηελ ζπλζήθε:
if (empty($errors))
Αλ δελ ππάξρνπλ ιάζε είλαη πνιχ βαζηθφ λα ειέγμνπκε αλ ην email πνπ έδσζε ν ρξήζηεο
ππάξρεη ήδε, γηαηί πξέπεη λα είλαη κνλαδηθφ γηα θάζε ρξήζηε. Γη‟ απηφ θαη εθηεινχκε ην εξψηεκα ηεο
επηινγήο (SELECT) κε ην νπνίν αλαθηάκε απφ ηελ βάζε δεδνκέλσλ φπνηα εγγξαθή έρεη δηεχζπλζε
ειεθηξνληθνχ ηαρπδξνκείνπ ίδηα κε απηή πνπ πιεθηξνιφγεζε ν ρξήζηεο.
$q = "SELECT user_id FROM users WHERE e_mail='$e'";
Ζ mysqli_query() είλαη ε ζπλάξηεζε πνπ εθηειεί ηα εξσηήκαηα. Γέρεηαη σο 1ν φξηζκα ηε
ζχλδεζε κε ηε βάζε δεδνκέλσλ θαη σο 2ν φξηζκα ην εξψηεκα. Ζ κεηαβιεηή $r (=result) ζα έρεη ηηκή
TRUE ή FALSE αλάινγα αλ ην εξψηεκα εθηειέζηεθε ζσζηά ή φρη:
$r = mysqli_query($dbc, $q);
Ζ ζπλάξηεζε mysqli_num_rows($r) επηζηξέθεη ην πιήζνο ησλ γξακκψλ πνπ έρεη επηζηξέςεη
ην εξψηεκα επηινγήο SELECT. Αλ ε ζπλάξηεζε mysqli_num_rows($r) = 0 γλσξίδνπκε φηη ην email
Σελίδα | 82
δελ έρεη ήδε θαηαρσξεζεί ζηε βάζε δεδνκέλσλ θαη επνκέλσο κπνξνχκε λα εθηειέζνπκε κε αζθάιεηα
ην εξψηεκα ηεο εηζαγσγήο (INSERT).
if (mysqli_num_rows($r) == 0)
{
$q2 = "INSERT INTO users (user_name, first_name, last_name, e_mail,
address, city, zip_code, telefone, fax, pass, registration_date) VALUES ('$un', '$fn', '$ln',
'$e', '$ad', '$c', '$zip', '$tel', '$fax', SHA1('$p'), NOW() )";
$r2 = mysqli_query($dbc, $q2);
Με ηελ εληνιή INSERT INTO κπνξνχκε λα εηζάγνπκε δεδνκέλα ζε φπνηνλ πίλαθα
επηζπκνχκε. Με φπνηα ζεηξά γξάςνπκε ηηο ζηήιεο ηνπ πίλαθα κε ηελ ίδηα ζεηξά πξέπεη λα γξάςνπκε
θαη ηηο κεηαβιεηέο απφ ηηο νπνίεο ζα πάξνπκε ηηο ηηκέο θαη ζα ηηο εθρσξήζνπκε ζηηο αλάινγεο ζηήιεο.
Αλ ην εξψηεκα ιεηηνχξγεζε ζσζηά ε ζπλάξηεζε mysqli_affected_rows() επηζηξέθεη ην
πιήζνο ησλ γξακκψλ πνπ έρνπλ επεξεαζηεί απφ έλα εξψηεκα εηζαγσγήο.
if (mysqli_affected_rows($dbc) == 1)
Έπεηηα δηαθφπηνπκε ηελ ζχλδεζε κε ηελ βάζε δεδνκέλσλ:
mysqli_close($dbc);
Όια ηα ζθάικαηα εκθαλίδνληαη κε ηε βνήζεηα ελφο βξφρνπ foreach:
foreach ($errors as $msg) { echo " $msg\n<br />"; }
Σελίδα | 83
Πεξηγξαθή Φόξκαο
Οη δχν απηέο θφξκεο είλαη ζρεδφλ ίδηεο, αιιά έρνπλ δχν βαζηθέο δηαθνξέο. Ζ δεχηεξε θφξκα
είλαη κηα παξακέλνπζα θφξκα, δειαδή εθηειείηαη πάληα ζην ίδην αξρείν (action = register2.php), θαη
ηα ζηνηρεία πνπ θαηαρσξεί ν ρξήζηεο εκθαλίδνληαη ζηα αλάινγα πεδία ηεο.
Πίλαθαο 4.21: Φύιια CSS γηα ηελ κνξθνπνίεζε ηεο θόξκαο εγγξαθήο
Σελίδα | 84
4.5.2 Δίζνδν – Έμνδν από ηνλ Λνγαξηαζκό ηνπ Υξήζηε
require_once ('C:/xampp/config.inc.php');
require_once ('C:/xampp/connect_to_mysql.php');
$row = FALSE ;
$row2 = FALSE;
if (isset($_POST['entered_login']))
{
$trimmed = array_map('trim',$_POST);
$e = $p = FALSE;
if (empty($trimmed['e_mail']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Email ζαο.';
}else{
if (preg_match('/^[\w.-]+@[\w.]+\.[A-Za-z]{2,40}$/i', $trimmed['e_mail']))
{
$e = mysqli_real_escape_string($dbc, $trimmed['e_mail']);
}
}
if (empty($trimmed['pass']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Κσδηθό ζαο.';
}else{
if (preg_match('/^\w{2,30}$/i', $trimmed['pass']))
{
$p = mysqli_real_escape_string($dbc, $trimmed['pass']);
}
}
if (empty($errors))
{
$q = "SELECT user_id, user_name, first_name, last_name, e_mail, pass, address, city,
telefone, fax, zip_code FROM users WHERE (e_mail='$e' AND pass=SHA1('$p'))";
$r = mysqli_query($dbc, $q);
if (mysqli_num_rows($r) == 1)
{
$_SESSION = mysqli_fetch_array ($r, MYSQLI_ASSOC);
$_SESSION['agent'] = md5($_SERVER['HTTP_USER_AGENT']);
if ($_SESSION['e_mail'] == EMAIL)
{
mysqli_free_result($r);
mysqli_close($dbc);
$url = BASE_URL . 'admin.php' ;
ob_end_clean();
header("Location: $url");
exit();
Σελίδα | 85
}else{
mysqli_free_result($r);
mysqli_close($dbc);
$url = BASE_URL . 'loggedin.php' ;
ob_end_clean();
header("Location: $url");
exit();
}
}else{
echo '<p>Σα ζηνηρεία πνπ δώζαηε δελ ππάξρνπλ.</p>';
}
}else{
echo '<p>Βξέζεθαλ ιάζε</p>';
foreach ($errors as $msg)
{
echo " $msg\n<br />";
}
}
}
?>
Πεξηγξαθή Κώδηθα
H PHP πξνζζέηεη ηνλ θψδηθα δχν αξρεία κέζσ ηεο ζπλάξηεζεο require_once(). Σν έλα αξρείν
είλαη ην config.inc.php θαη ην άιιν αξρείν είλαη ην connect_to_mysql.php.
Σελίδα | 86
ην αξρείν config.inc.php νξίδνπκε ηέζζεξεηο ζηαζεξέο, ηηο LIVE, EMAIL, BASE_URL θαη
MYSQL. Δπίζεο, δεκηνπξγνχκε κηα δηθή καο ζπλάξηεζε ρεηξηζκψλ ζθαικάησλ ηελ
my_error_handler ε νπνία καο εκθαλίδεη ην θαηάιιειν κήλπκα ζθάικαηνο.
Ζ ζηαζεξά LIVE είλαη κηα ζεκαία πνπ καο δείρλεη αλ ε ηνπνζεζία είλαη ζε ιεηηνπξγία ή φρη.
Ζ δηαθνξά είλαη ζεκαληηθή, επεηδή αιιηψο ρεηξηδφκαζηε ηα ζθάικαηα φηαλ ε ηνπνζεζία είλαη ζε
ιεηηνπξγία θαη αιιηψο φηαλ βξίζθεηαη ζηελ θάζε ηεο αλάπηπμεο. Όηαλ ε ηνπνζεζία δελ είλαη ζε
ιεηηνπξγία εκθαλίδεηαη έλα ιεπηνκεξέο κήλπκα ζθάικαηνο, ελψ αλ είλαη ζε ιεηηνπξγία ζα ηππσζεί
έλα απιφ απνινγεηηθφ κήλπκα πνπ ζα ελεκεξψλεη ην ρξήζηε φηη πξνέθπςε θάπνην ζθάικα.
Σέινο, κε ηελ εληνιή set_error_handler(„my_error_handler‟) ιέκε ζηελ PHP λα
ρξεζηκνπνηήζεη ηελ δηθή καο ζπλάξηεζε ρεηξηζκνχ ζθαικάησλ αληί γηα ηελ πξνεπηιεγκέλε.
Σν αξρείν connect_to_mysql.php εγθαζηζηά κηα ζχλδεζε κε ηελ MySQL θαη επηιέγεη ηε βάζε
δεδνκέλσλ. Αλ ε ζπλάξηεζε mysqli_connect() δελ κπνξεί λα επηζηξέςεη έλαλ έγθπξν ζχλδεζκν
πφξνπ εθηειείηαη ην ηκήκα OR die() ηεο εληνιήο. Ζ ζπλάξηεζε die() δερφκελε κηα ζπκβνινζεηξά πνπ
ζα εκθαληζηεί ζηνλ θπιινκεηξεηή ηεξκαηίδεη ηελ εθηέιεζε ηνπ ζελαξίνπ. ην ζπγθεθξηκέλν αξρείν
ε ζπκβνινζεηξά απνηειείηε απφ ην θείκελν “Could not connect to MySQL:” θαη ην ζρεηηθφ κήλπκα
ζθάικαηνο ηεο MySQL.
localhost = ππνινγηζηήο ππεξεζίαο
epp1545 = φλνκα ρξήζηε
mybookstore = θσδηθφο πξφζβαζεο
bookstore = βάζε δεδνκέλσλ
Αλ ν ρξήζηεο έρεη δψζεη ηηκή, ειέγρνπκε αλ ε ηηκή απηή ηαηξηάδεη κε ην θαηάιιειν κνηίβν
ησλ παξαηάζεσλ Perl:
if (preg_match('/^[\w.-]+@[\w.]+\.[A-Za-z]{2,6}$/i', $trimmed['e_mail']))
Σν κνηίβν γηα ην email ηνπ ρξήζηε είλαη ηεο κνξθήο: '/^[\w.-]+@[\w.]+\.[A-Za-z]{2,40}$/i'
Οη δηεπζχλζεηο ειεθηξνληθνχ ηαρπδξνκείνπ αξρίδνπλ απφ γξάκκαηα, αξηζκνχο, θαη ην ραξαθηήξα
ππνγξάκκηζεο (πνπ αληηπξνζσπεχνληαη απφ ηελ θιάζε \w), ζπλ κία ηειεία θαη κηα παχια. ηε
Σελίδα | 87
ζπλέρεηα αθνινπζεί έλαο κφλν ραξαθηήξαο @. Μεηά απφ απηφ κπνξεί λα αθνινπζεί νπνηνδήπνηε
πιήζνο απφ γξάκκαηα, αξηζκνχο, ηειείεο θαη παχιεο. Σέινο, φιεο νη δηεπζχλζεηο νινθιεξψλνληαη κε
κηα ηειεία θαη απφ δχν έσο έμη γξάκκαηα.
Αλ ππάξρεη ηαχηηζε ηνπ κνηίβνπ θαη ηηο ηηκήο θαινχκε ηελ ζπλάξηεζε mysqli_real_escape_string ε
νπνία θηιηξάξεη ηα δεδνκέλα. Σν απνηέιεζκα εθρσξείηαη ζηε κεηαβιεηή $e:
$e = mysqli_real_escape_string($dbc, $trimmed['e_mail']);
Σελ ίδηα δηαδηθαζία εθηεινχκε θαη γηα ηνλ θσδηθφ ηνπ ρξήζηε. Έπεηηα αλ ν πίλαθαο ησλ ζθαικάησλ
είλαη άδεηνο - if (empty($errors)) – εθηεινχκε ην εξψηεκα SQL:
$q = "SELECT user_id, user_name, first_name, last_name, e_mail, pass, address, city, telefone,
fax, zip_code FROM users WHERE (e_mail='$e' AND pass=SHA1('$p'))";
$r = mysqli_query($dbc, $q);
Με ην εξψηεκα απηφ ηεο SQL επηιέγνπκε ηα ζηνηρεία ηνπ ρξήζηε-κέινπο πνπ αληηζηνηρνχλ ζην email
θαη ηνλ θσδηθφ πξφζβαζεο πνπ θαηαρσξήζεθαλ ζηα πεδία ηεο θφξκαο.
Αλ ηειηθά ην εξψηεκα έρεη επηζηξέςεη κηα ηηκή - if (mysqli_num_rows($r) == 1) – ηφηε ζην κεηξψν
$_SESSION θαηαρσξνχληαη ηα ζηνηρεία πνπ ην εξψηεκα SELECT έρεη επηζηξέςεη, δειαδή ηα
ζηνηρεία ηνπ ρξήζηε:
$_SESSION = mysqli_fetch_array ($r, MYSQLI_ASSOC);
Ζ mysqli_fetch_array() δέρεηαη σο φξηζκα ηα απνηειέζκαηα ηνπ εξσηήκαηνο θαη επηζηξέθεη κηα
γξακκή δεδνκέλσλ ηε θνξά ζε κνξθή πίλαθα πνπ ε κνξθή ηνπ θαζνξίδεηαη απφ ηελ
MYSQLI_ASSOC.
ΣΑΘΔΡΑ ΠΑΡΑΓΔΙΓΜΑ
MYSQLI_ASSOC $row[„ζηήιε‟];
MYSQLI_NUM $row[„0‟];
MYSQLI_BOTH $row[„0‟]; ή $row[„ζηήιε‟];
Πίλαθαο 4.22: ηαζεξέο ηεο mysqli_fetch_array
Δπεηδή κέζα ζηηο πεξηφδνπο εξγαζίαο απνζεθεχνληαη ζεκαληηθά δεδνκέλα, είλαη πνιχ πηζαλφ
έλαο θαθφβνπινο ρξήζηεο λα επηρεηξήζεη λα ππνθιέςεη ηα δεδνκέλα κέζσ ηνπ αλαγλσξηζηηθνχ ηεο
πεξηφδνπ εξγαζίαο. Αλ κάζεη ην αλαγλσξηζηηθφ κπνξεί εχθνια λα μεγειάζεη ηνλ δηαθνκηζηή θαη λα ην
ζεσξεί σο δηθφ ηνπ. Με ηελ ηηκή HTTP_USER_AGENT γηα λα ππνθιέςεη θάπνηνο ηελ πεξίνδν
εξγαζίαο πξέπεη λα ρξεζηκνπνηεί αθξηβψο ηνλ ίδην θπιινκεηξεηή θαη ιεηηνπξγηθφ ζχζηεκα. Έηζη
απνζεθεχνπκε κηα θξππηνγξαθεκέλε κνξθή ηεο ηηκήο HTTP_USER_AGENT ζε κία πεξίνδν
εξγαζίαο:
$_SESSION['agent'] = md5($_SERVER['HTTP_USER_AGENT']);
Απειεπζέξσζε πφξσλ ηνπο νπνίνπο δεζκεχνπλ ηα απνηειέζκαηα θαη απνζχλδεζε απφ ηελ βάζε
δεδνκέλσλ:
mysqli_free_result($r);
mysqli_close($dbc);
ηε ζπλέρεηα ειέγρνπκε αλ ην email ηνπ ρξήζηε είλαη ίδην κε εθείλν ηνπ administrator:
if ($_SESSION['e_mail'] == EMAIL)
Αλ ηειηθά είλαη ίδην γίλεηαη ε αλαθαηεχζπλζε ηνπ ρξήζηε ζηε ζειίδα admin.php θαη δηαγξαθή ησλ
δεδνκέλσλ ηεο πξνζσξηλήο κλήκεο:
Σελίδα | 88
$url = BASE_URL . 'admin.php' ;
ob_end_clean();
header("Location: $url");
ην ηέινο θαινχκε ηελ ζπλάξηεζε exit() γηα λα ηεξκαηίζνπκε ηελ εθηέιεζε ηνπ ζελαξίνπ.
exit();
Αλ φκσο ν ρξήζηεο είλαη έλα απιφ κέινο ηεο ηζηνζειίδαο θαη φρη ν δηαρεηξηζηήο εθηεινχκε ηελ ίδηα
δηαδηθαζία κε ηελ δηαθνξά φηη αλαθαηεπζχλνπκε ηνλ ρξήζηε ζηε ζειίδα loggedin.php. Φπζηθά αλ ην
ζελάξην δελ εθηειέζηεθε ζσζηά εθηππψλνληαη ηα αλάινγα ζθάικαηα.
if (isset($_POST['entered_logout']))
{
$_SESSION = array();
session_destroy();
setcookie (session_name(), ' ', time()-3600, "/", ' ', 0, 0);
$url = BASE_URL .'logout.php';
ob_end_clean();
header("Location : $url");
exit();
}
?>
Πεξηγξαθή Κώδηθα
Πξψηα απφ φια πξέπεη λα ειέγμνπκε αλ έρεη νξηζηεί ε κεηαβιεηή $_SESSION['agent'] θαη αλ
ε θξππηνγξαθεκέλε ηηκή ηεο κεηαβιεηήο $_SERVER['HTTP_USER_AGENT'] δηαθέξεη απφ ηελ
ηηκή ηεο απνζεθεπκέλεο κεηαβιεηήο $_SESSION['agent']. Αλ θάπνηα απφ απηέο ηηο ζπλζήθεο
αιεζεχεη, ν ρξήζηεο ζα αλαθαηεπζπλζεί ζηελ ζειίδα false_login.php. Αιιηψο ζα εκθαληζηεί έλα
κήλπκα ελεκέξσζεο:
echo "<p>{$_SESSION['user_name']}, έρεηο ζπλδεζεί ζηε ζειίδα καο.</p>";
$_SESSION['user_name'] είλαη ην user_name ηνπ ρξήζηε πνπ είλαη απνζεθεπκέλν κέζα ζην
κεηξψν $_SESSION.
Σελίδα | 89
if (isset($_POST['entered_logout']))
Γίλεηαη ε δηαγξαθεί φισλ ησλ κεηαβιεηψλ ηεο πεξηφδνπ εξγαζίαο: $_SESSION = array();
Έπεηηα δηαγξάθνληαη φια ηα δεδνκέλα ηεο πεξηφδνπ εξγαζίαο απφ ηνλ δηαθνκηζηή: session_destroy();
ηέιλεη έλα κπηζθφην πνπ έρεη ήδε ιήμεη γηα λα αληηθαηαζηήζεη ην ππάξρσλ κπηζθφην ζην
θπιινκεηξεηή. setcookie (session_name(), ' ', time()-3600, "/", ' ', 0, 0);
Σέινο γίλεηαη ε αλαθαηεχζπλζε ηνπ ρξήζηε ζηε ζειίδα logout.php, ε δηαγξαθή ησλ δεδνκέλσλ απφ
ηελ πξνζσξηλή κλήκε θαη ν ηεξκαηηζκφο εθηέιεζεο ηνπ ζελαξίνπ:
$url = BASE_URL .'logout.php';
ob_end_clean();
header("Location : $url");
if (isset($_POST['contacted']))
{
function spam_scrubber ($value)
{
$bad = array('to:', 'cc:', 'bcc:', 'contact-type:', 'mine-version:', 'multipart-mixed:',
'content-transfer-encoding:');
foreach ($bad as $v)
{
if (stripos($value, $v) !== FALSE) return ' ';
}
$value = str_replace (array("\r", "\n", "%a", "%0d"), ' ', $value);
trim($value);
}
$scrubbed = array_map('spam_scrubber', $_POST);
if (!empty($scrubbed['first_name']) && !empty($scrubbed['last_name']) &&
!empty($scrubbed['e-mail']) && !empty($scrubbed['comments']))
{
$body = "Όλνκα : {$scrubbed['first_name']}\nΔπώλπκν :
{$scrubbed['last_name']}\n\nρόιηα : {$scrubbed['comments']}";
$body = wordwrap($body, 60);
mail('admin@localhost.com', 'Μήλπκα Υξήζηε', $body, "From: {$scrubbed['e-mail']}");
echo '<p>Δπραξηζηνύκε πνπ επηθνηλσλήζαηε καδί καο.</p>';
$_POST = array();
}else{
echo '<p>Παξαθαινύκε ζπκπιεξώζηε ζσζηά ηα ζηνηρεία ζαο.</p>';
}
}
?>
Σελίδα | 90
Πεξηγξαθή θώδηθα
Αλ ν ρξήζηεο παηήζεη ην θνπκπί “Απνζηνιή” ζα εθηειεζηεί ην ζελάξην ηεο PHP:
if (isset($_POST[„contacted‟]))
ηε ζπλέρεηα γίλεηαη αληηθαηάζηαζε ησλ ραξαθηήξσλ αιιαγήο γξακκήο κε θελά δηαζηήκαηα.
Ζ ζπλάξηεζε str_replace() ειέγρεη ηελ ηηκή ηνπ 3νπ νξίζκαηνο ($value) θαη αληηθαζηζηά φιεο ηηο
παξνπζίεο ησλ ραξαθηήξσλ ηνπ 1νπ νξίζκαηνο κε ην ραξαθηήξα ή ηνπο ραξαθηήξεο ηνπ 2νπ
νξίζκαηνο: $value = str_replace (array("\r", "\n", "%a", "%0d"), ' ', $value);
Καινχκε ηελ ζπλάξηεζε spam_scrubber() κέζσ ηεο array_map() ε νπνία δέρεηαη ζαλ 1ν
φξηζκα ηελ ζπλάξηεζε θαη ζαλ 2ν έλα κεηξψν. Έηζη ε spam_scrubber θαιείηαη κηα θνξά γηα θάζε
ζηνηρείν ηνπ κεηξψνπ θαη ην απνηέιεζκα αλαζέηεηαη ζε κηα λέα κεηαβιεηή. ην ζελάξην απηφ ην
κεηξψν $_POST πεξηέρεη έμη ζηνηρεία: first_name, last_name, e-mail, comments, contact θαη
contacted. Έηζη θαη ην κεηξψν $scrubbed ζα πεξηέρεη έμη ζηνηρεία: $scrubbed[„first_name‟],
$scrubbed[„last_name‟], $scrubbed[„e-mail‟], $scrubbed[„comments‟], $scrubbed[„contact‟],
$scrubbed[„contacted‟].
$scrubbed = array_map('spam_scrubber', $_POST);
Με ηελ ζπλάξηεζε wordwrap πξνζζέηνπκε έλαλ ραξαθηήξα αιιαγήο γξακκήο θάζε 60 ραξαθηήξεο:
Σελίδα | 91
$body = wordwrap($body, 60);
Με ηε ζπλάξηεζε mail() γίλεηαη ε απνζηνιή ηνπ κελχκαηνο - mail(πξνο, ζέκα, ζψκα, [θεθαιίδεο]).
mail('admin@localhost.com', 'Μήλπκα Υξήζηε', $body, "From: {$scrubbed['e-mail']}");
Δπεηδή ε θφξκα είλαη παξακέλνπζα νη ηηκέο ηεο θφξκαο αλ ε απνζηνιή ηνπ κελχκαηνο είλαη επηηπρήο
δελ ρξεηάδεηαη λα εκθαλίδνληαη μαλά ηα δεδνκέλα. Γηα λα ην απνθχγνπκε θαζαξίδνπκε ην κεηξψν
$_POST:
$_POST = array();
$q2 = "SELECT user_name, user_email, body_msg, date_entered FROM messages LIMIT 9";
$r2 = mysqli_query($dbc, $q2);
if (mysqli_num_rows($r2) >= 1)
{
while ($row2 = mysqli_fetch_array ($r2, MYSQLI_ASSOC))
{
echo "<p>{$row2['body_msg']}</p>";
echo "\n";
echo "<p>{$row2['date_entered']} - {$row2['user_name']}</p>";
echo "----------------------------------------------------------------------------------------------------------
-----------------------";
echo "\n";
}
}else{
echo “<p>Γελ ππάξρνπλ κελύκαηα.</p>”;
}
if (isset($_POST['sent']))
{
$errors = array();
$trimmed = array_map('trim',$_POST);
$un = $ue = $bmsg = FALSE;
if (empty($trimmed['user_name']))
{
$errors[] = 'Γελ ζπκπιεξώζαηε ηνλ όλνκά ζαο.';
}else{
if (preg_match("|^\w.{2,20}$|i", $trimmed['user_name']))
{
$un = mysqli_real_escape_string($dbc, $trimmed['user_name']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην όλνκά ζαο.';
}
Σελίδα | 92
}
if (empty($trimmed['body_msg']))
{
$errors[] = 'Γελ δώζαηε ηα ζρόιηά ζαο.';
}else{
if (preg_match('|^\w.{2,400}$|i', $trimmed['body_msg']))
{
$bmsg = mysqli_real_escape_string($dbc, $trimmed['body_msg']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ηα ζρόιηά ζαο.';
}
}
if (!empty($trimmed['user_email']))
{
if (preg_match('/^[\w.-]+@[\w.]+\.[A-Za-z]{2,40}$/i', $trimmed['user_email']))
{
$ue = mysqli_real_escape_string($dbc, $trimmed['user_email']);
}else{
$errors[] = 'Σν email δελ είλαη έγθπξν.';
}
}
if (empty($errors))
{
$q = "INSERT INTO messages (user_name, user_email, body_msg, date_entered)
VALUES ('$un', '$ue', '$bmsg', NOW() )";
$r = mysqli_query($dbc, $q);
if ($r)
{
echo '<p>Η απνζηνιή νινθιεξώζεθε κε επηηπρία. Σν ζρόιηό ζαο δελ ζα
εκθαληζηεί κέρξη λα εγθξηζεί από ηνπο δηαρεηξηζηέο.</p>';
}else{
$errors[] = 'Η ζύλδεζε κε ηελ Βάζε Γεδνκέλσλ δελ ήηαλ εθηθηή. Παξαθαινύκε
πξνζπαζήζηε μαλά.';
}
mysqli_close($dbc);
}else{
echo '<p>Βξέζεθαλ ιάζε</p>';
foreach ($errors as $msg)
{
echo " $msg\n<br />";
}
}
}
?>
Σελίδα | 93
Πεξηγξαθή Κώδηθα
ηε αξρή εθηειείηαη έλα εξψηεκα SELECT κε ην νπνίν επηιέγνπκε ηηο θαηαρσξήζεηο πνπ
ππάξρνπλ ζηνλ πίλαθα messages. Σν ραξαθηεξηζηηθφ LIMIT δείρλεη πφζεο εγγξαθέο ζα εκθαληζηνχλ.
Απηφ γίλεηαη γηα λα κελ εκθαλίδεηαη ακέζσο ην κήλπκα πνπ ν θάζε ρξήζηεο ζα ζηέιλεη, αιιά φηαλ
θαη αλ ην απνθαζίζεη ν δηαρεηξηζηήο.
Έπεηηα κέζσ ελφο βξφρνπ (while) εκθαλίδνπκε ηα κελχκαηα πνπ αλαθηήζακε απφ ηνλ πίλαθα
κέζσ ηνπ εξσηήκαηνο.
Αλ ν ρξήζηεο παηήζεη ην θνπκπί “Απνζηνιή” ζα εθηειεζηεί ην ζελάξην ηεο PHP:
if (isset($_POST[„sent‟]))
Όπσο ζε άιια ζελάξηα έηζη θαη εδψ ειέγρνπκε αλ ν ρξήζηεο έρεη ζπκπιεξψζεη φια ηα πεδία
θαη αλ νη ηηκέο ζπκθσλνχλ κε ηα αλάινγα κνηίβα.
Μφλν αλ δελ ππάξρεη θαλέλα ιάζνο εθηειείηαη ην εξψηεκα εηζαγσγήο πνπ πξνζζέηεη ηα
θαηλνχξηα δεδνκέλα ζηνλ πίλαθα messages.
ην ηέινο αλ ε θαηαρψξεζε ησλ ζηνηρείσλ είλαη επηηπρήο εκθαλίδεηαη έλα κήλπκα
ελεκέξσζεο, αιιηψο ηππψλνληαη ηα ζθάικαηα πνπ πξνέθπςαλ.
Ο θψδηθάο γηα ηελ πεξίπησζε ηνπ administrator είλαη δηαθνξεηηθφο, γηαηί δελ ππάξρεη θφξκα
απνζηνιήο κελχκαηνο. Δκθαλίδνληαη κφλν ηα δεδνκέλα πνπ νη ρξήζηεο έρνπλ ζηείιεη, αιιά ρσξίο
πεξηνξηζκφ.
if (mysqli_num_rows($r2) >= 1)
{
while ($row2 = mysqli_fetch_array ($r2, MYSQLI_ASSOC))
{
echo "<p>{$row2['body_msg']}</p>";
Σελίδα | 94
echo "\n";
echo "<p>{$row2['date_entered']} - {$row2['user_name']}</p>";
echo "----------------------------------------------------------------------------------------------------------
-----------------------";
echo "\n";
}
}else{
echo "<p>Γελ ππάξρνπλ κελύκαηα.</p>";
}
?>
Κώδηθαο PHP
<?php
echo '
<tr>
<td height="55" class="style3"><div align="right" class="style6 style11">Πίλαθαο Υξεζηώλ</div></td>
</tr>
<tr>
<td><table width="100%" border="0">
<tr>
<td width="21%"><div align="left">Όλνκα Υξήζηε</div></td>
<td width="17%"><div align="center">Email</div></td>
<td width="15%"><div align="center">Πόιε</div></td>
<td width="14%"><div align="center">Γηεύζπλζε</div></td>
<td width="12%"><div align="center">Σ.Κ.</div></td>
<td width="13%"><div align="center">Ηκεξνκελία Δγγξαθήο</div></td>
<td width="8%"><div align="center">Αθαίξεζε</div></td>
</tr>
</table></td>
</tr>
<tr>
<td height="21">-------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------- </td>
</tr>';
$q = "SELECT user_id, CONCAT(first_name, ' ', last_name) AS user_name, e_mail, city, address,
zip_code, registration_date FROM users ORDER BY registration_date";
$r = mysqli_query($dbc, $q);
Σελίδα | 95
if (mysqli_num_rows($r) < 1)
{
echo '<p> Γελ ππάξρνπλ εγγεγξακκέλνη ρξήζηεο.</p>';
}else{
echo '<tr>
<td>
<table width="100%" border="0">
<tr>
<td width="21%"><div align="left">'.$un.'</div></td>
<td width="17%"><div align="center">'.$e.'</div></td>
<td width="15%"><div align="center">'.$c.'</div></td>
<td width="14%"><div align="center">'.$ad.'</div></td>
<td width="12%"><div align="center">'.$zip.'</div></td>
<td width="13%"><div align="center">'.$date.'</div></td>
<td width="8%"><div align="center"><div id="but_delete">'."<a
href=\"delete_user.php?uid={$row['user_id']}\">".'<img src="includes/delete kal.gif" alt="butdel"
width="20" height="20" />'."</a>".'</div></div></td>
</tr>
</table>
</td>
</tr>
';
}
echo '
</tr>
<td height="30"></td>
<tr>
<td height="55" class="style3"><div align="right" class="style6 style11">
<div align="left" class="style7">Δπηθνηλσλία</div></div>
</td>
</tr>
<tr>
<td><table width="100%" border="0">
<tr>
<td width="25%"><div align="left">Όλνκα Υξήζηε</div></td>
<td width="17%"><div align="center">Σειέθσλν</div></td>
<td width="15%"><div align="center">Fax</div></td>
<td width="43%"> </td>
</tr>
</table></td>
Σελίδα | 96
</tr>
<td height="21">------------------------------------------------------------------------------------------
-----------</td>';
Πεξηγξαθή Κώδηθα
Σν ζελάξην απηφ δε δηαθέξεη πνιχ απφ ηα πξνεγνχκελα παξά κφλν ζηελ εθηέιεζε ηεο
εληνιήο echo(). Γηα λα εκθαλίδεηαη ν θψδηθαο ηεο HTML κέζσ ηεο echo πξέπεη λα πεξηθιείεηαη ζε
κνλά εηζαγσγηθά. Όηαλ φκσο επηζπκνχκε λα εθηππψζνπκε κηα κεηαβιεηή ηεο PHP πξέπεη λα
αιιάδνπκε ηα κνλά εηζαγσγηθά ζε δηπιά.
πρ. echo „θώδηθαο html‟.”κεηαβιεηή”.‟ θώδηθαο html‟;
ηελ αξρή εθηππψλνπκε κέζσ ηεο echo() ηα νλφκαηα ησλ ζηειψλ ( Όλνκα Υξήζηε, Email,
Πφιε…) θαη έπεηηα κέζσ ελφο εξσηήκαηνο επηινγήο αλαθηάκε ηα ζηνηρεία ηνπ πίλαθα users απφ ηε
βάζε δεδνκέλσλ. Με ηελ ζπλάξηεζε CONCAT() πξαγκαηνπνηείηαη ε ζπλέλσζε δχν ζηειψλ ηνπ
πίλαθα users. Σεο ζηήιεο first_name θαη ηεο ζηήιεο last_name. Έπεηηα ζηε ζπλέλσζε απηή δίλνπκε
έλα φλνκα: user_name.
Αλ ην εξψηεκα δελ επηζηξέςεη θακία ηηκή ηφηε δελ ππάξρνπλ εγγεγξακκέλνη ρξήζηεο ζηε
βάζε δεδνκέλσλ. Αιιηψο κέζσ ελφο βξφρνπ while εκθαλίδνπκε ηα δεδνκέλα ησλ ρξεζηψλ.
Μηα δπλαηφηαηα πνπ έρεη ν δηαρεηξηζηήο είλαη λα δηαγξάςεη φπνηνλ ρξήζηε επηζπκεί. Απηφ
επηηπγράλεηαη κέζσ ελφο θνπκπηνχ δηαγξαθείο πνπ καο κεηαβηβάδεη ζηε ζειίδα delete_user.php. Γηα
λα γλσξίδνπκε φκσο πνηνο είλαη ν ρξήζηεο πνπ ζα δηαγξαθεί πξέπεη λα κεηαβηβάζνπκε ζηε ζειίδα
Σελίδα | 97
delete_user.php ην θσδηθφ ηνπ ρξήζηε (user_id). Απηφ γίλεηαη κε ηελ πξνζάξηεζε ηεο κεηαβιεηήο
$uid ζηελ URL δηεχζπλζε ρξεζηκνπνηψληαο ηελ ζχληαμε:
page.php?name1=value1&name2=value2… => <a href=\"delete_user.php?uid={$row['user_id']}\">
Πίλαθαο 4.24: Φύιια CSS γηα ηελ κνξθνπνίεζε ηνπ πίλαθα ρξεζηώλ
echo '
<tr>
<td height="55" class="style3"><div align="right" class="style6 style11">Πίλαθαο Υξεζηώλ</div></td>
</tr>
<tr>
<td><table width="100%" border="0">
<tr>
<td width="21%"><div align="left">Όλνκα Υξήζηε</div></td>
<td width="17%"><div align="center">Email</div></td>
<td width="15%"><div align="center">Πόιε</div></td>
<td width="14%"><div align="center">Γηεύζπλζε</div></td>
<td width="12%"><div align="center">Σ.Κ.</div></td>
<td width="13%"><div align="center">Ηκεξνκελία Δγγξαθήο</div></td>
<td width="8%"><div align="center">Αθαίξεζε</div></td>
</tr>
</table></td>
</tr>
<tr>
Σελίδα | 98
<td height="21">-------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------- </td>
</tr>';
echo '<tr>
<td>
<table width="100%" border="0">
<tr>
<td width="21%"><div align="left">'.$un.'</div></td>
<td width="17%"><div align="center">'.$e.'</div></td>
<td width="15%"><div align="center">'.$c.'</div></td>
<td width="14%"><div align="center">'.$ad.'</div></td>
<td width="12%"><div align="center">'.$zip.'</div></td>
<td width="13%"><div align="center">'.$date.'</div></td>
<td width="8%"><div align="center"><div id="but_delete">'."<a
href=\"delete_user.php?uid = {$row['user_id']}\">".'<img src="includes/delete kal.gif" alt="butdel"
width="20" height="20" />'."</a>".'</div></div></td>
</tr>
</table>
</td>
</tr>
';
}
echo '
</tr>
<td height="30"></td>
<tr>
Σελίδα | 99
<td height="55" class="style3"><div align="right" class="style6 style11">
<div align="left" class="style7">Δπηθνηλσλία</div>
</div></td>
</tr>
<tr>
<td><table width="100%" border="0">
<tr>
<td width="25%"><div align="left">Όλνκα Υξήζηε</div></td>
<td width="17%"><div align="center">Σειέθσλν</div></td>
<td width="15%"><div align="center">Fax</div></td>
<td width="43%"> </td>
</tr>
</table></td>
</tr>
<td height="21">-----------------------------------------------------------------------------
------------------------</td>';
Σελίδα | 100
Πεξηγξαθή Κώδηθα
Ζ εκθάληζε ησλ ζηνηρείσλ γίλεηαη κε ηνλ ίδην ηξφπν φπσο θαη ζην ζελάξην ηεο ζειίδαο
view_users.php. Ζ δηαθνξά βξίζθεηαη ζηελ πξφζζεζε ηνπ εξσηήκαηνο DELETE κε ην νπνίν γίλεηαη ε
δηαγξαθή ηνπ ρξήζηε.
Μέζσ ηνπ κεηξψνπ $_GET παίξλνπκε ηνλ θσδηθφ ηνπ ρξήζηε ($uid) θαη ειέγρνπκε αλ είλαη
αξηζκφο θαη κάιηζηα αθέξαηνο. Απηφο ν έιεγρνο γίλεηαη γηα λα κελ πξνθχςεη ζθάικα θαηά ηελ
εθηέιεζε ηνπ εξσηήκαηνο.
if (isset($_POST['changed']))
{
$errors = array();
$trimmed = array_map('trim',$_POST);
if (empty($trimmed['user_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Όλνκά ζαο.';
}else{
if (preg_match("|^\w.{2,20}$|i", $trimmed['user_name']))
{
$un = mysqli_real_escape_string($dbc, $trimmed['user_name']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην όλνκα ρξήζηε.';
}
}
if (empty($trimmed['first_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Όλνκά ζαο.';
}else{
if (preg_match("|^\w.{2,20}$|i", $trimmed['first_name']))
{
$fn = mysqli_real_escape_string($dbc, $trimmed['first_name']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην κηθξό ζαο όλνκα.';
}
Σελίδα | 101
}
if (empty($trimmed['last_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Δπώλπκό ζαο.';
}else{
if (preg_match('/^\w.{2,40}$/i', $trimmed['last_name']))
{
$ln = mysqli_real_escape_string($dbc, $trimmed['last_name']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην επώλπκό ζαο.';
}
}
if (empty($trimmed['address']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηε Γηεύζπλζή ζαο.';
}else{
if (preg_match('/^\w.+[ ][0-9]{2,40}$/i', $trimmed['address']))
{
$ad = mysqli_real_escape_string($dbc, $trimmed['address']);
}else{
$errors[] = 'Μόλν ςεθία θαη ραξαθηήξεο επηηξέπνληαη γηα ην όλνκα
δηεύζπλζεο.';
}
}
if (empty($trimmed['city']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηελ Πόιε ζαο.';
}else{
if (preg_match('/^\w.{2,30}$/i', $trimmed['city']))
{
$c = mysqli_real_escape_string($dbc, $trimmed['city']);
}else{
$errors[] = 'Μόλν ραξαθηήξεο επηηξέπνληαη γηα ην όλνκα ηεο πόιεο ζαο.';
}
}
if (empty($trimmed['zip_code']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Σαρπδξνκηθό ζαο Κώδηθα.';
}else{
if (preg_match('/^[\d-]{2,10}$/i', $trimmed['zip_code']))
{
$zip = mysqli_real_escape_string($dbc, $trimmed['zip_code']);
}else{
$errors[] = 'Μόλν ςεθία θαη ε "-" επηηξέπνληαη γηα ηνv ηαρπδξνκηθό θώδηθα.';
}
}
if (empty($trimmed['telefone']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Σειέθσλό ζαο.';
}else{
if (preg_match('/^[\d-]{2,30}$/i', $trimmed['telefone']))
Σελίδα | 102
{
$tel = mysqli_real_escape_string($dbc, $trimmed['telefone']);
}else{
$errors[] = 'Μόλν ςεθία θαη ε "-" επηηξέπνληαη γηα ηνv αξηζκό ηειεθώλνπ.';
}
}
if (empty($trimmed['fax']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηνv αξηζκό FAX.';
}else{
if (preg_match('/^[\d-]{2,30}$/i', $trimmed['fax']))
{
$fax = mysqli_real_escape_string($dbc, $trimmed['fax']);
}else{
$errors[] = 'Μόλν ςεθία θαη ε "-" επηηξέπνληαη γηα ηνv αξηζκό Fax.';
}
}
if (empty($trimmed['e_mail']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Email ζαο.';
}else{
if (preg_match('/^[\w.-]+@[\w.]+\.[A-Za-z]{2,40}$/i', $trimmed['e_mail']))
{
$e = mysqli_real_escape_string($dbc, $trimmed['e_mail']);
}else{
$errors[] = 'Σν email δελ είλαη έγθπξν.';
}
}
if (empty($trimmed['pass1']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην Κσδηθό ζαο.';
}else{
if (preg_match('/^\w{2,40}$/i', $trimmed['pass1']))
{
if ($trimmed['pass1'] == $trimmed['pass2'])
{
$p = mysqli_real_escape_string($dbc, $trimmed['pass1']);
}else{
$errors[] = 'Ο Κσδηθόο δελ επηβεβαηώζεθε ζσζηά.';
}
}else{
$errors[] = 'Μόλν ςεθία θαη ραξαθηήξεο επηηξέπνληαη γηα ην θσδηθό
πξόζβαζεο.';
}
}
if (empty($errors))
{
$q = "UPDATE users SET user_name = '$un', first_name = '$fn', last_name = '$ln',
e_mail = '$e', address = '$ad', city = '$c', zip_code = '$zip', telefone = '$tel', fax = '$fax', pass =
SHA1('$p'), registration_date = NOW() WHERE user_id={$_SESSION['user_id']}";
Σελίδα | 103
$r = mysqli_query($dbc, $q);
if (mysqli_affected_rows($dbc) == 1)
{
echo '<p>Η αιιαγή ησλ ζηνηρείσλ ήηαλ επηηπρείο.</p>';
$q2 = "SELECT user_id, user_name, first_name, last_name, e_mail, address,
city, telefone, fax, zip_code FROM users WHERE user_id={$_SESSION['user_id']}";
$r2 = mysqli_query($dbc, $q2);
if ($r2)
{
$_SESSION = array();
$_SESSION = mysqli_fetch_array ($r2, MYSQLI_ASSOC);
}else{
echo '<p>Η ζύλδεζε κε ηελ Βάζε Γεδνκέλσλ δελ ήηαλ εθηθηή.
Παξαθαινύκε πξνζπαζήζηε μαλά.</p>';
}
}else{
echo '<p>Γελ ήηαλ δπλαηή ε αλαλέσζε ησλ ζηνηρείσλ ζαο.</p>';
}
mysqli_close($dbc);
}else{
echo '<p>Βξέζεθαλ ιάζε</p>';
foreach ($errors as $msg)
{
echo " $msg\n<br />";
}
}
}
?>
Πεξηγξαθή Κώδηθα
ηελ αξρή δίλνπκε αξρηθέο ηηκέο ζηηο κεηαβιεηέο πνπ ζα ρξεζηκνπνηήζνπκε γηα ηελ εθηέιεζε
ηνπ ζελαξίνπ. Οη κεηαβιεηέο απηέο παίξλνπλ ηα δεδνκέλα πνπ είλαη απνζεθεπκέλα ζην κεηξψν
S_SESSION θαη αληηζηνηρνχλ ζηα ζηνηρεία ηνπ ρξήζηε.
Όηαλ ινηπφλ ν ρξήζηεο θαηαρσξίζεη ηηο θαηλνχξγηεο ηηκέο ζηα πεδία ηηο θφξκαο θαη παηήζεη
ην θνπκπί “Καηαρψξεζε ηνηρείσλ” - if (isset($_POST['changed'])) – πξψηα ζα γίλεη έιεγρνο ησλ
θαηλνχξησλ δεδνκέλσλ φπσο ζηελ θφξκα εγγξαθήο ρξεζηψλ θαη αλ δελ ππάξμνπλ ζθάικαηα ζα
εθηειεζηή ην εξψηεκα ηεο SQL γηα ηελ αλαλέσζε ησλ ζηνηρείσλ ηνπ ρξήζηε.
$q = "UPDATE users SET user_name = '$un', first_name = '$fn', last_name = '$ln', e_mail = '$e', address
= '$ad', city = '$c', zip_code = '$zip', telefone = '$tel', fax = '$fax', pass = SHA1('$p'), registration_date =
NOW() WHERE user_id={$_SESSION['user_id']}";
Με ην εξψηεκα UPDATE αιιάδνπκε ηηο ππάξρνπζεο θαηαρσξίζεηο ηνπ πίλαθα users κε ηα λέα
δεδνκέλα. Ζ αιιαγή φκσο δελ γίλεηαη ζε φιεο ηηο εγγξαθέο παξά κφλν ζε εθείλε πνπ ν θσδηθφο ηνπ
εγγεγξακκέλνπ ρξήζηε (user_id) ηζνχηαη κε ηνλ θσδηθφ ηνπ ρξήζηε πνπ εθηειεί ηελ θφξκα
{$_SESSION['user_id']}.
Αλ ε εθηέιεζε ηνπ εξσηήκαηνο είλαη επηηπρήο επηιέγνπκε ηα θαηλνχξηα δεδνκέλα ηνπ ρξήζηε
απφ ηνλ πίλαθα users θαη θαηαρσξνχκε ηηο λέεο ηηκέο ζην κεηξψν $_SESSION αθνχ πξψηα ην
αδεηάζνπκε.
Σελίδα | 104
$_SESSION = array();
$_SESSION = mysqli_fetch_array ($r2, MYSQLI_ASSOC);
<p> </p>
<p align="right"><input type="submit" name="change" value="Καηαρώξεζε ηνηρείσλ" /></p>
<input type="hidden" name="changed" value="TRUE" />
</form>
Σν ίδην ζελάξην θαη ε ίδηα θφξκα εθηειείηαη θαη γηα ηελ αιιαγή ησλ ζηνηρείσλ ηνπ δηαρεηξηζηή.
Σελίδα | 105
Φύιια CSS πνπ δεκηνπξγήζεθαλ γηα ηελ κνξθνπνίεζε
.bookstore #text_erea { .bookstore #text_erea form{
margin-right: 30px; text-align: right;
margin-left: 30px; width: 570px;
color: #000000; font-weight: bold;
font-family: "Times New Roman", Times, serif; margin-right: 30px;
background-color: #000000; margin-left: 280px;
background-repeat: repeat-y; padding-bottom: 20px;
background-image: }
url(background%20img.jpg);
font-size: 16px;
padding-top: 50px;
}
Πίλαθαο 4.25: Φύιια CSS γηα ηελ κνξθνπνίεζε ηεο θόξκαο αιιαγήο ζηνηρείσλ
Σελίδα | 106
<td width="73%">
<div id="details">
<table width="100%" border="0">
<tr>
<td width="24%" height="21">Σίηινο: </td>
<td width="76%">'."<a href=\"".$row['best_url']."\"> <p>{$row['book_name']}</p> </a>".'</td>
</tr>
<tr>
<td width="24%" height="21">πγγξαθέαο:</td>
<td width="76%">';
if ($ath_fn != 'NULL')
{
echo "$ath_fn, ";
}
echo "{$row['author_ln']}";
if ($ath_fn2 != 'NULL')
{
echo " / $ath_fn2";
}
if ($ath_ln != 'NULL')
{
echo ", $ath_ln";
}
echo '</td>
</tr>
<tr>
<td width="24%" height="21">Δθδόηεο: </td>
<td width="76%">'."{$row['editor_name']}".'</td>
</tr>
<tr>
</table>
</div>
</td>
</tr>
</table> </td>
</tr>
<td height="23">--------------------------------------------------------------------------------
-----------------------------------------</td>
</tr>
';
}}?>
Σελίδα | 107
Πεξηγξαθή ελαξίνπ
ηελ αξρή επηιέγνπκε ηα δεδνκέλα ησλ πηλάθσλ books, authors θαη editors απφ ηελ βάζε
δεδνκέλσλ. ηνλ πίλαθα books ππάξρνπλ ηξείο ζηήιεο πνπ θαζνξίδνπλ αλ ην βηβιίν αλήθεη ζηα Best
sellers, ζηηο Νέεο Κπθινθνξίεο ή ζηα Πξνηεηλφκελα. Απηέο είλαη νη new_book, best_book θαη
sug_book. Αλ θάπνηα απφ απηέο έρεη ηηκή 1 ηφηε ην βηβιίν αλήθεη ζε κηα απφ απηέο ηηο θαηεγνξίεο.
Γηα λα επηιέμνπκε ηα βηβιία πνπ αλήθνπλ ζηα Best Sellers γξάθνπκε:
WHERE best_book =1
Ζ ζπλέλσζε ησλ πηλάθσλ γίλεηαη κέζσ ησλ μέλσλ θιεηδηψλ:
books.author_id = authors.author_id AND books.editor_id = editors.editor_id
ην ηέινο ηαμηλνκνχκε ηα δεδνκέλα κε βάζε ηνλ θσδηθφ (book_id) θαη κε θζίλνπζα ζεηξά
(DESC) έηζη ψζηε φηαλ πξνζζέηνπκε έλα βηβιίν ζηελ ιίζηα λα εκθαλίδεηαη πξψην.
Αλ δελ πξνθχςεη θάπνην ζθάικα κε ηελ εθηέιεζε ηνπ εξσηήκαηνο εκθαλίδνπκε ηα δεδνκέλα
κέζσ ελφο βξφρνπ. Σα δεδνκέλα απηά αθνξνχλ ηνλ ηίηιν, ηνπο ζπγγξαθείο, ηνλ εθδφηε, κηα εηθφλα
θαη ην url πνπ αληηζηνηρεί ζην θάζε βηβιίν (ην url αιιάδεη αλάινγα κε ηελ ηδηφηεηα ηνπ ρξήζηε).
Δπίζεο είλαη πνιχ πηζαλφ ην φλνκα θάπνηνπ ζπγγξαθέα λα έρεη NULL ηηκή, αθνχ ην κφλν
ππνρξεσηηθφ πεδίν είλαη ην επψλπκν ηνπ πξψηνπ ζπγγξαθέα. Γη‟ απηφ ην ιφγν πξέπεη πξψηα λα
γίλεηαη έιεγρνο απηψλ ησλ ηηκψλ θαη κεηά ε εθηχπσζή ηνπο.
Σν ζελάξην απηφ είλαη ίδην γηα φιεο ηηο θαηεγνξίεο ηεο ηζηνζειίδαο. Ζ κφλν πνπ δηαθέξεη είλαη
ην εξψηεκα ηεο SQL, αθνχ ηα δεδνκέλα αιιάδνπλ γηα θάζε θαηεγνξία.
Σελίδα | 108
WHERE category_id =5 AND books.author_id = authors.author_id AND
books.editor_id = editors.editor_id ORDER BY book_id DESC
Φηινζνθία SELECT book_name, author_fn, author_ln, author2_fn, author2_ln,
editor_name, image_name_small, url FROM books, authors, editors
WHERE category_id =6 AND books.author_id = authors.author_id AND
books.editor_id = editors.editor_id ORDER BY book_id DESC
Ιζηνξία, Γεσγξαθία SELECT book_name, author_fn, author_ln, author2_fn, author2_ln,
editor_name, image_name_small, url FROM books, authors, editors
WHERE category_id =4 AND books.author_id = authors.author_id AND
books.editor_id = editors.editor_id ORDER BY book_id DESC
Μαγεηξηθή SELECT book_name, author_fn, author_ln, author2_fn, author2_ln,
editor_name, image_name_small, url FROM books, authors, editors
WHERE category_id =7 AND books.author_id = authors.author_id AND
books.editor_id = editors.editor_id ORDER BY book_id DESC
Πίλαθαο 4.26: Δξσηήκαηα SQL γηα ηελ επηινγή ησλ δεδνκέλσλ από θάζε θαηεγνξία
Πίλαθαο 4.27: Φύιια CSS γηα ηελ κνξθνπνίεζε ηεο εκθάληζεο ησλ θαηεγνξηώλ
Σελίδα | 109
Δηθόλα 4.58: Δκθάληζε βηβιίσλ θαηεγνξηώλ
Σελίδα | 110
</tr>
<tr>
<td width="45%" height="24"><div align="right"><span
class="stele4">πγγξαθέαο:</span></div></td>
<td class="stele4"> </td>
<td class="stele4"><?php echo "<p>{$row['author_fn']}, {$row['author_ln']} / {$row['author2_fn']},
{$row['author2_ln']}</p>"; ?></td>
</tr>
<tr>
<td width="45%"><div align="right"><span class="stele4">Δθδόζεηο:</span></div></td>
<td class="stele4"> </td>
<td class="stele4"><?php echo "<p>{$row['editor_name']}</p>"; ?></td>
</tr>
<tr>
<td width="45%"><div align="right"><span class="stele4">ISBN: </span></div></td>
<td class="stele4"> </td>
<td class="stele4"><?php echo "<p>{$row['ISBN']}</p>"; ?></td>
</tr>
<tr>
<td width="45%"><div align="right"><span class="stele4">Καηεγνξία: </span></div></td>
<td width="2%" class="stele4"> </td>
<td width="53%" class="stele4"><?php echo "<p>{$row['category_name']}</p>"; ?></td>
</tr>
<tr>
<td width="45%"><div align="right"><span class="stele4">Σηκή:</span></div></td>
<td class="stele4"> </td>
<td colspan="2" class="stele4"><?php echo "<p>{$row['price']} €</p>"; ?></td>
<td height="211" colspan="2"><p class="style10"><strong>Πεξηγξαθή</strong></p>
<p align="justify" class="style5"><?php echo "{$row['description']}"; ?></p>
</td>
</tr>
</table>
Πεξηγξαθή ελαξίνπ
ην ζελάξην απηφ δε ρξεηάδεηαη λα ρξεζηκνπνηήζνπκε θάπνην βξφρν γηα ηελ εκθάληζε ησλ
δεδνκέλσλ, γηαηί επηιέγνπκε κφλν έλα βηβιίν απφ ηελ βάζε δεδνκέλσλ. αλ απνηέιεζκα έρνπκε ηελ
δηάζπαζε ηνπ θψδηθα PHP κέζα ζηα πεδία ελφο πίλαθα.
ην ζπγθεθξηκέλν ζελάξην επηιέγνπκε ην ηέηαξην βηβιίν απφ ηελ ιίζηα πνπ δεκηνπξγείηαη
θαζψο εθηεινχκε ην εξψηεκα SELECT.
SELECT book_name, author_fn, author_ln, author2_fn, author2_ln, editor_name, image_name_big,
category_name, price, ISBN, description FROM books, authors, editors, categories WHERE best_book =1
AND books.author_id = authors.author_id AND books.editor_id = editors.editor_id AND
books.category_id = categories.category_id ORDER BY book_id
Σελίδα | 111
Δηθόλα 4.59: Πεξηερόκελα πίλαθα books
Με ηελ πξφζζεζε ηνπ ραξαθηεξηζηηθνχ LIMIT 3, 1 δεηάκε λα επηιεγνχλ 1 εγγξαθέο μεθηλψληαο απφ ηελ
εγγξαθή 3. Γειαδή επηιέγνπκε ην βηβιίν “Γέθα εηψλ, δηαδεπγκέλε”. Απηή ηε θνξά δηαιέγνπκε φια ηα
ζηνηρεία ηνπ βηβιίνπ καδί κε ηελ κεγάιε εηθφλα πνπ ζέινπκε λα εκθαλίδεηαη.
Με ηνλ ίδην ηξφπν επηιέγνπκε απφ ηελ βάζε δεδνκέλσλ ην βηβιίν πνπ επηζπκνχκε αλάινγα
ηελ θαηεγνξία ζηελ νπνία αλήθεη θαη ηελ ζεηξά πνπ έρεη θαηά ηελ εθηέιεζε ηνπ εξσηήκαηνο.
Πίλαθαο 4.28: Φύιια CSS γηα ηελ κνξθνπνίεζε ηεο εκθάληζε ησλ ζηνηρείσλ ελόο βηβιίνπ
Σελίδα | 112
Δηθόλα 4.59: Δκθάληζε ζηνηρείσλ ελόο βηβιίνπ
if (isset($_POST['searching']))
{
$errors = array();
$trimmed = array_map('trim',$_POST);
$ath_fn = $ath_ln = $ath_fn2 = $f = FALSE;
if (empty($trimmed['find']))
{
$table[] = 'Γελ ζπκπιεξώζαηε ηνλ όξν αλαδήηεζήο ζαο.';
}else{
$f = mysqli_real_escape_string($dbc, $trimmed['find']);
}
if (empty($errors))
{
$q2 = "SELECT book_name, author_fn, author_ln, author2_fn, author2_ln,
editor_name, category_name, url
FROM books, authors, editors, categories
Σελίδα | 113
WHERE ( MATCH (author_fn, author_ln) AGAINST ('$f') OR MATCH (author2_fn, author2_ln)
AGAINST ('$f') OR {$trimmed['field']} LIKE '%$f%')
AND books.author_id = authors.author_id
AND books.editor_id = editors.editor_id
AND books.category_id = categories.category_id";
Σελίδα | 114
Πεξηγξαθή ελαξίνπ
ηελ αξρή ειέγρνπκε αλ ν ρξήζηεο έρεη ζπκπιεξψζεη ηνλ φξν αλαδήηεζεο, δειαδή αλ έρεη
δψζεη ηηκή ζην πεδίν find ηεο θφξκαο. Αλ λαη ηφηε εθηειείηαη ην εξψηεκα SELECT ην νπνίν
επηζηξέθεη ηελ θαηαρψξηζε ηεο βάζεο δεδνκέλσλ πνπ πεξηέρεη ηνλ φξν αλαδήηεζεο.
Αθνχ έρνπκε νξίζεη επξεηήξην ηχπνπ FULLTEXT ζηνλ πίλαθα authors κπνξνχκε κε ηνλ φξν
MATCH…AGAINST λα εκθαλίζνπκε ηηο εγγξαθέο πνπ ηαηξηάδνπλ κε ηνλ φξν αλαδήηεζεο.
SELECT * FROM όλνκα_πίλαθα WHERE MATCH (ζηήιεο) AGAINST (ιέμεηο-θιεηδηά)
Δπίζεο κε ηνλ φξν LIKE ειέγρνπκε αλ δχν ζπκβνινζεηξέο είλαη ίζεο. Σν ζχκβνιν ηνπ
πνζνζηνχ (%) αληηπξνζσπεχεη θαλέλαλ, έλαλ, ή πεξηζζφηεξνπο ραξαθηήξεο.
πρ. SELECT * FROM users WHERE first_name LIKE „%Sofia%‟
Απηφ ην εξψηεκα ζα επηζηξέςεη φιεο ηηο γξακκέο πνπ ζην πεδίν first_name έρνπλ ηηκή πνπ μεθηλάεη
θαη ηειεηψλεη κε ηε ζπκβνινζεηξά Sofia.
ην ζπγθεθξηκέλν ζελάξην ν φξνο {$trimmed['field']} αληηζηνηρεί ζηελ ζηήιε πνπ ζα
επηιέμεη ν ρξήζηεο απφ ηελ θφξκα (ηίηινο, ζπγγξαθέαο, εθδφηεο) θαη ε κεηαβιεηή $f απνηειεί ηνλ
φξν αλαδήηεζεο.
Πίλαθαο 4.29: Φύιια CSS γηα ηελ κνξθνπνίεζε ησλ απνηειεζκάησλ αλαδήηεζεο
Σελίδα | 115
Δηθόλα 4.60: Δκθάληζε απνηειεζκάησλ αλαδήηεζεο
Σελίδα | 116
exit();
}else{
$q3 = "INSERT INTO wishlist (book_id, user_id, b_name, img, w_url, date)
VALUES ('{$row['book_id']}', '".$_SESSION['user_id']."', '{$row['book_name']}', '$imgs',
'{$row['url_after']}', NOW() )";
$r3 = mysqli_query($dbc, $q3);
if ($r3)
{
$wurl = $wb = $wi = $imgs = FALSE;
$q4 = "SELECT * FROM wishlist WHERE user_id = {$_SESSION['user_id']}
ORDER BY date";
$r4 = mysqli_query($dbc, $q4);
if ($r4)
{
while ($row = mysqli_fetch_array ($r4, MYSQLI_ASSOC))
{
$wurl = $row['w_url'];
$wb = $row['b_name'];
$wi = $row['img'];
echo '
<td>
<table width="100%" border="0">
<tr>
<td width="24%" height="27" rowspan="3">'."<img src=\"".$wi."\" />".'<div align="left">
</div></td>
<td height="60" colspan="2"><span class="style10">'."<a href=\"".$wurl."\"><p>$wb</p>
</a>".'</span></td>
</tr>
<tr>
<td height="45"><img src="includes/button kalathi.gif" alt="kal" width="42" height="60" /></td>
<td height="45">'."<a href=\"kalathi_add.php?bid={$row['book_id']}\">".'Πξνζζήθε ζην
Καιάζη'."</a>".'</td>
</tr>
<tr>
<td width="8%"><img src="includes/delete.gif" alt="delete" width="30" height="30" /></td>
td width="68%">'."<a href=\"wishlist_delete.php?bid={$row['book_id']}\">".'Γηαγξαθή από ηε
Wishlist'."</a>".'</td>
</tr>
</table> </td></tr>
<tr>
<td height="21">------------------------------------------------
-----------------------------------------------------</td>
</tr>
';
}
}else{
echo '<p>Πξνζπαζήζηε μαλά.</p>';
}}}}}
?>
Σελίδα | 117
Πεξηγξαθή ελαξίνπ
Όηαλ έλαο ρξήζηεο εηζέξρεηαη ζηνλ ινγαξηαζκφ ζηηο ζειίδεο πνπ εκθαλίδνληαη ηα ζηνηρεία
ησλ βηβιίσλ πξνζζέηνληαη δχν ζχλδεζκνη. Ο έλαο είλαη γηα ηελ πξνζζήθε ηνπ βηβιίνπ ζην θαιάζη θαη
ν άιινο γηα ηελ πξνζζήθε ηνπ βηβιίνπ ζηε Wishlist.
<div id="buttons">
<?php
echo "<p><a href=\"kalathi_add.php?bid={$row['book_id']}\">Πξνζζήθε ζην
Καιάζη</a></p>";
echo "<p><a href=\"wishlist_add.php?bid={$row['book_id']}\">Πξνζζήθε ζηε
Wishlist</a></p>"; ?>
</div>
ην θνκκάηη απηφ ηνπ θψδηθα έρνπκε δχν URL. Σν έλα καο κεηαθέξεη ζηελ ζειίδα
kalathi_add.php θαη ην άιιν ζηελ ζειίδα wishlist_add.php. Καη ζηηο δχν δηεπζχλζεηο πξνζζέηνπκε
ηνλ θσδηθφ ηνπ βηβιίνπ γηα λα γλσξίδεη ε ζειίδα πνπ ζα κεηαβνχκε πνην βηβιίν ζα πξνζηεζεί.
Σν ζελάξην μεθηλάεη κε ηνλ έιεγρν ηνπ book_id (θσδηθφο βηβιίνπ) θαη ζπλερίδεη κε ηελ
επηινγή ησλ ραξαθηεξηζηηθψλ ηνπ απφ ηελ βάζε δεδνκέλσλ. Αλ ην εξψηεκα εθηειέζηεθε ζσζηά
εθρσξνχκε ζηε κεηαβιεηή $imgs ηελ δηαδξνκή πξνο ηελ εηθφλα ηνπ βηβιίνπ.
Έπεηηα ειέγρνπκε αλ ην βηβιίν ππάξρεη ήδε ζηε Wishlist. Αλ φρη ηφηε εθηειείηε ην εξψηεκα
εηζαγσγήο INSERT πνπ πξνζζέηεη ζηνλ πίλαθα wishlist ηεο βάζεο δεδνκέλσλ ηνλ θσδηθφ ηνπ
βηβιίνπ, ηνλ θσδηθφ ηνπ ρξήζηε, ηνλ ηίηιν ηνπ βηβιίνπ, ηελ εηθφλα ηνπ θαη ην φλνκα ηεο ζειίδαο πνπ
εκθαλίδεη ηα ραξαθηεξηζηηθά ηνπ.
ηε ζπλέρεηα επηιέγνπκε ηα βηβιία πνπ έρεη θαηαρσξήζεη ν ζπγθεθξηκέλνο ρξήζηεο ζηνλ
πίλαθα wishlist θαη εκθαλίδνπκε ηνλ ηίηιν θαη ηελ εηθφλα ηνπ θάζε βηβιίνπ καδί κε δχν ζπλδέζκνπο.
Ο έλαο ζχλδεζκνο επηηξέπεη ηελ πξνζζήθε ηνπ βηβιίνπ ζην θαιάζη θαη ν δεχηεξνο ηελ δηαγξαθή ηνπ
βηβιίνπ απφ ηελ Wishlist.
Σελίδα | 118
Δηθόλα 4.62: Δκθάληζε βηβιίσλ ζηε wishlist
Σελίδα | 119
<tr>
<td width="8%"><img src="includes/delete.gif" alt="delete" width="30" height="30" /></td>
<td width="68%">'."<a href=\"wishlist_delete.php?bid={$row['book_id']}\">".'Γηαγξαθή από ηε
Wishlist'."</a>".'</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="21">----------------------------------------------------------------------
-------------------------------</td>
</tr>
';
}
}
?>
Σν ζελάξην απηφ είλαη ίδην κε εθείλν ηεο ζειίδαο wishlist_add.php γηα ηελ εκθάληζε ησλ βηβιίσλ ηεο
wishlist.
Σελίδα | 120
<tr>
<td height="45"><img src="includes/button kalathi.gif" alt="kal" width="42" height="60" /></td>
<td height="45">'."<a href=\"kalathi_add.php?bid={$row['book_id']}\">".'Πξνζζήθε ζην
Καιάζη'."</a>".'</td></tr>
<tr>
<td width="8%"><img src="includes/delete.gif" alt="delete" width="30" height="30" /></td>
<td width="68%">'."<a href=\"wishlist_delete.php?bid={$row['book_id']}\">".'Γηαγξαθή από ηε
Wishlist'."</a>".'</td>
</tr></table>
</td></tr>
<tr>
<td height="21">----------------------------------------------------------------------
-------------------------------</td>
</tr> ';
}}} ?>
Πεξηγξαθή ελαξίνπ
Ο θψδηθαο πνπ πξνζηίζεηαη είλαη ε δηαγξαθή ηνπ βηβιίνπ κε έλα εξψηεκα DELETE. Ζ
ζπλέρεηα ηνπ ζελαξίνπ είλαη ίδηα κε ηα δχν πξνεγνχκελα.
DELETE FROM wishlist WHERE book_id = '$bid'
Σν θψδηθα ηνπ βηβιίνπ ηνλ παίξλνπκε κέζσ ηνπ κεηξψνπ $_GET() αθνχ πξψηα ηνλ έρνπκε
πξνζαξηήζεη ζηελ δηεχζπλζε URL.
Σελίδα | 121
4.5.11 Καιάζη Αγνξώλ
ην θαιάζη αγνξψλ ν ρξήζηεο κπνξεί λα θαηαρσξήζεη ηα βηβιία πνπ ζέιεη λα αγνξάζεη. Ζ
πξνζζήθε ελφο βηβιίνπ γίλεηαη κέζσ ηνπ ζπλδέζκνπ “Πξνζζήθε ζην θαιάζη” πνπ βξίζθεηαη ζηελ
ζειίδα εκθάληζεο ησλ ραξαθηεξηζηηθψλ ηνπ θάζε βηβιίνπ. Δπίζεο κπνξεί λα έρεη πξφζβαζε ζην
θαιάζη ηνπ γηα λα επεμεξγαζηεί ηηο θαηαρσξίζεηο ηνπ απφ ηνλ ζχλδεζκν “Καιάζη αγνξψλ” (ζηνλ
πίλαθα κε ηελ θφξκα logout) θαη λα κεηαβεί ζηελ αγνξά ηνπο – Οινθιήξσζε Αγνξάο .
Γηα ζθνπφ απηφ δεκηνπξγήζεθαλ ηέζζεξεηο ζειίδεο:
kalathi_add.php – Πξνζζήθε βηβιίνπ ζην θαιάζη
kalathi_agorwn.php – Δκθάληζε πεξηερνκέλσλ θαιαζηνχ
kalathi_delete.php – Γηαγξαθή ελφο βηβιίνπ απφ ην θαιάζη
kalathi_en.php – Δλεκέξσζε θαιαζηνχ
Σελίδα | 122
{
$t = $kurl = $kb = $kp = $subtotal = FALSE;
$qu = array();
$total = 0;
while ($row3 = mysqli_fetch_array ($r4, MYSQLI_ASSOC))
{
$kurl = $row3['k_url'];
$kb = $row3['kal_book'];
$kp = $row3['pr'];
$qty = $row3['quantity'];
$subtotal = $qty * $kp;
$total = $total + $subtotal;
echo '
<form name="update_kal" action="kalathi_en.php" method="post">
<tr>
<td>
<table width="100%" border="0">
<tr>
<td width="52%"><div align="left">'."<a href=\"".$kurl."\"><p>$kb</p></a>".'</div></td>
<td width="12%"><div align="left">'.$kp.' €</div></td>
<td width="19%"><div align="center"><input type="text" size="2"
name="qu['.$row3['kal_id'].']"" value="'.$qty.'" /></div></td>
<td width="17%"><div align="center"><div id="but_delete">'."<a
href=\"kalathi_delete.php?bid={$row3['book_id']}\">".'<img src="includes/delete kal.gif" alt="butdel"
width="20" height="20" />'."</a>".'</div></div></td>
</tr>
</table></td></tr>
';
}
echo '
<tr>
<td height="23">----------------------------------------------------------------------------------------------------------------
---------</td></tr>
<tr>
<td>
<table width="100%" border="0">
<tr>
<td><p align="left"><input type="submit" name="update" value="Δλεκέξσζε Καιαζηνύ" /></p>
<input type="hidden" name="updated" value="TRUE" /></td>
<td><div align="right">
<table width="135" border="0">
<tr>
<td width="47%">ύλνιν:</td>
<td width="53%"><p>'.$total.' €</p></td>
</tr>
</table></div></td></tr>
<tr>
<td><div align="left"><div id="but_agora">'."<p><a href=\"order.php?t=$total\">".'<img
src="includes/oloklirwsh_agoras.gif" alt="agora" />'."</a></p>".'</div></td>
Σελίδα | 123
<td><div align="right"><div id="but_paraggelia">'."<p><a href=\"paraggelies.php?t=$total\">".'<img
src="includes/paraggelies.gif" alt="paraggelies" />'."</a></p>".'</div></td>
</tr>
</table></td></tr>
</form>';
}}}}
?>
Πεξηγξαθή ελαξίνπ
Ξεθηλψληαο ην ζελάξην επηιέγνπκε ηα ζηνηρεία ηνπ βηβιίνπ απφ ηνλ πίλαθα books. Έπεηηα
ειέγρνπκε αλ ην βηβιίν ππάξρεη ήδε ζηνλ θαιάζη. Αλ λαη απμάλνπκε ηελ πνζφηεηα θαηά έλα , αιιηψο
ηελ θάλνπκε ίζε κε ηε κνλάδα θαη εηζάγνπκε ηα ζηνηρεία ηνπ βηβιίνπ ζηνλ πίλαθα kalathi ηεο βάζεο
δεδνκέλσλ. ηε ζπλέρεηα επηιέγνπκε ηα βηβιία πνπ ν ζπγθεθξηκέλνο ρξήζηεο έρεη θαηαρσξίζεη ζηνλ
πίλαθα kalathi θαη ηα εκθαλίδνπκε κέζσ ελφο βξφρνπ while.
Δπίζεο δεκηνπξγήζεθε κηα θφξκα ε νπνία έρεη έλα πεδίν θεηκέλνπ. Δθεί ν ρξήζηεο θαηαρσξεί
ηελ πνζφηεηα ησλ βηβιίσλ πνπ επηζπκεί λα παξαγγείιεη.
<input type="text" size="2" name="qu['.$row3['kal_id'].']"" value="'.$qty.'" />
Ζ ηηκή ηεο πνζφηεηαο ηνπ θάζε βηβιίνπ απνζεθεχεηαη ζηνλ πίλαθα qu[]. Όηαλ ν ρξήζηεο αιιάδεη ηελ
πνζφηεηα θάπνηνπ βηβιίνπ πξέπεη λα παηήζεη ην θνπκπί ηεο θφξκαο “Δλεκέξσζε θαιαζηνχ” έηζη
ψζηε λα ελεκεξσζεί ε βάζε δεδνκέλσλ κε ηηο λέεο ηηκέο.
Γηα ηελ δηαγξαθή ελφο βηβιίνπ δεκηνπξγήζεθε κηα εηθφλα πνπ είλαη ζχλδεζκνο πξνο ηελ
ζειίδα kalathi_delete.php. Με ηνλ ίδην ηξφπν ν ρξήζηεο κεηαβαίλεη ζηελ αγνξά ησλ βηβιίσλ
(order.php) θαη ζηελ εκθάληζε ησλ παξαγγειηψλ ηνπ (paraggelies.php).
Σελίδα | 124
ελάξην PHP (kalathi_agorwn.php)
<?php
Σελίδα | 125
<tr>
<td><p align="left"><input type="submit" name="update" value="Δλεκέξσζε Καιαζηνύ" /></p>
<input type="hidden" name="updated" value="TRUE" /></td>
<td><div align="right">
<table width="135" border="0">
<tr>
<td width="47%">ύλνιν:</td>
<td width="53%"><p>'.$total.' €</p></td>
</tr>
</table></div></td></tr>
<tr>
<td><div align="left"><div id="but_agora">'."<p><a href=\"order.php?t=$total\">".'<img
src="includes/oloklirwsh_agoras.gif" alt="agora" />'."</a></p>".'</div></td>
<td><div align="right"><div id="but_paraggelia">'."<p><a href=\"paraggelies.php?t=$total\">".'<img
src="includes/paraggelies.gif" alt="paraggelies" />'."</a></p>".'</div></td>
</tr>
</table></td></tr>
</form>';
}
?>
Πεξηγξαθή ελαξίνπ
Ζ εκθάληζε ησλ απνηειεζκάησλ αθνινπζεί ηελ ίδηα δηαδηθαζία κε ην ζελάξην ηεο ζειίδαο
kalathi_add.php. Απηφ πνπ πξνζηίζεηαη είλαη ν έιεγρνο γηα ηελ χπαξμε θαηαρσξίζεσλ ζην θαιάζη. Αλ
φρη ηφηε εκθαλίδεηαη έλα θαηάιιειν κήλπκα καδί κε ηνλ ζχλδεζκν ησλ παξαγγειηψλ, αιιηψο ην
ζελάξην ζπλερίδεη κε ηελ εθηχπσζε ησλ πεξηερνκέλσλ ηνπ πίλαθα kalathi.
if (isset($_POST['updated']))
{
foreach ($_POST['qu'] as $k => $value)
{
$kid = (int) $k;
$qty = (int) $value;
if ($qty == 0){
$q2 = "DELETE FROM kalathi WHERE kal_id = '$kid'";
$r2 = mysqli_query($dbc, $q2);
}elseif ($qty >= 1){
$q2 = "UPDATE kalathi SET quantity = $qty WHERE kal_id = $kid";
$r2 = mysqli_query($dbc, $q2);
}
}
}
$q = "SELECT * FROM kalathi WHERE user_id = {$_SESSION['user_id']} ORDER BY date";
$r = mysqli_query($dbc, $q);
Σελίδα | 126
if (mysqli_num_rows($r) < 1)
{
echo '<p>Σν θαιάζη ζαο είλαη άδεην.</p>';
}else{
$t = $kurl = $kb = $kp = $qty = $subtotal = FALSE;
$qu = array();
$total = 0;
while ($row = mysqli_fetch_array ($r, MYSQLI_ASSOC))
{
$kurl = $row['k_url'];
$kb = $row['kal_book'];
$kp = $row['pr'];
$qty = $row['quantity'];
$subtotal = $qty * $kp;
$total = $total + $subtotal;
echo '
<form name="update_kal" action="kalathi_en.php" method="post">
<tr>
<td>
<table width="100%" border="0">
<tr>
<td width="52%"><div align="left">'."<a href=\"".$kurl."\"><p>$kb</p></a>".'</div></td>
<td width="12%"><div align="left">'.$kp.' €</div></td>
<td width="19%"><div align="center"><input type="text" size="2"
name="qu['.$row3['kal_id'].']"" value="'.$qty.'" /></div></td>
<td width="17%"><div align="center"><div id="but_delete">'."<a
href=\"kalathi_delete.php?bid={$row3['book_id']}\">".'<img src="includes/delete kal.gif" alt="butdel"
width="20" height="20" />'."</a>".'</div></div></td>
</tr>
</table></td></tr>
';
}
echo '
<tr>
<td height="23">----------------------------------------------------------------------------------------------------------------
---------</td></tr>
<tr>
<td>
<table width="100%" border="0">
<tr>
<td><p align="left"><input type="submit" name="update" value="Δλεκέξσζε Καιαζηνύ" /></p>
<input type="hidden" name="updated" value="TRUE" /></td>
<td><div align="right">
<table width="135" border="0">
<tr>
<td width="47%">ύλνιν:</td>
<td width="53%"><p>'.$total.' €</p></td>
</tr>
</table></div></td></tr>
<tr>
Σελίδα | 127
<td><div align="left"><div id="but_agora">'."<p><a href=\"order.php?t=$total\">".'<img
src="includes/oloklirwsh_agoras.gif" alt="agora" />'."</a></p>".'</div></td>
<td><div align="right"><div id="but_paraggelia">'."<p><a href=\"paraggelies.php?t=$total\">".'<img
src="includes/paraggelies.gif" alt="paraggelies" />'."</a></p>".'</div></td>
</tr>
</table></td></tr>
</form>';
}
?>
Πεξηγξαθή ελαξίνπ
Ζ ζειίδα απηή δεκηνπξγήζεθε γηα ηελ αλαλέσζε ησλ πνζνηήησλ ησλ βηβιίσλ πνπ ν ρξήζηεο
επηζπκεί λα αγνξάζεη. Απηφ επηηπγράλεηαη κε έλαλ βξφρν foreach. Ο βξφρνο απηφο παίξλεη ηηο ηηκέο
πνπ πίλαθα qu[] (qu['.$row3['kal_id'].'] = $qty). Οη θάζε ζηήιε ηνπ πίλαθα αληηπξνζσπεχεη ηνλ
θσδηθφ ηνπ βηβιίνπ θαη ε θάζε απνζεθεπκέλε ηηκή ηελ πνζφηεηα απηνχ.
Κάζε θνξά πνπ ηξέρεη ν βξφρνο foreach δίλνπκε ζηελ κεηαβιεηή $k ηνλ θσδηθφ ηνπ θάζε
βηβιίνπ θαη ζηελ κεηαβιεηή $value ηελ πνζφηεηα απηνχ. Έπεηηα κεηαβάινπκε ηηο ηηκέο ηνπο ζε
αθέξαηεο θαη ηηο θαηαρσξνχκε ζηηο κεηαβιεηέο $kid θαη $qty.
foreach ($_POST['qu'] as $k => $value)
$kid = (int) $k;
$qty = (int) $value;
Αλ ε πνζφηεηα έρεη ηηκή κεδέλ δηαγξάθνπκε ην βηβιίν απφ ηνλ πίλαθα kalathi ηεο βάζεο
δεδνκέλσλ, αιιηψο εθηεινχκε ην εξψηεκα UPDATE ην νπνίν θαηαρσξεί ηηο θαηλνχξγηα ηηκή ηεο
πνζφηεηαο ζην πίλαθα.
ηε ζπλέρεηα ν θψδηθαο εθηειείηαη φπσο θαη ζηα πξνεγνχκελα ζελάξηα.
Σελίδα | 128
$total = $total + $subtotal;
echo '
<form name="update_kal" action="kalathi_en.php" method="post">
<tr>
<td>
<table width="100%" border="0">
<tr>
<td width="52%"><div align="left">'."<a href=\"".$kurl."\"><p>$kb</p></a>".'</div></td>
<td width="12%"><div align="left">'.$kp.' €</div></td>
<td width="19%"><div align="center"><input type="text" size="2"
name="qu['.$row3['kal_id'].']"" value="'.$qty.'" /></div></td>
<td width="17%"><div align="center"><div id="but_delete">'."<a
href=\"kalathi_delete.php?bid={$row3['book_id']}\">".'<img src="includes/delete kal.gif" alt="butdel"
width="20" height="20" />'."</a>".'</div></div></td>
</tr>
</table></td></tr>
';
}
echo '
<tr>
<td height="23">----------------------------------------------------------------------------------------------------------------
---------</td></tr>
<tr>
<td>
<table width="100%" border="0">
<tr>
<td><p align="left"><input type="submit" name="update" value="Δλεκέξσζε Καιαζηνύ" /></p>
<input type="hidden" name="updated" value="TRUE" /></td>
<td><div align="right">
<table width="135" border="0">
<tr>
<td width="47%">ύλνιν:</td>
<td width="53%"><p>'.$total.' €</p></td>
</tr>
</table></div></td></tr>
<tr>
<td><div align="left"><div id="but_agora">'."<p><a href=\"order.php?t=$total\">".'<img
src="includes/oloklirwsh_agoras.gif" alt="agora" />'."</a></p>".'</div></td>
<td><div align="right"><div id="but_paraggelia">'."<p><a href=\"paraggelies.php?t=$total\">".'<img
src="includes/paraggelies.gif" alt="paraggelies" />'."</a></p>".'</div></td>
</tr>
</table></td></tr>
</form>';
}}}
?>
Πεξηγξαθή ελαξίνπ
Μέζσ ηνπ URL κεηαβηβάδνπκε ηνλ θσδηθφ ηνπ βηβιίνπ (φπσο θαη ζηα πξνεγνχκελα ζελάξηα)
γη‟ απηφ έρνπκε ηελ δπλαηφηεηα λα δηαγξάςνπκε ην ζπγθεθξηκέλν βηβιίν απφ ηελ βάζε δεδνκέλσλ
θαη έπεηηα λα εκθαλίζνπκε ηηο απνκείλαληεο θαηαρσξίζεηο ηνπ πίλαθα.
Σελίδα | 129
Φύιια CSS πνπ δεκηνπξγήζεθαλ γηα ηελ κνξθνπνίεζε
.bookstore #kalathi { .bookstore #kalathi a{
background-color: #000000; color: #000000;
color: #000000; font-family: "Times New Roman",
font-size: 16px; Times, serif;
font-weight: bolder; font-size: 16px;
background-repeat: repeat-y; }
margin-right: 30px;
margin-left: 30px;
padding-top: 50px;
background-image:
url(background%20img.jpg);
padding-bottom: 70px;
}
Πίλαθαο 4.31: Φύιια CSS γηα ηελ κνξθνπνίεζε ηνπ θαιαζηνύ αγνξώλ
if (isset($_GET['t']))
{
$total = $_GET['t'];
$oid = $ord_bid = $ord_book = $ord_pr = $ord_qty = FALSE;
$q = "INSERT INTO orders (user_id, total) VALUES ('".$_SESSION['user_id']."', '$total')";
$r = mysqli_query($dbc, $q);
if (mysqli_affected_rows($dbc) == 1)
{
$q2 = "SELECT order_id FROM orders WHERE user_id = {$_SESSION['user_id']}";
$r2 = mysqli_query($dbc, $q2);
if ($r2)
{
$row = mysqli_fetch_array ($r3, MYSQLI_ASSOC);
$oid = $row['order_id'];
Σελίδα | 130
$ord_pr = $row2['pr'];
$ord_qty = $row2['quantity'];
$q4 = "INSERT INTO order_contents (order_id, book_id, quantity, price, ship_date)
VALUES ('$oid', '$ord_bid', '$ord_qty', '$ord_pr', NOW() )";
$r4 = mysqli_query($dbc, $q4);
}
if ($r4)
{
$q5 = "DELETE FROM kalathi WHERE user_id = {$_SESSION['user_id']} ";
$r5 = mysqli_query($dbc, $q5);
if ($r5)
{
$q6 = "SELECT * FROM order_contents WHERE order_id = $oid ORDER BY
ship_date";
$r6 = mysqli_query($dbc, $q6);
if ($r6)
{
while ($row3 = mysqli_fetch_array ($r6, MYSQLI_ASSOC))
{
$ord_bid = $row3['book_id'];
$ord_prise = $row3['price'];
$ord_qty = $row3['quantity'];
$ord_date = $row3['ship_date'];
$q7 = "SELECT book_name, url_after FROM books WHERE
book_id = $ord_bid";
$r7 = mysqli_query($dbc, $q7);
$row4 = mysqli_fetch_array ($r7, MYSQLI_ASSOC);
if ($r7)
{
$book_url = $row4['url_after'];
$ord_book = $row4['book_name'];
echo '
<tr>
<td>
<table width="100%" border="0">
<tr>
<td width="45%" height="27">
<div align="left">'."<a href=\"".$book_url."\"><p>$ord_book</p> </a>".'</div></td>
<td width="13%"><div align="left">'.$ord_prise.'</div></td>
<td width="14%"><div align="center">'.$ord_qty.'</div></td>
<td width="28%"><div align="right">'.$ord_date.'</div></td>
</tr>
</table>
</td>
</tr>
';
}}}}}
}}}
}
?>
Σελίδα | 131
Πεξηγξαθή ελαξίνπ
ηνλ πίλαθα orders ηεο βάζεο δεδνκέλσλ απνζεθεχνληαη ν θσδηθφο ηνπ ρξήζηε, ην ζπλνιηθφ
πνζφ θαη ε εκέξα πνπ έγηλε ε παξαγγειία. ην πίλαθα order_contents ηα βηβιία πνπ ζέιεη λα
αγνξάζεη ν ρξήζηεο.
Σν ζελάξην αξρίδεη κε ηελ πξνζζήθε ησλ δεδνκέλσλ ζηνλ πίλαθα orders. Αλ ην εξψηεκα
εθηειεζηή κε επηηπρία επηιέγνπκε ην πξσηεχσλ θιεηδί ηνπ πίλαθα orders γηα λα γίλεη μέλν θιεηδί ηνπ
πίλαθα order_contents. ηε ζπλέρεηα επηιέγνπκε ηα βηβιία πνπ ν ρξήζηεο είρε θαηαρσξίζεη ζην
θαιάζη ηνπ θαη ηα πξνζζέηνπκε ζηνλ πίλαθα order_contents. Αθνχ ηα δεδνκέλα κεηαθεξζνχλ κε
επηηπρία πξνβαίλνπκε ζηελ δηαγξαθή ηνπο απφ ηνλ θαιάζη.
Δπηιέγνληαο ηα δεδνκέλα ηνπ πίλαθα order_contents πνπ αληηζηνηρνχλ ζηνλ ζπγθεθξηκέλν
ρξήζηε ηα εκθαλίδνπκε κέζσ ελφο βξφρνπ while θαη ηελ ζπλάξηεζεο echo (φπσο θαη ζηα
πξνεγνχκελα ζελάξηα).
Σελίδα | 132
ελάξην PHP
<?php
echo '
<tr>
<td>
<table width="100%" border="0">
tr>
<td width="45%" height="27"><div align="left">'."<a href=\"".$book_url."\"><p>$ord_book</p>
</a>".'</div></td>
<td width="13%"><div align="left">'.$ord_prise.'</div></td>
<td width="14%"><div align="center">'.$ord_qty.'</div></td>
<td width="28%"><div align="right">'.$ord_date.'</div></td>
</tr>
</table>
</td>
</tr>
';
}}}}?>
Σελίδα | 133
4.5.14 Πίλαθαο αγνξώλ
Ο πίλαθαο αγνξψλ αθνξά κφλν ην δηαρεηξηζηή ηεο ηζηνζειίδαο ν νπνίνο ζα κπνξεί λα
ελεκεξψλεηαη γηα ηηο παξαγγειίεο φισλ ησλ ρξεζηψλ. Δπίζεο, κπνξεί λα δηαγξάςεη φπνηα παξαγγειία
επηζπκεί (delete_order.php).
Σελίδα | 134
Πεξηγξαθή Κώδηθα
Πξψηα απφ φια επηιέγνπκε ηνπο θαηαρσξεκέλνπο ρξεζηψλ απφ ηνλ πίλαθα orders, δειαδή
απηνχο πνπ έρνπλ θάλεη θάπνηα παξαγγειία. Αλ δελ ππάξρνπλ θαηαρσξήζεηο ζηνλ πίλαθα
εθηππψλνπκε έλα θαηάιιειν κήλπκα, αιιηψο εθηεινχκε έλαλ βξφρν while κέζα ζηνλ νπνίν
επηιέγνπκε ηα νλφκαηα ησλ ρξεζηψλ απφ ησλ πίλαθα users έηζη ψζηε λα εθηππσζνχλ ζηελ ζειίδα
κέζσ ηεο ζπλάξηεζεο echo().
Δπίζεο, ην φλνκα ηνπ θάζε ρξήζηε γίλεηαη ζχλδεζκνο πξνο ηελ ζειίδα order_contents έηζη
ψζηε λα έρεη πξφζβαζε ν δηαρεηξηζηήο ζηα βηβιία πνπ έρεη παξαγγείιεη ν θάζε ρξήζηεο.
Ζ ζπλάξηεζε echo() εθηππψλεη ηα νλφκαηα ησλ ρξεζηψλ, ην ζπλνιηθφ πνζφ θαη ηελ
εκεξνκελία ηεο παξαγγειίαο.
Σελίδα | 135
{
$oid = (int) $_GET['oid'];
$q = "SELECT * FROM order_contents WHERE order_id = '$oid' ORDER BY ship_date";
$r = mysqli_query($dbc, $q);
if ($r)
{
while ($row = mysqli_fetch_array ($r, MYSQLI_ASSOC))
{
$ord_bid = $row['book_id'];
$ord_prise = $row['price'];
$ord_qty = $row['quantity'];
$ord_date = $row['ship_date'];
Σελίδα | 136
<?php
Σελίδα | 137
4.5.17 Πξνζζήθε Βηβιίνπ
Κώδηθαο Φόξκαο
<form enctype="multipart/form-data" action="add_book.php" method="post">
Πρώηος Σσγγραθέας
Τπάξρσλ πγγξαθέαο
<b class="style12">1νο πγγξαθέαο:</b>
<p><input type="radio" name="author1" value="existing_author1" <?php if (isset($_POST['author1'])
&& ($_POST['author1'] == 'existing_author1') ) echo ' checked="checked"'; ?> />
Σελίδα | 138
if (isset($_POST['existing_author1']) && ($_POST['existing_author1'] ==
$row5['author_id']) ) echo ' selected="selected"';
echo "<option value=\"{$row5['author_id']}\">$aln $afn<option>";
}
}else{
echo '<option>Δηζαγσγή λένπ ζπγγξαθέα.</option>';
} ?>
</select>
</p>]
__________________________________________________________________________________________
Γεκηνπξγείηαη έλα ξαδηνπιήθηξν γηα ηελ επηινγή ηνπ ζπγγξαθέα απφ έλα πηπζζφκελν κελνχ. Με ην
εξψηεκα SELECT επηιέγνπκε ηα νλφκαηα ησλ ζπγγξαθέσλ ηα νπνία κεηαβηβάδνπκε ζην πηπζζφκελν
κελνχ. Δπίζεο ειέγρνπκε ην κηθξφ φλνκα ηνπ ζπγγξαθέα ψζηε αλ έρεη ηηκή „NULL‟ λα ηνπ δίλνπκε
«θελή» ηηκή. Σα ξαδηνπιήθηξα ηεο ίδηαο θαηεγνξίαο κπνξνχλ λα έρνπλ ην ίδην φλνκα, αθνχ θάζε
θνξά επηιέγεηαη έλα απφ απηά. ηε ζπγθεθξηκέλε θφξκα έρνπλ δηαθνξεηηθά νλφκαηα γηα ιφγνπο
επθνιίαο εθηέιεζεο ηνπ ζελαξίνπ.
Δεύηερος Σσγγραθέας
Τπάξρσλ πγγξαθέαο
<b class="style12">2νο πγγξαθέαο:</b>
<p><input type="radio" name="author2" value="existing_author2" <?php if (isset($_POST['author2'])
&& ($_POST['author2'] == 'existing_author2') ) echo ' checked="checked"'; ?> />
Σελίδα | 139
if ($r8)
{
while ($row6 = mysqli_fetch_array($r8, MYSQLI_ASSOC))
{
$afn2 = $row6['author2_fn'];
$aln2 = $row6['author2_ln'];
if ($afn2 == 'NULL')
{
$afn2 = NULL;
}
if (isset($_POST['existing_author2']) && ($_POST['existing_author2'] ==
$row6['author_id']) ) echo ' selected="selected"';
echo "<option value=\"{$row6['author_id']}\">$aln2 $afn2<option>";
}
}else{
echo '<option>Δηζαγσγή λένπ ζπγγξαθέα.</option>';
} ?>
</select>
</p>
Αλύπαξθηνο πγγξαθέαο
<p><input type="radio" name="author2" value="none" <?php if (isset($_POST['author2']) &&
($_POST['author2'] == 'none') ) echo ' checked="checked"'; ?> />
Κελό
_________________________________________________________________________________________
Ο δεχηεξνο ζπγγξαθέαο κπνξεί λα κελ ππάξρεη γη‟ απηφ ππάξρεη κηα ηξίηε επηινγή πνπ δίλεη ηηκή
NULL ζην κηθηφ φλνκα θαη ζην επψλπκν ηνπ δεχηεξνπ ζπγγξαθέα.
Εκδόηης
Τπάξρσλ Δθδόηεο
<b class="style12">Δθδόηεο:</b>
<p><input type="radio" name="editor" value="existing_editor" <?php if (isset($_POST['editor']) &&
($_POST['editor'] == 'existing_editor') ) echo ' checked="checked"'; ?> />
Σελίδα | 140
<?php
$q9 = "SELECT editor_id, editor_name FROM editors ORDER BY editor_name";
$r9 = mysqli_query ($dbc, $q9);
if ($r9)
{
while ($row7 = mysqli_fetch_array ($r9, MYSQLI_ASSOC))
{
if (isset($_POST['existing_editor']) && ($_POST['existing_editor'] ==
$row7['editor_id']) ) echo ' selected="selected"';
echo "<option value=\"{$row7['editor_id']}\">{$row7['editor_name']}<option>";
}
}else{
echo '<option>Δηζαγσγή λένπ εθδόηε.</option>';
}
?>
</select>
</p>
Νένο Δθδόηεο => Όλνκα Δθδόηε: <input type="text" name="editor_name" size="60" maxlength="60"
value="<?php if (isset($_POST['editor_name'])) echo $_POST['editor_name']; ?>" />
</p>
Καηηγορίες
Τπάξρσλ Καηεγνξία
<b class="style12">Καηεγνξία:</b>
<p><input type="radio" name="category" value="existing_category" <?php if
(isset($_POST['category']) && ($_POST['category'] == 'existing_category') ) echo ' checked="checked"';
?> />
Σελίδα | 141
?></select></p>
Τιμή Βιβλίοσ
<p><b class="style12">Σηκή:</b>
<input type="text" name="price" size="10" maxlength="10" value="<?php if (isset($_POST['price']))
echo $_POST['price']; ?>" />
<?php echo ' ';?>
<span class="stele4"><small>(Μελ αλαγξάθεηε ην ζήκα ηνπ λνκίζκαηνο.)</small></span></p>
ISBN
<p><b class="style12">ISBN:</b>
<input type="text" name="ISBN" size="15" maxlength="15" value="<?php if (isset($_POST['ISBN']))
echo $_POST['ISBN']; ?>" />
</p>
Checkboxes
<p><Input type = 'checkbox' Name ='ch1' value ="new" <?php print $ch1; ?> />
<b>Νέεο Κπθινθνξίεο</b>
</p>
<p><Input type = 'checkbox' Name ='ch2' value ="best" <?php print $ch2; ?> />
<b>Best Sellers</b>
</p>
<p><Input type = 'checkbox' Name ='ch3' value ="sug" <?php print $ch3; ?> />
<b>Πξνηεηλόκελα Βηβιία</b></p>
Περιγραθή
Button
</form>
Σελίδα | 142
ελάξην PHP (add_book.php)
<?php
$ch1 = $ch2 = $ch3 = FALSE;
$bn = $p = $isbn = $d = FALSE;
$afn = $aln = $afn2 = $aln2 = $a = $a_id = $a_id2 = FALSE;
$edn = $ed_id = FALSE;
$catn = $cat_id = FALSE;
$temp_bn = $temp_sn = $img_sn = $img_bn = FALSE;
if(isset($_POST['added']))
{
$errors = array();
if (empty($_POST['book_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηνλ ηίηιν ηνπ βηβιίνπ';
}else{
$bn = trim($_POST['book_name']);
}
/*---------------------------------------------------------------------------------------------------------------- */
if (is_uploaded_file($_FILES['image_small']['tmp_name']))
{
$temp_sn = 'C:/xampp/htdocs/site_bookstore/includes/books
images'.md5($_FILES['image_small']['name']);
if (move_uploaded_file($_FILES['image_small']['tmp_name'], $temp_sn))
{
$img_sn = $_FILES['image_small']['name'];
}else{
$errors[] = 'H εηθόλα δελ κπόξεζε λα κεηαθεξζεί';
$temp_sn = $_FILES['image_small']['tmp_name'];
}
}else{
$errors[] = 'Αλεπηηπρήο αλέβαζκα αξρείνπ';
$temp_sn = NULL;
}
____________________________________________________________________________________
Ζ ζπλάξηεζε is_uploaded_file() επηζηξέθεη ηηκή TRUE αλ αλέβεθε θάπνην αξρείν θαη ηηκή FALSE
αλ φρη. Αλ αλέβεθε θάπνην αξρείν ην ζελάξην ζα επηρεηξήζεη λα ην κεηαθέξεη ζηνλ θαηάινγν books
images. ε πεξίπησζε επηηπρίαο ζα αλαηεζεί ζηελ κεηαβιεηή $img_sn ην φλνκα ηνπ αξρείνπ. Γηα
ιφγνπο αζθαιείαο δεκηνπξγείηαη έλα πξνζσξηλφ φλνκα γηα ην αξρείν πνπ θξππηνγξαθείηαη
θαηάιιεια κε ηελ ζπλάξηεζε md5().
/*---------------------------------------------------------------------------------------------------------------- */
if (is_uploaded_file($_FILES['image_big']['tmp_name']))
{
$temp_bn = 'C:/xampp/htdocs/site_bookstore/includes/books
images'.md5($_FILES['image_big']['name']);
if (move_uploaded_file($_FILES['image_big']['tmp_name'], $temp_bn))
{
Σελίδα | 143
$img_bn = $_FILES['image_big']['name'];
}else{
$errors[] = 'H εηθόλα δελ κπόξεζε λα κεηαθεξζεί';
$temp_bn = $_FILES['image_big']['tmp_name'];
}
}else{
$errors[] = 'Αλεπηηπρήο αλέβαζκα αξρείνπ';
$temp_bn = NULL;
}
/*---------------------------------------------------------------------------------------------------------------- */
if (empty($_POST['price']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηελ ηηκή ηνπ βηβιίνπ';
}else{
$p = trim($_POST['price']);
}
/*---------------------------------------------------------------------------------------------------------------- */
if (empty($_POST['ISBN']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ηνλ ISBN θσδηθό.';
}else{
$isbn = trim($_POST['ISBN']);
}
/*---------------------------------------------------------------------------------------------------------------- */
if (empty($_POST['description']))
{
$d = NULL;
}else{
$d = trim($_POST['description']);
}
/*---------------------------------------------------------------------------------------------------------------- */
$ch1 = 'unchecked';
if (isset($_POST['ch1']) && ($_POST['ch1'] == 'new'))
{
$ch1 = 'checked';
$new_b = 1;
}else{
$new_b = 0;
}
$ch2 = 'unchecked';
if (isset($_POST['ch2']) && ($_POST['ch2'] == 'best'))
{
$ch2 = 'checked';
$best_b = 1;
}else{
$best_b = 0;
Σελίδα | 144
}
$ch3 = 'unchecked';
if (isset($_POST['ch3']) && ($_POST['ch3'] == 'sug'))
{
$ch3 = 'checked';
$sug_b =1;
}else{
$sug_b =0;
}
____________________________________________________________________________________
Αλ ν δηαρεηξηζηήο επηιέμεη θάπνην απφ ηα checkboxes νη κεηαβιεηέο ζα πάξνπλ ηελ ηηκή 1, αιιηψο ζα
ηνπο εθρσξεζεί κεδεληθή ηηκή. Αλαζέηνπκε ζηηο κεηαβιεηέο ηηο ζπγθεθξηκέλεο ηηκέο ιφγσ ησλ ηηκψλ
πνπ δέρνληαη νη ηξείο ζηήιεο new_book, best_book θαη sug_book ηνπ πίλαθα books, ηεο βάζεο
δεδνκέλσλ
/*---------------------------------------------------------------------------------------------------------------- */
if (isset($_POST['author1']) && ($_POST['author1'] == 'new_author1'))
{
_________________________________________________________________________________________
Αλ ν δηαρεηξηζηήο επηιέμεη λα εηζάγεη ην φλνκα ηνπ πξψηνπ ζπγγξαθέα ζηε βάζε δεδνκέλσλ.
if (empty($_POST['author2_ln']))
{
$aln2 = 'NULL';
}else{
$aln2 = trim($_POST['author2_ln']);
}
_________________________________________________________________________________________
Αλ ν δηαρεηξηζηήο επηιέμεη λα εηζάγεη ην φλνκα ηνπ δεχηεξνπ ζπγγξαθέα ζηε βάζε δεδνκέλσλ
ειέγρνπκε αλ έρεη δψζεη ηηκέο ζηα πεδία ηεο θφξκαο θαη έπεηηα εθρσξνχκε ηελ ηηκέο ζηηο αληίζηνηρεο
κεηαβιεηέο
Σελίδα | 145
$aln2 = $row['author2_ln'];
_________________________________________________________________________________________
Αλ ν δηαρεηξηζηήο επηιέμεη ηνλ δεχηεξν ζπγγξαθέα απφ ην πηπζζφκελν κελνχ εθρσξνχκε ηνλ θσδηθφ
ηνπ ζπγγξαθέα ζηελ κεηαβιεηή $a_id. Έπεηηα κέζσ ηνπ θσδηθνχ επηιέγνπκε ην κηθξφ φλνκα θαη ην
επψλπκν ηνπ ζπγθεθξηκέλνπ ζπγγξαθέα απφ ηελ βάζε δεδνκέλσλ ηα νπoία απνζεθεχνληαη ζηηο
κεηαβιεηέο $afn2 θαη $aln2.
}else{
$errors[] = 'Παξαθαινύκε εηζάγεηε ή επηιέμηε ηνλ 2ν ζπγγξαθέα.';
}
if (empty($_POST['author_fn']))
{
$afn = 'NULL';
}else{
$afn = trim($_POST['author_fn']);
}
_________________________________________________________________________________________
Διέγρνπκε αλ ν δηαρεηξηζηήο έρεη εηζάγεη ην κηθξφ φλνκα ηνπ πξψηνπ ζπγγξαθέα ζην πεδίν ηεο
θφξκαο. Αλ λαη απνζεθεχεηαη ζηε κεηαβιεηή $afn , αιιηψο ε κεηαβιεηή παίξλεη ηελ ηηκή “NULL”.
if (empty($_POST['author_ln']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην επώλπκν ηνπ ζπγγξαθέα';
}else{
$aln = trim($_POST['author_ln']);
$q2 = "INSERT INTO authors (author_fn, author_ln, author2_fn, author2_ln)
VALUES (?, ?, ?, ?)";
$stmt = mysqli_prepare($dbc, $q2);
mysqli_stmt_bind_param($stmt, 'ssss', $afn, $aln, $afn2, $aln2);
mysqli_stmt_execute($stmt);
if ($stmt)
{
$a = mysqli_insert_id($dbc);
}else{
$errors[] = 'Ο λένο ζπγγξαθέαο δελ έρεη πξνζηεζεί ζηε βάζε δεδνκέλσλ.';
}
mysqli_stmt_close($stmt);
}
_________________________________________________________________________________________
Σελίδα | 146
Σν επψλπκν ηνπ πξψηνπ ζπγγξαθέα δελ κπνξεί λα έρεη ηηκή “NULL” γη‟ απηφ αλ ν δηαρεηξηζηήο δελ
δψζεη θάπνηα ηηκή θαηαρσξείηαη έλα ζρεηηθφ κήλπκα ζηνλ πίλαθα ζθαικάησλ. ε άιιε πεξίπησζε
εθηεινχκε έλα εξψηεκα εηζαγσγήο ζηνηρείσλ ζηε βάζε δεδνκέλσλ. Ζ εηζαγσγή γίλεηαη κε ηελ ρξήζε
έηνηκσλ εληνιψλ γηα ιφγνπο αζθαιείαο θαη θαιχηεξεο απφδνζεο.. Όηαλ δελ ρξεζηκνπνηνχληαη
έηνηκεο εληνιέο, νιφθιεξν ην εξψηεκα κε, καδί κε ηελ ζχληαμε ηεο SQL, θαη ηηο ζπγθεθξηκέλεο ηηκέο
ζηέιλεηαη ζηελ MySQL ε νπνία αλαιχεη ζπληαθηηθά ην εξψηεκα θαη ην εθηειεί. Με έλα έηνηκν
εξψηεκα πξψηα ζηέιλεηαη ε ζχληαμε ηεο SQL ζηε MySQL γηα λα αλαιπζεί ε νξζφηεηά ηνπ θαη
έπεηηα ζηέιλνληαη μερσξηζηά νη ηηκέο. Ζ MySQL ζπλαξκνινγεί ην εξψηεκα κε απηέο ηηο ηηκέο θαη ην
εθηειεί. Αλ ην εξψηεκα εθηειεζηεί ζσζηά ζηελ κεηαβιεηή $a απνζεθεχεηαη ν θσδηθφο ηνπ
ζπγγξαθέα γηα λα πξνζηεζεί ζηελ ζπλέρεηα ζηνλ πίλαθα books.
/*---------------------------------------------------------------------------------------------------------------- */
Σελίδα | 147
if ($stmt)
{
$a = mysqli_insert_id($dbc);
}else{
$errors[] = 'Ο λένο ζπγγξαθέαο δελ έρεη πξνζηεζεί ζηε βάζε δεδνκέλσλ.';
}
mysqli_stmt_close($stmt);
_________________________________________________________________________________________
Αλ ν δηαρεηξηζηήο επηιέμεη λα εηζάγεη ην φλνκα ηνπ δεχηεξνπ ζπγγξαθέα ζηε βάζε δεδνκέλσλ
ειέγρνπκε αλ έρεη δψζεη ηηκέο ζηα πεδία ηεο θφξκαο . Αλ λαη νη ηηκέο απνζεθεχνληαη ζηηο κεηαβιεηέο
$afn2 θαη $aln , αιιηψο νη κεηαβιεηέο παίξλνπλ ηελ ηηκή “NULL”. Έπεηηα γίλεηαη ε εηζαγσγή ησλ
νλνκάησλ ζηε βάζε δεδνκέλσλ κέζσ έηνηκσλ εληνιψλ.
if ($stmt)
{
$a = mysqli_insert_id($dbc);
}else{
$errors[] = 'Ο λένο ζπγγξαθέαο δελ έρεη πξνζηεζεί ζηε βάζε δεδνκέλσλ.';
}
mysqli_stmt_close($stmt);
________________________________________________________________________________________
Αλ ν δηαρεηξηζηήο επηιέμεη ηνλ δεχηεξν ζπγγξαθέα απφ ην πηπζζφκελν κελνχ εθρσξνχκε ηνλ θσδηθφ
ηνπ ζπγγξαθέα ζηελ κεηαβιεηή $a_id2. Έπεηηα κέζσ ηνπ θσδηθνχ επηιέγνπκε ην κηθξφ φλνκα θαη ην
επψλπκν ηνπ ζπγθεθξηκέλνπ ζπγγξαθέα απφ ηελ βάζε δεδνκέλσλ ηα νπoία απνζεθεχνληαη ζηηο
κεηαβιεηέο $afn2 θαη $aln2. Σν εξψηεκα εηζαγσγήο εθηειείηαη κε ηνλ ίδην ηξφπν απνζεθεχνληαο ηα
ζηνηρεία ηνπ ζπγγξαθέα ζηελ βάζε δεδνκέλσλ.
Σελίδα | 148
$r = mysqli_query ($dbc, $q);
$row2 = mysqli_fetch_array($r, MYSQLI_ASSOC);
$a = $row2['author_id'];
_________________________________________________________________________________________
Αλ ν δηαρεηξηζηήο επηιέμεη λα κελ εηζάγεη δεχηεξν ζπγγξαθέα ζηε βάζε δεδνκέλσλ δίλνπκε ζηηο
κεηαβιεηέο $afn2 θαη $aln2 ηηκή “NULL”. Έπεηηα αλαθηάκε απφ ηελ βάζε δεδνκέλσλ ηνλ θσδηθφ
ηνπ πξψηνπ ζπγγξαθέα πνπ επέιεμε ν δηαρεηξηζηήο απφ ην πηπζζφκελν κελνχ.
}else{
$errors[] = 'Παξαθαινύκε εηζάγεηε ή επηιέμηε ηνλ 2ν ζπγγξαθέα.';
}
}else{
$errors[] = 'Παξαθαινύκε εηζάγεηε ή επηιέμηε ηνλ 1ν ζπγγξαθέα.';
}
/*---------------------------------------------------------------------------------------------------------------- */
if (isset($_POST['editor']) && ($_POST['editor'] == 'new_editor'))
{
if (empty($_POST['editor_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην όλνκα ηνπ εθδόηε';
}else{
$edn = trim($_POST['editor_name']);
if ($stmt2)
{
$ed_id = mysqli_insert_id($dbc);
}else{
$errors[] = 'Ο λένο εθδόηεο δελ έρεη πξνζηεζεί ζηε βάζε δεδνκέλσλ.';
}
mysqli_stmt_close($stmt2);
}
}elseif (isset($_POST['editor']) && ($_POST['editor'] == 'existing_editor') &&
($_POST['existing_editor'] > 0)){
$ed_id = (int) $_POST['existing_editor'];
}else{
$errors[] = 'Παξαθαινύκε εηζάγεηε ή επηιέμηε ηνλ εθδόηε.';
}
________________________________________________________________________________________
Αλ ν δηαρεηξηζηήο επηιέμεη λα εηζάγεη ην φλνκα ηνπ εθδφηε ζηε βάζε δεδνκέλσλ ειέγρνπκε αλ έρεη
εθρσξήζεη ηηκή ζην πεδίν ηεο θφξκαο . Αλ λαη γίλεηαη ε είζνδνο ησλ δεδνκέλσλ ζηε βάζε κέζσ ηνπ
Σελίδα | 149
εξσηήκαηνο INSERT. Αλ ν δηαρεηξηζηήο επηιέμεη ηνλ εθδφηε απφ ην πηπζζφκελν κελνχ εθρσξνχκε
ηνλ θσδηθφ ηνπ εθδφηε ζηελ κεηαβιεηή $ed_id.
/*---------------------------------------------------------------------------------------------------------------- */
if (isset($_POST['category']) && ($_POST['category'] == 'new_category'))
{
if (empty($_POST['category_name']))
{
$errors[] = 'Παξαθαινύκε ζπκπιεξώζηε ην όλνκα ηεο θαηεγνξίαο.';
}else{
$catn = trim($_POST['category_name']);
if ($stmt3)
{
$cat_id = mysqli_insert_id($dbc);
}else{
$errors[] = 'Ο λέα θαηεγνξία δελ έρεη πξνζηεζεί ζηε βάζε δεδνκέλσλ.';
}
mysqli_stmt_close($stmt3);
}
}elseif (isset($_POST['category']) && ($_POST['category'] == 'existing_category') &&
($_POST['existing_category'] > 0)){
$cat_id = (int) $_POST['existing_category'];
}else{
$errors[] = 'Παξαθαινύκε εηζάγεηε ή επηιέμηε ηελ θαηεγνξία.';
}
/*---------------------------------------------------------------------------------------------------------------- */
if (empty($errors))
{
$q6 = "INSERT INTO books (author_id, editor_id, category_id, book_name, price, ISBN,
description, image_name_small, image_name_big, new_book, best_book, sug_book) VALUES
('$a', '$ed_id', '$cat_id', '$bn', '$p', '$isbn', '$d', '$img_sn', '$img_bn', '$new_b', '$best_b',
'$sug_b')";
$r6 = mysqli_query($dbc, $q6);
if (mysqli_affected_rows($dbc) == 1)
{
echo '<p>Σν βηβιίν έρεη θαηαρσξεζεί.</p>';
Σελίδα | 150
}
_______________________________________________________________________________________
Αλ ην κεηξψν $errors είλαη θελφ, ηφηε φινη νη έιεγρνη επηθχξσζεο ήηαλ επηηπρείο θαη ην βηβιίν κπνξεί
λα πξνζηεζεί ζηελ βάζε δεδνκέλσλ. Δπίζεο, πξέπεη λα κεηνλνκαζηνχλ νη εηθφλεο πνπ βξίζθνληαη
ζηνλ θάθειν books images, αιιά κε πξνζσξηλφ φλνκα. Σέινο θαζαξίδεηαη ην κεηξψν $_POST ψζηε
νη ηηκέο ηνπ λα εκθαληζηνχλ ζηελ παξακέλνπζα θφξκα.
/*---------------------------------------------------------------------------------------------------------------- */
if (isset($temp_sn) && file_exists($temp_sn) && is_file($temp_sn))
{
if (isset($temp_bn) && file_exists($temp_sn) && is_file($temp_bn))
{
unlink ($temp_sn);
unlink ($temp_bn);
}
}
}//end added
_________________________________________________________________________________________
Γηαγξάθνπκε ηα αξρεία πνπ βξίζθνληαη ζην δηαθνκηζηή, επεηδή δελ έρνπλ απνθηήζεη κφληκε φλνκα
θαη ζέζε.
if (!empty($errors)
{
foreach ($errors as $msg)
{
echo "$msg<br />\n";
}
}
?>
Σελίδα | 151
ηηο ηνπνζεζίεο ειεθηξνληθνχ εκπνξίνπ ππάξρνπλ ηέζζεξα δεηήκαηα αζθαιείαο. Σν πξψην
αθνξά ζηνλ ηξφπν απνζήθεπζεο ησλ δεδνκέλσλ ζην δηαθνκηζηή. Πξέπεη λα πξνζηαηεχεηαη ε ίδηα ε
βάζε δεδνκέλσλ θαζνξίδνληαο ηα αλάινγα δηθαηψκαηα πξφζβαζεο θαη ηνλ θαηάινγν φπνπ
απνζεθεχνληαη νη πιεξνθνξίεο ηεο πεξηφδνπ εξγαζίαο. Ζ ρξήζε ηνπ κε θνηλφρξεζηνπ ππνινγηζηή
ππεξεζίαο βειηηψλεη ηελ αζθάιεηα ηεο ηνπνζεζίαο.
Σν δεχηεξν δήηεκα αζθαιείαο αθνξά ηελ πξνζηαζία ηεο πξφζβαζεο ζε επαίζζεηεο
πιεξνθνξίεο. Ο δηαρεηξηζηήο ηεο ηνπνζεζίαο, πνπ έρεη ηελ δπλαηφηεηα λα βιέπεη ηηο εγγξαθέο
πειαηψλ, πξέπεη λα πξνζηαηεχεηαη ζην πςειφηεξν επίπεδν. Απηφ ζεκαίλεη ηελ απαίηεζε
πηζηνπνίεζεο ηαπηφηεηαο γηα ηελ πξφζβαζε, ηνλ πεξηνξηζκφ απηψλ πνπ ζα γλσξίδνπλ ηηο
πιεξνθνξίεο πξφζβαζεο, ηελ ρξήζε αζθαιψλ ζπλδέζεσλ θ.α.
Σν ηξίην δήηεκα αθνξά ηελ πξνζηαζία ησλ δεδνκέλσλ θαηά ηελ κεηάδνζε. Πξέπεη λα
ρξεζηκνπνηνχληαη αζθαιείο ζπλαιιαγέο φπνπ ρξεηάδνληαη αξηζκνί πηζησηηθψλ θαξηψλ. Απηφ
ζπλεπάγεηαη ηελ εγθαηάζηαζε Δπηπέδνπ αζθαιψλ ππνδνρψλ (Security Sockets Layer – SSL) ζην
δηαθνκηζηή κε έλα έγθπξν πηζηνπνηεηηθφ θαη, ζηε ζπλέρεηα, ηε ρξήζε ηνπ πξνηχπνπ https:// ζηηο
δηεπζχλζεηο URL. Δπίζεο, ρξεηάδεηαη ν έιεγρνο ησλ πιεξνθνξηψλ πνπ δηαθηλνχληαη κέζσ
ειεθηξνληθνχ ηαρπδξνκείνπ, επεηδή ηα κελχκαηα απηά δελ δηαθηλνχληαη έζσ αζθαιψλ δηαδξνκψλ.
Σν ηέηαξην δήηεκα αθνξά ηνλ ρεηξηζκφ ησλ ζηνηρείσλ πιεξσκήο. ε θακία πεξίπησζε δελ
πξέπεη λα δηαηεξνχληαη ηα ζηνηρεία απηά ζηελ ηνπνζεζία. Ζ ηδαληθή ιχζε είλαη ε αλάζεζε ησλ
πιεξσκψλ ζε ηξίην πξφζσπν.
Σα δχν πξψηα βήκαηα είλαη εχθνια ζηελ πινπνίεζή ηνπο. Σα πεξηζζφηεξα δεδνκέλα πνπ
ρξεηάδνληαη γηα ην δεχηεξν βήκα είλαη απνζεθεπκέλα ζην πίλαθα users κεηά απφ ηελ εγγξαθή ηνπ
ρξήζηε. Σν ηξίην βήκα είλαη πην δχζθνιν. Οη ιεπηνκέξεηεο πνηθίινπλ, αλάινγα κε ηνλ ηξφπν
ρεηξηζκνχ ηεο ρξέσζεο θαη πνηνο ηελ θάλεη. Αθφκε πην πνιχπινθα γίλνληαη ηα πξάγκαηα ιφγσ ησλ
δηαθνξψλ ζηε λνκνζεζία αλ ην πξνο πψιεζε πξντφλ πξφθεηηαη λα ζηαιεί αξγφηεξα ή λα παξαδνζεί
ακέζσο
(φπσο έλα αξρείν πνπ ν ρξήζηεο κπνξεί λα θαηεβάζεη).
Οη πεξηζζφηεξεο ηνπνζεζίεο ειεθηξνληθνχ εκπνξίνπ αλαζέηνπλ ηηο ρξεκαηηθέο ζπλαιιαγέο ζε
θάπνην ηξίην κέξνο. Απηφ πεξηιακβάλεη ηελ απνζηνιή ησλ ζηνηρείσλ ρξέσζεο, ηελ ζπλνιηθή αμία ηεο
παξαγγειίαο θαη ελφο αξηζκνχ θαηαζηήκαηνο (πνπ δείρλεη ηελ ίδηα ηελ ηνπνζεζία ειεθηξνληθνχ
εκπνξίνπ) ζε θάπνηα άιιε ηνπνζεζία. Απηή ε ηνπνζεζία ζα ρεηξίδεηαη ηε δηαδηθαζία ρξέσζεο ηνπ
πειάηε θαη πίζησζεο ηνπ θαηαζηήκαηνο. Σν κέξνο πνπ αλαιακβάλεη ηνλ ρεηξηζκφ ηεο παξαγγειίαο
παξέρεη ζηνλ θαηαζθεπαζηή ηεο ηνπνζεζίαο ειεθηξνληθνχ εκπνξίνπ ηνλ απαξαίηεην θσδηθφ θαη
νδεγίεο γηα ηελ αιιειεπίδξαζε κε ην δηθφ ηνπ ζχζηεκα.
Σελίδα | 152
ΚΔΦΑΛΑΙΟ 5: ΑΠΟΣΔΛΔΜΑΣΑ
5.1 πκπεξάζκαηα
Γηα λα είλαη νη ηζηνζειίδεο ηνπ Παγθφζκηνπ Ηζηνχ πην ειθπζηηθέο πξέπεη ε δηακφξθσζή ηνπο
λα πεξηέρεη δηάθνξα γξαθηθά, λα ελεκεξψλνληαη ζπρλά θαη λα πξνζαξκφδνληαη ζηηο αλάγθεο ησλ
ρξεζηψλ. Γηα ηνπο ρξήζηεο νη ηζηνζειίδεο κνηάδνπλ ζαλ θνηλφηεηεο πνπ επηζθέπηνληαη ζπρλά. Όζν
γηα ηνπο δηαρεηξηζηέο πξέπεη λα ελεκεξψλνπλ θαη λα ζπληεξνχλ ζπρλά ηηο ηνπνζεζίεο γηα λα
δηαηεξήζνπλ ην ελδηαθέξνλ ησλ ρξεζηψλ. Γηα ηνπο ιφγνπο απηνχο, αιιά θαη άιινπο, ε PHP θαη
MySQL έρνπλ γίλεη πξφηππα γηα ηελ δεκηνπξγία δπλακηθψλ ηνπνζεζηψλ. Ο βαζκφο ελνπνίεζήο ηνπο
είλαη έλαο αθφκα ιφγνο πνπ νη ζρεδηαζηέο ηζηνζειίδσλ ηηο πξνηηκνχλ.
Με ηελ ρξήζε ηεο PHP ν δηαθνκηζηήο κπνξεί λα παξαθνινπζεί ηηο δηεξγαζίεο πνπ εθηειεί ν
ρξήζηεο κέζσ δχν εξγαιείσλ πνπ δηαζέηεη ε γιψζζα απηή: ηα κπηζθφηα (cookies) θαη ηηο πεξηφδνπο
εξγαζίαο (sessions). Μηα επηπιένλ δπλαηφηεηα πνπ καο πξνζθέξεη ε PHP είλαη ν ρεηξηζκφο ησλ
ζθαικάησλ. Ο ρεηξηζκφο ησλ ζθαικάησλ πξέπεη λα ππάξρεη ζε κηα ηζηνζειίδα, αιιά είλαη νπηνπηθφ
λα λνκίδνπκε φηη δελ ζα γίλνπλ ιάζε. Τπάξρνπλ φκσο ηερληθέο εληνπηζκνχ, ρεηξηζκνχ θαη εμάιεηςεο
ησλ ζθαικάησλ νη νπνίεο ζίγνπξα ηα ειαρηζηνπνηνχλ. Μηα απφ απηέο ηηο ηερληθή ρεηξηζκνχ ησλ
ζθαικάησλ είλαη νη θαλνληθέο παξαζηάζεηο Perl κε ηηο νπνίεο εηζάγνπκε ηελ ηαπηνπνίεζε ησλ
κνηίβσλ ζηνθ θψδηθά καο. Πξψηα γξάθνπκε ην κνηίβν θαη έπεηηα ην εθαξκφδνπκε ζε κηα ηηκή
(ζπκβνινζεηξά).
Όζνλ αθνξά ηηο δπλακηθέο ηνπνζεζίεο πξνηηκνχληαη απφ ηηο ζηαηηθέο γηα ην ιφγν φηη
ζπληεξνχληαη πην εχθνια, κπνξνχλ λα αιιειεπηδξνχλ κε ην ρξήζηε, θαη ην πεξηερφκελφ ηνπο
ηξνπνπνηείηαη αλάινγα ηηο ζπλζήθεο.
Δπίζεο, ε αζθάιεηα ησλ εθαξκνγψλ είλαη έλα πνιχ κεγάιν θεθάιαην, αιιά απηφ πνπ πξέπεη
πξψηα λα θαηαλνήζνπκε είλαη φηη δελ ππάξρνπλ κφλν δχν θαηαζηάζεηο – αζθαιήο θαη κε αζθαιήο.
Όηαλ πξνγξακκαηίδνπκε πξέπεη λα ζθεθηφκαζηε ηη κεζφδνπο ζα ρξεζηκνπνηήζνπκε γηα λα γίλεη ε
ηνπνζεζία πεπιζζόηεπο αζθαιήο. Γηα λα απμήζεη ν δηαθνκηζηήο ηελ αζθάιεηα ηεο ηζηνζειίδαο
ρξεηάδεηαη πεξηζζφηεξνο θψδηθαο, κεγαιχηεξνο έιεγρνο θαη πεξηζζφηεξεο απαηηήζεηο απφ ηνπο
ρξήζηεο.
Σέινο, γηα ην ειεθηξνληθφ εκπφξην ν ηξφπνο δηαρείξηζεο ησλ ρξεκάησλ εμαξηάηαη πάληα απφ
ηελ ζπγθεθξηκέλε ηνπνζεζία. Γη‟ απηφ θαη ε ηζηνζειίδα πνπ δεκηνπξγήζεθε επηθεληξψλεηαη ζηηο
βαζηθέο ιεηηνπξγίεο κηαο ηνπνζεζίαο ειεθηξνληθνχ εκπνξίνπ (ζρεδίαζε βάζεο δεδνκέλσλ,
ζπκπιήξσζε ηνπ θαηαιφγνπ πξντφλησλ απφ ηνλ δηαρεηξηζηή, παξνπζίαζε ησλ πξντφλησλ ζηνπο
ρξήζηεο, δεκηνπξγία θαιαζηνχ αγνξάο θαη απνζήθεπζε ησλ παξαγγειηψλ ζηε βάζε δεδνκέλσλ.
Σελίδα | 153
Πξνηάζεηο γηα παξφκνηα βηβιία: Όηαλ ν ρξήζηεο επηζθέπηεηαη ηελ ζειίδα ελφο βηβιίνπ ζα
κπνξνχζε ν δηαρεηξηζηήο λα ηνπ πξνηείλεη παξφκνηα βηβιία πνπ ίζσο λα ηνλ ελδηέθεξε λα
δηαβάζεη.
Γεκηνπξγία ηζηνξηθνχ ηνπ ζπγγξαθέα: Ο ρξήζηεο ζα κπνξνχζε λα έρεη πξφζβαζε ζηελ
βηνγξαθία ηνπ εθάζηνηε ζπγγξαθέα έηζη ψζηε λα ελεκεξσλφηαλ θαη γηα άιια βηβιία ηνπ έρεη
γξάςεη.
Σελίδα | 154
ΒΙΒΛΙΟΓΡΑΦΙΑ
1. Υξήζηνο Γηνπξηίδεο, “Οδεγφο Δπηηπρίαο γηα ην δήπισκα ECDL 4”.
Κιαηδάξηζκνο, 2ε Έθδνζε, 2005.
2. Γθηκπεξίηεο Βαγγέιεο, “INTERNET ΟΓΖΓΟ ΓΗΑ ΟΛΟΤ”.
Α. ΣΕΗΟΛΑ Δ., 3ε Έθδνζε, 1999.
3. Noel Estabrook. “Μάζεηε ην Internet ζε 24 ψξεο”.
Μ. Γθηνχξδαο, 1ε Ακεξηθαληθή Έθδνζε, 1997.
4. Wikipedia, the free encyclopedia (en.wikipedia.org θαη el.wikipedia.org).
5. MySQL, the world‟s most popular open source database (www.mysql.com).
6. PHP, Hypertext Preprocessor (www.php.net).
7. LARRY ULLMAN, “ΔΗΑΓΧΓΖ ΣΗ PHP 6 & MYSQL 5 ΜΔ ΔΗΚΟΝΔ”.
Κιεηδάξηζκνο, 3ε Έθδνζε, 2009.
8. ΚΟΤΗΜΣΕΟΓΛΟΤ ΛΑΜΠΡΟ, “ΓΤΝΑΜΗΚΖ ΔΚΜΑΘΖΖ DREAMWEAVER CS3”.
Γθηνχξδαο Β., Έθδνζε κε DVD, 2008.
9. Meloni Julie, “Μάζεηε PHP, MYSQL θαη Apache”.
Μ. Γθηνχξδαο, 4ε Έθδνζε, 2008.
10. Ned Snell, Bob Temple, T. Michael Clark, “Μάζεηε ην Internet θαη Web”.
Μ. Γθηνχξδαο, εηξά: Όια ζε Έλα, 2004.
Σελίδα | 155
ΠΑΡΑΡΣΗΜΑΣΑ
ΠΑΡΑΡΣΗΜΑ Α
Οδεγίεο Δγθαηάζηαζεο
ΠΑΡΑΡΣΗΜΑ Β
DreamWeaver CS3
MYSQL
Photoshop CS3
Flash CS3
phpMyAdmin
Σελίδα | 156