...

Τεχνολογικό Εκπαιδευτικό Ίδρυµα Κρήτης ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΘΕΜΑ

by user

on
Category: Documents
31

views

Report

Comments

Transcript

Τεχνολογικό Εκπαιδευτικό Ίδρυµα Κρήτης ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΘΕΜΑ
Τεχνολογικό Εκπαιδευτικό Ίδρυµα Κρήτης
Σχολή Τεχνολογικών Εφαρμογών
Τµήµα Εφαρµοσµένης Πληροφορικής & Πολυµέσων
ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ
ΘΕΜΑ
«On-Iine σύστηµα για την διαχείριση µιας ναυτιλιακής εταιρείας»
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ. 1192
Επιβλέπων καθηγητής: Παπαδάκης Νικόλαος
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 1
ΗΡΑΚΛΕΙΟ 2012
Ευχαριστίες
Με την ολοκλήρωση της πτυχιακής μας εργασίας θα θέλαμε να ευχαριστήσουμε όλους όσους µας βοήθησαν για την πολύτιµη στήριξή τους. Κυρίως οφείλουμε να ευχαριστήσουμε τον επιβλέποντα καθηγητή μας κ. Παπαδάκη Νικόλαο ο οποίος μας στήριξε και για
την καθοδήγησή του καθ’ όλη τη διάρκεια της πτυχιακής εργασίας. Τέλος, οφείλουμε να αφιερώσουμε την πτυχιακή μας εργασία στις οικογένειες μας και σε όλους εκείνους που ήταν δίπλα μας σε όλη αυτή την προσπάθεια μας αλλά και όλα τα χρόνια της φοίτησης μας παρέχοντας μας στήριξη και απεριόριστη κατανόηση.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 2
Σύνοψη
Σκοπός της πτυχιακής αυτής είναι η δημιουργία μιας δυναμικής διαδικτυακής εφαρμογής για την λειτουργία και τη διαχείριση μίας ναυτιλιακής εταιρείας. Η εφαρμογή
‘ΚΑΡΥΑΤΙΣ’ διαχειρίζεται με μεγάλη ευκολία την διαδικασία κράτησης μιας θέσεως για ένα
δρομολόγιο αλλά και την άμεση ενημέρωση των πινάκων της βάσης δεδομένων που αφορούν
μια κίνηση όπως είναι η εισαγωγή, η ανανέωση, η διαγραφή κτλ. Επίσης η εφαρμογή είναι
για πολλούς χρήστες (πελάτες, τουριστικούς πράκτορες και διαχειριστές).
Οι κύριες τεχνολογίες που χρησιμοποιήσαμε είναι η HTML, η PHP και η JavaScript
για την ανάπτυξη της ιστοσελίδας μας και η SQL για την διαχείριση της βάσης δεδομένων.
Επίσης για την υλοποίηση της εφαρμογής αυτής χρησιμοποιήθηκαν διάφορα λογισμικά τα
οποία συνδυάστηκαν για την επίτευξη του τελικού αποτελέσματος. Τα λογισμικά αυτά είναι
ελεύθερα προς χρήση στο ευρύ κοινό και βρίσκονται πολύ εύκολα στο διαδίκτυο. Τα λογισμικά αυτά είναι: EasyPHP 1.8 και Adobe Dreamweaver CS4.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 3
Abstract
The purpose of this thesis is to create a dynamic web application in order to handle the
operation and the management of a shipping company. The application 'KARYATIS' is able
to execute with ease the process of booking a ticket on a route and the immediate updating of
the database tables on a motion as import, update, delete, etc. Additionally, the application is
for multiple users (customers, agents and tour operators).
The main technologies used are HTML, PHP and JavaScript to develop our website
and SQL for database management. Also for the implementation of this application we used
various software programs which were combined to achieve the final result. Those software
programs are free for use by the general public and are very easily found in web. Those software programs are: EasyPHP 1.8 and Adobe Dreamweaver CS4.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 4
Πίνακας Περιεχομένων
Ευχαριστίες……………………………………………………………………………….. 2
Σύνοψη…………………………………………………………………………………….. 3
Abstract……………………………………………………………………………………. 4
1º Κεφάλαιο…………………………………………………….………………………….. 9
1.1 Εισαγωγή…………………………………………………………………………… 9
1.2 Περίληψη…………………………………………………………………………… 9
1.3 Κίνητρο για την διεξαγωγή της εργασίας……………………………………….….. 9
1.4 Σκοπός και στόχοι της εργασίας……………………………………………………. 9
1.5 Δομή εργασίας……………………………………………………………………... 10
2º Κεφάλαιο…………………………………………………….………………………….. 11
2.1 Στατικές Ιστοσελίδες………………………………………………………………. 11
2.2 Δυναμικές Ιστοσελίδες…………………………………………………………….. 11
2.3 HTML……………………………………………………………………………… 12
2.3.1 Τι είναι η HTML…………………………………………………………… 12
2.3.2 HTML Elements……………………………………………………………. 13
2.3.3 HTML Forms………………………………………………………………... 14
2.3.3.1 Πεδία κειμένου……………………………………………………………14
2.3.3.2 Πεδίο κωδικού πρόσβασης……………………………………………….14
2.3.3.3 Κουτιά επιλογής (Checkboxes)…………………………………………. .14
2.3.3.4 Κουμπιά Υποβολής (Submit Buttons)……………………………………15
2.3.3.5 Λίστες με προεπιλεγμένη τιμή (Drop down lists)………………………...15
2.4 CSS……………………………………………………………………………………16
2.4.1 Τι είναι CSS…………………………………………………………………..16
2.4.2 Σύνταξη CSS………………………………………………………………….16
2.4.3 Χρήση CSS………………………………………………………………….. 17
2.5 PHP………………………………………………………………………………….. 17
2.5.1 Τι είναι PHP…………………………………………………………………..17
2.5.2 Σύνταξη και εντολές της PHP………………………………………………...18
2.5.3 Οι μεταβλητές στην PHP……………………………………………………..18
2.5.4 Η εντολή if στην PHP………………………………………………………...19
2.5.5 PHP Loops……………………………………………………………………20
2.5.5.1 Η εντολή for στην PHP…………………………………………………...20
2.5.5.2 Η εντολή foreach στην PHP………………………………………………20
2.5.5.3 Η εντολή while στην PHP………………………………………………...20
2.5.6 Φόρμες PHP…………………………………………………………………..21
2.5.6.1 Η Μεταβλητή $_GET στην PHP…………………………………………21
2.5.6.2 Η Μεταβλητή $_POST στην PHP……………………………………..…22
2.6 JAVASCRIPT………………………………………………………………………...23
2.6.1 Τι είναι η JavaScript…………………………………………………………..23
2.6.2 Χρήσεις της JavaScript……………………………………………………….23
2.6.3 Επικύρωση εντύπου μέσω της JavaScript…………………………………….23
2.6.4 Παραδείγματα ελέγχου με JavaScript………………………………………...24
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 5
2.7 Εργαλεία ανάπτυξης δυναμικών εφαρμογών………………………………………..29
2.7.1 Λογισμικό EasyPHP…………………………………………………………29
2.7.1.1 Τι είναι το EasyPHP……………………………………………………...29
2.7.1.2 Κύρια χαρακτηριστικά του EasyPHP……………………………………29
2.7.1.3 Εγκατάσταση του EasyPHP……………………………………………...29
2.7.2 Λογισμικό PhpMyAdmin…………………………………………………….33
2.7.2.1 Τι είναι το PhpMyAdmin………………………………………………... 33
2.7.2.2 Χαρακτηριστικά του PhpMyAdmin……………………………………...33
2.7.3 Apache HTTP εξυπηρετητής…………………………………………………34
2.7.3.1 Τι είναι ο Apache HTTP εξυπηρετητής…………………………………..34
2.7.4 Dreamweaver CS4……………………………………………………………35
2.7.4.1 Τι είναι το Dreamweaver…………………………………………………35
2.7.4.2 Χαρακτηριστικά του Dreamweaver………………………………………36
3º Κεφάλαιο………………………………………………………………………………….37
3.1 Σχεδίαση μιας βάσης δεδομένων……………………………………………………..37
3.1.1 Τι είναι οι βάσεις δεδομένων…………………………………………………37
3.1.2 Θεωρία των σχεσιακών βάσεων δεδομένων………………………………….37
3.1.2.1 Πίνακες……………………………………………………………………37
3.1.2.2 Στήλες…………………………………………………………………….38
3.1.2.3 Γραμμές…………………………………………………………………..38
3.1.2.4 Τιμές……………………………………………………………………...38
3.1.2.5 Πρωτεύον κλειδί……………………………………………………….....38
3.1.2.6 Σχήματα…………………………………………………………………..38
3.1.2.7 Σχέσεις……………………………………………………………………39
3.2 Πρόσβαση σε μια MYSQL βάση δεδομένων με την PHP………………………….39
3.2.1 Τι είναι η SQL………………………………………………………………..39
3.2.2 Σύνδεση στην Βάση Δεδομένων με την PHP………………………………...40
3.2.3 Εκτέλεση SQL Ερωτημάτων (Queries) με την
PHP…………………………………………………………………………..41
3.2.3.1 Εισαγωγή δεδομένων στην Βάση Δεδομένων με την PHP………………41
3.2.3.2 Επιλογή δεδομένων στην Βάση Δεδομένων με την PHP…………...........42
3.2.3.3 Ο όρος WHERE στην Βάση Δεδομένων με την PHP……………………44
3.2.3.4 Ο όρος ORDER BY στην Βάση Δεδομένων με την PHP………………..45
3.2.3.5 Ενημέρωση δεδομένων στην Βάση Δεδομένων με την PHP…………….46
3.2.3.6 Διαγραφή δεδομένων από την Βάση Δεδομένων με την PHP…………...47
3.2.4 Εκτέλεση SQL Ερωτημάτων (Queries) με συναρτήσεις συγκεντρωτικών αποτελεσμάτων (Aggregate Functions) με την PHP…………………………48
3.2.4.1 MySQL GROUP BY……………………………………………………..48
3.2.4.2 MySQL Συνάρτηση - COUNT()………………………………………...48
3.2.4.3 MySQL Συνάρτηση - SUM()…………………………………………….49
3.2.4.4 Άλλες MySQL Συναρτήσεις - AVG(), MIN(), MAX()………………....50
3.2.5 Εκτέλεση Προχωρημένων SQL Ερωτημάτων (Queries) με την PHP………..51
3.2.5.1 MySQL DATE Συναρτήσεις……………………………………………..51
3.2.5.2 Εμφάνιση δεδομένων από την Βάση Δεδομένων στην οθόνη…………...52
4º Κεφάλαιο……………………………………………………. …………………………..55
4.1 Περιγραφή της Βάσης Δεδομένων της εφαρμογής ……………………………….....55
4.1.1 Σχεδίαση Μοντέλου Οντοτήτων-Συσχετίσεων……………………………….55
4.1.2 Δημιουργία Πινάκων………………………………………………………… 57
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 6
4.1.2.1 Βάση ‘login’…………………………………………………………..57
4.1.2.2 Βάση ‘nautiliaki_etaireia’……………………………………………..60
4.2 Περιγραφή της εφαρμογής……………………………………………………….....68
4.2.1 Διαδικασίες Πελάτη & Πράκτορα…………………………………………...68
4.2.2 Διαδικασίες Διαχειριστή……………………………………………………..69
4.3 Υλοποίηση της εφαρμογής…………………………………………………………. 70
4.3.1 Παρουσίαση Αρχικής σελίδας ……………………………………………… 70
4.3.1.1 Αρχική σελίδα………………………………………………………… 70
4.3.1.2 Σελίδα Σύνδεσης Πελάτη……………………………………………... 71
4.3.1.3 Σελίδα Εγγραφής Πελάτη …………………………………………….. 71
4.3.1.4 Σελίδα Σύνδεσης Πράκτορα…………………………………………... 72
4.3.1.5 Σελίδα Σύνδεσης Διαχειριστή………………………………………….72
4.3.2 Παρουσίαση Σελίδας Πελάτη………………………………………………...73
4.3.2.1 Αρχική Σελίδα Πελάτη……..…………………………………………..73
4.3.2.2 Σελίδα Αναζήτησης Δρομολογίων……………………………………. 74
4.3.2.3 Σελίδα Προσθήκης Κράτησης………………………………………….75
4.3.2.4 Σελίδα Ακύρωσης Κράτησης………………………………………….. 76
4.3.2.5 Σελίδα Αναζήτησης Κρατήσεων……………………………………….77
4.3.2.6 Σελίδα Επικοινωνίας…………………………………………………...78
4.3.3 Παρουσίαση Σελίδας Διαχειριστή……………………………………………79
4.3.3.1 Αρχική σελίδα Διαχειριστή…………………………………………….79
4.3.3.2 Σελίδα Προσθήκης Εταιρείας………..…………………………………80
4.3.3.3 Σελίδα Προσθήκης Πλοίου……………………………………………..80
4.3.3.4 Σελίδα Προσθήκης Δρομολογίου………………………………………81
4.3.3.5 Σελίδα Ακύρωσης Δρομολογίου………………………………………..82
4.3.3.6 Σελίδα Προσθήκης Υπαλλήλου………………………………………...83
4.3.3.7 Σελίδα Διαγραφής Υπαλλήλου…………………………………………84
4.3.3.8 Σελίδα Λίστας Δρομολογίων…………………………………………...84
4.3.3.9 Σελίδα Συγκεντρωτικής Αναφοράς…………………………………….85
4.3.4 Παρουσίαση Σελίδας Τουριστικού Πράκτορα……………………………….86
4.3.4.1 Αρχική Σελίδα Τουριστικού Πράκτορα…….………………………….86
4.3.4.2 Σελίδα Αναζήτησης Δρομολογίων……………………………………..87
4.3.4.3 Σελίδα Προσθήκης Κράτησης………………………………………….87
4.3.4.4 Σελίδα Ακύρωσης Κράτησης…………………………………………..88
4.4 Ανάλυση Κώδικα Εφαρμογής……………………………………………………….90
4.4.1 Ερωτήσεις προς την βάση δεδομένων με SQL……………………………….90
4.4.1.1 Ερωτήσεις SQL για τον Πελάτη & Πράκτορα…………………………90
4.4.1.2 Ερωτήσεις SQL για τον Διαχειριστή…………………………………...95
4.4.2 Ανάλυση Κώδικα PHP……………………………………………………...101
4.4.2.1 Εγγραφή Πελάτη & Σελίδα Υποβολής Στοιχείων…………………….101
4.4.2.2 Σελίδα Εισόδου Πελάτη & Σελίδα Υποβολής Στοιχείων……………..105
4.4.2.3 Σελίδα Εξόδου Εφαρμογής Πελάτη…………………………………...108
4.4.2.4 Σελίδα Προσθήκης Κράτησης Πελάτη & Σελίδα Υποβολής
Στοιχεiων……………………………………………………………...109
4.4.2.5 Σελίδα Ακύρωσης Κράτησης Πελάτη………………………………...120
4.4.2.6 Σελίδα Αναζήτησης Κρατήσεων Πελάτη……………………………..128
4.4.2.7 Σελίδα Διαθεσιμότητας Δρομολογίου………………………………...131
4.4.2.8 Σελίδα Προσθήκης Εταιρείας…………………………………………136
4.4.2.9 Σελίδα Προσθήκης Πλοίου……………………………………………139
4.4.2.10 Σελίδα Προσθήκης Δρομολογίου…………………………………...145
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 7
4.4.2.11
4.4.2.12
4.4.2.13
4.4.2.14
4.4.2.15
Σελίδα Ακύρωσης Δρομολογίου…………………………………….155
Σελίδα Προσθήκης Υπαλλήλου……………………………………..161
Σελίδα Διαγραφής Υπαλλήλου……………………………………...168
Σελίδα Συγκεντρωτικής Αναφοράς………………………………….170
Σελίδα Προσθήκης-Ακύρωσης Κράτησης Πράκτορα………………172
5º Κεφάλαιο……………………………………………………. ………………………….173
5.1 Αποτελέσματα-Συμπεράσματα……………………………………………………...173
5.2 Μελλοντική Εργασία και Επεκτάσεις……………………………………………….173
Πίνακας Εικόνων…………………………………………………………………………...174
Βιβλιογραφία……………………………………………………………………………….176
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 8
1º ΚΕΦΑΛΑΙΟ
1.1 Εισαγωγή
Η εποχή που διανύουμε, χαρακτηρίζεται από ραγδαία αύξηση της χρήσης της ηλεκτρονικής ενημέρωσης, της ηλεκτρονικής παραγγελίας αγαθών, της ηλεκτρονικής επικοινωνίας των ανθρώπων ακόμα και της χρήσης της ηλεκτρονικής δοσοληψίας με τράπεζες και δημόσιους οργανισμούς. Η μεταστροφή λοιπόν αυτή καθιστά αναγκαίο για κάθε επιχείρησηοργανισμό που παρέχει υπηρεσίες ή και υλικά αγαθά να παρέχει την ηλεκτρονική δυνατότητα
στον πελάτη της να αποκτήσει τα προϊόντα ή τις υπηρεσίες που παρέχει. Η παρούσα πτυχιακή
ασχολείται µε την υλοποίηση ενός συστήματος online μίας ναυτιλιακής εταιρίας, που στόχο
έχει, την διευκόλυνση των πελατών για αγορά εισιτηρίων αλλά και των διαχειριστών στη επίβλεψη των δρομολογίων
1.2 Περίληψη
Στη πτυχιακή αυτή γίνεται περιγραφή των λειτουργιών που υπάρχουν σε ένα σύστημα
online διαχείρισης μιας ναυτιλιακής εταιρίας. Σε ένα τέτοιο σύστημα ο πελάτης της εταιρίας
μπορεί να κάνει κράτηση θέσης όπως επίσης και ακύρωση αυτής. Θα μπορεί να δει ποια δρομολόγια είναι διαθέσιμα για την επιλογή του. Ο διαχειριστής θα έχει τη δυνατότητα να προσθέσει κάποια δρομολόγια όπως επίσης και να τα ακυρώσει. Στη διάθεση του διαχειριστή θα
βρίσκεται επίσης μια αναφορά για την κατάσταση των δρομολογίων ξεχωριστά.
1.3 Κίνητρο για Διεξαγωγή της εργασίας
Βασικό κίνητρο για τη διεξαγωγή της εργασίας αυτής, αποτέλεσε η μεταστροφή όλο
και περισσότερων χρηστών σε διαδικτυακές τεχνολογίες. Σημαντικό ρόλο έπαιξε επίσης η
ανάγκη δημιουργίας εξειδικευμένων γνώσεων για υλοποίηση online συστημάτων διαχείρισης
από τη σύλληψη της ιδέας έως και την υλοποίησή τους. Τέλος κίνητρο παρέχει η ενασχόληση
µε τη γλώσσα υλοποίησης διαδικτυακών εφαρμογών PHP όπως επίσης και της MySQL η οποία χρησιμοποιείται για τη διαδικασία χρησιμοποίησης βάσεων δεδομένων.
1.4 Σκοπός και στόχοι εργασίας
Σκοπός της εργασίας αυτής, είναι η τριβή και η ενασχόληση µε τη γλώσσα υλοποίησης διαδικτυακών εφαρμογών PHP καθώς και η βέλτιστη εκμάθησης της. Στόχος της εκπόνησης αυτής της εργασίας, είναι η απόκτηση εμπειρίας σε θέµατα υλοποίησης online συστημάτων διαχείρισης εταιριών. Πιο συγκεκριμένα ο στόχος που επιδιώκεται είναι µετά το πέρας
της εργασίας αυτής, να µπορούν να δημιουργηθούν τα συστήματα αυτά από την αρχή (σύλληψη της ιδέας) μέχρι και την πλήρη υλοποίηση τους.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 9
1.5 Δομή εργασίας
Η δοµή της εργασίας αυτής, έχει ως εξής:
Στο 1ο κεφάλαιο, παραθέτονται εισαγωγικά στοιχεία, σχετικά µε τους λόγους επιλογής υλοποίησης της πτυχιακής αυτής και θέτονται στόχοι ώστε µετά την ολοκλήρωσή της, να
µπορούν να διεξαχθούν συμπεράσματα.
Στο 2ο Κεφάλαιο, γίνεται ανασκόπηση των software προγραμμάτων που χρησιμοποιήθηκαν για την διεκπεραίωση της πτυχιακής καθώς και παρουσίαση του τρόπου χρήσης
τους. Όπως επίσης και στις γλώσσες προγραμματισμού που αναπτύχθηκαν.
Στο 3ο Κεφάλαιο, γίνεται αναφορά στις βάσεις δεδομένων όπως και στην χρήση της
MySQL σε συνεργασία με την PHP.
Στο 4ο Κεφάλαιο, διαδραματίζεται το κύριο μέρος της εργασίας μας όπου αναλύουμε
τις κινήσεις που έγιναν για να δημιουργηθεί το online σύστημα διεξοδικά μαζί με φωτογραφίες από το interface του συστήματος.
Τέλος στο 5ο Κεφάλαιο εξάγονται τα αποτελέσματα και τα συμπεράσματα από την
υλοποίηση της πτυχιακής αυτής.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 10
2º ΚΕΦΑΛΑΙΟ
2.1
Στατικές Ιστοσελίδες
Οι δύο μεγάλες κατηγορίες ιστοσελίδων είναι οι λεγόμενες στατικές (static) και οι δυναμικές (dynamic). Όσον αφορά την όψη/εμφάνισή τους, δεν έχουν μεγάλες διαφορές μεταξύ
τους, αλλά όσον αφορά την λειτουργία και τις δυνατότητές τους οι διαφορές είναι πολλές και
ουσιαστικές.
Οι στατικές ιστοσελίδες είναι απλά HTML έγγραφα. Μπορούν να περιέχουν κείμενα, εικόνες, υπερσυνδέσμους (links) π.χ. μενού επιλογών και άλλα στοιχεία. Ο όρος "στατική" δεν
αναφέρεται σε κάποιο είδος κίνησης, αλλά στην μονιμότητα του περιεχομένου της ιστοσελίδας. Δηλαδή, για μία στατική ιστοσελίδα το περιεχόμενο είναι δεδομένο κάθε φορά που εμφανίζεται. Για να αλλάξει το περιεχόμενό της στατικής ιστοσελίδας, θα πρέπει να γίνει επεξεργασία της με κάποιο πρόγραμμα κατασκευής ιστοσελίδων, δηλαδή, δεν διαθέτει ειδική
περιοχή διαχείρισης του περιεχομένου της (administration area) όπως κάποιο CMS.
Το κύριο μειονέκτημά τους είναι ότι δεν είναι πρακτική/βολική η χρήση τους όταν χρειάζεται το περιεχόμενο της ιστοσελίδας να αλλάζει συχνά, π.χ. τουλάχιστον μία φορά την εβδομάδα να προστίθεται κάποιο άρθρο, ή να αλλάζουν τα προϊόντα κτλ. Αυτό συμβαίνει γιατί για
να τροποποιηθεί μια στατική ιστοσελίδα, πρέπει να γίνουν επεμβάσεις απευθείας πάνω στην
ιστοσελίδα, με κάποιο σχετικό πρόγραμμα (html editor είτε απλό είτε WYSIWYG), μια διαδικασία δηλαδή όπως το να σβήνεις και να γράφεις σε ένα τετράδιο, που όμως χρειάζεται μια
σχετική εμπειρία. Μία στατική ιστοσελίδα, είναι κατάλληλη κυρίως για μικρές παρουσιάσεις
στις οποίες σπάνια θα χρειαστεί κάποια μελλοντική αλλαγή στο περιεχόμενό της ή προσθήκη
επιπλέον περιεχομένου. Σε αντίθετη περίπτωση, είναι πιο πρακτική η χρήση δυναμικών ιστοσελίδων (CMS).[1]
2.2
Δυναμικές Ιστοσελίδες
Οι δυναμικές ιστοσελίδες, σε αντίθεση με τις στατικές ιστοσελίδες, δεν είναι απλά
HTML έγγραφα, αλλά συμπεριλαμβάνουν προγραμματισμό (σε μία γλώσσα προγραμματισμού κατάλληλη για το διαδίκτυο, όπως π.χ. είναι η php) και ουσιαστικά είναι web εφαρμογές.
Η κατασκευή δυναμικών ιστοσελίδων είναι προφανώς πιο πολύπλοκη από τις απλές στατικές ιστοσελίδες, και ο βαθμός δυσκολίας τους εξαρτάται φυσικά από τις λειτουργίες και τις
δυνατότητες που περιλαμβάνει η εκάστοτε web εφαρμογή. Στις δυναμικές ιστοσελίδες, το
περιεχόμενο της ιστοσελίδας, αποθηκεύεται και αντλείται δυναμικά από μία ή περισσότερες
βάσεις δεδομένων (π.χ. MySQL), ενώ διαθέτουν εκτός από το frontend (user interface) και το
backend (administration area) μέσω του οποίου γίνεται εύκολα η διαχείριση του περιεχομένου της ιστοσελίδας. Η χρήση των βάσεων δεδομένων, είναι αυτή που επιτρέπει την εύκολη
προσθαφαίρεση περιεχομένου στις δυναμικές ιστοσελίδες, καθώς δεν απαιτείται να επεξεργάζεται κανείς κάθε φορά την ίδια την ιστοσελίδα, αλλά απλά να διαχειρίζεται έμμεσα το περιεχόμενο στην βάση δεδομένων και οι υπόλοιπες διαδικασίες γίνονται αυτοματοποιημένα
από τον "μηχανισμό" της ιστοσελίδας. Έτσι συνολικά η web εφαρμογή συναντάται συνήθως
ως CMS (content managment system), δηλαδή σύστημα διαχείρισης περιεχομένου.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 11
Γενικά, αυτό που προσφέρουν οι δυναμικές ιστοσελίδες, είναι μεγαλύτερη αλληλεπίδραση του χρήστη με την σελίδα π.χ. να προσθέτει τα σχόλια του στην σελίδα, αλλά και πολλές
ευκολίες στον διαχειριστή του περιεχομένου της ιστοσελίδας π.χ. τον ιδιοκτήτη της σελίδας.
Πάντως το γεγονός ότι μια δυναμική ιστοσελίδα προσφέρει περισσότερες δυνατότητες, δεν
σημαίνει ότι αυτές είναι απαραίτητες σε όλους, δηλαδή σε αρκετές περιπτώσεις, μία στατική
ιστοσελίδα μπορεί να καλύπτει πλήρως τις ανάγκες μιας συνοπτικής παρουσίασης.
Από πλευράς κόστους, η στατική ιστοσελίδα είθισται να είναι η φτηνή επιλογή, καθώς είναι πιο απλή η κατασκευή της ιστοσελίδας, ενώ οι δυναμικές ιστοσελίδες λόγω της πολυπλοκότητας τους κοστίζουν ακριβότερα και αυτό είναι λογικό τουλάχιστον όταν γίνονται κατά
παραγγελία. Υπάρχει βέβαια και η περίπτωση υλοποίησης μιας δυναμικής ιστοσελίδας με την
χρήση κάποιας open source εφαρμογής (CMS) η οποία διατίθεται δωρεάν μέσω του internet
και σε αυτήν την περίπτωση η κατασκευή της ιστοσελίδας μπορεί να έχει μηδενικό κόστος
(αν γίνει self-service) ή να υπάρξει κάποια χρέωση (η τελική τιμή μιας ιστοσελίδας είναι υποκειμενική υπόθεση) αν η εγκατάσταση και η τυχόν παραμετροποίηση της δωρεάν εφαρμογής ανατεθεί σε κάποια εταιρία.[1]
2.3
HTML
2.3.1
Τι είναι η HTML
Η HTML ή HyperText Markup Language έχει σχεδιαστεί για να καθορίζει τη λογική οργάνωση ενός εγγράφου, με σημαντικές προεκτάσεις στο hypertext. Δεν έχει σχεδιαστεί για να
είναι η γλώσσα ενός επεξεργαστή, όπως το Word. Η επιλογή αυτή έγινε γιατί το ίδιο έγγραφο
HTML μπορεί να προβληθεί από πολλούς διαφορετικούς “browsers”, με διαφορετικές ιδιότητες. Έτσι, για παράδειγμα, HTML μας επιτρέπει να επισημάνουμε τις επιλογές του κειμένου
ως τίτλοι ή παράγραφοι, και στη συνέχεια να αφήνει την ερμηνεία αυτών σημειώνοντας τα
στοιχεία μέχρι και το πρόγραμμα περιήγησης. Για παράδειγμα, ένα πρόγραμμα περιήγησης
μπορεί κόψει την αρχή μιας παραγράφου, ενώ κάποιο άλλο μπορεί να αφήσει μόνο μια κενή
γραμμή.
Η HTML γράφεται υπό μορφή στοιχείων HTML τα οποία αποτελούνται από ετικέτες,
οι οποίες περικλείονται μέσα σε σύμβολα «μεγαλύτερο από» και «μικρότερο από» (για παράδειγμα <html>), μέσα στο περιεχόμενο της ιστοσελίδας. Οι ετικέτες HTML συνήθως λειτουργούν ανά ζεύγη (για παράδειγμα <h1> και </h1>), με την πρώτη να ονομάζεται ετικέτα
έναρξης και τη δεύτερη ετικέτα λήξης (ή σε άλλες περιπτώσεις ετικέτα ανοίγματος και ετικέτα
κλεισίματος αντίστοιχα). Ανάμεσα στις ετικέτες, οι σχεδιαστές ιστοσελίδων μπορούν να τοποθετήσουν κείμενο, πίνακες, εικόνες κλπ.
Τα στοιχεία της HTML χρησιμοποιούνται για να κτίσουν όλους του ιστότοπους. Η
HTML επιτρέπει την ενσωμάτωση εικόνων και άλλων αντικειμένων μέσα στη σελίδα, και
μπορεί να χρησιμοποιηθεί για να εμφανίσει διαδραστικές φόρμες. Παρέχει τις μεθόδους δημιουργίας δομημένων εγγράφων (δηλαδή εγγράφων που αποτελούνται από το περιεχόμενο
που μεταφέρουν και από τον κώδικα μορφοποίησης του περιεχομένου) καθορίζοντας στοιχεία για το κείμενο, όπως κεφαλίδες, παραγράφους, λίστες, συνδέσμους, παραθέσεις
και άλλα. Μπορούν επίσης να ενσωματώνονται σε γλώσσες όπως η, τα οποία επηρεάζουν τη
συμπεριφορά των ιστοσελίδων HTML.
Ο σκοπός ενός web browser είναι να διαβάζει τα έγγραφα HTML και τα συνθέτει σε
σελίδες που μπορεί κανείς να διαβάσει ή να ακούσει. Ο browser δεν εμφανίζει τις ετικέτες
HTML, αλλά τις χρησιμοποιεί για να ερμηνεύσει το περιεχόμενο της σελίδας. Οι Web
browsers μπορούν επίσης να αναφέρονται σε στυλ μορφοποίησης για να ορίζουν την εμφάΑγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 12
νιση και τη διάταξη του κειμένου και του υπόλοιπου υλικού. Ο οποίος δημιουργεί και συντηρεί τα πρότυπα για την HTML και τα CSS, ενθαρρύνει τη χρήση των CSS αντί διαφόρων
στοιχείων της HTML για σκοπούς παρουσίασης του περιεχομένου.[2]
2.3.2
HTML Elements
Οι ιδιότητες της HTML μπορούν να διαιρούν το κείμενο ενός εγγράφου σε πακέτα που
ονομάζονται elements. Τα πακέτα αυτά μπορούν να χωριστούν σε δύο ευρείες κατηγορίες εκείνα που καθορίζουν το πώς το “body” του εγγράφου θα εμφανίζεται από το πρόγραμμα
περιήγησης, καθώς και τις διατάξεις που ορίζουν τις πληροφορίες για το έγγραφο, όπως ο
τίτλος ή οι σχέσεις με άλλα έγγραφα. Οι λεπτομερείς κανόνες για την HTML (τα ονόματα
των ετικετών / στοιχείων, το πώς μπορούν να χρησιμοποιηθούν), ορίζεται με άλλη γλώσσα,
γνωστή ως η πρότυπη γλώσσα γενικευμένης σήμανσης, ή SGML.
Τα στοιχεία HTML τα οποία στην πιο γενική μορφή τους έχουν τρία συστατικά: ένα ζεύγος από ετικέτες, την «ετικέτα εκκίνησης» και την «ετικέτα τερματισμού», μερικές ιδιότητες μέσα στην ετικέτα εκκίνησης, και τέλος το κείμενο ή το γραφικό περιεχόμενο μεταξύ των ετικετών, το οποίο μπορεί να περιλαμβάνει και άλλα στοιχεία
εμφωλευμένα μέσα του. Το στοιχείο HTML μπορεί να είναι οτιδήποτε ανάμεσα στις ετικέτες
εκκίνησης και τερματισμού. Τέλος, κάθε ετικέτα περικλείεται σε σύμβολα «μεγαλύτερο από»
(<) και «μικρότερο από» (>), δηλαδή < και >.
Επομένως, η γενική μορφή ενός στοιχείου HTML είναι: <tag attribute1="value1" attribute2="value2">content</tag>. Μερικά στοιχεία HTML περιγράφονται ως άδεια στοιχεία, έχουν τη μορφή <tag attribute1="value1" attribute2="value2" >, και δεν έχουν καθόλου περιεχόμενο. Το όνομα κάθε στοιχείου HTML είναι το ίδιο όνομα που χρησιμοποιείται στις αντίστοιχες ετικέτες. Το όνομα της ετικέτας τερματισμού ξεκινά με μια κάθετο «/», η οποία παραλείπεται στα άδεια στοιχεία. Τέλος, αν δεν αναφέρονται ρητά οι ιδιότητες ενός στοιχείου,
τότε χρησιμοποιούνται οι προεπιλογές σε κάθε περίπτωση.
Παράδειγμα:
<!DOCTYPE html>
<html>
<head>
<title>Hello HTML</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
(Το κείμενο ανάμεσα στο <html> και το </html> περιγράφει την ιστοσελίδα, και το κείμενο μεταξύ του <body> και του </body> είναι το ορατό μέρος της. Το σημασμένο κείμενο
'<title>Hello HTML</title>' καθορίζει τον τίτλο που θα εμφανίζεται στην μπάρα τίτλου του
browser.). Το Document Type Declaration στον πιο πάνω κώδικα είναι για την HTML5. Αν
δεν συμπεριλαμβάνεται η δήλωση <!doctype html>, τότε μερικοί browser θα καταφύγουν
στην λειτουργία quirks για την εμφάνιση της σελίδας.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 13
2.3.3
HTML Forms
Οι φόρμες HTML χρησιμοποιούνται για να περάσουμε δεδομένα σε ένα server. Μια
φόρμα μπορεί να περιέχει στοιχεία εισόδου, όπως text fields, checkboxes, radio-buttons,
submit buttons και πολλά άλλα. Μια φόρμα μπορεί να περιέχει επίσης λίστες για να επιλέγουμε ανάμεσα σε καταλόγους. Το πιο σημαντικό στοιχείο της φόρμας είναι το στοιχείο εισόδου. Το στοιχείο εισόδου χρησιμοποιείται για να επιλέξουμε πληροφορίες του χρήστη. Ένα
στοιχείο εισόδου μπορεί να διαφέρει με πολλούς τρόπους, ανάλογα με τον τύπο της μεταβλητής. Ένα στοιχείο εισόδου μπορεί να είναι πεδίο κειμένου, πεδίο κωδικού πρόσβασης, κουμπιά και πολλά άλλα.[3]
2.5.6.1
Πεδία κειμένου
<input type="text" /> ορίζει ένα one-line πεδίο εισόδου όπου ένας χρήστης μπορεί να εισάγει
κείμενο
Παράδειγμα:
<form>
First name: <input type="text" name="firstname" /><br />
Last name: <input type="text" name="lastname" />
</form>
Το συγκεκριμένο παράδειγμα στον browser εμφανίζεται ως εξής:
2.5.6.2
Πεδίο κωδικού πρόσβασης
<input type="password" /> ορίζει ένα πεδίο κωδικού πρόσβασης
Παράδειγμα:
<form>
Password: <input type="password" name="pwd" />
</form>
Το συγκεκριμένο παράδειγμα στον browser εμφανίζεται ως εξής:
2.5.6.3
Κουτιά Επιλογής Checkboxes
<input type="checkbox" /> ορίζει ένα πλαίσιο ελέγχου. Το checkbox επιτρέπει σε έναν χρήστη να επιλέξει μία ή περισσότερες επιλογές από έναν περιορισμένο αριθμό επιλογών.
Παράδειγμα:
<form>
<input type="checkbox" name="vehicle" value="Bike" /> I have a bike<br />
<input type="checkbox" name="vehicle" value="Car" /> I have a car
</form>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 14
Το συγκεκριμένο παράδειγμα στον browser εμφανίζεται ως εξής:
2.5.6.4
Κουτιά Υποβολής (Submit Buttons)
<input type="submit" /> ορίζει ένα κουμπί υποβολής. Ένα κουμπί υποβολής χρησιμοποιείται
για την αποστολή δεδομένων φόρμας σε ένα server. Τα δεδομένα που αποστέλλονται στη σελίδα καθορίζονται από τη μεταβλητή “action” της φόρμας. Το αρχείο που ορίζεται στη μεταβλητή “action” συνήθως επεξεργάζεται το δεδομένο που λαμβάνει στην είσοδο.[3]
Παράδειγμα:
<form name="input" action="html_form_action.asp" method="get">
Username: <input type="text" name="user" />
<input type="submit" value="Submit" />
</form>
Το συγκεκριμένο παράδειγμα στον browser εμφανίζεται ως εξής:
Εάν πληκτρολογήσουμε ορισμένους χαρακτήρες στο πεδίο κειμένου παραπάνω, και
κάνουμε κλικ στο κουμπί "Submit", το πρόγραμμα περιήγησης θα στείλει το αποτέλεσμα μας
σε μια σελίδα που ονομάζεται "html_form_action.asp". Η σελίδα θα μας δείξει το δεδομένο
που λάβαμε στην είσοδο.
2.5.6.5 Λίστες με προεπιλεγμένη τιμή (Drop down lists with a
pre-selected value)
Oρίζουμε τη drop down list χρησιμοποιώντας "select" και "option"ετικέτες. Το πλαίσιο επιλογής καθορίζεται με βάση την ετικέτα "select". Ο αριθμός των επιλογών ορίζεται
χρησιμοποιώντας την ετικέτα "option". Το όνομα που θα εμφανίζεται στην επιλογή δίνεται ανάμεσα στις ετικέτες "option".
Παράδειγμα:
<html>
<body>
<form name=myform>
<select name=mytextarea>
<option name=one value=one> one </option>
<option name=two value=two> two </option>
<option name=three value=three> three </option>
</select>
</form>
</body>
</html>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 15
Το συγκεκριμένο παράδειγμα στον browser εμφανίζεται ως εξής:
2.4
CSS
2.4.1
Τι είναι η CSS
Η CSS (Cascading Style Sheets-Διαδοχικά Φύλλα Στυλ) ή ( αλληλουχία φύλλων στύλ )
είναι μια γλώσσα υπολογιστή που ανήκει στην κατηγορία των γλωσσών φύλλων στυλ που
χρησιμοποιείται για τον έλεγχο της εμφάνισης ενός εγγράφου που έχει γραφτεί με μια γλώσσα σήμανσης. Χρησιμοποιείται δηλαδή για τον έλεγχο της εμφάνισης ενός εγγράφου που
γράφτηκε στις γλώσσες HTML και XHTML, δηλαδή για τον έλεγχο της εμφάνισης μιας ιστοσελίδας και γενικότερα ενός ιστοτόπου. Η CSS είναι μια γλώσσα υπολογιστή προορισμένη να αναπτύσσει στυλιστικά μια ιστοσελίδα δηλαδή να διαμορφώνει περισσότερα χαρακτηριστικά, χρώματα, στοίχιση και δίνει περισσότερες δυνατότητες σε σχέση με την html. Για
μια όμορφη και καλοσχεδιασμένη ιστοσελίδα η χρήση της CSS κρίνεται ως απαραίτητη.
2.4.2
Σύνταξη CSS
Το CSS έχει μια απλή σύνταξη και χρησιμοποιεί μια σειρά από αγγλικές λέξεις-κλειδιά για να καθορίσει τα ονόματα των διαφόρων ιδιοτήτων style. Ένα φύλλο style αποτελείται
από μια λίστα με τους κανόνες. Κάθε κανόνας ή σετ κανόνων, αποτελείται από ένα ή περισσότερους selectors και ένα declaration block. Το declaration block αποτελείται από μια λίστα
με δηλώσεις σε αγκύλες. Κάθε δήλωση αποτελείται από μια ιδιότητα, μια άνω και κάτω τελεία (:), μια τιμή. Εάν υπάρχουν πολλαπλές δηλώσεις σε ένα μπλοκ, ένα ερωτηματικό (?)
πρέπει να εισάγεται σε κάθε ξεχωριστή δήλωση.
Στην CSS, selectors χρησιμοποιούνται για να δηλώσουν ποια από τα στοιχεία σήμανσης
ισχύουν σε ένα style. Οι Selectors μπορεί να ισχύουν για όλα τα στοιχεία ενός συγκεκριμένου τύπου, ή μόνο εκείνα τα στοιχεία που ταιριάζουν με ένα συγκεκριμένο χαρακτηριστικό,
τα στοιχεία μπορούν να συνδυαστούν ανάλογα με το πώς είναι τοποθετημένα σε σχέση μεταξύ τους στον κώδικα σήμανσης, ή για το πώς είναι ένθετα εντός του Document Object Model.
Οι Ψευδο-τάξεις είναι μια άλλη μορφή των προδιαγραφών που χρησιμοποιούνται
σε CSS για τον προσδιορισμό στοιχείων σήμανσης, καθώς και σε ορισμένες περιπτώσεις, συγκεκριμένες ενέργειες του χρήστη στον οποίο ένα συγκεκριμένο τμήμα της δήλωσης
που ισχύει. Ένα συχνά χρησιμοποιούμενο παράδειγμα είναι το : hover. Μία Pseudo-class
που εφαρμόζει ένα στυλ μόνο όταν ο χρήστης “σημαδεύει” το ορατό στοιχειο, συνήθως κρατώντας τον κέρσορα του ποντικιού πάνω από αυτό. Άλλες ψευδο-τάξεις
και ψευδο-στοιχεία είναι, για παράδειγμα, :first-line, :visited ή :before[4]
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 16
2.4.3
Χρήση CSS
Πριν από την CSS, σχεδόν όλα τα χαρακτηριστικά παρουσίασης των HTML εγγράφων
περιέχονταν στο κείμενο HTML.Όλα τα χρώματα γραμματοσειράς, στυλ φόντου, ευθυγραμμίσεις στοιχείο, τα σύνορα και τα μεγέθη πρέπει να περιγράφονταν ρητά, συχνά
κατ'επανάληψη, στο πλαίσιο της HTML. Η CSS επιτρέπει στους συγγραφείς να κινήσουν μεγάλο μέρος των πληροφοριών αυ-τών σε ένα ξεχωριστό φύλλο στυλ με αποτέλεσμα σημαντικά και HTML απλούστερης σή-μανσης .Οι κεφαλίδες (h1 elements), οι υποτομείς (h2),
υπο-κατηγορίες (H3), κλπ., ορίζονται δομικά μέσω χρήσης HTML. Πριν από την CSS, ο συντάκτης του εγ-γράφου ο οποίος ήθελε να αναθέσει τέτοια χαρακτηριστικά τυπογραφικά, για
παράδειγμα, το σύνολο των κεφαλίδων h2 έπρεπε να χρησιμοποιήσει την HTML γραμματοσειρά και άλλα στοιχεία παρουσίασης για κάθε εμφάνιση της.
Η πρόσθετη σήμανση παρουσίασης στην HTML γίνονταν από πιο πολύπλοκα έγγραφα
και γενικά ήταν πιο δύσκολο να διατηρηθεί. Στην CSS, η παρουσίαση χωρίζεται από τη δομή. Στην εκτύπωση, η CSS μπορεί να καθορίσει το χρώμα, τη γραμματοσειρά, τη στοίχιση
του κειμένου, το μέγεθος, τα σύνορα, την απόσταση, τη διάταξη και πολλά άλλα χαρακτηριστικά τυπογραφικά. Αυτό μπορεί να το κάνει ανεξάρτητα για στην οθόνη και
εκτυπώσεις. Η CSS ορίζει επίσης μη-οπτικά styles, όπως η ταχύτητα και η έμφαση με την
οποία το κείμενο στο οποίο γίνεται ανάγνωση από ακουστικούς αναγνώστες κειμένου. Το W3C θεωρεί τώρα τα πλεονεκτήματα των CSS για τον ορισμό όλων των
πτυχών της παρουσίασης των HTML σελίδων να είναι ανώτερες από άλλες μεθόδους. Έχει αποδοκιμαστεί κατά συνέπεια η χρήση όλης της αρχικής παρουσίασης σήμανσης HTML.
2.5
PHP
2.5.1
Τι είναι PHP
H γλώσσα PHP (Hypertext PreProcessor) είναι μια γλώσσα προγραμματισμού που μπορούμε να χρησιμοποιήσουμε για τη δημιουργία εφαρμογών Web. Μια εφαρμογή Web μπορεί
να είναι οτιδήποτε από μία απλή εφαρμογή "contact us" μέσα από ένα πλήρες σύστημα
blogging, ηλεκτρονικό κατάστημα, ή και σύστημα forum. H γλώσσα Php είναι γνωστή ως μια
γλώσσα προγραμματισμού server-side. Αυτό σημαίνει ότι λειτουργεί με το Web server. Οι
περισσότερες γλώσσες προγραμματισμού Web είναι server-side, αλλά μερικές, όπως ή Javascript που θα δούμε παρακάτω είναι client-side, πράγμα που σημαίνει ότι λειτουργούν με το
πρόγραμμα περιήγησης.
Μία server-side γλώσσα μας δίνει περισσότερη ευελιξία, δεδομένου ότι μπορούμε να κάνουμε πολλά πράγματα που είναι δύσκολο να κάνουμε με JavaScript - παραδείγματος χάριν,
δουλεύοντας σε συνεργασία με αρχεία και βάσεις δεδομένων, ή επεξεργασία εικόνων. Η
γλώσσα προγραμματισμού Php έχει το ιδιαίτερο χαρακτηριστικό ότι ο κώδικάς της πρώτα
μεταγλωττίζεται στον server και μετά φορτώνεται σαν ένα κανονικό html έγγραφο, χωρίς ο
χρήστης να είναι σε θέση να δει τον αρχικό κώδικα.
Με την τεχνολογία της Php μπορούμε να δημιουργήσουμε δυναμικές ιστοσελίδες
(dynamic web pages). Επίσης ο Server-side κώδικας είναι πιθανών πιο ασφαλής από ό, τι
κώδικα JavaScript. Δεδομένου ότι ο JavaScript κώδικας αποστέλλεται στο πρόγραμμα περιήγησης μέσω Web είναι εύκολο για έναν επισκέπτη να δεί και να επεξεργαστεί τον κώδικα. Όμως ο Server-side κώδικας, από την άλλη, παραμένει στο Web server και δεν είναι
προσβάσιμος για τους επισκέπτες του site.[5]
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 17
2.5.2
Σύνταξη και εντολές της PHP
Έχουμε τον παρακάτω κώδικα της Php
<?php
echo "<html><body>";
echo "Hello";
echo "</body></html>";
?>
Με αύτο το κομμάτι κώδικα θα δούμε το μήνυμα Hello στην οθόνη μας, ενώ αν επιχειρήσουμε να δούμε τον πηγαίο κώδικα (source code) θα υπάρχουν μόνο τα tags της HTML,
χωρίς τις σημάνσεις της Php.
Οι ετικέτες (tags) <?php και ?> χρησιμοποιούνται για να δηλώσουμε ένα μπλοκ κώδικα Php. Για να είναι σε θέση ο web server να επεξεργαστεί τον κώδικα της Php, πρέπει να
του πούμε πού αρχίζει και πού τελειώνει ένα μπλοκ κώδικα Php. Μπορούμε να τοποθετήσουμε κώδικα της HTML μέσα στον κώδικα της Php, ο οποίος θα εκτελεσθεί κανονικά.
Το παραπάνω παράδειγμα θα μπορούσε να είχε γραφεί και ως εξής :
<html><body>
<?php
echo "Hello";
?>
</body></html>
Η εντολή echo χρησιμοποιείται για να στείλουμε ένα κείμενο (string) στον φυλλομετρητή (browser). Όλες οι εντολές της Php πρέπει να τελειώνουν με τον χαρακτήρα ; και μια
εντολή μπορεί να επεκταθεί και σε περισσότερες από μία γραμμές. Όταν ο φυλλομετρητής
ενός χρήστη ζητήσει μια σελίδα Php σαν την παραπάνω, ο server θα την επεξεργαστεί, θα μετατρέψει τον κώδικα Php σε καθαρή HTML μορφή και έτσι ο χρήστης δεν θα μπορέσει να
δει τον αρχικό κώδικα Php.
2.5.3
Οι μεταβλητές στην PHP
Στην Php μπορούμε να χρησιμοποιήσουμε και μεταβλητές (variables) για να αποθηκεύουμε και να ανακτούμε δεδομένα που χρησιμοποιούμε συχνά. Όλες οι μεταβλητές πρέπει να
αρχίζουν με τον χαρακτήρα $ και ένα απλό παράδειγμα κώδικα Php που χρησιμοποιεί μεταβλητές και εμφανίζει το ίδιο αποτέλεσμα με το πρώτο παράδειγμα είναι το εξής :
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 18
<?php
$string="Hello";
echo "<html><body>";
echo "$string";
echo "</body></html>";
?>
Το όνομα μιας μεταβλητής μπορεί να αποτελείται από γράμματα και ψηφία, αλλά
πρέπει να ξεκινά οπωσδήποτε με γράμμα. Μπορεί να περιέχει και τον ειδικό χαρακτήρα _
(underscore). Οι μεταβλητές της Php μπορούν να περιέχουν κείμενο ή και αριθμούς :
$string1="Florina";
$number1=2;
2.5.4
Η εντολή if στην PHP
Στο παρακάτω παράδειγμα, ο έλεγχος μεταβιβάζεται σε μία από τρεις εντολές ανάλογα με
την τρέχουσα ώρα.
<?php
$date=date("H");
echo "<html><body>"
if ($date<12) echo "Καλημέρα";
else if ($date<18) echo "Καλό απόγευμα";
else echo "Καληνύχτα";
echo "</body></html>";
?>
Η συνάρτηση date("H") της Php επιστρέφει την ώρα του υπολογιστή σε 24ωρη μορφή
και έτσι η μεταβλητή $date θα περιέχει ένα string με τιμές από 0 έως 23, το οποίο μπορούμε
να χειριστούμε σαν έναν κανονικό αριθμό.
2.5.5
PHP Loops
Συχνά θέλουμε τον ίδιο κομμάτι κώδικα να τρέξει ξανά και ξανά σε μια σειρά. Αντί για
την προσθήκη διαφόρων σχεδόν ίδιων γραμμών κώδικα σε ένα σενάριο, μπορούμε να χρησιμοποιούμε βρόχους για να εκτελέστει μια εργασία.
Στην PHP, έχουμε τις ακόλουθες looping δηλώσεις:
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 19




while - βρόχος με ένα κομμάτι του κώδικα, ενώ μια συγκεκριμένη συνθήκη είναι αληθής.
do ... while - βρόχος με ένα κομμάτι κώδικα για μία φορά, και στη συνέχεια να επαναλαμβάνεται ο βρόχος εφ 'όσον ένας προκαθορισμένος όρος είναι αληθής.
for - βρόχος με ένα κομμάτι κώδικα ένα συγκεκριμένο αριθμό επαναλήψεων.
foreach - βρόχος με ένα κομμάτι κώδικα για κάθε στοιχείο σε μια συστοιχία.
2.5.5.1
Η εντολή for στην PHP
Το παρακάτω παράδειγμα δείχνει τη χρήση της εντολής for στην Php.
for (init; condition; increment)
{
code to be executed;
}?>
Παράμετροι:
init: Κυρίως χρησιμοποιείται για να ορίσουμε έναν μετρητή (αλλά μπορεί να είναι και οποιοδήποτε κομμάτι κώδικα που θα εκτελεστεί μία φορά στην αρχή του βρόχου)
condition: Αξιολογείται η αληθής κατάσταση για κάθε επανάληψη στο βρόχο. Αν πάρει την
τιμή TRUE, το loop συνεχίζει. Αν πάρει την τιμή FALSE, ο βρόχος τελειώνει.
increment: Κυρίως χρησιμοποιείται για την αύξηση έναν μετρητή (αλλά μπορεί να είναι οποιοδήποτε κομμάτι κώδικα που θα εκτελεστεί στο τέλος του βρόχου)
2.5.5.2
Η εντολή foreach στην PHP
Το παρακάτω παράδειγμα δείχνει τη χρήση της εντολής foreach στην Php
foreach ($array as $value)
{
code to be executed;
}
Η foreach χρησιμοποιείται για βρόχους μέσα από συστοιχίες(arrays). Για κάθε επανάληψη του βρόχου, η αξία του τρέχοντος στοιχείου του πίνακα που έχει ανατεθεί στο $value
(και ο δείκτης του πίνακα αυξανετε κατα ένα) - έτσι για την επόμενη επανάλη-ψη του βρόχου, θα μπορούμε να δούμε την επόμενη συστοιχία.
2.5.5.3
Η εντολή while στην PHP
Ο βρόχος while εκτελεί ένα κωμάτι κώδικα, με προϋπόθεση να είναι αλήθης η συνθήκη μεσα στο while.
while ( condition )
{
code to be executed ;
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 20
2.5.6
Φόρμες PHP
Το πιο σημαντικό πράγμα που πρέπει να παρατηρήσουμε όταν ασχολούμαστε με φόρμες
HTML και PHP είναι ότι οποιοδήποτε στοιχείο της φόρμας σε μια σελίδα HTML θα γίνει διαθέσιμο στο PHP script μας.
Παράδειγμα:
Το παράδειγμα που ακολουθεί περιέχει μία HTML φόρμα με δύο πεδία εισαγωγής και ένα
κουμπί.
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
Όταν ένας χρήστης συμπληρώνει τη φόρμα και κάνει κλικ στο κουμπί "Submit", τα
δεδομένα της φόρμας αποστέλλονται σε ένα αρχείο PHP, που ονομάζονται "welcome.php":
Το "welcome.php" είναι κάπως ετσι :
<html>
<body>
Welcome <?php echo $_POST["fname"]; ?>!<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
Και το αποτέλεσμα θα ήταν κάπως έτσι:
Welcome Nikos!
You are 25 years old.
Επικύρωση Φόρμας
Το input του χρήστη θα πρέπει να επικυρώνετε από το πρόγραμμα περιήγησης όποτε
είναι αυτο δυνατόν. Η επικύρωση από το browser είναι πιο γρήγορη και μειώνει το φόρτο εργασίας του server. Θα πρέπει να εξεταστεί η επικύρωση του διακομιστή, εάν το input του
χρήστη θα ενσωματώνεται σε βάση δεδομένων. Ένας καλός τρόπος για την επικύρωση μιας
φόρμας στο διακομιστή είναι να έχουμε την ίδια τη φόρμα στον, αντί την αλλαγή σε διαφορετική σελίδα. Ο χρήστης θα λάβει το μήνυμα λάθους στην ίδια σελίδα με τη φόρμα. Αυτό το
καθιστά ευκολότερο να ανακαλύψει το σφάλμα.
2.5.6.1
Η μεταβλητή $_GET στην PHP
Η $ _GET μεταβλητή χρησιμοποιείται για τη συλλογή τιμών σε μια φόρμα με τιμή:
method ="get". Οι πληροφορίες που αποστέλλονται από μια φόρμα με τη μέθοδο GET είναι
ορατές σε όλους (θα εμφανίζεται στη γραμμή διευθύνσεων του browser) και οριοθετεί την
ποσότητα των πληροφοριών για την αποστολή.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 21
Παράδειγμα:
<form action="welcome.php" method="get">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
Όταν ο χρήστης χρησιμοποιήσει το κουμπί "Submit", η διεύθυνση URL που αποστέλλεται στο διακομιστή θα μπορούσε να είναι κάπως έτσι:
http://welcome.php?fname=Giannis&age=25
To "welcome.php" αρχείο μπορεί πλέον να χρησιμοποιεί τη $ _GET μεταβλητή για τη
συλλογή δεδομένων φόρμας (τα ονόματα των πεδίων της φόρμας θα γίνονται αυτόματα τα
κλειδιά στη συστοιχια $ _GET):
Welcome <?php echo $_GET["fname"]; ?>.<br />
You are <?php echo $_GET["age"]; ?> years old!
Πότε να χρησιμοποιούμε τη μέθοδο = "get"; Όταν χρησιμοποιούμε τη μέθοδο = "get" στις HTML φόρμες, όλα τα ονόματα των μεταβλητών και των τιμών θα εμφανίζονται στη διεύθυνση URL. Σημείωση: Η μέθοδος αυτή δεν πρέπει να χρησιμοποιείται κατά την
αποστολή κωδικών πρόσβασης ή άλλων προσωπικών στοιχείων!
2.5.6.2
H μεταβλητή $_POST στην PHP
Η $ _POST μεταβλητή αυτή χρησιμοποιείται για τη συλλογή τιμών από μια φόρμα στέλνεται με τιμή: method = "post". Οι πληροφορίες που αποστέλλονται από τη φόρμα με τη μέθοδο POST δεν είναι ορατές για τους άλλους και δεν υπάρχουν όρια για την ποσότητα των πληροφοριών κατα την αποστολή. Σημείωση: Ωστόσο, υπάρχει ένα μέγιστο μέγεθος 8 Mb για τη μέθοδο POST, από προεπιλογή (μπορεί να αλλάξει με τον καθορισμό των post_max_size στο αρχείο php.ini) .
Παράδειγμα:
<form action="welcome.php" method="post">
Όνομα: <input type="text" name="fname" />
Ηλικία: <input type="text" name="age" />
<input type="submit" />
</ form>
Όταν ο χρήστης χρησιμοποιήσει το κουμπί "Submit", η διεύθυνση URL που αποστέλλεται στο διακομιστή θα είναι κάπως έτσι:
http:// welcome.php
Το "welcome.php" αρχείο μπορεί πλέον να χρησιμοποιεί τη $ _POST μεταβλητή για τη συλλογή δεδομένων στη φόρμα (τα ονόματα των πεδίων της φόρμας θα γίνονται αυτόματα τα
κλειδιά στη συστοιχια $ _POST)
Welcome <?php echo $_POST["fname"]; ?>!<br />
You are <?php echo $_POST["age"]; ?> years old.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 22
2.6
JAVASCRIPT
2.6.1
Τι είναι Javascript
Η JavaScript είναι ένα είδος scripting γλώσσας που είναι dynamic, weakly typed και
first-class function. Είναι μια γλώσσα multi-paradigm που υποστηρίζει object-oriented είδος
προγραμματισμού. Η JavaScript χρησιμοποιείται κυρίως με τη μορφή client-side Javascript,
υλοποιείται ως μέρος ενός web browser, ώστε να παρέχει ενισχυμένη διεπαφή χρήστη και δυναμικών ιστοσελίδων. Αυτό δίνει τη δυνατότητα για προγραμματική πρόσβαση σε υπολογιστικά αντικείμενα μέσα σε ένα περιβάλλον υποδοχής.
Η χρήση της JavaScript σε εφαρμογές εκτός των ιστοσελίδων όπως σε έγγραφα PDF
και σε widgets που χρησιμοποιούνται στην επιφάνεια εργασίας είναι εξίσου σημαντική. Με
νεότερη και ταχύτερη JavaScript VirtualMachine πλέον έχει ευξηθεί η δυναμικότητα της JavaScript σε server-side εφαρμογές web. H JavaScript χρησιμοποιεί σύνταξη επηρεαζόμενη
από αυτή της C. Η JavaScript αντιγράφει πολλά από την Java αλλά οι δύο γλώσσες είναι εκτός των άλλων πολύ διαφορετικές και έχουν πολύ διαφορετική σημασιολογία. Οι βασικές
αρχές σχεδιασμού της JavaScript χρησιμοποιούνται από τις γλώσσες προγραμματισμού Self
και Scheme.
2.6.2
Χρήσεις της Javascript
Η JavaScript δίνει στους σχεδιαστές της HTML ένα εργαλείο προγραμματισμού καθώς η JavaScript είναι μια γλώσσα scripting με πολύ απλή σύνταξη. Η JavaScript αντιδράει
σε γεγονότα καθώς μπορεί να ρυθμιστεί για να εκτελέσει μία ενέργεια όταν συμβαίνει κάτι ,
όπως παραδείγματος χάριν όταν μια σελίδα έχει ολοκληρώσει την φόρτωση της ή όταν ένας χρήστης κάνει κλικ σε ένα στοιχείο HTML. Ένα άλλο στοιχείο της JavaScript είναι ότι μπορεί να διαβάσει και να αλλάξει το περιεχόμενο ενός στοιχείου HTML.
Η JavaScript μπορεί να χρησιμοποιηθεί για την επικύρωση δεδομένων μίας φόρμας πριν αυτή υποβληθεί σε ένα διακομιστή. Αυτό εξοικονομεί απ’ τον διακομιστή την επιπλέον επεξεργασία που θα χρειαζόταν να κάνει σε άλλη περίπτωση. Επίσης η
JavaScript μπορεί να χρησιμοποιηθεί για την ανίχνευση του προγράμματος περιήγησης του
χρήστη και -ανάλογα με το πρόγραμμα περιήγησης –να φορτώνει μια άλλη σελίδα που έχει
σχεδιαστεί ειδικά για το συγκεκριμένο πρόγραμμα περιήγησης. Τέλος η JavaScript μπορεί να
χρησιμοποιηθεί τη δημιουργία cookies δηλαδή μπορεί να χρησιμοποιηθεί για την αποθήκευση και ανάκτηση πληροφοριών στον υπολογιστή του χρήστη.[6]
2.6.3
Επικύρωση εντύπου μέσω της Javascript
H JavaScript μπορεί να χρησιμοποιηθεί για την επικύρωση δεδομένων σε φόρμες HTML πριν
την αποστολή του περιεχομένου σε ένα διακομιστή.
Δεδομένα φόρμας που συνήθως ελέγχονται από ένα JavaScript είναι :
1. Εάν ο χρήστης δεν εισάγει κείμενο και τα πεδία είναι κενά.
2. Εάν η εισαγωγή κειμένου είναι μόνο με αριθμούς.
3. Εάν η εισαγωγή κειμένου είναι μόνο με γράμματα.
4. Εάν η εισαγωγή κειμένου είναι όλοι οι αλφαριθμητικοί χαρακτήρες (αριθμοί και γράμματα).
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 23
5. Εάν η εισαγωγή κειμένου έχει το σωστό αριθμό των χαρακτήρων (χρήσιμο στον περιορισμό του μήκους ενός ονόματος χρήστη και / ή του κωδικού πρόσβασης).
6. Εάν μια επιλογή έχει γίνει από μια είσοδο επιλογής με HTML (drop down επιλογέας).
7. Εάν η διεύθυνση ηλεκτρονικού ταχυδρομείου είναι έγκυρη.
8. Εάν ο χρήστης εισάγει μια έγκυρη ημερομηνία.
9. Εάν ο χρήστης εισάγει μια έγκυρη ώρα.
2.6.4
Παραδείγματα ελέγχου με Javascript
Παράδειγμα 1
Το παρακάτω παράδειγμα ελέγχει αν ένα πεδίο έχει μείνει κενό. Εάν το πεδίο είναι
κενό, ένα πλαίσιο ειδοποίησης ειδοποιεί με ένα μήνυμα, η συνάρτηση επιστρέφει ψευδή, καθώς και το έντυπο δεν θα υποβληθεί:
Κώδικας JavaScript:
function validateForm()
{var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("First name must be filled out");
return false;
}
}
Παράδειγμα 2
Το παρακάτω παράδειγμα ελέγχει:
α. Εάν ο χρήστης εισάγει μια έγκυρη ημερομηνία (function checkdate)
β. Εάν ο χρήστης εισάγει μια έγκυρη ώρα (function checktime)
Κώδικας JavaScript:
function checkdate(input){
var validformat=/^\d{4}\-\d{2}\-\d{2}$/ //Basic check for format validity
var returnval=false
if (!validformat.test(input.value))
alert("Η ημερομηνία αυτή δεν ισχύει. Πρέπει να είναι της μορφής ΥΥΥΥ-ΜΜ-DD. Παρακαλώ συμπληρώστε ξανά.")
else{ //Detailed check for valid date ranges
var yearfield=input.value.split("-")[0]
var monthfield=input.value.split("-")[1]
var dayfield=input.value.split("-")[2]
var dayobj = new Date(yearfield, monthfield-1, dayfield)
if
((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=y
earfield))
alert("Η ημέρα, ο μήνας, ή ο χρόνος δεν ισχύει. Παρακαλώ συμπληρώστε ξανά.")
else
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 24
returnval=true
}
if (returnval==false) input.select()
return returnval
}
Κώδικας JavaScript:
function checktime(input) {
// Checks if time is in HH:MM:SS format.
var validformat=/^[0-2][0-9]\:[0-6][0-9]\:[0-6][0-9]$/
if (!validformat.test(input.value)){
alert ("Η ώρα αυτή δεν ισχύει. Πρέπει να είναι της μορφής HH:MM:SS. Παρακαλώ
συμπληρώστε ξανά.");
return false;
}
return true;
}
Παράδειγμα 3
Παρακάτω έχουμε πάρει τον κώδικα HTML και τη λειτουργία formValidator και τα
συνδέουμε με κάποιες λειτουργίες επικύρωσης που αναφέραμε παραπάνω
α. Εάν ο χρήστης δεν εισάγει κείμενο και τα πεδία είναι κενά (function notEmpty)
β. Εάν η εισαγωγή κειμένου είναι μόνο με αριθμούς (function isNumeric)
γ. Εάν η εισαγωγή κειμένου είναι μόνο με γράμματα (function isAlphabet)
δ. Εάν η εισαγωγή κειμένου είναι αλφαριθμητικοί χαρακτήρες (function isAlphanumeric)
ε. Εάν η εισαγωγή κειμένου έχει το σωστό αριθμό των χαρακτήρων (function
lengthRestriction)
στ. Εάν μια επιλογή έχει γίνει από το drop down list (function madeSelection)
ζ. Εάν η διεύθυνση ηλεκτρονικού ταχυδρομείου είναι έγκυρη (function emailValidator)
Κώδικας JavaScript:
<script type='text/javascript'>
function formValidator(){
// Make quick references to our fields
var firstname = document.getElementById('firstname');
var addr = document.getElementById('addr');
var zip = document.getElementById('zip');
var state = document.getElementById('state');
var username = document.getElementById('username');
var email = document.getElementById('email');
// Check each input in the order that it appears in the form!
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 25
if(isAlphabet(firstname, "Please enter only letters for your name")){
if(isAlphanumeric(addr, "Numbers and Letters Only for Address")){
if(isNumeric(zip, "Please enter a valid zip code")){
if(madeSelection(state, "Please Choose a State")){
if(lengthRestriction(username, 6, 8)){
if(emailValidator(email, "Please enter a valid email address")){
return true;
}
}
}
}
}
}
return false;
}
function notEmpty(elem, helperMsg){
if(elem.value.length == 0){
alert(helperMsg);
elem.focus(); // set the focus to this input
return false;
}
return true;
}
function isNumeric(elem, helperMsg){
var numericExpression = /^[0-9]+$/;
if(elem.value.match(numericExpression)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
function isAlphabet(elem, helperMsg){
var alphaExp = /^[a-zA-Z]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 26
function isAlphanumeric(elem, helperMsg){
var alphaExp = /^[0-9a-zA-Z]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
function lengthRestriction(elem, min, max){
var uInput = elem.value;
if(uInput.length >= min && uInput.length <= max){
return true;
}else{
alert("Please enter between " +min+ " and " +max+ " characters");
elem.focus();
return false;
}
}
function madeSelection(elem, helperMsg){
if(elem.value == "Please Choose"){
alert(helperMsg);
elem.focus();
return false;
}else{
return true;
}
}
function emailValidator(elem, helperMsg){
var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
if(elem.value.match(emailExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
</script>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 27
Κώδικας HTML Form:
<form onsubmit='return formValidator()' >
First Name: <input type='text' id='firstname' /><br />
Address: <input type='text' id='addr' /><br />
Zip Code: <input type='text' id='zip' /><br />
State: <select id='state'>
<option>Please Choose</option>
<option>AL</option>
<option>CA</option>
<option>TX</option>
<option>WI</option>
</select><br />
Username(6-8 characters): <input type='text' id='username' /><br />
Email: <input type='text' id='email' /><br />
<input type='submit' value='Check Form' />
</form>
Εμφάνιση:
Εικόνα 1. HTML Form
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 28
2.7
Εργαλεία ανάπτυξης δυναμικών εφαρμογών
2.7.1
Λογισμικό EasyPHP
2.7.1.1 Τι είναι το EasyPHP
Η EasyPHP είναι ένα πακέτο λογισμικού για τα Windows που επιτρέπει στην PHP και
στην MySQL να αναπτυχθεί στον προσωπικό υπολογιστή ενός προγραμματιστή. Ξεκίνησε το
1999 και ήταν η πρώτη δέσμη λογισμικού WAMP. Η EasyPHP εγκαθιστά υπηρεσίες ενός
web server στα Windows του υπολογιστή και επιτρέπει την γρήγορη και εύκολη ανάπτυξη
της PHP και MySQL σε localhost (γνωστό και ως 127.0.0.1 ). Το πακέτο περιλαμβάνει έναν
Apache server, MySQL βάση δεδομένων , και PHP επέκταση. Το πακέτο αυτό είναι ικανό να
αναπτυχθεί είτε σε ένα PC είτε σε ένα USB drive. Η διαμόρφωση γίνεται αυτόματα από την
εφαρμογή χωρίς αλληλεπίδραση από τον χρήστη.[7]
2.7.1.2 Κύρια χαρακτηριστικά του EasyPHP






Προφίλ που εγκαθιστάτε αυτόματα
Αυτόματη εύρεση διαθέσιμης θύρας
PHP Configuration Manager (μέγιστος χρόνος εκτέλεσης, αναφορά σφαλμάτων, μέγιστο μέγεθος αρχείου που μπορεί να γίνει upload,κτλ)
Apache Configuration Manager (ζώνη ώρας, διαθέσιμες θύρες,κτλ )
Alias Manager (προσθήκη / διαγραφή)
Virtual Hosts Manager (προσθήκη / διαγραφή / ενεργοποίηση / απενεργοποίηση)
2.7.1.3 Εγκατάσταση του EasyPHP
1. Κατεβάζουμε την EasyPHP από την ιστοσελίδα www.easyphp.org
2. Κάνουμε διπλό κλικ στο κατεβασμένο εκτελέσιμο αρχείο και ακολουθούμε τα βήματα.
Εικόνα 2. Επιλογή Γλώσσας Easy Php
3. Πατάμε Ok -> Next -> Τσεκάρουμε την επιλογή «I Accept the Agreement» -> Next > Next
4. Επιλέγουμε ένα προορισμό εγκατάστασης και ακολουθούμε τις οδηγίες
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 29
Εικόνα 3. Προορισμός Εγκατάστασης Easy Php
5. Πατάμε Next -> Next -> Install -> Finish.
Σε περίπτωση που έχουμε ήδη εγκαταστήσει τη MySQL πριν την EasyPHP τότε ο server
της MySQL δεν θα ξεκινά, για να επιλύσουμε το πρόβλημα αυτό ακολουθούμε τα παρακάτω
βήματα:
1. Έχουμε το σφάλμα αυτό
Εικόνα 4. Εφαρμογή Easy Php
2. Πατάμε Ctrl + Alt + Delete, και θα ανοίξει η Διαχείριση Εργασιών
3. Στις Εργασιές βρίσκουμε το mysqld-nt.exe και κάνουμε κατάργηση
Εικόνα 5. Task Manager – Processes
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 30
4. Τώρα κάνουμε διπλό κλικ στην EasyPHP και πατάμε Start στο MySQL server
Εικόνα 6. Εφαρμογή Easy Php
Δεν τρέχουμε πραγματικά την EasyPHP. Στη πραγματικότητα τρέχουμε Apache και
MySQL. Μετά την εγκατάσταση, μια συντόμευση της EasyPHP δημιουργείται στον κατάλογο "Start / Programs / EasyPHP". Όταν η EasyPHP έχει ξεκινήσει, εμφανίζεται ένα εικονίδιο
δίπλα στο ρολόι [1].Με δεξί κλικ επιτρέπετε η πρόσβαση σε διάφορα μενού [2]:
Εικόνα 7. Συντόμευση EasyPHP
Εικόνα 8. Μενού Easy Php
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 31
Help: Βοήθεια σχετικά με EasyPHP
Log Files: Τα λάθη που παράγονται από Apache, MySQL και EasyPHP
Configuration: Επιτρέπει την πρόσβαση σε διάφορα εργαλεία διαμόρφωσης
Explore: Άνοιγμα του φακέλου "www" στην Εξερεύνηση των Windows
Administration: Ανοίγει η σελίδα διαχείρισης
Local Web: Ανοίγει τοπικό web
Restart: Επανεκκίνηση του Apache και MySQL
Start / Stop: Εκκίνηση / Τερματισμός Apache και MySQL
Exit: Τερματισμός EasyPHP
Θα πρέπει να τοποθετήσουμε τα αρχεία μας, είτε στον φάκελο "www" ή ένα ψευδώνυμο που θα έχουμε δημιουργήσει, έτσι ώστε η PHΡ να μπορεί να ερμηνεύσει τις PHP σελίδες μας. Για να δούμε τις σελίδες μας, επιλέγουμε "Local Web" ή το ψευδώνυμο στην σελίδα
"Αdministration".[10]
Έχοντας κανει όλα αυτά πάμε στο browser μας και γράφουμε http://localhost/.
Η κεντρική σελίδα του EasyPHP είναι κάπως έτσι :
Εικόνα 9. Σελίδα διαχείρισης της εφαρμογής EasyPHP
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 32
2.7.2
Λογισμικό PhpΜyAdmin
2.7.2.1 Τι είναι το PhpΜyAdmin
Το phpMyAdmin είναι ένα δωρεάν λογισμικό, ένα εργαλείο γραμμένο σε PHP που
προορίζεται για το χειρισμό της MySQL μέσω του World Wide Web. Το phpMyAdmin υποστηρίζει ένα ευρύ φάσμα ενεργειών με MySQL. Οι πιο συχνά χρησιμοποιούμενες λειτουργίες
υποστηρίζονται από το περιβάλλον εργασίας του χρήστη είναι ( διαχείριση βάσεων δεδομένων, πίνακες, πεδία, σχέσεις, ευρετήρια, οι χρήστες, δικαιώματα χρηστών κλπ), ενώ εξακολουθούμε να έχουμε τη δυνατότητα να εκτελέσουμε άμεσα οποιαδήποτε πρόταση SQL.Το
phpMyAdmin έρχεται με ένα ευρύ φάσμα εγγράφων το οποίο βοηθάει το χρήστη στην εκτέλεση των εργασιών που υποστηρίζονται από το phpMyAdmin.
Για το phpMyAdmin επίσης μπορούμε να βρούμε βοήθεια και σε ένα βιβλίο που γράφτηκε από έναν από τους προγραμματιστές , το “Mastering phpMyAdmin for Effective
MySQL Management”. Για να είναι πιο εύκολη η χρήση του σε ένα ευρύ φάσμα ανθρώπων,
το phpMyAdmin έχει μεταφραστεί σε 62 γλώσσες και υποστηρίζει τόσο από LTR όσο και
από RTL γλώσσες. Από την έκδοση 3.0.0, στο phpMyAdmin προσχώρησαν στην GoPHP5
πρωτοβουλία και σβήστηκε ο κώδικας συμβατότητας για τις παλαιότερες εκδόσεις PHP και
MySQL .Η έκδοση 3 και αργότερα απαιτεί τουλάχιστον PHP 5.2 και MySQL 5.Το
phpMyAdmin έχει κερδίσει πολλά βραβεία . Μεταξύ άλλων, επιλέχθηκε ως η καλύτερη PHP
εφαρμογή σε διάφορα βραβεία και έχει κερδίσει κάθε χρόνο τα βραβεία SourceForge.net
Community Choice Awards σαν "Best Tool or Utility for SysAdmins".Τέλος το phpMyAdmin είναι ένα δεκατριών ετών έργο με μια σταθερή και ευέλικτη βάση κώδικα.[8]
2.7.2.2 Χαρακτηριστικά του PhpΜyAdmin









Διορατικό Web interface
Υποστήριξη για τα περισσότερα χαρακτηριστικά MySQL:
o περιήγηση και κατάργηση βάσεων δεδομένων, πινάκων, πεδίων και ευρετηρίων
o δημιουργία, αντιγραφή, κατάργηση, μετονομασία και αλλαγές στις βάσεις δεδομένων, πίνακες, πεδία και ευρετήρια
o συντήρηση διακομιστή, βάσεις δεδομένων και πινάκων, με προτάσεις για τη
διαμόρφωση του διακομιστή
o εκτέλεση, επεξεργασία και επιλογή σελιδοδείκτη για οποιαδήποτε SQLδήλωση.
o διαχείριση MySQL χρηστών και τα προνόμια τους
o διαχείριση αποθηκευμένων διαδικασιών και εναύσματα
Εισαγωγή δεδομένων από CSV και SQL
Εξαγωγή δεδομένων σε διάφορες μορφές: CSV, SQL, XML, PDF, το πρότυπο
ISO / IEC 26300 - OpenDocument κειμένου και λογιστικών φύλλων, Word,
LATEX
Η διαχείριση πολλών διακομιστών
Δημιουργία PDF γραφικών της διάταξης βάσης δεδομένων
Δημιουργία σύνθετων εκφράσεων χρησιμοποιώντας Query-by-example (QBE)
Αναζήτηση σε καθολικό επίπεδο σε μια βάση δεδομένων ή ένα υποσύνολο της
Μετατροπή αποθηκευμένων δεδομένων σε οποιαδήποτε μορφή χρησιμοποιώντας ένα
σύνολο από προκαθορισμένες λειτουργίες, όπως η εμφάνιση BLOB-δεδομένα ως εικόνα ή download-Link[8]
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 33
Εικόνα 10. Σελίδα διαχείρισης της εφαρμογής phpMyAdmin
2.7.3
Apache HTTP εξυπηρετητής
2.7.3.1 Τι είναι ο Apache HTTP εξυπηρετητής
Ο Apache HTTP γνωστός και απλά σαν Apache είναι ένας εξυπηρετητής του παγκόσμιου ιστού (web). Όποτε ένας χρήστης επισκέπτεται ένα ιστότοπο το πρόγραμμα πλοήγησης
(browser) επικοινωνεί με έναν διακομιστή (server) μέσω του πρωτοκόλλου HTTP, ο οποίος
παράγει τις ιστοσελίδες και τις αποστέλλει στο πρόγραμμα πλοήγησης. O Apache είναι ένας
από τους δημοφιλέστερους, εν μέρει γιατί λειτουργεί σε διάφορες πλατφόρμες όπως τα
Windows, το Linux, το Unix και το Mac OS X. Συντηρείται τώρα από μια κοινότητα ανοικτού κώδικα με επιτήρηση από το Ίδρυμα Λογισμικού Apache (Apache Software
Foundation).
Ο Apache χρησιμοποιείται και σε τοπικά δίκτυα σαν διακομιστής συνεργαζόμενος με
συστήματα διαχείρισης Βάσης Δεδομένων π.χ. Oracle, MySQL. Η πρώτη του έκδοση, γνωστή ως NCSA HTTPd, δημιουργήθηκε από τον Robert McCool και κυκλοφόρησε το 1993.
Θεωρείται ότι έπαιξε σημαντικό ρόλο στην αρχική επέκταση του παγκόσμιου ιστού. Ήταν η
πρώτη βιώσιμη εναλλακτική επιλογή που παρουσιάστηκε απέναντι στον εξυπηρετητή http
της εταιρείας Netscape και από τότε έχει εξελιχθεί στο σημείο να ανταγωνίζεται άλλους εξυπηρετητές βασισμένους στο Unix σε λειτουργικότητα και απόδοση. Από το 1996 ήταν από
τους πιο δημοφιλείς όμως από τον Μάρτιο του 2006 έχει μειωθεί το ποσοστό της εγκατάστασής του κυρίως από τον Microsoft Internet Information Services και την πλατφόρμα .NET .
Τον Οκτώβριο του 2007 το μερίδιο του ήταν 47.73% από όλους τους ιστοτόπους.[2]
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 34
2.7.4
Dreamweaver CS4
2.7.4.1 Τι είναι το Dreamweaver
To Adobe Dreamweaver είναι μια εφαρμογή ανάπτυξης ιστοσελίδων η οποία αρχικά
δημιουργήθηκε από τη Macromedia και πλέον ανήκει στην Adobe Systems η οποία απόκτησε
την Μacromedia τo 2005. Το Dreamweaver είναι διαθέσιμο και για χρήστες που χρησιμοποιούν Mac αλλά και Windows λειτουργικό σύστημα. Οι πιο πρόσφατες εκδόσεις έχουν ενσωματώσει υποστήριξη για τεχνολογίες web όπως CSS,JavaScript και διάφορες server-side
γλώσσες scripting όπως επίσης frameworks συμπεριλαμβανομένου ASP.NET, ColdFusion,
JavaServer Pages και PHP.
Εικόνα 11. Το λογισμικό Adobe DreamWeaver CS4
Εικόνα 12. Περιβάλλον Δημιουργίας Σελίδας Html
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 35
2.7.4.2 Χαρακτηριστικά του Dreamweaver
Βασισμένο σε WYSIWYG Presto, το Dreamweaver μπορεί να κρύψει τις λεπτομέρειες του κώδικα HTML των σελίδων από το χρήστη, κάτι που καθιστά δυνατό για τους μηεπαγγελματίες να δημιουργήσουν ιστοσελίδες και ιστοχώρους ολόκληρους. Μια επαγγελματική κριτική αυτής της προσέγγισης είναι ότι παράγει HTML σελίδες των οποίων το μέγεθος
αρχείων και η ποσότητα κώδικα HTML είναι πολύ μεγαλύτερα από αυτά που πρέπει να είναι,
το οποίο μπορεί να προκαλέσει κακή απόδοση στις μηχανές αναζήτησης. Αυτό ισχύει ιδιαίτερα διότι η εφαρμογή το καθιστά πολύ εύκολο να δημιουργήσει σχεδιαγράμματα βασισμένα
σε πίνακες (table-based layouts).
Επιπλέον, μερικοί υπεύθυνοι για την ανάπτυξη ιστοχώρων έχουν επικρίνει το
Dreamweaver στο παρελθόν για την παραγωγή του κώδικα που συχνά δεν συμμορφώνεται με
W3C πρότυπα, αν και οι πρόσφατες εκδόσεις είναι πιο υποχωρητικές. Το Dreamweaver 8.0
είχε κακή απόδοση στο test Acid2,το οποίο είναι αναπτυγμένο από Web Standards Project.
Εντούτοις, η Macromedia έχει αυξήσει την υποστήριξη για CSS και άλλους τρόπους να σχεδιαστεί μια σελίδα χωρίς πίνακες στις πιο πρόσφατες εκδόσεις της εφαρμογής, με τη δυνατότητα να μετατραπούν οι πίνακες σε στρώματα και αντίστροφα.
Το Dreamweaver επιτρέπει στους χρήστες των ιστοχώρων να μπορούν να προβάλουν
τις ιστοσελίδες τους σε πολλούς browsers, υπό τον όρο ότι είναι εγκατεστημένα στον υπολογιστή τους. Έχει επίσης μερικά εργαλεία διαχείρισης ιστοσελίδων, όπως η δυνατότητα να
βρεθούν και να αντικατασταθούν οι γραμμές κειμένου ή κώδικα με οποιοδήποτε παράμετρο
σε ολόκληρο τον ιστοχώρο, και ένα χαρακτηριστικό γνώρισμα templatization για τη δημιουργία των πολλαπλάσιων σελίδων με τις παρόμοιες δομές. Το behaviors panel επιτρέπει επίσης τη χρήση βασικού JavaScript χωρίς οποιαδήποτε γνώση κωδικοποίησης.
Το Dreamweaver μπορεί να χρησιμοποιήσει Extensions - μικρά προγράμματα, τα οποία οποιοσδήποτε υπεύθυνος για την ανάπτυξη Ιστού μπορεί να γράψει (συνήθως μέσω
HTML και JavaScript). Τα Extensions παρέχουν επιπλέον λειτουργίες στο λογισμικό για οποιονδήποτε επιθυμεί να τις μεταφορτώσει και να τις εγκαταστήσει. Το Dreamweaver υποστηρίζεται από ένα μεγάλο αριθμό δημιουργών extensions που καθιστά τα extensions διαθέσιμα (και εμπορικά και ελεύθερα) για τους περισσότερους στόχους ανάπτυξης Ιστοσελίδων
από τα πιο απλά αποτελέσματα στα πιο πλήρη. Όπως άλλοι editors HTML, έτσι και το
Dreamweaver επεξεργάζεται τα αρχεία τοπικά, κατόπιν φορτώνει όλα τα επεξεργασμένα αρχεία στο remote web server με χρησιμοποίηση δικτύου FTP, SFTP, ή WebDAV.[9]
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 36
3º ΚΕΦΑΛΑΙΟ
3.1 Σχεδίαση μιας βάσης δεδομένων
3.1.1 Τι είναι οι βάσεις δεδομένων
Μια βάση δεδομένων είναι μια συλλογή πληροφοριών με συγκεκριμένη οργάνωση
και δομή, οι οποίες σχετίζονται με ένα συγκεκριμένο θέμα ή σκοπό και είναι αποθηκευμένες
σε ένα αποθηκευτικό μέσο. Παραδείγματα βάσεων δεδομένων είναι ο τηλεφωνικός κατάλογος, η διατήρηση μιας συλλογής μουσικών κομματιών, η παρακολούθηση των παραγγελιών
των πελατών και των ειδών των προϊόντων ενός καταστήματος και άλλες.[13]
3.1.2 Θεωρία των Σχεσιακών Βάσεων Δεδομένων
Με τον όρο σχεσιακή βάση δεδομένων, ονομάζουμε τις βάσεις δεδομένων στις οποίες τα
δεδομένα είναι αποθηκευμένα σε πίνακες (tables), οι οποίοι σχετίζονται (συνδέονται) με ένα
συγκεκριμένο τρόπο μεταξύ τους. Στις σχεσιακές βάσεις δεδομένων, λόγω της σχέσης (σύνδεσης) που υπάρχει μεταξύ των πινάκων αποφεύγεται η διπλή εισαγωγή των ίδιων δεδομένων
από περισσότερους από έναν πίνακες. [13]
3.1.2.1
Πίνακες
Οι σχεσιακές βάσεις δεδομένων αποτελούνται από σχέσεις, που συνήθως ονομάζονται
πίνακες (tables). Ένας πίνακας είναι ακριβώς αυτό που αποδεικνύει το όνομά του, ένας πίνακας με δεδομένα. [13]
Δείτε το δείγμα πίνακα στην Εικόνα 1.1. Περιέχει το ΑΔΤ, το ονοματεπώνυμο και την ηλικία
πελατών μιας ναυτιλιακής εταιρείας.
ΠΕΛΑΤΕΣ
ΑΔΤ
Όνομα
Επώνυμο
Ηλικία
Χ2394
Νικόλαος
Αντωνιάδης
25
Α3436
Ιωάννης
Παπαδόπουλος
40
Ν3647
Μενέλαος
Παπαγιάννης
37
Εικόνα 13. Οι πληροφορίες για τους πελάτες μιας ναυτιλιακής εταιρείας
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 37
Αυτός ο πίνακας έχει ένα όνομα ‘πελάτες’, διάφορες στήλες, όπου η κάθε μία αντιστοιχεί σε
διαφορετικά δεδομένα και γραμμές, οι οποίες αντιστοιχούν σε διαφορετικούς πελάτες.
3.1.2.2
Στήλες
Κάθε στήλη του πίνακα έχει μοναδικό όνομα και περιέχει διαφορετικά δεδομένα. Κάθε
στήλη έχει ένα σχετικό τύπο δεδομένων. Για παράδειγμα, στον πίνακα ‘πελάτες’ της Εικόνας
1.1, μπορούμε να δούμε ότι η Ηλικία είναι ακέραιος και οι άλλες τρεις στήλες είναι συμβολοσειρές. Οι στήλες ονομάζονται και πεδία ή ιδιότητες. [13]
3.1.2.3
Γραμμές
Κάθε γραμμή του πίνακα αντιπροσωπεύει ένα διαφορετικό πελάτη. Εξ αιτίας της μορφής
ενός πίνακα, όλες οι γραμμές έχουν τις ίδιες ιδιότητες. Οι γραμμές ονομάζονται επίσης εγγραφές.
3.1.2.4
Τιμές
Κάθε γραμμή του πίνακα αποτελείται αντιπροσωπεύει από ένα σύνολο ξεχωριστών τιμών
που αντιστοιχούν σε στήλες. Κάθε τιμή πρέπει να έχει έναν τύπο δεδομένων ο οποίος καθορίζεται από την στήλη της.
3.1.2.5
Πρωτεύον κλειδί
Οι βάσεις δεδομένων συνήθως αποτελούνται από πολλούς πίνακες και χρησιμοποιούν ένα
κλειδί για συσχέτιση ενός πίνακα με έναν άλλον. Πρωτεύον κλειδί ενός πίνακα είναι το πεδίο (ή το σύνολο των πεδίων) που προσδιορίζει μοναδικά κάθε εγγραφή του πίνακα.
Από την στιγμή που θα καθορίσουμε το πρωτεύον κλειδί σε έναν πίνακα, δεν θα επιτρέπεται να καταχωρηθούν σε αυτό διπλότυπες τιμές ή κενές τιμές (NULL) στο πεδίο (ή στα πεδία) του πρωτεύοντος κλειδιού. Κάθε πίνακας μιας βάσης δεδομένων μπορεί να έχει ένα και
μόνο πρωτεύον κλειδί.
Πρέπει να είμαστε προσεκτικοί κατά την επιλογή του πεδίου που θα ορίσουμε ως πρωτεύον κλειδί του πίνακα. Αν για παράδειγμα στον πίνακα ‘πελάτες’ της Εικόνας 1.1 επιλέξουμε
το πεδίο Επώνυμο ως πρωτεύον κλειδί του πίνακα, δεν θα επιτρέπεται η εισαγωγή στον πίνακα δύο πελάτες (δύο εγγραφές) με το ίδιο επώνυμο.
Μπορούμε όμως να ορίσουμε ως πρωτεύον κλειδί στον πίνακα, το πεδίο ΑΔΤ, μια και είναι βέβαιο ότι κάθε πελάτης θα έχει μοναδικό αριθμό αστυνομικής ταυτότητας. Αυτό βέβαια
με την προϋπόθεση ότι ο πίνακας περιέχει το πεδίο ΑΔΤ. Εάν δεν το έχει θα πρέπει να διαλέξουμε κάποιο άλλο πεδίο. [13]
3.1.2.6
Σχήματα
Η πλήρης σχεδίαση των πινάκων μιας βάσης δεδομένων ονομάζεται σχήμα (schema). Ένα
σχήμα θα πρέπει να δείχνει τους πίνακες μαζί με τις στήλες τους, τους τύπους δεδομένων των
στηλών και να υποδεικνύει το πρωτεύον κλειδί κάθε πίνακα και τα ξένα κλειδιά τους. Το
σχήμα μπορεί να μπορεί να εμφανιστεί με άτυπα διαγράμματα όπως έχουμε κάνει εδώ σύμφωνα με τον πίνακα ‘πελάτες’ της Εικόνας 1.1, και με διαγράμματα οντοτήτων. [13]
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 38
Πελάτες (ΑΔΤ, Όνομα, Επώνυμο, Ηλικία)
Δρομολόγιο ( Κωδικός_δρομ , ΑΔΤ, Αφετηρία, Προορισμός, Ημερομηνία)
Οι υπογραμμισμένοι όροι του σχήματος είναι τα πρωτεύοντα κλειδιά της σχέσης. Οι πλάγιοι
όροι (ΑΔΤ) είναι ξένα κλειδιά στην σχέση στην οποία εμφανίζονται.
3.1.2.7
Σχέσεις
Τα ξένα κλειδιά αντιπροσωπεύουν μία σχέση μεταξύ των δεδομένων δύο πινάκων. Για
παράδειγμα, η σύνδεση από τον πίνακα ‘Δρομολόγιο’ στον πίνακα ‘Πελάτες’ αντιπροσωπεύει
μια σχέση μεταξύ μιας γραμμής του πίνακα ‘Δρομολόγιο’ και μιας γραμμής του πίνακα ‘Πελάτες’. Υπάρχουν τρία βασικά είδη σχέσεων σε μια σχεσιακή βάση δεδομένων: [13]
i.
ii.
iii.
Σχέση ένα-προς ένα: υπάρχει ένα στοιχείο μόνο σε κάθε πλευρά της σχέσης.
Σχέση ένα-προς πολλά: μία γραμμή ενός πίνακα είναι συνδεδεμένη με πολλές γραμμές του άλλου πίνακα. Σε αυτές τις σχέσεις, ο πίνακας που περιέχει τις πολλές γραμμές θα έχει ένα ξένο κλειδί που τον συνδέει με τον πίνακα με την μία γραμμή.
Σχέση πολλά-προς πολλά: μία γραμμή ενός πίνακα είναι συνδεδεμένη με πολλές
γραμμές ενός δεύτερου πίνακα και μια γραμμή του δεύτερου πίνακα είναι συνδεδεμένη με πολλές γραμμές του πρώτου πίνακα.
3.2
Πρόσβαση σε μια MYSQL βάση δεδομένων με την
PHP
3.2.1 Τι είναι η SQL
Το σύνολο των εντολών που θα χρησιμοποιούμε από δω και πέρα για να λέμε στην
MySQL τι να κάνει, αποτελεί μέρος ενός standard που αποκαλείται Δομημένη Γλώσσα Ερωτημάτων (Structured Query Language) ή SQL. Οι εντολές της SQL αποκαλούνται επίσης και
ερωτήματα (queries).
Η SQL χρησιμοποιείται για να αποθηκεύουμε και να ανακαλούμε δεδομένα από μια
βάση δεδομένων. Χρησιμοποιείται σε διάφορα συστήματα διαχείρισης βάσεων δεδομένων
όπως η MySQL, Oracle, Sybase και Microsoft SQL Server.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 39
3.2.2 Σύνδεση στην Βάση Δεδομένων με την PHP
Πριν να έχουμε πρόσβαση στα δεδομένα σε μια βάση δεδομένων θα πρέπει να δημιουργήσουμε μια σύνδεση σε αυτήν. Στην PHP, η εντολή είναι η συνάρτηση mysql_connect()
και συντάσσεται ως εξής:
Σύνταξη
mysql_connect ( servername, username, password);
servername: Προαιρετικό. Καθορίζει το διακομιστή για να συνδεθούμε στην βάση. Η προεπιλεγμένη τιμή είναι "localhost: 3306"
username: Προαιρετικό. Καθορίζει το όνομα χρήστη για να συνδεθούμε με την βάση. Προεπιλεγμένη τιμή είναι το όνομα του χρήστη στον οποίο ανήκει ο διακομιστής.
password : Προαιρετικό. Καθορίζει τον κωδικό πρόσβασης για να συνδεθείτε με. Η προεπιλογή είναι ""
Παράδειγμα
Στο παρακάτω παράδειγμα, αποθηκεύουμε τη σύνδεση σε μια μεταβλητή ($ con).
Το τμήμα "die" θα εκτελεστεί αν η σύνδεση αποτύχει:
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
?>
Το κλείσιμο μιας σύνδεσης
Η σύνδεση θα κλείσει αυτόματα όταν το script τελειώσει. Για να κλείσουμε τη σύνδεση, χρησιμοποιούμε την mysql_close () λειτουργία:
<? php
$ con = mysql_connect ("localhost", "root", "")?
if (! $ con)
{
die ("Δεν ήταν δυνατή η σύνδεση:". mysql_error ())?
}
mysql_close ($ con)?
?>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 40
3.2.3 Εκτέλεση SQL Ερωτημάτων (Queries) με την PHP
Είδαμε πώς μπορούμε να συνδεθούμε σ’ έναν database server της MySQL με το πρόγραμμα mysql για να μπορέσουμε να γράψουμε ερωτήματα (queries) ή εντολές (commands)
της SQL και να δούμε αμέσως τα αποτελέσματα των ερωτημάτων. Στην PHP υπάρχει ένας
παρόμοιος μηχανισμός, η συνάρτηση mysql_query().
mysql_query(<query>, <connection id>);
Όπου το <query> είναι ένα string που περιέχει τις εντολές της SQL που θα εκτελεσθούν. Όπως και με τη συνάρτηση mysql_select_db(), η παράμετρος connection identifier (αναγνωριστικό σύνδεσης) είναι προαιρετική.Η τιμή επιστροφής αυτής της συνάρτησης εξαρτάται από το είδος του ερωτήματος που στέλνεται. Για τις περισσότερες εντολές της SQL, η
συνάρτηση mysql_query() επιστρέφει true ή false για να δείξει την επιτυχία ή την αποτυχία
της αντίστοιχα.
Η συνάρτηση mysql_error() επιστρέφει ένα string κειμένου που περιγράφει το τελευταίο μήνυμα λάθους (error message) που στάλθηκε από τον MySQL server.
Για τα ερωτήματα DELETE, INSERT και UPDATE, με τα οποία μπορούμε να τροποποιήσουμε τα αποθηκευμένα δεδομένα, η MySQL κατά-γράφει επίσης τον αριθμό των γραμμών
του πίνακα (καταχωρήσεων) που επηρεάστηκαν από το ερώτημα (query).[12]
3.2.3.1 Εισαγωγή (insert) δεδομένων στην Βάση Δεδομένων με την
PHP
Η εντολή για να εισάγουμε δεδομένα σε μια βάση δεδομένων αποκαλείται INSERT και
υπάρχουν οι εξής δύο βασικές μορφές αυτής της εντολής :
Σύνταξη
INSERT INTO table_name
VALUES (value1, value2, value3,...)
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
Παράδειγμα
Το ακόλουθο παράδειγμα προσθέτει δύο νέες εγγραφές στον πίνακα "Πελάτες":
<? php
$ con = mysql_connect ("localhost", "root", "")?
if (! $ con)
{
die ("Δεν ήταν δυνατή η σύνδεση:". mysql_error ())?
}
mysql_select_db ("my_db", $ con)?
mysql_query ("INSERT INTO πελάτες (Όνομα, Επώνυμο, Ηλικία)
VALUES («Μαρία», «Παπαδοπούλου», '35')");
mysql_query ("INSERT INTO πελάτες (Όνομα, Επώνυμο, Ηλικία)
VALUES («Γιώργος», «Μήτρου», '33')");
mysql_close ($ con)?
?>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 41
3.2.3.2
Επιλογή (select) δεδομένων στην Βάση Δεδομένων με την PHP
Η πρόταση SELECT χρησιμοποιείται για την επιλογή δεδομένων από μια βάση δεδομένων.
Σύνταξη
SELECT column_name (s)
FROM table_name
Για να εκτελέσει η PHP την παραπάνω δήλωση πρέπει να χρησιμοποιήσουμε την
mysql_query () συνάρτηση. Αυτή η λειτουργία χρησιμοποιείται για να στείλει ένα ερώτημα ή
την εντολή σε μια σύνδεση MySQL.
Παράδειγμα 1
Το ακόλουθο παράδειγμα επιλέγει όλα τα δεδομένα που είναι αποθηκευμένα στον πίνακα
"Πρόσωπα" (Ο χαρακτήρας * επιλέγει όλα τα στοιχεία στον πίνακα):
<? Php
$ Con = mysql_connect ("localhost", "root", "")?
if (! $ con)
{
die ("Δεν ήταν δυνατή η σύνδεση:". mysql_error ())?
}
mysql_select_db ("my_db", $ con)?
$ result = mysql_query ("SELECT * FROM Πελάτες")?
ενώ ($ row = mysql_fetch_array ($ result))
{
echo $ row [«Όνομα»]. "". $ row ['Επώνυμο']?
echo "<br />"?
}
mysql_close ($ con)?
?>
Το παραπάνω παράδειγμα αποθηκεύει τα δεδομένα που επιστρέφονται από την
mysql_query() συνάρτηση στην μεταβλητή $ result. Η συνάρτηση mysql_fetch_array() δέχεται ένα σύνολο αποτελεσμάτων (result set) σαν παράμετρο, που είναι αποθηκευμένο στη μεΑγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 42
ταβλητή $result στη συγκεκριμένη περίπτωση, και επιστρέφει την επόμενη γραμμή του result
set σαν έναν πίνακα (array). Όταν δεν υπάρχουν άλλες γραμμές στο result set, η συνάρτηση
mysql_fetch_array() επιστρέφει την τιμή false.
Η παραπάνω εντολή εκχωρεί μια τιμή στη μεταβλητή $row, αλλά ταυτόχρονα η ίδια η
εντολή αποκτά την ίδια τιμή. Αυτός είναι ο λόγος που μπορούμε να χρησιμοποιήσουμε την
εντολή για τη συνθήκη του βρόχου while.
Εφόσον οι βρόχοι while συνεχίζουν να εκτελούνται μέχρις ότου η συνθήκη τους γίνει
ίση με false, ο βρόχος θα επαναληφθεί για όσο υπάρχουν γραμμές στο result set, με τη μεταβλητή $row να αποκτά κάθε φορά την τιμή της επόμενης γραμμής. Αυτό που έμεινε είναι να
δούμε πώς μπορούμε κάθε φορά να παίρνουμε τις τιμές της μεταβλητής $row. Για να εκτυπώσουμε την τιμή της κάθε γραμμής, χρησιμοποιούμε την μεταβλητή $row ($row ["Όνομα"]
και $row ["Επώνυμο"]).
Η έξοδος του παραπάνω κώδικα θα είναι:
Μαρία
Γιώργος
Παπαδοπούλου
Μήτρου
Παράδειγμα 2
Εμφάνιση του αποτελέσματος σε έναν πίνακα HTML
Το ακόλουθο παράδειγμα επιλέγει τα ίδια στοιχεία με το παραπάνω παράδειγμα, αλλά θα εμφανίζει τα δεδομένα σε πίνακα HTML:
<? Php
$ Con = mysql_connect ("localhost", "root", "")?
if (! $ con)
{
die ("Δεν ήταν δυνατή η σύνδεση:". mysql_error ())?
}
mysql_select_db ("my_db", $ con)?
$ result = mysql_query ("SELECT * FROM Πελάτες")?
echo "<table border='1'>
<tr>
<th> Όνομα </ th>
<th> Επώνυμο </ th>
</ Tr> "?
while ($ row = mysql_fetch_array ($ result))
{
echo "<tr>"?
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 43
echo "<td>". $ row [«Όνομα»]. "</ Td>"?
echo "<td>". $ row ["Επώνυμο"]. "</ Td>"?
echo "</ tr>"?
}
echo "</ table>"?
mysql_close ($ con)?
?>
Η έξοδος του παραπάνω κώδικα θα είναι:
Όνομα
Επώνυμο
Μαρία
Παπαδοπούλου
Γιώργος
3.2.3.3
Μήτρου
Ο όρος WHERE στην Βάση Δεδομένων με την PHP
Ο όρος WHERE χρησιμοποιείται για την εξαγωγή μόνο εκείνων των εγγραφών που πληρούν
ένα συγκεκριμένο κριτήριο.
Σύνταξη
SELECT column_name (s)
FROM table_name
Για να εκτελέσει η PHP την παραπάνω δήλωση πρέπει να χρησιμοποιήσουμε την
mysql_query () συνάρτηση. Αυτή η λειτουργία χρησιμοποιείται για να στείλει ένα ερώτημα ή
την εντολή σε μια σύνδεση MySQL.
Παράδειγμα
Το ακόλουθο παράδειγμα επιλέγει όλες τις γραμμές από τον πίνακα "Πελάτες", όπου "Όνομα
= 'Γιώργος':
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 44
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Πελάτες
WHERE Όνομα = ‘Γιώργος’");
while($row = mysql_fetch_array($result))
{
echo $row['Όνομα'] . " " . $row['Επώνυμο'];
echo "<br />";
}
?>
Η έξοδος του παραπάνω κώδικα θα είναι:
Γιώργος
3.2.3.4
Μήτρου
Ο όρος ORDER BY στην Βάση Δεδομένων με την PHP
Αν θέλουμε να ταξινομήσουμε τις εγγραφές σε φθίνουσα ή αύξουσα σειρά, μπορούμε να
χρησιμοποιήσουμε τη λέξη-κλειδί DESC ή ASC αντίστοιχα .
Σύνταξη
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC
Παράδειγμα
Το ακόλουθο παράδειγμα επιλέγει όλα τα δεδομένα που είναι αποθηκευμένα στον πίνακα
"Πελάτες", και ταξινομεί το αποτέλεσμα με βάση την στήλη "ηλικία":
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Πελάτες ORDER BY Ηλικία");
while($row = mysql_fetch_array($result))
{
echo $row['Όνομα'];
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 45
echo " " . $row['Επώνυμο];
echo " " . $row['Ηλικία'];
echo "<br />";
}
mysql_close($con);
?>
Η έξοδος του παραπάνω κώδικα θα είναι:
Γιώργος
Μαρία
Μήτρου
33
Παπαδοπούλου
35
Ταξινόμηση ανά δύο στήλες
Σύνταξη
SELECT column_name(s)
FROM table_name
ORDER BY column1, column2
3.2.3.5 Ενημέρωση (update) δεδομένων στην Βάση Δεδομένων με την
PHP
Η εντολή UPDATE χρησιμοποιείται για να ενημερώσουμε υπάρχουσες εγγραφές σε έναν πίνακα.
Σύνταξη
UPDATE table_name
SET column1=value, column2=value2
WHERE some_column=some_value
Παράδειγμα
Το ακόλουθο παράδειγμα ενημερώνει ορισμένα στοιχεία στον πίνακα "Πελάτες":
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 46
mysql_query("UPDATE Πελάτες SET Age = '36'
WHERE Όνομα = 'Γιώργος' AND Επώνυμο = 'Μήτρου'");
mysql_close($con);
?>
Η έξοδος του παραπάνω κώδικα θα είναι:
Όνομα
Επώνυμο
Ηλικία
Γιώργος
Μήτρου
36
Παπαδοπούλου
35
Μαρία
3.2.3.6 Διαγραφή (delete) δεδομένων από την Βάση Δεδομένων με την
PHP
Η εντολή DELETE FROM χρησιμοποιείται για να διαγράφουμε εγγραφές από έναν πίνακα
της βάσης δεδομένων. [14]
Σύνταξη
DELETE FROM table_name
WHERE some_column = some_value
Παράδειγμα
Το ακόλουθο παράδειγμα διαγράφει όλες τις εγγραφές του πίνακα "Πελάτες", όπου Επώνυμο
= "Μήτρου":
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("DELETE FROM Πελάτες WHERE Επώνυμο = ‘Μήτρου’");
mysql_close($con);
?>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 47
Μετά τη διαγραφή, ο πίνακας θα μοιάζει κάπως έτσι:
Όνομα
Μαρία
Επώνυμο
Ηλικία
Παπαδοπούλου
35
3.2.4 Εκτέλεση SQL Ερωτημάτων (Queries) με συναρτήσεις συγκεντρωτικών αποτελεσμάτων (Aggregate Functions) με την PHP
3.2.4.1
MySQL GROUP BY
Ο όρος GROUP BY (ομαδοποίηση κατά δήλωση) χρησιμοποιείται σε συνδυασμό με τις
συναρτήσεις συγκεντρωτικών αποτελεσμάτων (Aggregate Functions) σε μια ομάδα αποτελεσμάτων από μία ή περισσότερες στήλες. [14]
Σύνταξη
SELECT column_name, aggregate_function (column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
3.2.4.2
MySQL Συνάρτηση - COUNT()
Η συνάρτηση count () μετράει τα στοιχεία ενός πίνακα, ή τις ιδιότητες ενός αντικειμένου.
Σύνταξη
SELECT COUNT(column_name) FROM table_name
Παράδειγμα
Το ακόλουθο παράδειγμα μετράει πόσες εγγραφές υπάρχουν στον πίνακα "Πελάτες", ανά το
ίδιο είδος εισιτηρίου :
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$query = "SELECT type, COUNT(όνομα) FROM Πελάτες GROUP BY είδος
εισιτηρίου";
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 48
while($row = mysql_fetch_array($result)){
echo "Υπάρχουν ". $row['COUNT(όνομα)'] ." ". $row[' είδος εισιτηρίου '] ."
εισιτήρια.";
echo "<br />";
}
mysql_close($con);
?>
Ο πίνακας στην βάση είναι έτσι:
ΑΔΤ
όνομα
Είδος εισιτηρίου
1234
Νίκος
ΟΙΝΟΝΟΜΙΚΟ
8745
Μαρία
ΟΙΝΟΝΟΜΙΚΟ
4356
Γιώργος
ΦΟΙΤΗΤΙΚΟ
Το αποτέλεσμα θα είναι:
Υπάρχουν 2 ΟΙΝΟΝΟΜΙΚΟ εισιτήρια.
Υπάρχουν 1 ΦΟΙΤΗΤΙΚΟ εισιτήρια.
3.2.4.3
MySQL Συνάρτηση - SUM()
Η συνάρτηση SUM () επιστρέφει το συνολικό άθροισμα των τιμών μιας αριθμητικής στήλης.
Σύνταξη
SELECT SUM(column_name) FROM table_name
Παράδειγμα
Το ακόλουθο παράδειγμα υπολογίζει το άθροισμα της στήλης Τιμή στον πίνακα "Πελάτες"
με βάση το είδος του εισιτηρίου:
<?php
$query = "SELECT type, SUM (τιμή) FROM products GROUP BY είδος εισιτηρίου";
$result = mysql_query($query) or die(mysql_error());
// Εκτύπωση αποτελέσματος
while($row = mysql_fetch_array($result)){
echo "Συνολικό κόστος ". $row[' είδος εισιτηρίου ']. " = ". $row['SUM(τιμή)']
." ευρώ.";
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 49
echo "<br />";
}
?>
Ο πίνακας στην βάση είναι έτσι:
ΑΔΤ
όνομα
Είδος εισιτηρί- Τιμή
ου
1234
Νίκος
ΟΙΝΟΝΟΜΙΚΟ
34 ευρώ
8745
Μαρία
ΟΙΝΟΝΟΜΙΚΟ
26 ευρώ
4356
Γιώργος
ΦΟΙΤΗΤΙΚΟ
17 ευρώ
Το αποτέλεσμα θα είναι:
Συνολικό κόστος ΟΙΝΟΝΟΜΙΚΟ = 60 ευρώ.
Συνολικό κόστος ΦΟΙΤΗΤΙΚΟ = 17 ευρώ.[11]
3.2.4.4
Άλλες MySQL Συναρτήσεις - AVG(), MIN(), MAX()
 AVG (): Η συνάρτηση αυτή επιστρέφει τη μέση τιμή της μια αριθμητικής στήλης.
Σύνταξη
SELECT AVG (column_name) FROM table_name
 MIN (): Η συνάρτηση αυτή επιστρέφει την μικρότερη τιμή της επιλεγμένης στήλης.
Σύνταξη
SELECT MIN (column_name) FROM table_name
 MAX (): Η συνάρτηση αυτή επιστρέφει μικρότερη τιμή της επιλεγμένης στήλης.
Σύνταξη
SELECT MAX (column_name) FROM table_name
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 50
3.2.5 Εκτέλεση Προχωρημένων SQL Ερωτημάτων (Queries) με
την PHP
3.2.5.1
MySQL DATE Συναρτήσεις
Ο παρακάτω πίνακας περιλαμβάνει τις σημαντικότερες συναρτήσεις για την ημερομηνία:









NOW () : Επιστρέφει την τρέχουσα ημερομηνία και ώρα
CURDATE () : Επιστρέφει την τρέχουσα ημερομηνία
CURTIME () : Επιστρέφει την τρέχουσα ώρα
DATE () : Αποσπάσματα από την πλευρά ημερομηνία μιας ημερομηνίας ή την ημερομηνία / ώρα
EXTRACT () : Επιστρέφει ένα μόνο μέρος από μια ημερομηνία / ώρα
DATE_ADD () : Προσθέτει ένα καθορισμένο χρονικό διάστημα σε μια ημερομηνία
DATE_SUB () : Αφαιρεί ένα καθορισμένο χρονικό διάστημα από την ημερομηνία
DATEDIFF () : Επιστρέφει τον αριθμό των ημερών μεταξύ δύο ημερομηνιών
DATE_FORMAT () : Εμφανίζει την ημερομηνία / ώρα σε διαφορετικές μορφές
Παράδειγμα 1
Το ακόλουθο παράδειγμα εισάγει στον πίνακα ‘Κράτηση’ την τρέχουσα ώρα στην
στήλη dp_ time και την τρέχουσα ημερομηνία στην στήλη dp_ date:
<?
$query_auto = "INSERT INTO Κράτηση (dp_ time, dp_date)
VALUE (CURTIME (), CURDATE () )";
mysql_query ($query_manual) or die(mysql_error());
?>
Παράδειγμα 2
Το ακόλουθο παράδειγμα επιλέγει τη στήλη Ημερομηνία στον πίνακα ‘Δρομολόγιο’
και αφαιρεί 1 ΜΕΡΑ. Άρα αν η ημερομηνία είναι 12-12-2011 θα την κάνει 11-12-2011. Αυτό
γίνεται με τον παρακάτω κώδικα:
<?
// ΜΙΑ ΜΕΡΑ ΠΡΙΝ ΤΟ ΔΡΟΜΟΛΟΓΙΟ
$sqlquery=”SELECT DATE_SUB (ημερομηνία, INTERVAL 1 DAY) AS date FROM
Δρομολόγιο”;
$result=mysql_query ($sqlquery, $conn) or die(mysql_error());
?>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 51
3.2.5.2 Εμφάνιση δεδομένων από την Βάση Δεδομένων στην οθόνη και
διαγραφή της επιλεγμένης γραμμής δεδομένων με τη δημιουργία δύο
αρχείων και ενός link να στέλνει τα στοιχεία από το ένα αρχείο στο
άλλο.
Δημιουργούμε δύο αρχεία. Στην μία θα εμφανίσουμε τα δεδομένα id, name, lastname,
email στην οθόνη με την χρήση του ερωτήματος mysql select από την βάση δεδομένων και
θα προσθέσουμε ένα link (delete) σε κάθε γραμμή των δεδομένων της βάσης το οποίο θα μας
προτρέπει στην δεύτερη σελίδα όπου με τη χρήση του ερωτήματος mysql delete θα διαγράφεται η γραμμή στην οποία έχουμε επιλέξει αυτό το link.[11]
1. Δημιουργία αρχείου delete.php
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="test"; // όνομα βάσης
$tbl_name="test_mysql"; // όνομα πίνακα
// Σύνδεση στον server και επιλογή βάσης
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Επιλογή δεδομένων από την βάση
$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);
?>
//Εμφάνιση στην οθόνη από την βάση δεδομένων
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><table width="400%" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Delete data in mysql</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF"><strong>Id</strong></td>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 52
<td align="center" bgcolor="#FFFFFF"><strong>Name</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Lastname</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Email</strong></td>
<td align="center" bgcolor="#FFFFFF">&nbsp;</td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td>
<td bgcolor="#FFFFFF"><? echo $rows['name']; ?></td>
<td bgcolor="#FFFFFF"><? echo $rows['lastname']; ?></td>
<td bgcolor="#FFFFFF"><? echo $rows['email']; ?></td>
<td bgcolor="#FFFFFF"><a href="delete_next.php?id=<? echo $rows['id']; ?>">delete</a></td>
</tr>
<?
// close while loop
}
// Κλείνει η σύνδεση
mysql_close();
?>
</table></td>
</tr>
</table>
Εμφάνιση στην οθόνη
Εικόνα 14. Παράδειγμα διαγραφής στοιχεών πατώντας ένα link
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 53
2. Δημιουργία αρχείου delete_next.php
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="test"; // όνομα βάσης
$tbl_name="test_mysql"; // όνομα πίνακα
// Σύνδεση στον server και επιλογή βάσης
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Παίρνω την τιμή που στάλθηκε από το address bar
$id=$_GET['id'];
// Διαγραφή δεδομένων στην mysql από τη γραμμή που έχει αυτό το id
$sql="DELETE FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);
// Εάν γίνει η διαγραφή επιτυχώς
if($result){
echo "Deleted Successfully";
echo "<BR>";
echo "<a href='delete.php'>Back to main page</a>";
}
else {
echo "ERROR";
}
// Κλείνει η σύνδεση
mysql_close();
?>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 54
4º ΚΕΦΑΛΑΙΟ
4.1
Περιγραφή της βάσης δεδομένων της εφαρμογής
4.1.1 Σχεδίαση Μοντέλου Οντοτήτων-Συσχετίσεων
Εικόνα 15. Διάγραμμα Οντοτήτων-Συσχετίσεων
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 55
Παρακάτω αναλύουμε τις συσχετίσεις μεταξύ οντοτήτων όπως φαίνονται στο
παραπάνω σχήμα οντοτήτων-συσχετίσεων:
 Η συσχέτιση μεταξύ των οντοτήτων ‘ΠΕΛΑΤΗΣ’ και ‘ΔΡΟΜΟΛΟΓΙΟ’ είναι
«ΚΑΝΕΙ». Ένας πελάτης κάνει πολλά δρομολόγια (1,Ν) και ένα δρομολόγιο το κάνουν πολλοί πελάτες (1,Ν).
 Η συσχέτιση μεταξύ των οντοτήτων ‘ΠΡΑΚΤΟΡΑΣ’ και ‘ΔΡΟΜΟΛΟΓΙΟ’ είναι
«ΚΑΝΕΙ». Ένας πράκτορας κάνει κράτηση για πολλούς πελάτες σε πολλά δρομολόγια
(1,Ν) και ένα δρομολόγιο μπορούν να κάνουν κράτηση για πελάτες, πολλοί πράκτορες
(1,Ν).
 Η συσχέτιση μεταξύ των οντοτήτων ‘ΠΛΟΙΟ’ και ‘ΔΡΟΜΟΛΟΓΙΟ’ είναι
«ΠΡΑΓΜΑΤΟΠΟΙΕΙ». Ένα πλοίο πραγματοποιεί πολλά δρομολόγια (1,Ν) και ένα
δρομολόγιο πραγματοποιείται από ένα πλοίο (1,1).
 Η συσχέτιση μεταξύ των οντοτήτων ‘ΔΡΟΜΟΛΟΓΙΟ’ και ‘ΕΤΑΙΡΕΙΑ’ είναι
«ΑΝΗΚΕΙ». Ένα δρομολόγιο ανήκει σε μία εταιρεία (1,1). Σε μία εταιρεία ανήκουν
πολλά δρομολόγια (1,Ν).
 Η συσχέτιση μεταξύ των οντοτήτων ‘ΥΠΑΛΛΗΛΟΣ’ (πλοίαρχος) και
‘ΔΡΟΜΟΛΟΓΙΟ’ είναι «ΔΟΥΛΕΥΕΙ». Ενας πλοίαρχος δουλεύει σε πολλά δρομολόγια (1,Ν) και σε ένα δρομολόγιο δουλεύει ένας πλοίαρχος (1,1).
 Η συσχέτιση μεταξύ των οντοτήτων ‘ΕΤΑΙΡΕΙΑ’ και ‘ΠΛΟΙΟ’ είναι «ΔΙΑΘΕΤΕΙ».
Μία εταιρεία διαθέτει πολλά πλοία (1,Ν) και ένα πλοίο διατίθεται σε μία εταιρεία
(1,1).
 Η συσχέτιση μεταξύ των οντοτήτων ‘ΥΠΑΛΛΗΛΟΣ’ και ‘ΕΤΑΙΡΕΙΑ’ είναι
«ΔΟΥΛΕΥΕΙ». Ένας υπάλληλος δουλεύει σε μία εταιρεία (1,1) και σε μία εταιρεία
δουλεύουν πολλοί υπάλληλοι (1,Ν).
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 56
4.1.2 Δημιουργία Πινάκων
4.1.2.1
Βάση Δεδομένων ‘login’
Στη βάση δεδομένων login έχουμε 3 πίνακες.
 Πίνακας `admin` :
CREATE TABLE `admin` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(10) NOT NULL default '',
`password` varchar(10) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
Εικόνα 16. Πίνακας ‘admin’
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 57
 Πίνακας `eggrafi_pelati`:
CREATE TABLE `eggrafi_pelati` (
`onoma` varchar(20) NOT NULL default '',
`epitheto` varchar(20) NOT NULL default '',
`thlefwno` int(10) NOT NULL default '0',
`dieythynsh` varchar(20) NOT NULL default '',
`ADT` varchar(10) NOT NULL default '',
`username` varchar(10) NOT NULL default '',
`password` varchar(10) NOT NULL default '',
PRIMARY KEY (`ADT`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Εικόνα 17. Πίνακας ‘eggrafi_pelati’
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 58
Πίνακας `login_prakt`:
CREATE TABLE `login_prakt` (
`onoma_prakt` varchar(20) NOT NULL default '',
`username` varchar(10) NOT NULL default '',
`password` varchar(10) NOT NULL default '',
PRIMARY KEY (`onoma_prakt`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Εικόνα 18. Πίνακας ‘login_prakt’
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 59
4.1.2.2
Βάση Δεδομένων ‘nautiliaki_etaireia’
Στη βάση δεδομένων nautiliaki_etaireia έχουμε 11 πίνακες.
 Πίνακας `anhkei`:
CREATE TABLE `anhkei` (
`kwd_drom` int(4) NOT NULL default '0',
`onoma_et` varchar(10) NOT NULL default '',
PRIMARY KEY (`kwd_drom`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Εικόνα 19. Πίνακας ‘anhkei’
 Πίνακας `diathetei`:
CREATE TABLE `diathetei` (
`onoma_et` varchar(10) NOT NULL default '',
`onoma_ploiou` varchar(10) NOT NULL default '',
PRIMARY KEY (`onoma_ploiou`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 60
Εικόνα 20. Πίνακας ‘diathetei’
 Πίνακας `drom_ploiar`:
CREATE TABLE `drom_ploiar` (
`adt_ploiar` varchar(10) NOT NULL default '',
`onoma_ploiar` varchar(10) NOT NULL default '',
`epith_ploiar` varchar(10) NOT NULL default '',
`kwd_drom` int(4) NOT NULL default '0',
PRIMARY KEY (`kwd_drom`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Εικόνα 21. Πίνακας ‘drom_ploiar’
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 61
 Πίνακας `dromologio` :
CREATE TABLE `dromologio` (
`kwdikos_drom` int(4) NOT NULL auto_increment,
`afethria` varchar(20) NOT NULL default '',
`proorismos` varchar(20) NOT NULL default '',
`wra_anaxwrhshs` time NOT NULL default '00:00:00',
`wra_afikshs` time NOT NULL default '00:00:00',
`hm_nia` date NOT NULL default '0000-00-00',
`ar_diath_thesewn` int(5) NOT NULL default '0',
`plhthos_thesewn` int(5) NOT NULL default '0',
`plhthos_oxhmatwn` int(2) NOT NULL default '0',
`timh` float NOT NULL default '0',
PRIMARY KEY (`kwdikos_drom`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=391 ;
Εικόνα 22. Πίνακας ‘dromologio’
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 62
 Πίνακας `etaireia`:
CREATE TABLE `etaireia` (
`onoma` varchar(20) NOT NULL default '',
`thlefwno` int(10) NOT NULL default '0',
`dieythynsh` varchar(20) NOT NULL default '',
PRIMARY KEY (`onoma`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Εικόνα 23. Πίνακας ‘etaireia’
 Πίνακας `kanei`:
CREATE TABLE `kanei` (
`ADT` varchar(10) NOT NULL default '',
`date_krat` date NOT NULL default '0000-00-00',
`time_krat` time NOT NULL default '00:00:00',
`kwd_drom` int(4) NOT NULL default '0',
`hm_nia` date NOT NULL default '0000-00-00',
`afethria` varchar(10) NOT NULL default '',
`proorismos` varchar(10) NOT NULL default '',
`arithmos_oxhmatwn` int(2) NOT NULL default '0',
`ar_eis` int(2) NOT NULL default '0',
`kostos_ana_krat` int(5) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 63
Εικόνα 24. Πίνακας ‘kanei’
 Πίνακας `pelatis`:
CREATE TABLE `pelatis` (
`onoma` varchar(20) NOT NULL default '',
`epitheto` varchar(20) NOT NULL default '',
`thlefwno` int(10) NOT NULL default '0',
`dieythynsh` varchar(20) NOT NULL default '',
`ADT` varchar(10) NOT NULL default '',
`syn_kostos` int(5) NOT NULL default '0',
PRIMARY KEY (`ADT`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 64
Εικόνα 25. Πίνακας ‘pelatis’
 Πίνακας `ploio`:
CREATE TABLE `ploio` (
`onoma` varchar(20) NOT NULL default '',
`xwrhtikothta` int(10) NOT NULL default '0',
`etos_kathelkyshs` year(4) NOT NULL default '0000',
PRIMARY KEY (`onoma`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Εικόνα 26. Πίνακας ‘ploio’
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 65
 Πίνακας `pragmatopoiei`:
CREATE TABLE `pragmatopoiei` (
`kwd_drom` int(4) NOT NULL default '0',
`onoma_ploiou` varchar(10) NOT NULL default '',
PRIMARY KEY (`kwd_drom`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Εικόνα 27. Πίνακας ‘pragmatopoiei’
 Πίνακας `prakt_drom`:
CREATE TABLE `prakt_drom` (
`onoma_prakt` varchar(20) NOT NULL default '',
`ADT` varchar(10) NOT NULL default '',
`date_krat` date NOT NULL default '0000-00-00',
`time_krat` time NOT NULL default '00:00:00',
`kwd_drom` int(4) NOT NULL default '0',
`hm_nia` date default '0000-00-00',
`afethria` varchar(10) NOT NULL default '',
`proorismos` varchar(10) NOT NULL default '',
`arithmos_oxhmatwn` int(2) NOT NULL default '0',
`ar_eis` int(2) NOT NULL default '0',
`kostos_ana_krat` int(5) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 66
Εικόνα 28. Πίνακας ‘prakt_drom’
 Πίνακας `ypallhlos`:
CREATE TABLE `ypallhlos` (
`onoma` varchar(20) NOT NULL default '',
`epitheto` varchar(10) NOT NULL default '',
`dieythynsh` varchar(20) NOT NULL default '',
`thlefwno` int(10) NOT NULL default '0',
`A_D_T` varchar(10) NOT NULL default '',
`eidikothta` varchar(20) NOT NULL default '',
`misthos` float NOT NULL default '0',
PRIMARY KEY (`A_D_T`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 67
Εικόνα 29. Πίνακας ‘ypallhlos’
4.2
Περιγραφή της εφαρμογής
4.2.1
Διαδικασίες Πελάτη & Πράκτορα
 Κράτηση θέσης. Όταν ένας πελάτης κάνει κράτηση θέσης σε ένα δροµολόγιο αποθηκεύονται πληροφορίες σχετικά µε τον ίδιο σε περίπτωση που δεν έχει πιο πριν κάνει
κράτηση. Επίσης αποθηκεύεται στην λίστα επιβατών του δροµολογίου και µειώνονται
κατά ένα οι διαθέσιµες θέσεις επιβατών. Επίσης ένας πελάτης δεν μπορεί να κάνει κράτηση
για περισσότερα από πέντε εισιτήρια για κάθε δροµολόγιο.
 Ακύρωση κράτησης. Ένας πελάτης µπορεί να κάνει ακύρωση κράτησης. Σ' αυτή την
περίπτωση µειώνεται το συνολικό ποσό που οφείλει, αυξάνονται οι διαθέσιµες θέσεις
του δροµολογίου και αφαιρείται από την λίστα των επιβατών. Αν η ακύρωση γίνει λιγότερο από 24 ώρες πριν από το δροµολόγιο επιστρέφεται µόνο το 90% της αξίας του
εισιτηρίου.
 Διαθεσιµότητα δροµολογίου. Ένας πελάτης µπορεί να πληροφορηθεί τα δροµολόγια
που υπάρχουν για µια συγκεκριµένη ηµεροµηνία από έναν ορισµένο τόπο αναχώρησης σε ένα ορισµένο τόπο προορισµού. Η απάντηση είναι µια λίστα από δροµολόγια
για καθένα από το οποίο υπάρχει η ώρα αναχώρησης, άφιξης και ο διαθέσιµος
αριθµός εισιτηρίων, το όνοµα του πλοίου και το όνοµα της εταιρίας.
 Επερώτηση µε τις κρατήσεις του πελάτη. Ένας πελάτης µπορεί να µάθει τις κρατήσεις που έχει κάνει δίνοντας τον αριθµό της αστυνοµικής ταυτότητας. Η απάντηση
στην επερώτηση είναι µια λίστα από τις κρατήσεις, για κάθε µια υπάρχει πληροφορία
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 68
σχετικά µε την ώρα αναχώρησης, άφιξης του πλοίου, το όνοµα του πλοίου, την
ηµεροµηνία ταξιδιού και το ποσό που οφείλει για κάθε µια κράτηση.
4.2.2
Διαδικασίες Διαχειριστή
 Προσθήκη δροµολογίου. Προστίθενται στοιχεία για ένα δροµολόγιο µιας συγκεκριμένης ναυτιλιακής εταιρείας. Δεν µπορούμε να κάνουμε προσθήκη δροµολογίου για
ναυτιλιακή εταιρεία που δεν υπάρχει.
 Προσθήκη ναυτιλιακής εταιρίας. Προστίθενται στοιχεία για µια συγκεκριµένη ναυτιλιακή εταιρεία.
.
 Προσθήκη υπαλλήλου. Προστίθενται στοιχεία ενός υπαλλήλου. Αν είναι πλοίαρχος
προστίθεται το όνοµά του και στα στοιχεία που κρατάµε για το δροµολόγιο.
 Ακύρωση δροµολογίου. Διαγράφεται η πληροφορία που κρατείται σχετικά µε το
δροµολόγιο και εµφανίζεται η λίστα των επιβατών µε τα στοιχεία τους.
 Διαγραφή υπαλλήλου. Γίνεται διαγραφή αν δεν είναι πλοίαρχος σε κάποιο
δροµολόγιο.
 Αυτόµατη διαγραφή κράτησης. Σε περίπτωση που πραγµατοποιηθεί το δροµολόγιο
ακυρώνονται όλες οι κρατήσεις.
 Συγκεντρωτική αναφορά. Αναφορά η οποία περιέχει όλα τα δροµολόγια
ταξινοµηµένα µε βάση το πλήθος των επιβατών από αυτό µε τους περισσότερους επιβάτες προς εκείνο µε τους λιγότερους. Επίσης περιέχεται και η συνολική αξία των εισιτηρίων που εκδόθηκαν για κάθε δροµολόγιο.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 69
4.3
Υλοποίηση της εφαρμογής
4.3.1 Παρουσίαση Αρχικής σελίδας
4.3.1.1
Αρχική Σελίδα
Σε αυτή την ενότητα θα παραθέσουμε στιγμιότυπα από την αρχική σελίδα της εφαρμογή μας. Αρχικά τρέχουμε το πρόγραμμα EasyPHP 1.8 και κατόπιν ανοίγουμε το firefox και
πληκτρολογούμε την λέξη localhost. Επιλέγουμε τον φάκελο «ptyxiakh» και έπειτα επιλέγουμε το αρχείο arxiki.php. Τα αρχεία php τα οποία τρέχουμε στη συγκεκριμένη εφαρμογή
είναι τοποθετημένα στον φάκελο www που βρίσκεται στο φάκελο που εγκαταστάθηκε το
EasyPHP. Μόλις επιλέξουμε το αρχείο arxiki.php εμφανίζεται στην οθόνη η αρχική σελίδα
της εφαρμογής όπως βλέπουμε στην παρακάτω εικόνα:
Εικόνα 30. Αρχική Σελίδα
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 70
Σε αυτή τη σελίδα ο χρήστης μπορεί να δει «Πληροφορίες» για το σύστημα όπως επίσης και να αποστείλει τυχόν προτάσεις ή κριτικές για να βελτιωθεί το πρόγραμμα στην «Επικοινωνία» αλλά και να επικοινωνήσει μέσω τηλεφώνου ή μέσω e-mail όπως αναγράφεται
στα «Στοιχεία Επικοινωνίας». Επίσης για να εισέλθει στο σύστημα πρέπει ο χρήστης να επιλέξει τον ανάλογο σύνδεσμο: «Σύνδεση Πελάτη» , «Σύνδεση Πράκτορα», «Σύνδεση Διαχειριστή».
4.3.1.2
Σελίδα Σύνδεσης Πελάτη
Εικόνα 31. Σελίδα Σύνδεσης Πελάτη
Στην παραπάνω εικόνα βλέπουμε την φόρμα υποβολής «Όνομα Χρήστη» και «Κωδικός Χρήστη». Αλλά για να εισέλθει στο σύστημα ο πελάτης πρέπει να κάνει «εγγραφή» και
να δώσει τα στοιχεία του καθώς και το «Όνομα Χρήστη» και «Κωδικό Χρήστη» όπως θα
δούμε στην παρακάτω εικόνα. Αφού εισάγουμε τα απαραίτητα στοιχεία στην φόρμα υποβολής πατάμε το κουμπί «ΕΙΣΟΔΟΣ» για να γίνει ο έλεγχος των στοιχείων και αν είναι σωστά ο
πελάτης εισέρχεται στην εφαρμογή ενώ αν δεν είναι σωστά εμφανίζεται μήνυμα “ΔΩΣΑΤΕ
ΛΑΘΟΣ ΟΝΟΜΑ ΧΡΗΣΤΗ Ή ΚΩΔΙΚΟ ΠΡΟΣΒΑΣΗΣ”.
4.3.1.3
Σελίδα Εγγραφής Πελάτη
Εικόνα 32. Σελίδα Εγγραφής Πελάτη
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 71
Στην παραπάνω εικόνα βλέπουμε την φόρμα υποβολής για την εγγραφή του πελάτη, ο
οποίος δίνει το «Όνομα Χρήστη» και «Κωδικό Χρήστη» που θα εισάγει στην φόρμα «Σύνδεση Πελάτη». Αφού εισάγουμε τα απαραίτητα στοιχεία στην φόρμα υποβολής πατάμε το κουμπί «ΕΓΓΡΑΦΗ» για να γίνει ο έλεγχος των στοιχείων και αν είναι σωστά τα στοιχεία του
πελάτη αποθηκεύονται στην βάση δεδομένων «login» στον πίνακα «eggrafi_pelati».
4.3.1.4
Σελίδα Σύνδεσης Πράκτορα
Εικόνα 33. Σελίδα Σύνδεσης Πράκτορα
Στην παραπάνω εικόνα βλέπουμε την φόρμα υποβολής «Όνομα Χρήστη» και «Κωδικός Χρήστη». Το «Όνομα Χρήστη» και ο «Κωδικός Χρήστη» είναι αποθηκευμένα στην βάση
δεδομένων «login» στον πίνακα «login_prakt». Υποθέτουμε ότι στον πράκτορας έχει δοθεί το
«όνομα χρήστη» και ο «κωδικός πρόσβασης» από την ναυτιλιακή εταιρεία. Αφού εισάγουμε
τα απαραίτητα στοιχεία στην φόρμα υποβολής πατάμε το κουμπί «ΕΙΣΟΔΟΣ» για να γίνει ο
έλεγχος των στοιχείων και αν είναι σωστά ο πράκτορας εισέρχεται στην εφαρμογή ενώ αν δεν
είναι σωστά εμφανίζεται μήνυμα “ΔΩΣΑΤΕ ΛΑΘΟΣ ΟΝΟΜΑ ΧΡΗΣΤΗ Ή ΚΩΔΙΚΟ
ΠΡΟΣΒΑΣΗΣ”.
4.3.1.5
Σελίδα Σύνδεσης Διαχειριστή
Εικόνα 34. Σελίδα Σύνδεσης Διαχειριστή
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 72
Στην παραπάνω εικόνα βλέπουμε την φόρμα υποβολής «Όνομα Χρήστη» και «Κωδικός Χρήστη». Το «Όνομα Χρήστη» και ο «Κωδικός Χρήστη» είναι αποθηκευμένα στην βάση
δεδομένων «login» στον πίνακα «admin». Αφού εισάγουμε τα απαραίτητα στοιχεία στην
φόρμα υποβολής πατάμε το κουμπί «ΕΙΣΟΔΟΣ» για να γίνει ο έλεγχος των στοιχείων και αν
είναι σωστά ο διαχειριστής εισέρχεται στην εφαρμογή ενώ αν δεν είναι σωστά εμφανίζεται
μήνυμα “ΔΩΣΑΤΕ ΛΑΘΟΣ ΟΝΟΜΑ ΧΡΗΣΤΗ Ή ΚΩΔΙΚΟ ΠΡΟΣΒΑΣΗΣ”.
4.3.2 Παρουσίαση Σελίδας Πελάτη
4.3.2.1
Αρχική Σελίδα Πελάτη
Εικόνα 35. Αρχική Σελίδα Πελάτη
Σε αυτή τη σελίδα ο χρήστης μπορεί να δει «Πληροφορίες» για το σύστημα καθώς επίσης και να δει τα «Δημοφιλέστερα Λιμάνια». Πρώτα απ’ όλα για να κάνει κράτηση ο πελάτης πρέπει να πληροφορηθεί για τα δρομολόγια που υπάρχουν για μια συγκεκριμένη ημερομηνία από έναν ορισμένο τόπο αναχώρησης σε ένα ορισμένο τόπο προορισμού επιλέγοντας
τον σύνδεσμο «Δρομολόγια». Έπειτα του δίνεται η δυνατότητα να κάνει κρατήσεις θέσεων
επιλέγοντας τον σύνδεσμο «Προσθήκη Κράτησης», μπορεί να ακυρώσει κρατήσεις επιλέγοντας τον σύνδεσμο «Ακύρωση Κράτησης» αλλά και να αναζητήσει τις κρατήσεις που έχει
κάνει επιλέγοντας τον σύνδεσμο «Αναζήτηση Κράτησης».
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 73
Ακόμα μπορεί να αποστείλει τυχόν προτάσεις ή κριτικές για να βελτιωθεί το πρόγραμμα επιλέγοντας τον σύνδεσμο «Επικοινωνία» καθώς και να επικοινωνήσει μέσω τηλεφώνου ή μέσω e-mail όπως αναγράφεται στην «Εξυπηρέτηση Πελατών». Τέλος επιλέγοντας
τον σύνδεσμο «Αποσύνδεση» εξέρχεται από το σύστημα και επιστρέφει στην «Αρχική Σελίδα» του συστήματος.
4.3.2.2
Σελίδα Αναζήτησης Δρομολογίων
Εικόνα 36. Σελίδα Αναζήτησης Δρομολογίων-Σελίδα Πελάτη
Σε αυτή τη σελίδα αφού εισάγει ο πελάτης τα απαραίτητα στοιχεία στην φόρμα υποβολής πατάει το κουμπί «ΑΝΑΖΗΤΗΖΗ» για να γίνει ο έλεγχος των στοιχείων και αν υπάρχει στη βάση δρομολόγιο για μια συγκεκριμένη ημερομηνία από έναν ορισμένο τόπο αναχώρησης σε ένα ορισμένο τόπο προορισμού τότε εμφανίζεται μια λίστα με τα δρομολόγια αλλιώς
αν δεν υπάρχει εμφανίζεται μήνυμα “ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ”.
Εικόνα 37. Σελίδα Λίστας Δρομολογίων-Σελίδα Πελάτη
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 74
Στην παραπάνω εικόνα βλέπουμε τα στοιχεία των δρομολογίων από Πειραιά προς Χανιά την ημερομηνία 2012-02-27 που εμφανίζονται από την βάση δεδομένων «nautiliaki_etaireia» και τον πίνακα «dromologio» από τον οποίο εμφανίζονται τα στοιχεία ώρα αναχώρησης/ώρα άφιξης/διαθέσιμος αριθμός εισιτηρίων-θέσεων με βάση τον κωδικό του κάθε
δρομολογίου, τον πίνακα «anhkei» από τον οποίο εμφανίζεται το στοιχείο όνομα εταιρείας με
βάση τον κωδικό του κάθε δρομολογίου και τον πίνακα «pragmatopoiei» από τον οποίο εμφανίζεται το στοιχείο όνομα πλοίου με βάση τον κωδικό του κάθε δρομολογίου.
4.3.2.3
Σελίδα Προσθήκη Κράτησης
Εικόνα 38. Σελίδα Προσθήκης Κράτησης-Σελίδα Πελάτη
Σε αυτή τη σελίδα αφού εισάγει ο πελάτης τα απαραίτητα στοιχεία στην φόρμα υποβολής πατάει το κουμπί «ΚΡΑΤΗΣΗ» για να γίνει ο έλεγχος των στοιχείων και αν υπάρχει
στη βάση δρομολόγιο για μια συγκεκριμένη ημερομηνία αναχώρησης από έναν ορισμένο τόπο αναχώρησης σε ένα ορισμένο τόπο προορισμού τότε αποθηκεύονται τα στοιχεία του πελάτη στον πίνακα «kanei» όπου κρατάμε τα στοιχεία του πελάτη και του δρομολογίου αλλιώς
αν δεν υπάρχει το δρομολόγιο εμφανίζεται μήνυμα “ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ
ΔΡΟΜΟΛΟΓΙΟ”.
Εικόνα 39. Σελίδα Επιβεβαίωσης Κράτησης-Σελίδα Πελάτη
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 75
Στην παραπάνω εικόνα βλέπουμε ότι τα στοιχεία του πελάτη αποθηκεύθηκαν επιτυχώς στην βάση δεδομένων «nautiliaki_etaireia» στον πίνακα «pelatis» και εμφανίζεται το μήνυμα “ΤΑ ΣΤΟΙΧΕΙΑ ΣΑΣ ΑΠΟΘΗΚΕΥΘΗΚΑΝ ΣΤΟΝ ΠΙΝΑΚΑ ΠΕΛΑΤΗ”. Επίσης
από τον πίνακα «dromologio» μειώνονται οι διαθέσιμες θέσεις κατά 2 (αριθμός ατόμων=2)
και εμφανίζεται το μήνυμα “ΝΕΕΣ ΔΙΑΘΕΣΙΜΕΣ ΘΕΣΕΙΣ”.
Τέλος βλέπουμε τα στοιχεία για το δρομολόγιο από Πειραιά προς Χανιά την ημερομηνία 2012-02-27 που εμφανίζονται από την βάση δεδομένων «nautiliaki_etaireia» και τον πίνακα «pragmatopoiei» από τον οποίο εμφανίζεται το στοιχείο όνομα πλοίου με βάση τον κωδικό του δρομολογίου, τον πίνακα «dromologio» από τον οποίο εμφανίζονται τα στοιχεία
κωδικός δρομολογίου/ώρα αναχώρησης/ώρα άφιξης/τιμή ανά άτομο, τον πίνακα «kanei» από
τον οποίο εμφανίζεται το στοιχείο αριθμός ατόμων και το συνολικό κόστος το οποίο είναι αποτέλεσμα μιας αριθμητικής πράξη (αριθμός ατόμων (x) τιμή ανά άτομο).
4.3.2.4
Σελίδα Ακύρωσης Κράτησης
Εικόνα 40. Σελίδα Λίστας Κρατήσεων για Ακύρωση-Σελίδα Πελάτη
Σε αυτή τη σελίδα γίνεται ο έλεγχος των στοιχείων από το username βρίσκοντας το
ΑΔΤ του πελάτη και αν υπάρχει το ΑΔΤ στον πίνακα με τη λίστα των πελατών που βρίσκονται τα στοιχεία του (πίνακας «kanei») τότε εμφανίζεται μια λίστα με τις κρατήσεις αλλιώς αν
δεν υπάρχει εμφανίζεται μήνυμα “ΔΕΝ ΕΧΕΤΕ ΚΑΝΕΙ ΚΡΑΤΗΣΕΙΣ”. Επίσης εμφανίζονται
τα στοιχεία του δρομολογίου για το οποίο έχει κάνει κράτηση ο πελάτης ΑΔΤ /κωδικός δρομολογίου /ημερομηνία /αφετηρία /προορισμός /αριθμός εισιτηρίων / συνολικό κόστος από τον
πίνακα «kanei» στην βάση δεδομένων «nautiliaki_etaireia». Επιλέγοντας τον σύνδεσμο
«ΑΚΥΡΩΣΗ», ακυρώνεται η κράτηση.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 76
Εικόνα 41. Σελίδα Επιβεβαίωσης Ακύρωση Κράτησης-Σελίδα Πελάτη
Στην παραπάνω εικόνα βλέπουμε ότι τα στοιχεία της κράτησης διαγράφηκαν επιτυχώς
από τον πίνακα «kanei» της βάσης δεδομένων «nautiliaki_etaireia» και εμφανίζεται το μήνυμα “Η ΚΡΑΤΗΣΗ ΣΑΣ ΔΙΑΓΡΑΦΗΚΕ ΕΠΙΤΥΧΩΣ”. Επίσης από τον πίνακα «pelatis»
μειώνεται το συνολικό κόστος κατά 40 (συνολικό κόστος=40) και εμφανίζεται το μήνυμα “
ΤΟ ΣΥΝΟΛΙΚΟ ΚΟΣΤΟΣ ΜΕΙΩΘΗΚΕ”. Αν η ακύρωση γίνει σε λιγότερο από 24 ώρες
πριν το δρομολόγιο επιστρέφεται μόνο το 90% της αξίας του εισιτηρίου και εμφανίζεται στην
οθόνη το μήνυμα “ ΕΠΙΣΤΡΑΦΗΚΕ ΤΟ 90% ΤΗΣ ΑΞΙΑΣ ΤΩΝ ΕΙΣΙΤΗΡΙΩΝ”. Τέλος από
τον πίνακα «dromologio» αυξάνονται οι διαθέσιμες θέσεις κατά 2 (αριθμός εισιτηρίων=2) και
εμφανίζεται το μήνυμα “ΟΙ ΔΙΑΘΕΣΙΜΕΣ ΘΕΣΕΙΣ ΑΥΞΗΘΗΚΑΝ”.
4.3.2.5
Σελίδα Αναζήτησης Κρατήσεων
Εικόνα 42. Σελίδα Αναζήτησης Κρατήσεων
Σε αυτή τη σελίδα ο πελάτης πρέπει να εισάγει τον Αριθμό Δελτίου Ταυτότητας τον
οποίο έχει χρησιμοποιήσει για να αναζητήσει τις κρατήσεις που έχει κάνει. Μόλις πατήσει το
κουμπί «ΑΝΑΖΗΤΗΣΗ» γίνεται ο έλεγχος των στοιχείων και αν υπάρχει το ΑΔΤ στη βάση
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 77
στον πίνακα με τη λίστα των πελατών που βρίσκονται τα στοιχεία του (πίνακας «kanei») τότε εμφανίζεται μια λίστα με τις κρατήσεις αλλιώς αν δεν υπάρχει εμφανίζεται μήνυμα “ΑΥΤΟ
ΤΟ ΑΔΤ ΔΕΝ ΥΠΑΡΧΕΙ. ΠΡΟΣΠΑΘΗΣΤΕ ΞΑΝΑ ΜΕ ΑΛΛΟ ΑΔΤ”.
Εικόνα 43. Σελίδα Λίστας Αναζήτησης Κρατήσεων
Στην παραπάνω εικόνα εμφανίζονται τα στοιχεία των δρομολογίων για τα οποία έχει
κάνει κράτηση ο πελάτης. Βλέπουμε το στοιχείο όνομα πλοίου από τον πίνακα «pragmatopoiei», τα στοιχεία ώρα αναχώρησης/ώρα άφιξης/ημερομηνία ταξιδιού από τον πίνακα
«dromologio» και το στοιχείο συνολικό κόστος από τον πίνακα «kanei» στην βάση δεδομένων
«nautiliaki_etaireia».
4.3.2.6
Σελίδα Επικοινωνίας
Εικόνα 44. Σελίδα Επικοινωνίας
Σε αυτή τη σελίδα αφού εισάγει ο πελάτης τα απαραίτητα στοιχεία στην φόρμα υποβολής πατάει το κουμπί «ΑΠΟΣΤΟΛΗ» και στέλνονται τα στοιχεία στην ηλεκτρονική διεύθυνση που έχουμε ορίσει.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 78
4.3.3 Παρουσίαση Σελίδας Διαχειριστή
4.3.3.1
Αρχική Σελίδα Διαχειριστή
Εικόνα 45. Αρχική Σελίδα Διαχειριστή
Σε αυτή τη σελίδα δίνεται η δυνατότητα στον διαχειριστή να προσθέσει στοιχεία μιας
εταιρείας επιλέγοντας τον σύνδεσμο «Προσθήκη Εταιρείας», να προσθέσει στοιχεία ενός
πλοίου επιλέγοντας τον σύνδεσμο «Προσθήκη Πλοίου», να προσθέσει στοιχεία ενός δρομολογίου για μια συγκεκριμένη εταιρεία επιλέγοντας τον σύνδεσμο «Προσθήκη δρομολογίου»,
να ακυρώσει ένα δρομολόγιο επιλέγοντας τον σύνδεσμο «Ακύρωση Δρομολογίου» καθώς και
να προσθέσει στοιχεία υπαλλήλου επιλέγοντας τον σύνδεσμο «Προσθήκη Υπαλλήλου». Αν
είναι πλοίαρχος, προστίθεται το όνομα του και στα στοιχεία που κρατάμε για το δρομολόγιο.
Επίσης μπορεί να διαγράψει τα στοιχεία κάποιου υπάλληλου επιλέγοντας τον σύνδεσμο «Διαγραφή Υπαλλήλου».
Ακόμα μπορεί να δει τη λίστα των δρομολογίων επιλέγοντας τον σύνδεσμο «Δρομολόγια» και να πληροφορηθεί για τη συνολική αξία των εισιτηρίων που εκδόθηκαν για κάθε
δρομολόγιο ταξινομημένα με βάση το πλήθος των επιβατών επιλέγοντας τον σύνδεσμο «Συγκεντρωτική Αναφορά» καθώς επίσης και να αποστείλει τυχόν προτάσεις ή κριτικές για να
βελτιωθεί το πρόγραμμα στην «Επικοινωνία» αλλά και να επικοινωνήσει μέσω τηλεφώνου ή
μέσω e-mail όπως αναγράφεται στα «Στοιχεία Επικοινωνίας». Τέλος επιλέγοντας τον σύνδεΑγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 79
σμο «Αποσύνδεση» εξέρχεται από το σύστημα και επιστρέφει στην «Αρχική Σελίδα» του συστήματος.
4.3.3.2
Σελίδα Προσθήκης Εταιρείας
Εικόνα 46. Σελίδα Προσθήκης Εταιρείας
Σε αυτή τη σελίδα αφού εισάγει ο διαχειριστής τα απαραίτητα στοιχεία στην φόρμα
υποβολής πατάει το κουμπί «ΠΡΟΣΘΗΚΗ» για να γίνει ο έλεγχος των στοιχείων και αν δεν
υπάρχουν τα στοιχεία στη βάση τότε αποθηκεύονται στον πίνακα «etaireia» όπου κρατάμε τα
στοιχεία της εταιρείας και εμφανίζεται το μήνυμα “ΤΑ ΣΤΟΙΧΕΙΑ ΤΗΣ ΕΤΑΙΡΕΙΑΣ
ΑΠΟΘΗΚΕΥΘΗΚΑΝ ΕΠΙΤΥΧΩΣ”. Ενώ αν υπάρχουν τα στοιχεία ήδη τότε εμφανίζεται
στην οθόνη το μήνυμα “ΤΑ ΣΤΟΙΧΕΙΑ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΥΠΑΡΧΟΥΝ ΗΔΗ.”.
4.3.3.3
Σελίδα Προσθήκης Πλοίου
Εικόνα 47. Σελίδα Προσθήκης Πλοίου
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 80
Σε αυτή τη σελίδα αφού εισάγει ο διαχειριστής τα απαραίτητα στοιχεία στην φόρμα
υποβολής πατάει το κουμπί «ΠΡΟΣΘΗΚΗ» για να γίνει ο έλεγχος των στοιχείων και αν δεν
υπάρχουν τα στοιχεία στη βάση τότε αποθηκεύονται στον πίνακα «ploio» όπου κρατάμε τα
στοιχεία του πλοίου και στον πίνακα «diathetei» που κρατάμε τα στοιχεία της εταιρείας και
του πλοίου. Ενώ αν υπάρχουν τα στοιχεία ήδη και στον ένα πίνακα και στον άλλο τότε εμφανίζονται στην οθόνη τα μηνύματα “ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΟΥ ΥΠΑΡΧΟΥΝ ΗΔΗ” και
“ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΟΥ ΚΑΙ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΥΠΑΡΧΟΥΝ ΗΔΗ” αντίστοιχα.
4.3.3.4
Σελίδα Προσθήκης Δρομολογίου
Εικόνα 48. Σελίδα Προσθήκης Δρομολογίου
Σε αυτή τη σελίδα αφού εισάγει ο διαχειριστής τα απαραίτητα στοιχεία στην φόρμα
υποβολής πατάει το κουμπί «ΠΡΟΣΘΗΚΗ» και γίνεται έλεγχος αν το πλοίο εκτελεί άλλο
δρομολόγιο την συγκεκριμένη ημερομηνία και αν δεν υπάρχει τότε τα στοιχεία αποθηκεύονται στον πίνακα «dromologio» όπου κρατάμε τα στοιχεία του δρομολογίου, στον πίνακα
«anhkei» που κρατάμε τα στοιχεία της εταιρείας και του δρομολογίου και στον πίνακα
«pragmatopoiei» που κρατάμε τα στοιχεία του πλοίου και του δρομολογίου. Ενώ αν υπάρχει
πλοίο που να εκτελεί δρομολόγιο την συγκεκριμένη ημερομηνία εμφανίζεται στην οθόνη το
μήνυμα “ΑΥΤΟ ΤΟ ΠΛΟΙΟ ΕΚΤΕΛΕΙ ΔΡΟΜΟΛΟΓΙΟ ΑΥΤΗ ΤΗΝ ΗΜΕΡΟΜΗΝΙΑ.
ΕΠΙΛΕΞΤΕ ΑΛΛΟ ΠΛΟΙΟ ΓΙΑ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ” .
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 81
Εικόνα 49. Σελίδα Επιβεβαίωσης Στοιχείων Δρομολογίου
Στην παραπάνω εικόνα εμφανίζονται τα στοιχεία του δρομολογίου κωδικός δρομολογίου/ημερομηνία/αφετηρία/προορισμός/ώρα αναχώρησης/ώρα άφιξης/αριθμός θέσεων/αριθμός
θέσεων οχημάτων/τιμή από τον πίνακα «dromologio» και όνομα εταιρείας από τον πίνακα
«anhkei» (στοιχεία κωδικός δρομολογίου & όνομα εταιρείας ).
4.3.3.5
Σελίδα Ακύρωσης Δρομολογίου
Εικόνα 50. Σελίδα Ακύρωσης Δρομολογίου
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 82
Στην παραπάνω εικόνα εμφανίζονται, ταξινομημένα ανά ημερομηνία, τα στοιχεία του
δρομολογίου κωδικός δρομολογίου/ημερομηνία/αφετηρία/προορισμός/ώρα αναχώρησης/ώρα
άφιξης/ κόστος από τον πίνακα «dromologio» στην βάση δεδομένων «nautiliaki_etaireia». Επιλέγοντας τον σύνδεσμο «ΑΚΥΡΩΣΗ», ακυρώνεται το δρομολόγιο.
Εικόνα 51. Σελίδα Επιβεβαίωσης Ακύρωσης Δρομολογίου-Λίστα Επιβατών
Στην παραπάνω εικόνα βλέπουμε την λίστα των επιβατών που έχουν κάνει κράτηση
για αυτό το δρομολόγιο. Τα στοιχεία είναι από τον πίνακα «kanei» (κωδικός δρομολογίου &
ΑΔΤ) και τον πίνακα «pelatis» (ΑΔΤ & τα υπόλοιπα στοιχεία). Ενώ αν δεν υπάρχουν πελάτες που να έχουν κάνει κράτηση σε αυτό το δρομολόγιο εμφανίζεται το μήνυμα “ΔΕΝ
ΥΠΑΡΧΟΥΝ ΠΕΛΑΤΕΣ ΓΙΑ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ”.
4.3.3.6
Σελίδα Προσθήκης Υπαλλήλου
Εικόνα 52. Σελίδα Προσθήκης Υπαλλήλου
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 83
Σε αυτή τη σελίδα αφού εισάγει ο διαχειριστής τα απαραίτητα στοιχεία στην φόρμα
υποβολής πατάει το κουμπί «ΠΡΟΣΘΗΚΗ» και αποθηκεύονται τα στοιχεία στον πίνακα
«ypallhlos» αν δεν υπάρχουν ήδη. Επίσης γίνεται έλεγχος αν η ειδικότητα είναι πλοίαρχος
και αν είναι ελέγχει αν ο πλοίαρχος είναι σε άλλο δρομολόγιο την ημερομηνία του δρομολογίου και αν δεν είναι τότε αποθηκεύονται τα στοιχεία στον πίνακα «drom_ploiar» όπου κρατάμε τα στοιχεία του πλοιάρχου και του δρομολογίου. Ενώ αν ο πλοίαρχος εκτελεί άλλο δρομολόγιο εμφανίζεται στην οθόνη το μήνυμα “ΑΥΤΟΣ Ο ΠΛΟΙΑΡΧΟΣ ΕΙΝΑΙ ΣΕ ΑΛΛΟ
ΔΡΟΜΟΛΟΓΙΟ ΑΥΤΗ ΤΗΝ ΗΜΕΡΟΜΗΝΙΑ. ΕΠΙΛΕΞΤΕ ΑΛΛΟΝ ΠΛΟΙΑΡΧΟ Η'
ΑΛΛΟ ΔΡΟΜΟΛΟΓΙΟ. ”
4.3.3.7
Σελίδα Διαγραφής Υπαλλήλου
Εικόνα 53. Σελίδα Διαγραφής Υπαλλήλου-Λίστα Υπαλλήλων
Στην παραπάνω εικόνα εμφανίζονται τα στοιχεία των υπαλλήλων
ΑΔΤ/όνομα/επίθετο/τηλέφωνο/διεύθυνση/ειδικότητα/μισθός από τον πίνακα «ypallhlos» στην
βάση δεδομένων «nautiliaki_etaireia». Επιλέγοντας τον σύνδεσμο «ΔΙΑΓΡΑΦΗ», διαγράφεται ο υπάλληλος. Όμως αν η ειδικότητα του υπαλλήλου είναι πλοίαρχος και εκτελεί κάποιο
δρομολόγιο τότε δεν διαγράφεται και εμφανίζεται το μήνυμα “ΔΕΝ ΕΙΝΑΙ ΔΥΝΑΤΗ Η
ΔΙΑΓΡΑΦΗ ΤΟΥ ΠΛΟΙΑΡΧΟΥ ΓΙΑΤΙ ΕΚΤΕΛΕΙ ΔΡΟΜΟΛΟΓΙΟ!”.
4.3.3.8
Σελίδα Λίστας Δρομολογίων
Εικόνα 54. Σελίδα Λίστας Δρομολογίων
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 84
Στην παραπάνω εικόνα εμφανίζονται, ταξινομημένα ανά ημερομηνία, τα στοιχεία των
δρομολογίων κωδικός δρομολογίου/ημερομηνία/αφετηρία/προορισμός/ώρα αναχώρησης/ώρα
άφιξης/ κόστος από τον πίνακα «dromologio» στην βάση δεδομένων «nautiliaki_etaireia».
4.3.3.9
Σελίδα Συγκεντρωτικής Αναφοράς
Εικόνα 55. Σελίδα Συγκεντρωτικής Αναφοράς
Στην παραπάνω εικόνα εμφανίζονται τα στοιχεία των δρομολογίων, ταξινομημένα με
βάση το σύνολο των επιβατών από αυτό με τους περισσότερους επιβάτες προς αυτό με τους
λιγότερους , κωδικός δρομολογίου/ημερομηνία/αφετηρία/προορισμός/ σύνολο επιβατών(πλήθος θέσεων – αριθμό διαθέσιμων θέσεων) καθώς επίσης και η συνολική αξία των εισιτηρίων (σύνολο επιβατών * τιμή δρομολογίου) από τον πίνακα «dromologio» στην βάση δεδομένων «nautiliaki_etaireia».
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 85
4.3.4 Παρουσίαση Σελίδας Τουριστικού Πράκτορα
4.3.4.1
Αρχική Σελίδα Τουριστικού Πράκτορα
Εικόνα 56. Αρχική Σελίδα Πράκτορα
Σε αυτή τη σελίδα δίνεται η δυνατότητα στον τουριστικό πράκτορα να πληροφορηθεί
για τα δρομολόγια που υπάρχουν για μια συγκεκριμένη ημερομηνία από έναν ορισμένο τόπο
αναχώρησης σε ένα ορισμένο τόπο προορισμού επιλέγοντας τον σύνδεσμο «Δρομολόγια».
Έπειτα του δίνεται η δυνατότητα να κάνει κρατήσεις θέσεων για κάποιον πελάτη επιλέγοντας
τον σύνδεσμο «Προσθήκη Κράτησης» αλλά και να ακυρώσει κρατήσεις των πελατών του επιλέγοντας τον σύνδεσμο «Ακύρωση Κράτησης». Επίσης μπορεί να αποστείλει τυχόν προτάσεις ή κριτικές για να βελτιωθεί το πρόγραμμα στην «Επικοινωνία» αλλά και να επικοινωνήσει μέσω τηλεφώνου ή μέσω e-mail όπως αναγράφεται στα «Στοιχεία Επικοινωνίας». Τέλος
επιλέγοντας τον σύνδεσμο «Αποσύνδεση» εξέρχεται από το σύστημα και επιστρέφει στην
«Αρχική Σελίδα» του συστήματος.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 86
4.3.4.2
Σελίδα Αναζήτησης Δρομολογίων
Εικόνα 57. Σελίδα Αναζήτησης Δρομολογίων-Σελίδα Πράκτορα
Σε αυτή τη σελίδα αφού εισάγει ο πράκτορας τα απαραίτητα στοιχεία στην φόρμα υποβολής πατάει το κουμπί «ΑΝΑΖΗΤΗΖΗ» για να γίνει ο έλεγχος των στοιχείων και αν υπάρχει στη βάση δρομολόγιο για μια συγκεκριμένη ημερομηνία από έναν ορισμένο τόπο αναχώρησης σε ένα ορισμένο τόπο προορισμού τότε εμφανίζεται μια λίστα με τα δρομολόγια
αλλιώς αν δεν υπάρχει εμφανίζεται μήνυμα “ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ”.
4.3.4.3
Σελίδα Προσθήκης Κράτησης
Εικόνα 58. Σελίδα Προσθήκης Κράτησης- Σελίδα Πράκτορα
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 87
Σε αυτή τη σελίδα αφού εισάγει ο πράκτορας τα απαραίτητα στοιχεία στην φόρμα υποβολής πατάει το κουμπί «ΚΡΑΤΗΣΗ» για να γίνει ο έλεγχος των στοιχείων και αν υπάρχει
στη βάση δρομολόγιο για μια συγκεκριμένη ημερομηνία αναχώρησης από έναν ορισμένο τόπο αναχώρησης σε ένα ορισμένο τόπο προορισμού τότε αποθηκεύονται τα στοιχεία του πράκτορα (όνομα) και του πελάτη στον πίνακα «prakt_drom» όπου κρατάμε τα στοιχεία του
πράκτορα, του δρομολογίου και του πελάτη αλλιώς αν δεν υπάρχει το δρομολόγιο εμφανίζεται μήνυμα “ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ”.
Εικόνα 59. Σελίδα Επιβεβαίωσης Κράτησης-Σελίδα Πράκτορα
Στην παραπάνω εικόνα βλέπουμε ότι τα στοιχεία του πελάτη που συμπλήρωσε ο πράκτορας στην φόρμα αποθηκεύθηκαν επιτυχώς στον πίνακα «prakt_drom» στην βάση δεδομένων «nautiliaki_etaireia» και εμφανίζεται το μήνυμα “ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΕΛΑΤΗ
ΕΧΟΥΝ ΗΔΗ ΑΠΟΘΗΚΕΥΤΕΙ ΣΤΟΝ ΠΙΝΑΚΑ ΠΕΛΑΤΗΣ” γιατί είχαμε κάνει κράτηση
με τα ίδια στοιχεία στην Σελίδα Διαχείρισης Πελάτη. Επίσης από τον πίνακα «dromologio»
μειώνονται οι διαθέσιμες θέσεις κατά 1 (αριθμός ατόμων=1) και εμφανίζεται το μήνυμα
“ΝΕΕΣ ΔΙΑΘΕΣΙΜΕΣ ΘΕΣΕΙΣ”. Τέλος βλέπουμε τα στοιχεία για το δρομολόγιο από Πειραιά προς Χανιά την ημερομηνία 2012-02-27 που εμφανίζονται από την βάση δεδομένων
«nautiliaki_etaireia» και τον πίνακα «pragmatopoiei» από τον οποίο εμφανίζεται το στοιχείο
όνομα πλοίου με βάση τον κωδικό του δρομολογίου, τον πίνακα «dromologio» από τον οποίο
εμφανίζονται τα στοιχεία κωδικός δρομολογίου/ώρα αναχώρησης/ώρα άφιξης/τιμή ανά άτομο,
τον πίνακα «prakt_drom» από τον οποίο εμφανίζεται το στοιχείο αριθμός ατόμων και το συνολικό κόστος το οποίο είναι αποτέλεσμα μιας αριθμητικής πράξη (αριθμός ατόμων (x) τιμή
ανά άτομο).
4.3.4.4
Σελίδα Ακύρωσης Κράτησης
Εικόνα 60. Σελίδα Λίστας Κρατήσεων για Ακύρωση-Σελίδα Πράκτορα
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 88
Σε αυτή τη σελίδα γίνεται ο έλεγχος των στοιχείων με το username του πράκτορα και
αν υπάρχει το όνομα του στη βάση στον πίνακα με τη λίστα των πελατών που βρίσκονται τα
στοιχεία του πράκτορα και των πελατών (πίνακας «prakt_drom») τότε εμφανίζεται μια λίστα
με τις κρατήσεις αλλιώς αν δεν υπάρχει εμφανίζεται μήνυμα “ΔΕΝ ΕΧΕΤΕ ΚΑΝΕΙ
ΚΡΑΤΗΣΕΙΣ ΓΙΑ ΚΑΠΟΙΟΝ ΠΕΛΑΤΗ.”. Επίσης εμφανίζονται τα στοιχεία του δρομολογίου και του πελάτη για τον οποίο έχει κάνει κράτηση ο πράκτορας ‘tours’ ΑΔΤ πελάτη
/κωδικός δρομολογίου /ημερομηνία /αφετηρία /προορισμός /αριθμός εισιτηρίων /συνολικό κόστος από τον πίνακα «prakt_drom» στην βάση δεδομένων «nautiliaki_etaireia». Επιλέγοντας
τον σύνδεσμο «ΑΚΥΡΩΣΗ», ακυρώνεται η κράτηση.
Εικόνα 61. Σελίδα Επιβεβαίωσης Ακύρωση Κράτησης-Σελίδα
Στην παραπάνω εικόνα βλέπουμε ότι τα στοιχεία της κράτησης με κωδικό δρομολογίου 2 διαγράφηκαν επιτυχώς από τον πίνακα «prakt_drom» της βάσης δεδομένων «nautiliaki_etaireia» και εμφανίζεται το μήνυμα “Η ΚΡΑΤΗΣΗ ΣΑΣ ΔΙΑΓΡΑΦΗΚΕ ΕΠΙΤΥΧΩΣ”.
Επίσης από τον πίνακα «pelatis» μειώνεται το συνολικό κόστος κατά 40 (συνολικό κόστος=40) και εμφανίζεται το μήνυμα “ ΤΟ ΣΥΝΟΛΙΚΟ ΚΟΣΤΟΣ ΜΕΙΩΘΗΚΕ”. Αν η ακύρωση γίνει σε λιγότερο από 24 ώρες πριν το δρομολόγιο επιστρέφεται μόνο το 90% της αξίας
του εισιτηρίου και εμφανίζεται στην οθόνη το μήνυμα “ ΕΠΙΣΤΡΑΦΗΚΕ ΤΟ 90% ΤΗΣ
ΑΞΙΑΣ ΤΩΝ ΕΙΣΙΤΗΡΙΩΝ”. Τέλος από τον πίνακα «dromologio» αυξάνονται οι διαθέσιμες
θέσεις κατά 2 (αριθμός εισιτηρίων=2) και εμφανίζεται το μήνυμα “ΟΙ ΔΙΑΘΕΣΙΜΕΣ
ΘΕΣΕΙΣ ΑΥΞΗΘΗΚΑΝ”.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 89
4.4
Ανάλυση Κώδικα Εφαρμογής
4.4.1 Ερωτήσεις προς την βάση δεδομένων με SQL
4.4.1.1
Ερωτήσεις SQL για τον Πελάτη & Πράκτορα
Παρακάτω θα δούμε τις ερωτήσεις SQL για τον Πελάτη. Οι ίδιες ερωτήσεις ισχύουν και
για τον πράκτορα. Το μόνο που αλλάζει είναι ο πίνακας με την λίστα των επιβατών. Η λίστα
των πελατών βρίσκεται στον πίνακα ‘kanei’ ενώ η λίστα των επιβατών για τους οποίους κάνει
κράτηση ο πράκτορας βρίσκεται στον πίνακα ‘prakt_drom’.
 Κράτηση θέσης.
//Αποθήκευση στοιχείων στον πίνακα ‘pelatis’
$query="INSERT INTO pelatis(onoma,epitheto,thlefwno,dieythynsh,ADT)VALUES('$name','$surname',$number,'$addres
s','$adt')";
//Επιλογή «ar_eis» (sum) ενός πελάτη από τον πίνακα ‘kanei’ για τον έλεγχο των αριθμών εισιτηρίων
$sqlquery="SELECT dromologio.kwdikos_drom,kanei.kwd_drom,SUM(kanei.ar_eis) as sum
FROM dromologio,kanei WHERE dromologio.hm_nia='$date' AND dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af' AND
kanei.ADT='$adt' AND dromologio.kwdikos_drom=kanei.kwd_drom GROUP BY
kanei.kwd_drom";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($row=mysql_fetch_array($result))
{$sum=$row['sum'];
}
//Έλεγχος αν το άθροισμα «ar_eis» (sum στον πίνακα ‘kanei’) είναι μικρότερος από 5 και
αν ο «number_person» (από την φόρμα) είναι μικρότερος από 6 και αν το άθροισμα του
«number_person» με τον «ar_eis» είναι μικρότερο του 6.
if($number_person<6 && $sum<5 && $number_person+$sum<6 )
//Αν έχει κάνει κράτηση για λιγότερα από 6 εισιτήρια, τότε τα στοιχεία του πελάτη
και του δρομολογίου αποθηκεύονται στον πίνακα ‘kanei’
{$query="INSERT INTO
kanei(ADT,kwd_drom,hm_nia,afethria,proorismos,arithmos_oxhmatwn,ar_eis,date_krat,time
_krat)VALUES('$adt',(SELECT dromologio.kwdikos_drom FROM dromologio WHERE
dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af'),(SELECT dromologio.hm_nia FROM dromologio WHERE
dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromoloΑγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 90
gio.wra_afikshs='$time_af'),(SELECT dromologio.afethria FROM dromologio WHERE
dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af'),(SELECT dromologio.proorismos FROM dromologio WHERE
dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af'),$number_veh,$number_person,CURDATE(),NOW())";}
//Μείωση των διαθέσιμων θέσεων του δρομολογίου με τον αριθμό των εισιτηρίων που
κάνει κράτηση ο πελάτης (dromologio .ar_diath_thesewn-kanei.ar_eis)
$query="UPDATE dromologio,kanei SET dromologio.ar_diath_thesewn=dromologio.ar_diath_thesewn-kanei.ar_eis WHERE dromologio.kwdikos_drom=kanei.kwd_drom AND kanei.ADT='$adt' AND
kanei.date_krat=CURDATE() AND kanei.time_krat=NOW()";
//Αποθηκεύω την τιμή του δρομολογίου και στα στοιχεία του πελάτη με το δρομολόγιο
στον πίνακα ‘kanei’ (kanei.ar_eis*dromologio.timh)
$query="UPDATE dromologio,kanei SET
kanei.kostos_ana_krat=kanei.ar_eis*dromologio.timh WHERE dromologio.kwdikos_drom=kanei.kwd_drom AND kanei.ADT='$adt' AND dromologio.hm_nia='$date' AND dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND kanei.date_krat=CURDATE() AND
kanei.time_krat=NOW()";
//Αποθηκεύω την τιμή του δρομολογίου και στα στοιχεία του πελάτη στο συνολικό κόστος στον πίνακα ‘pelatis’
$query="UPDATE kanei,pelatis SET pelatis.syn_kostos=(SELECT
SUM(kanei.kostos_ana_krat) FROM kanei WHERE kanei.ADT='$adt') WHERE pelatis.ADT='$adt'";
 Ακύρωση κράτησης.
//Διαγραφή στοιχείων κράτησης από τον πίνακα ‘kanei’
$sqlquery="DELETE FROM kanei WHERE kwd_drom='$kwd_drom' AND
date_krat='$date_krat' AND time_krat='$time_krat'";
//Μια μέρα πριν το δρομολόγιο
$sqlquery="SELECT DATE_SUB(hm_nia,INTERVAL 1 DAY) AS date FROM
dromologio
WHERE kwdikos_drom='$kwd_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($rows=mysql_fetch_array($result)){
$date_prin=$rows['date']; // ΜΙΑ ΜΕΡΑ ΠΡΙΝ ΤΟ ΔΡΟΜΟΛΟΓΙΟ
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 91
}
//Η ημερομηνία του δρομολογίου
$sqlquery="SELECT hm_nia FROM dromologio WHERE
kwdikos_drom='$kwd_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($rows=mysql_fetch_array($result)){
$date_drom=$rows['hm_nia']; //Η ΗΜΕΡΟΜΗΝΙΑ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ
}
// Έλεγχος αν ‘η σημερινή ημερομηνία’ είναι = με την ‘ημερομηνία δρομολογίου’
ή = με την ‘ημέρα πριν το δρομολόγιο’
if (($cur_date == $date_prin) || ($cur_date == $date_drom ))
{
// Αν είναι ίσα τότε το συνολικό κόστος του πελάτη ισούται με το συνολικό
κόστος-το κόστος ανά κράτηση*0.9 και έτσι επιστρέφεται το 90% της αξίας
$sqlquery="UPDATE pelatis SET pelatis.syn_kostos=pelatis.syn_kostos('$kostos_ana_krat'*0.9) WHERE pelatis.ADT='$ADT'";
}
// Διαφορετικά επιστρέφεται όλη η αξία
else
{
$sqlquery="UPDATE pelatis SET pelatis.syn_kostos=pelatis.syn_kostos'$kostos_ana_krat' WHERE pelatis.ADT='$ADT'";
}
// Η διαθέσιμες θέσεις του δρομολογίου αυξάνονται κατά τον αριθμό των εισιτηρίων
$sqlquery="UPDATE dromologio SET
dromologio.ar_diath_thesewn=dromologio.ar_diath_thesewn+'$ar_eis' WHERE
dromologio.kwdikos_drom='$kwd_drom'";
 Διαθεσιµότητα δροµολογίου.
//Λίστα από τα δρομολόγια (όνομα πλοίου/όνομα εταιρείας/ώρα αναχώρησης/ώρα άφιξης/διαθέσιμος αριθμός εισιτηρίων)
<?
$sqlquery="SELECT
dromologio.kwdikos_drom,dromologio.afethria,dromologio.proorismos,dromologio.hm_nia,d
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 92
romologio.wra_anaxwrhshs,dromologio.wra_afikshs,dromologio.ar_diath_thesewn,pragmato
poiei.kwd_drom,pragmatopoiei.onoma_ploiou,anhkei.kwd_drom,anhkei.onoma_et FROM
dromologio,pragmatopoiei,anhkei WHERE
dromologio.kwdikos_drom=pragmatopoiei.kwd_drom AND
dromologio.kwdikos_drom=anhkei.kwd_drom AND dromologio.afethria='$post' AND
dromologio.proorismos='$destination' AND dromologio.hm_nia='$date'";
?>
//Εμφάνιση στην οθόνη
<table height="100" border="5" align="left" bordercolor="#2aa3e8">
<tr>
<td align="center" height="50" class="forma" >ΌΝΟΜΑ ΕΤΑΙΡΕΙΑΣ</td>
<td align="center" class="forma">ΌΝΟΜΑ ΠΛΟΙΟΥ</td>
<td align="center" class="forma">ΩΡΑ ΑΝΑΧΩΡΗΣΗΣ</td>
<td align="center" class="forma">ΩΡΑ ΑΦΙΞΗΣ</td>
<td align="center" class="forma">ΔΙΑΘΕΣΙΜΟΣ ΑΡ.ΕΙΣ.</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? echo $rows['onoma_et']; ?></td>
<td align="center"><? echo $rows['onoma_ploiou']; ?></td>
<td align="center"><? echo $rows['wra_anaxwrhshs']; ?> </td>
<td align="center"><? echo $rows['wra_afikshs']; ?></td>
<td align="center"><? echo $rows['ar_diath_thesewn']; ?></td>
</tr>
<?
}
?>
</table>
 Επερώτηση σχετικά µε τις κρατήσεις του πελάτη.
//Λίστα από τα δρομολόγια (όνομα πλοίου /ώρα αναχώρησης/ώρα άφιξης/ημερομηνία/συνολικό κόστος)
<?
$sqlquery="SELECT
kanei.ADT,kanei.kwd_drom,dromologio.kwdikos_drom,kanei.kostos_ana_krat,dromologio.w
ra_anaxwrhshs,dromologio.wra_afikshs,dromologio.hm_nia,dromologio.timh,pragmatopoiei.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 93
kwd_drom,pragmatopoiei.onoma_ploiou FROM kanei,dromologio,pragmatopoiei WHERE
kanei.kwd_drom=dromologio.kwdikos_drom AND
kanei.kwd_drom=pragmatopoiei.kwd_drom AND kanei.ADT='$adt'";
?>
</p>
//Εμφάνιση στην οθόνη
<table height="100" border="5" align="left" bordercolor="#2aa3e8">
<tr>
<td align="center" width="68" height="50" class="forma" >ΌΝΟΜΑ ΠΛΟΙΟΥ</td>
<td align="center" width="93" class="forma">ΩΡΑ ΑΝΑΧΩΡΗΣΗΣ</td>
<td align="center" width="90" class="forma">ΩΡΑ ΑΦΙΞΗΣ</td>
<td align="center" width="146" class="forma">ΗΜΕΡ/ΝΙΑ ΤΑΞΙΔΙΟΥ</td>
<!--<td align="center" class="forma">ΠΟΣΟ ΑΝΑ ΑΤΟΜΟ</td>-->
<td align="center" width="136" class="forma">ΣΥΝΟΛΙΚΟ ΚΟΣΤΟΣ</td>
</tr>
<?
while($rows=mysql_fetch_array($result_drom)){
?>
<tr>
<td align="center"><? echo $rows['onoma_ploiou']; ?></td>
<td align="center"><? echo $rows['wra_anaxwrhshs']; ?> </td>
<td align="center"><? echo $rows['wra_afikshs']; ?></td>
<td align="center"><? echo $rows['hm_nia']; ?></td>
<!--<td align="center"><? echo $rows['timh']; ?></td>-->
<td align="center"><? echo $rows['kostos_ana_krat']; ?></td>
</tr>
<?
}
?>
</table>
 Αυτόµατη διαγραφή κράτησης.
//Αυτόματη διαγραφή κρατήσεων όταν πραγματοποιείται το δρομολόγιο
(hm_nia<'$cur_date')
$sqlquery="DELETE FROM kanei WHERE hm_nia<'$cur_date'";
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 94
4.4.1.2
Ερωτήσεις SQL για τον Διαχειριστή
 Προσθήκη δροµολογίου.
//Αποθήκευση στοιχείων της φόρμας στον πίνακα ‘dromologio’
$sqlquery="INSERT INTO dromologio (afethria,proorismos,wra_anaxwrhshs,wra_afikshs,hm_nia,ar_diath_thesewn,plhthos_thesewn,plh
thos_oxhmatwn,timh)VALUES('$post','$destination','$time_anax','$time_af','$date',$number_
seats,$number_seats,$number_veh,$price)";
//Αποθήκευση ‘κωδικού δρομολογίου’ και ‘όνομα πλοίου’ στον πίνακα ‘pragmatopoiei’
$sqlquery="INSERT INTO pragmatopoiei(pragmatopoiei.kwd_drom,pragmatopoiei.onoma_ploiou)VALUES((SELECT dromologio.kwdikos_drom FROM dromologio WHERE dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af' AND dromologio.hm_nia='$date'),'$name_ploiou')";
//Αποθήκευση ‘κωδικού δρομολογίου’ και ‘όνομα εταιρείας’ στον πίνακα ‘anhkei’
$sqlquery="INSERT INTO anhkei(anhkei.kwd_drom,anhkei.onoma_et)VALUES((SELECT
dromologio.kwdikos_drom FROM dromologio WHERE dromologio.afethria='$post' AND
dromologio.proorismos='$destination' AND dromologio.wra_anaxwrhshs='$time_anax' AND
dromologio.wra_afikshs='$time_af' AND dromologio.hm_nia='$date'),'$company')";
 Ακύρωση δροµολογίου.
//ΔΙΑΓΡΑΦΗ ΔΡΟΜΟΛΟΓΙΟΥ
$sqlquery="DELETE FROM dromologio WHERE kwdikos_drom='$kwdikos_drom' ";
//ΔΙΑΓΡΑΦΗ ΤΩΝ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ-ΠΛΟΙΑΡΧΟΥ
$sqlquery="DELETE FROM drom_ploiar WHERE kwd_drom='$kwdikos_drom' ";
//ΔΙΑΓΡΑΦΗ ΤΩΝ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ-ΠΛΟΙΟΥ
$sqlquery="DELETE FROM pragmatopoiei WHERE kwd_drom='$kwdikos_drom' ";
//ΔΙΑΓΡΑΦΗ ΤΩΝ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ-ΕΤΑΙΡΕΙΑΣ
$sqlquery="DELETE FROM anhkei WHERE kwd_drom='$kwdikos_drom' ";
//ΕΛΕΓΧΟΣ ΑΝ ΥΠΑΡΧΕΙ Ο ΚΩΔΙΚΟΣ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ ΣΤΟΝ ΠΙΝΑΚΑ
'ΚΑΝΕΙ' Η' ΣΤΟΝ ΠΙΝΑΚΑ 'ΠΡΑΚΤ_ΔΡΟΜ'
$sqlquery="SELECT kanei.kwd_drom FROM kanei WHERE
kanei.kwd_drom='$kwdikos_drom'";
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 95
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num_kanei = mysql_num_rows($result);
$sqlquery="SELECT prakt_drom.kwd_drom FROM prakt_drom WHERE
prakt_drom.kwd_drom='$kwdikos_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num_prakt= mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΕΙ ΚΡΑΤΗΣΗ ΑΠΟ ΠΕΛΑΤΗ ΓΙΑ ΑΥΤΟ ΔΡΟΜΟΛΟΓΙΟ Η΄ΣΤΟΝ
ΕΝΑ ΠΙΝΑΚΑ Η' ΣΤΟΝ ΑΛΛΟ
if($num_kanei || $num_prakt)
{
//ΕΠΙΛΕΓΩ ΤΟ ΑΔΤ,ΚΩΔΙΚΟ_ΔΡΟΜ,ΑΡ_ΕΙΣ,ΚΟΣΤΟΣ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ
'ΚΑΝΕΙ' ΟΠΟΥ ΥΠΑΡΧΕΙ Ο ΣΥΓΚΕΚΡΙΜΕΝΟΣ ΚΩΔΙΚΟΣ ΔΡΟΜΟΛΟΓΙΟΥ
$sqlquery="SELECT
kanei.ADT,kanei.kwd_drom,kanei.ar_eis,kanei.kostos_ana_krat,pelatis.ADT,pelatis.onoma,p
elatis.epitheto,pelatis.thlefwno,pelatis.dieythynsh FROM kanei,pelatis WHERE
kanei.ADT=pelatis.ADT AND kanei.kwd_drom='$kwdikos_drom'";
$kanei_list=mysql_query($sqlquery,$conn) or die(mysql_error());
//ΕΠΙΛΕΓΩ ΤΟ ΑΔΤ,ΚΩΔΙΚΟ_ΔΡΟΜ,ΑΡ_ΕΙΣ,KOΣTOS ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ
'ΠΡΑΚΤ_ΔΡΟΜ' ΟΠΟΥ ΥΠΑΡΧΕΙ Ο ΣΥΓΚΕΚΡΙΜΕΝΟΣ ΚΩΔΙΚΟΣ
ΔΡΟΜΟΛΟΓΙΟΥ
$sqlquery="SELECT
prakt_drom.ADT,prakt_drom.kwd_drom,prakt_drom.ar_eis,prakt_drom.kostos_ana_krat,pela
tis.ADT,pelatis.onoma,pelatis.epitheto,pelatis.thlefwno,pelatis.dieythynsh FROM
prakt_drom,pelatis WHERE prakt_drom.ADT=pelatis.ADT AND
prakt_drom.kwd_drom='$kwdikos_drom'";
$prakt_list=mysql_query($sqlquery,$conn) or die(mysql_error());
?>
//ΕΜΦΑΝΙΖΩ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΗΝ ΟΘΟΝΗ
<table height="100" border="5" align="center" bordercolor="#2aa3e8">
<tr>
<td align="center" width="41" height="50" class="forma" >ΑΔΤ</td>
<td align="center" width="80" class="forma">ΟΝΟΜΑ</td>
<td align="center" width="116" class="forma">ΕΠΙΘΕΤΟ</td>
<td align="center" width="88"class="forma">ΤΗΛΕΦΩΝΟ</td>
<td align="center" width="111"class="forma">ΔΙΕΥΘΥΝΣΗ</td>
<td align="center" width="82"class="forma">ΑΡΙΘΜΟΣ ΕΙΣΙΤΗΡΙΩΝ</td>
<td align="center" width="82"class="forma">ΣΥΝ. ΚΟΣΤΟΣ ΔΡΟΜ.</td>
</tr>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 96
//ΕΜΦΑΝΙΖΩ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΗΝ ΟΘΟΝΗ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ 'ΠΕΛΑΤΗΣ'
ΣΥΜΦΩΝΑ ΜΕ ΤΟ ΑΔΤ ΣΤΟΝ ΠΙΚΑΚΑ 'ΚΑΝΕΙ'
<?
while($rows=mysql_fetch_array($kanei_list)){
?>
<tr>
<td align="center"><? echo $rows['ADT']; ?></td>
<td align="center"><? echo $rows['onoma']; ?></td>
<td align="center"><? echo $rows['epitheto']; ?></td>
<td align="center"><? echo $rows['thlefwno']; ?> </td>
<td align="center"><? echo $rows['dieythynsh']; ?></td>
<td align="center"><? echo $rows['ar_eis']; ?></td>
<td align="center"><? echo $rows['kostos_ana_krat']; ?></td>
</tr>
//ΕΜΦΑΝΙΖΩ ΤΑ ΣΤΟΙΧΕΙΑ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ 'ΠΕΛΑΤΗΣ' ΣΥΜΦΩΝΑ ΜΕ ΤΟ
ΑΔΤ ΣΤΟΝ ΠΙΚΑΚΑ 'ΠΡΑΚΤ_ΔΡΟΜ'
<?
}
while($rows=mysql_fetch_array($prakt_list)){
?>
<tr>
<td align="center"><? echo $rows['ADT']; ?></td>
<td align="center"><? echo $rows['onoma']; ?></td>
<td align="center"><? echo $rows['epitheto']; ?></td>
<td align="center"><? echo $rows['thlefwno']; ?> </td>
<td align="center"><? echo $rows['dieythynsh']; ?></td>
<td align="center"><? echo $rows['ar_eis']; ?></td>
<td align="center"><? echo $rows['kostos_ana_krat']; ?></td>
</tr>
<?
}
?>
</table>
 Προσθήκη ναυτιλιακής εταιρείας.
//Αποθήκευση στοιχείων της φόρμας στον πίνακα ‘etaireia’
$sqlquery="INSERT INTO etaireia(onoma,thlefwno,dieythynsh)VALUES('$name',$number,'$address')";
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 97
 Προσθήκη υπαλλήλου.
//ΑΝ Η ΕΙΔΙΚΟΤΗΤΑ ΕΙΝΑΙ ΠΛΟΙΑΡΧΟΣ
if($eidik=="πλοίαρχος" || $eidik=="ΠΛΟΙΑΡΧΟΣ" )
{
//ΑΠΟΘΗΚΕΥΩ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ 'DROM_PLOIAR' ΠΟΥ ΕΙΝΑΙ
ΤΑ ΣΤΟΙΧΕΙΑ ΔΡΟΜΟΛΟΓΙΟΥ-ΠΛΟΙΑΡΧΟΥ
$sqlquery="INSERT INTO drom_ploiar (onoma_ploiar,epith_ploiar,adt_ploiar,kwd_drom)VALUES('$name','$surname','$adt',$kwd_drom
)";
//ΑΠΟΘΗΚΕΥΩ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ 'DROM_PLOIAR' ΠΟΥ ΕΙΝΑΙ
ΤΑ ΣΤΟΙΧΕΙΑ ΔΡΟΜΟΛΟΓΙΟΥ-ΠΛΟΙΑΡΧΟΥ
$sqlquery="INSERT INTO drom_ploiar (onoma_ploiar,epith_ploiar,adt_ploiar,kwd_drom)VALUES('$name','$surname','$adt',$kwd_drom
)";
}
//ΑΝ Η ΕΙΔΙΚΟΤΗΤΑ ΔΕΝ ΕΙΝΑΙ ΠΛΟΙΑΡΧΟΣ
else
{
//ΑΠΟΘΗΚΕΥΩ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ 'YPALLHLOS' ΠΟΥ ΕΙΝΑΙ ΤΑ
ΣΤΟΙΧΕΙΑ ΤΟΥ ΥΠΑΛΛΗΛΟΥ
$sqlquery=mysql_query("INSERT INTO ypallhlos
(A_D_T,onoma,epitheto,thlefwno,dieythynsh,eidikothta,misthos)VALUES('$adt','$name','$su
rname',$number,'$address','$eidik',$misthos)");
}
 Διαγραφή υπαλλήλου.
//ΕΠΙΛΟΓΗ ‘ΑΔΤ ΠΛΟΙΑΡΧΟΥ’ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ ‘ADT_PLOIAR’
$sqlquery="SELECT adt_ploiar FROM drom_ploiar WHERE adt_ploiar='$A_D_T'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num_rows = mysql_num_rows($result);
// ΑΝ ΥΠΑΡΧΕΙ ΤΟ ‘ΑΔΤ ΠΛΟΙΑΡΧΟΥ’ ΣΤΟΝ ΠΙΝΑΚΑ ‘ADT_PLOIAR’
if($num_rows)
{
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 98
// ΔΕΝ ΔΙΑΓΡΑΦΕΤΑΙ Ο ΠΛΟΙΑΡΧΟΣ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ
‘YPALLHLOS’
echo "ΔΕΝ ΕΙΝΑΙ ΔΥΝΑΤΗ Η ΔΙΑΓΡΑΦΗ ΤΟΥ ΠΛΟΙΑΡΧΟΥ ΓΙΑΤΙ ΕΚΤΕΛΕΙ
ΔΡΟΜΟΛΟΓΙΟ!";
}
// ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΤΟ ‘ΑΔΤ ΠΛΟΙΑΡΧΟΥ’ ΣΤΟΝ ΠΙΝΑΚΑ
‘ADT_PLOIAR’
else
{
// ΔΙΑΓΡΑΦΕΤΑΙ Ο ΠΛΟΙΑΡΧΟΣ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ ‘YPALLHLOS’
$sqlquery=mysql_query("DELETE FROM ypallhlos WHERE A_D_T='$A_D_T'");
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΥΠΑΛΛΗΛΟΥ ΔΙΑΓΡΑΦΗΚΑΝ ΕΠΙΤΥΧΩΣ!";
}
 Συγκεντρωτική αναφορά.
//ΕΠΙΛΟΓΗ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ ΤΑΞΙΝΟΜΗΜΕΝΑ ΜΕ ΒΑΣΗ
ΤΟ ΠΛΗΘΟΣ ΤΩΝ ΕΠΙΒΑΤΩΝ ΑΠΟ ΑΥΤΟ ΜΕ ΤΟΥΣ ΠΕΡΙΣΣΟΤΕΡΟΥΣ
ΠΡΟΣ ΕΚΕΙΝΟ ΜΕ ΤΟΥΣ ΛΙΓΟΤΕΡΟΥΣ (ORDER BY epiv DESC) ΚΑΙ
ΣΥΝΟΛΙΚΗΣ ΑΞΙΑΣ ΤΩΝ ΕΙΣΙΤΗΡΙΩΝ ΠΟΥ ΕΚΔΟΘΗΚΑΝ ΓΙΑ ΤΟ
ΚΑΘΕ ΔΡΟΜΟΛΟΓΙΟ (SUM(plhthos_thesewn)-SUM(ar_diath_thesewn) AS
epiv)
(echo $rows['timh']*$rows['epiv'];)
<?
$query="SELECT
kwdikos_drom,afethria,proorismos,hm_nia,timh,SUM(plhthos_thesewn)SUM(ar_diath_thesewn) AS epiv FROM dromologio GROUP BY kwdikos_drom
ORDER BY epiv DESC";
$result=mysql_query($query,$conn) or die(mysql_error());
?>
//ΕΜΦΑΝΙΣΗ ΣΤΗΝ ΟΘΟΝΗ (ΚΩΔΙΚΟΣ
ΔΡΟΜ/ΗΜΕΡΟΜΗΝΙΑ/ΑΦΕΤΗΡΙΑ/ΠΡΟΟΡΙΣΜΟΣ/ΣΥΝΟΛΟ
ΕΠΙΒΑΤΩΝ/ΣΥΝΟΛΙΚΗ ΑΞΙΑ ΕΙΣΙΤΗΡΙΩΝ)
<table height="100" border="5" align="center" bordercolor="#2aa3e8">
<tr>
<td align="center" width="41" height="50" class="forma" >ΚΩΔΙΚΟΣ
ΔΡΟΜ</td>
<td align="center" width="80" class="forma">ΗΜΕΡΟΜΗΝΙΑ</td>
<td align="center" width="88"class="forma">ΑΦΕΤΗΡΙΑ</td>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 99
<td align="center" width="111"class="forma">ΠΡΟΟΡΙΣΜΟΣ</td>
<!-- <td align="center" width="116" class="forma">ΏΡΑ ΑΝΑΧ.</td>
<td align="center" width="82"class="forma">ΏΡΑ ΑΦΙΞΗΣ</td>-->
<td align="center" width="82"class="forma">ΣΥΝΟΛΟ ΕΠΙΒΑΤΩΝ</td>
<td align="center" width="82"class="forma">ΣΥΝ. ΑΞΙΑ ΕΙΣ.</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? echo $rows['kwdikos_drom']; ?></td>
<td align="center"><? echo $rows['hm_nia']; ?></td>
<td align="center"><? echo $rows['afethria']; ?> </td>
<td align="center"><? echo $rows['proorismos']; ?></td>
<!-- <td align="center"><? //echo $rows['wra_anaxwrhshs']; ?></td>
<td align="center"><? //echo $rows['wra_afikshs']; ?></td>-->
<td align="center"><? echo $rows['epiv'] ; ?></td>
<td align="center"><? echo $rows['timh']*$rows['epiv']; ?></td>
</tr>
<?
}
?>
</table>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 100
4.4.2 Ανάλυση Κώδικα PHP
4.4.2.1
Εγγραφή Πελάτη & Σελίδα Υποβολής Στοιχείων
eggrafi_pelati.php
<table border="5" align="center" td="TD" width="60%" height="259"
BORDERCOLOR=#2aa3e8>
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
function formValidator(){
// Make quick references to our fields
var name = document.getElementById('name');
var surname = document.getElementById('surname');
var number = document.getElementById('number');
var address = document.getElementById('address');
var adt = document.getElementById('adt');
var username = document.getElementById('username');
var password = document.getElementById('password');
// Check each input in the order that it appears in the form!
if(isAlphabet(name, "Συμπληρώστε το πεδίο 'Όνομα' ΜΟΝΟ με γράμματα!")){
if(isAlphabet(surname, "Συμπληρώστε το πεδίο 'Επίθετο' ΜΟΝΟ με γράμματα!")){
if(isNumeric(number, "Συμπληρώστε το πεδίο 'Τηλέφωνο' ΜΟΝΟ με αριθμούς!")){
if(isAlphabet(address, "Συμπληρώστε το πεδίο 'Διεύθυνση' ΜΟΝΟ με γράμματα!")){
if(isAlphanumeric(adt, "Συμπληρώστε το πεδίο 'ΑΔΤ'!")){
if(isAlphanumeric(username, "Συμπληρώστε το πεδίο 'Κωδικός χρήστη' με αριθμούς
και γράμματα!")){
if(isAlphanumeric(password, "Συμπληρώστε το πεδίο 'Όνομα χρήστη' με αριθμούς
και γράμματα!")){
return true;
}
}
}
}
}
}
}
return false;
}
//Συνάρτηση εισαγωγής κειμένου μόνο με αριθμούς
function isNumeric(elem, helperMsg){
var numericExpression = /^[0-9]+$/;
if(elem.value.match(numericExpression)){
return true;
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 101
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
// Συνάρτηση εισαγωγής κειμένου αλφαριθμητικών χαρακτήρων (αριθμοί και
γράμματα)
function isAlphanumeric(elem, helperMsg){
var alphaExp = /^[0-9a-zA-Zα-ωΑ-Ω]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
//Συνάρτηση εισαγωγής κειμένου μόνο με γράμματα
function isAlphabet(elem, helperMsg){
var alphaExp = /^[a-zA-Zα-ωΑ-Ω]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
//Συνάρτηση εισαγωγής κειμένου με το σωστό αριθμό των χαρακτήρων
function lengthRestriction(elem, min, max){
var uInput = elem.value;
if(uInput.length >= min && uInput.length <= max){
return true;
}else{
alert("Συμπληρώστε το πεδίο από " +min+ " έως " +max+ " χαρακτήρες!");
elem.focus();
return false;
}
}
</script>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 102
//Δημιουργία φόρμας
//Επόμενη σελίδα eggrafi_pelati_next.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidator()'
<form action="eggrafi_pelati_next.php" method="post" name="pelatis" target="_blank" onsubmit='return formValidator()'>
//Το id αφορά τις δηλώσεις στην JavaScript
//To name αφορά τις δηλώσεις στην PHP
<tr>
<td align="left" class="forma">Όνομα :</acronym>
<input type="text" name="name" size="20" id="name" />
</td>
</tr>
<tr>
<td align="left" class="forma">Επίθετο :
<input type="text" name="surname" size="20" id="surname" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Τηλέφωνο:
<input type="text" name="number" size="20" id="number"/>
</td>
</tr>
<tr>
<td align="left" class="forma">
Διεύθυνση:
<input type="text" name="address" size="20" id="address" />
</td>
</tr>
<tr>
<td align="left" class="forma">ΑΔΤ:
<input type="text" name="adt" size="20" id="adt" />
</td>
</tr>
//Μήνυμα εισαγωγής από 4 έως 6 χαρακτήρες όταν κάνουμε click στο πεδίο ‘όνομα χρήστη’  onclick="lengthRestriction(document.getElementById('username'),
4, 6)
<tr>
<td align="left" class="forma">Όνομα χρήστη:
<input type="text" name="username" size="20" id="username" onclick="lengthRestriction(document.getElementById('username'), 4, 6)"/>
</td>
</tr>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 103
//Μήνυμα εισαγωγής από 4 έως 6 χαρακτήρες όταν κάνουμε click στο πεδίο
‘Κωδικός’  onclick="lengthRestriction(document.getElementById(' password '), 4,
6)
<tr>
<td align="left" class="forma">
Κωδικός:
<input type="text" name="password" size="20" id="password" onclick="lengthRestriction(document.getElementById('password'), 4, 6)" />
</td>
</tr>
//Δημιουργία button με όνομα «ΕΓΓΡΑΦΗ»
<tr>
<td align="center"><strong><font face="Georgia, Times New Roman, Times,
serif">
<input type="submit" value="ΕΓΓΡΑΦΗ" name="button" id="button" />
</font></strong></td>
</tr>
</form>
</table>
eggrafi_pelati_next.php
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="login";
$table_name="eggrafi_pelati";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση δεδομένων τα οποία πήραμε με την μέθοδο POST από την φόρμα σε τοπικές μεταβλητές
$name=$_POST['name'];
$surname=$_POST['surname'];
$number=$_POST['number'];
$address=$_POST['address'];
$adt=$_POST['adt'];
$username=$_POST['username'];
$password=$_POST['password'];
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 104
//Αποθήκευση στοιχείων της φόρμας στον πίνακα ‘eggrafi_pelati’ στην βάση ‘login’
$sqlquery="INSERT INTO $table_name(onoma,epitheto,thlefwno,dieythynsh,ADT,onoma_xrhsth,kwdikos_xrhsth)VALUE
S('$name','$surname',$number,'$address', '$adt','$username','$password')";
//Εκτέλεση ερωτήματος sql και αποθήκευση αποτελέσματος σε μια μεταβλητή $result
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Εμφάνιση στην οθόνη το παρακάτω μήνυμα μόλις γίνει η αποθήκευση των στοιχείων
στην βάση
echo "Η ΕΓΓΡΑΦΗ ΕΓΙΝΕ ΕΠΙΤΥΧΩΣ";
//Κλείνουμε την σύνδεση με την βάση
mysql_close($conn);
?>
4.4.2.2
Σελίδα Εισόδου Πελάτη & Σελίδα Υποβολής Στοιχείων
login_pelati.php
<table border="5" align="center" td="TD" width="60%" height="283" bordercolor="#2aa3e8">
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
function formValidator(){
// Make quick references to our fields
var username = document.getElementById('username');
var password = document.getElementById('password');
// Check each input in the order that it appears in the form!
if(isAlphanumeric(username, "Συμπληρώστε το πεδίο 'Όνομα χρήστη' με αριθμούς
και γράμματα!")){
if(isAlphanumeric(password, "Συμπληρώστε το πεδίο 'Κωδικός χρήστη' με αριθμούς
και γράμματα!")){
return true;
}
}
return false;
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 105
// Συνάρτηση εισαγωγής κειμένου αλφαριθμητικών χαρακτήρων (αριθμοί και
γράμματα)
function isAlphanumeric(elem, helperMsg){
var alphaExp = /^[0-9a-zA-Zα-ωΑ-Ω]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
//Συνάρτηση εισαγωγής κειμένου με το σωστό αριθμό των χαρακτήρων
function lengthRestriction(elem, min, max){
var uInput = elem.value;
if(uInput.length >= min && uInput.length <= max){
return true;
}else{
alert("Συμπληρώστε το πεδίο από " +min+ " έως " +max+ " χαρακτήρες!");
elem.focus();
return false;
}
}
</script>
//Δημιουργία φόρμας
//Επόμενη σελίδα loginpage_pelati.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidator()'
<form action="loginpage_pelati.php" method="post" name="pelatis" onsubmit='return formValidator()'>
//Μήνυμα εισαγωγής από 4 έως 6 χαρακτήρες όταν κάνουμε click στο πεδίο ‘όνομα χρήστη’  onclick="lengthRestriction(document.getElementById('username'),
4, 6)
<tr>
<td align="left" class="forma">Όνομα χρήστη:</acronym>
<input type="text" name="username" size="30" id="username" onclick="lengthRestriction(document.getElementById('username'), 4, 6)" />
</td>
</tr>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 106
//Μήνυμα εισαγωγής από 4 έως 6 χαρακτήρες όταν κάνουμε click στο πεδίο ‘κωδικός χρήστη’  onclick="lengthRestriction(document.getElementById('password'),
4, 6)
<tr>
<td align="left" class="forma">
Κωδικός χρήστη:
<input type="password" name="password" size="30" id="password" onclick="lengthRestriction(document.getElementById('password'), 4, 6)" />
</td>
</tr>
//Δημιουργία button με όνομα «ΕΙΣΟΔΟΣ»
<tr>
<td align="center"><strong><font face="Georgia, Times New Roman, Times,
serif">
<input name="submit" type="submit" id="sumbit" value="ΕΙΣΟΔΟΣ" />
</font></strong></td>
</tr>
</form>
</table>
loginpage_pelati.php
<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="login"; // Database name
$tbl_name="eggrafi_pelati"; // Table name
// Σύνδεση στον server και επιλογή βάσης
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
//Αποθήκευση δεδομένων τα οποία πήραμε με την μέθοδο POST από την φόρμα
σε τοπικές μεταβλητές
$username=$_POST['username'];
$password=$_POST['password'];
//Επιλογή στοιχείων της φόρμας από τον πίνακα ‘eggrafi_pelati’
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
//Εκτέλεση ερωτήματος sql και αποθήκευση αποτελέσματος σε μια μεταβλητή
$result
$result=mysql_query($sql);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 107
//Ανάθεση αριθμού γραμμών αποτελέσματος στην μεταβλητή $number
$rowCheck = mysql_num_rows($result);
//Αν υπάρχουν τα στοιχεία στο πίνακα
if($rowCheck > 0){
//Κάθε φορά θα παίρνει μια γραμμή του αποτελέσματος και θα την αναθέτει
στην μεταβλητή $row
while($row = mysql_fetch_array($result)){
//Δημιουργούμε μια SESSION και εγγράφουμε τη μεταβλητή ‘username’
session_start();
$_SESSION['username']=$username;
//Πηγαίνουμε στην σελίδα arxiki_pelati.php όπου είμαστε σίγουροι ότι συνδεθήκαμε
header( "Location: arxiki_pelati.php" );
}
}
//Αν δεν υπάρχουν τα στοιχεία στο πίνακα
else {
//μας πετάει μήνυμα λάθους
echo "ΔΩΣΑΤΕ ΛΑΘΟΣ ΟΝΟΜΑ ΧΡΗΣΤΗ Ή ΚΩΔΙΚΟ ΠΡΟΣΒΑΣΗΣ.";
}
?>
4.4.2.3
Σελίδα Εξόδου Εφαρμογής Πελάτη
logout_pelati.php
//Δημιουργούμε SESSION η οποία κρατά δεδομένα από το πέρασμα από μία σελίδα στην άλλη
<? session_start();
//η μεταβλητή του SESSION εγγράφηκε, ο χρήστης είναι έτοιμος να αποσυνδεθεί
session_unset();
//Καταστρέφουμε την SESSION
session_destroy();
//Επιστροφή στην αρχική σελίδα εισόδου εφαρμογής login_pelati.php
header("Location: login_pelati.php");
?>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 108
4.4.2.4 Σελίδα Προσθήκης Κράτησης Πελάτη & Σελίδα Υποβολής
στοιχείων
booking.php
<table border="5" align="center" td="TD" width="90%" height="411" bordercolor="#2aa3e8">
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
function formValidator(){
// Make quick references to our fields
var post = document.getElementById('post');
var destination = document.getElementById('destination');
var date = document.getElementById('date');
var time_anax = document.getElementById('time_anax');
var time_af = document.getElementById('time_af');
var number_person = document.getElementById('number_person');
var number_veh = document.getElementById('number_veh');
// Check each input in the order that it appears in the form!
if(checkdate(date, "Συμπληρώστε το πεδίο 'Ημερομηνία'!")){
if(checktime(time_anax, "Συμπληρώστε το πεδίο 'Ώρα αναχώρησης'!")){
if(checktime(time_af, "Συμπληρώστε το πεδίο 'Ώρα άφιξης'!")){
if(madeSelection(post, "Επιλέξτε 'Λιμάνι αναχώρησης'!")){
if (madeSelection(destination, "Επιλέξτε 'Λιμάνι προορισμού'!")){
if(isNumeric(number_person, "Συμπληρώστε το πεδίο 'Αριθμός ατόμων' ΜΟΝΟ με αριθμούς!")){
if(isNumeric(number_veh, "Συμπληρώστε το πεδίο 'Αριθμός οχημάτων' ΜΟΝΟ με αριθμούς!")){
return true;
}
}
}
}
}
}
}
return false;
}
//Συνάρτηση επιλογής από μια είσοδο επιλογής με HTML (drop down list)
function madeSelection(elem, helperMsg){
if(elem.value == "--ΕΠΙΛΕΞΤΕ ΛΙΜΑΝΙ--" ){
alert(helperMsg);
elem.focus();
return false;
}else{
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 109
return true;
}
}
//Συνάρτηση εισαγωγής κειμένου μόνο με αριθμούς
function isNumeric(elem, helperMsg){
var numericExpression = /^[0-9]+$/;
if(elem.value.match(numericExpression)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
//Συνάρτηση εισαγωγής έγκυρης ημερομηνίας
function checkdate(input){
var validformat=/^\d{4}\-\d{2}\-\d{2}$/ //Basic check for format validity
var returnval=false
if (!validformat.test(input.value))
alert("Η ημερομηνία αυτή δεν ισχύει. Πρέπει να είναι της μορφής ΥΥΥΥ-ΜΜ-DD. Παρακαλώ συμπληρώστε ξανά.")
else{ //Detailed check for valid date ranges
var yearfield=input.value.split("-")[0]
var monthfield=input.value.split("-")[1]
var dayfield=input.value.split("-")[2]
var dayobj = new Date(yearfield, monthfield-1, dayfield)
if
((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=y
earfield))
alert("Η ημέρα, ο μήνας, ή ο χρόνος δεν ισχύει. Παρακαλώ συμπληρώστε ξανά.")
else
returnval=true
}
if (returnval==false) input.select()
return returnval
}
//Συνάρτηση εισαγωγής έγκυρης ώρας
function checktime(input) {
// Checks if time is in HH:MM:SS format.
var validformat=/^[0-2][0-9]\:[0-6][0-9]\:[0-6][0-9]$/
if (!validformat.test(input.value)){
alert ("Η ώρα αυτή δεν ισχύει. Πρέπει να είναι της μορφής HH:MM:SS. Παρακαλώ συμπληρώστε ξανά.");
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 110
return false;
}
return true;
}
</script>
//Δημιουργία φόρμας
//Επόμενη σελίδα booking_next.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidator()'
<form action="booking_next.php" method="post" name="pelatis" target="_blank" onsubmit='return formValidator()'>
<tr>
<td align="left" class="forma">Όνομα :</acronym>
<input type="text" name="name" size="30" id="name" />
</td>
</tr>
<tr>
<td align="left" class="forma">Επίθετο :
<input type="text" name="surname" size="30" id="surname"/>
</td>
</tr>
<tr>
<td align="left" class="forma">
Τηλέφωνο:
<input type="text" name="number" size="30" id="number" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Διεύθυνση:
<input type="text" name="address" size="30" id="address" />
</td>
</tr>
<tr>
<td align="left" class="forma">ΑΔΤ:
<input type="text" name="adt" size="30" id="adt" />
</td>
</tr>
<tr>
<td align="left" class="forma">Λιμάνι αναχώρησης:
<span class="forma1">
<select name="post[]" id="post">
<option>--ΕΠΙΛΕΞΤΕ ΛΙΜΑΝΙ--</option>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 111
<option value="ΗΡΑΚΛΕΙΟ">ΗΡΑΚΛΕΙΟ</option>
<option value="ΚΑΡΠΑΘΟΣ">ΚΑΡΠΑΘΟΣ</option>
<option value="ΚΑΣΟΣ">ΚΑΣΟΣ</option>
<option value="ΜΗΛΟΣ">ΜΗΛΟΣ</option>
<option value="ΠΑΡΟΣ">ΠΑΡΟΣ</option>
<option value="ΠΕΙΡΑΙΑΣ">ΠΕΙΡΑΙΑΣ</option>
<option value="ΡΟΔΟΣ">ΡΟΔΟΣ</option>
<option value="ΣΑΝΤΟΡΙΝΗ">ΣΑΝΤΟΡΙΝΗ</option>
<option value="ΧΑΝΙΑ">ΧΑΝΙΑ</option>
</select>
</span></td>
</tr>
<tr>
<td align="left" class="forma">Λιμάνι προορισμού:
<span class="forma1">
<select name="destination[]" id="destination">
<option>--ΕΠΙΛΕΞΤΕ ΛΙΜΑΝΙ--</option>
<option value="ΗΡΑΚΛΕΙΟ">ΗΡΑΚΛΕΙΟ</option>
<option value="ΚΑΡΠΑΘΟΣ">ΚΑΡΠΑΘΟΣ</option>
<option value="ΚΑΣΟΣ">ΚΑΣΟΣ</option>
<option value="ΜΗΛΟΣ">ΜΗΛΟΣ</option>
<option value="ΠΑΡΟΣ">ΠΑΡΟΣ</option>
<option value="ΠΕΙΡΑΙΑΣ">ΠΕΙΡΑΙΑΣ</option>
<option value="ΡΟΔΟΣ">ΡΟΔΟΣ</option>
<option value="ΣΑΝΤΟΡΙΝΗ">ΣΑΝΤΟΡΙΝΗ</option>
<option value="ΧΑΝΙΑ">ΧΑΝΙΑ</option>
</select>
</span></td>
</tr>
<tr>
<td align="left" class="forma">Ημ/νία αναχώρησης(Έτος-Μήνας-Ημέρα):
<span class="forma">
<input name="date" type="text" value="0000-00-00" size="20" id="date" />
</span></td>
</tr>
<tr>
<td align="left" class="forma">Ώρα αναχώρησης(Ώρα-Λεπτά-Δευτ.) :</acronym>
<input name="time_anax" type="text" value="00:00:00" size="20" id="time_anax"
/></td></tr>
<tr>
<td align="left" class="forma">
Ώρα άφιξης(Ώρα-Λεπτά-Δευτ.):
<input name="time_af" type="text" value="00:00:00" size="20" id="time_af" />
</td>
</tr>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 112
<tr>
<td align="left" class="forma">
Αριθμός ατόμων:
<input type="text" name="number_person" size="30" id="number_person" />
</td>
</tr>
<tr>
<td align="left" class="forma">Αριθμός οχημάτων:
<input type="text" name="number_veh" size="30" id="number_veh" />
</td>
</tr>
//Δημιουργία button με όνομα «ΚΡΑΤΗΣΗ»
<tr>
<td align="center"><strong><font face="Georgia, Times New Roman, Times, serif">
<input type="submit" value="ΚΡΑΤΗΣΗ" name="button" id="button" />
</font></strong></td>
</tr>
</form>
</table>
booking_next.php
<?php session_start();
//ΑΝ ΓΙΝΕΙ Η ΣΥΝΔΕΣΗ ΕΠΙΤΥΧΩΣ ΑΠΟΘΗΚΕΥΩ ΤΟ ‘username’ ΣΕ ΜΙΑ
ΜΕΤΑΒΛΗΤΗ
if(isset($_SESSION['username']))
{
$username=$_SESSION['username'];
//echo $username;
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="login";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
session_start();
$username=$_SESSION['username'];
//Επιλογή στοιχείων από τον πίνακα 'eggrafi_pelati' όπου είναι το ‘username’ του πελάτη
$sqlquery="SELECT * FROM eggrafi_pelati WHERE username='$username'";
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 113
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//Αποθηκεύω τα στοιχεία από τον πίνακα 'eggrafi_pelati' σε μεταβλητές
while($row=mysql_fetch_array($result))
{$onoma=$row['onoma'];
$epitheto=$row['epitheto'];
$thlefwno=$row['thlefwno'];
$dieythynsh=$row['dieythynsh'];
$adt=$row['ADT'];
//echo $row['ADT'];
}
// ΕΛΕΓΧΟΣ ΑΝ ΥΠΑΡΧΟΥΝ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ ‘eggrafi_pelati’
if($num)
{
?>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Επιλογή ΑΔΤ που έδωσε ο πελάτης στην φόρμα από τον πίνακα ‘pelatis’
$sqlquery="SELECT pelatis.ADT FROM pelatis WHERE pelatis.ADT='$adt'";
//Εκτέλεση ερωτήματος sql και αποθήκευση αποτελέσματος σε μια μεταβλητή $result
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Κάθε φορά θα παίρνει μια γραμμή του αποτελέσματος και θα την αναθέτει στην μεταβλητή $num
$num=mysql_num_rows($result);
//Έλεγχος αν υπάρχουν ήδη τα στοιχεία του πελάτη στον πίνακα ‘pelatis’
if($num)
{ echo "ΤΑ ΣΤΟΙΧΕΙΑ ΣΑΣ ΕΧΟΥΝ ΗΔΗ ΑΠΟΘΗΚΕΥΤΕΙ ΣΤΟΝ ΠΙΝΑΚΑ ΠΕΛΑΤΗ.";
}
//Αν δεν υπάρχουν τα στοιχεία στον πίνακα, αποθήκευση στοιχείων στον πίνακα ‘pelatis’
else
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 114
{$query="INSERT INTO pelatis(onoma,epitheto,thlefwno,dieythynsh,ADT)VALUES('$name','$surname',$number,'$addres
s','$adt')";
$result=mysql_query($query,$conn) or die(mysql_error());
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΣΑΣ ΑΠΟΘΗΚΕΥΘΗΚΑΝ ΣΤΟΝ ΠΙΝΑΚΑ ΠΕΛΑΤΗ.";
}
}
else
{
}
}
else
{
}
?>
?>
<p><?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
$date=$_POST['date'];
$time_anax=$_POST['time_anax'];
$time_af=$_POST['time_af'];
$number_person=$_POST['number_person'];
$number_veh=$_POST['number_veh'];
//Αποθήκευση δεδομένων τα οποία πήραμε με την μέθοδο POST από την φόρμα σε τοπικές μεταβλητές
//Για κάθε ‘αφετηρία’ και κάθε ‘προορισμό’ που επιλέγει ο χρήστης από το drοp down
list, επιλέγω τα στοιχεία του δρομολογίου από τον πίνακα ‘dromologio’
foreach($_POST['post'] as $post)
{
foreach($_POST['destination'] as $destination)
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 115
{
$sqlquery="SELECT dromologio.kwdikos_drom FROM dromologio WHERE dromologio.hm_nia='$date' AND dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΕΙ ΤΟ ΔΡΟΜΟΛΟΓΙΟ
if($num)
{
//ΕΛΕΓΧΟΣ ΓΙΑ ΔΙΠΛΟΚΡΑΤΗΣΗ
$sqlquery="SELECT
dromologio.kwdikos_drom,dromologio.hm_nia,dromologio.wra_anaxwrhshs,dromologio.afet
hria,dromologio.proorismos,kanei.kwd_drom,kanei.ADT FROM dromologio,kanei WHERE
kanei.ADT='$adt' AND dromologio.kwdikos_drom=kanei.kwd_drom";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($row=mysql_fetch_array($result))
{$afethria=$row['afethria'];
$proorismos=$row['proorismos'];
$hm_nia=$row['hm_nia'];
$wra_anaxwrhshs=$row['wra_anaxwrhshs'];
}
if(($result==1 && $post!=$afethria && $destination!=$proorismos && $date==$hm_nia &&
$time_anax==$wra_anaxwrhshs)||($post==$afethria && $destination!=$proorismos &&
$date==$hm_nia && $time_anax==$wra_anaxwrhshs) || ($post!=$afethria && $destination==$proorismos && $date==$hm_nia && $time_anax==$wra_anaxwrhshs)
||($post!=$afethria && $destination!=$proorismos && $date==$hm_nia &&
$time_anax==$wra_anaxwrhshs))
{
echo "ΔΕΝ ΜΠΟΡΕΙΤΕ ΝΑ ΚΑΝΕΤΕ ΔΙΠΛΟΚΡΑΤΗΣΗ";
}
//ΑΝ ΔΕΝ ΕΧΩ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ 'ΚΑΝΕΙ' ΚΑΙ ΑΝ Η
ΗΜΕΡΟΜΗΝΙΑ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ ΤΗΣ ΚΡΑΤΗΣΗΣ ΔΕΝ ΕΙΝΑΙ Η ΙΔΙΑ ΜΕ
ΤΗΝ ΗΜΕΡΟΜΗΝΙΑ ΔΡΟΜΟΛΟΓΙΟΥ ΠΡΟΙΓΟΥΜΕΝΗΣ ΚΡΑΤΗΣΗΣ, ΤΟΤΕ
ΕΠΙΛΕΓΟΥΜΕ ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ
else{
//Επιλογή «ar_eis» (sum) ενός πελάτη από τον πίνακα ‘kanei’ για τον έλεγχο των αριθμών εισιτηρίων
$sqlquery="SELECT dromologio.kwdikos_drom,kanei.kwd_drom,SUM(kanei.ar_eis)
as sum FROM dromologio,kanei WHERE dromologio.hm_nia='$date' AND dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromoloΑγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 116
gio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af' AND
kanei.ADT='$adt' AND dromologio.kwdikos_drom=kanei.kwd_drom GROUP BY
kanei.kwd_drom";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($row=mysql_fetch_array($result))
{$sum=$row['sum'];
}
//Έλεγχος αν το άθροισμα «ar_eis» (sum στον πίνακα ‘kanei’) είναι μικρότερος από 5 και
αν ο «number_person» (από την φόρμα) είναι μικρότερος από 6 και αν το άθροισμα του
«number_person» με τον «ar_eis» είναι μικρότερο του 6.
if($number_person<6 && $sum<5 && $number_person+$sum<6 )
//Αν έχει κάνει κράτηση για λιγότερα από 6 εισιτήρια, τότε τα στοιχεία του πελάτη και
του δρομολογίου αποθηκεύονται στον πίνακα ‘kanei’
{$query="INSERT INTO
kanei(ADT,kwd_drom,hm_nia,afethria,proorismos,arithmos_oxhmatwn,ar_eis,date_krat,time
_krat)VALUES('$adt',(SELECT dromologio.kwdikos_drom FROM dromologio WHERE
dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af'),(SELECT dromologio.hm_nia FROM dromologio WHERE
dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af'),(SELECT dromologio.afethria FROM dromologio WHERE
dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af'),(SELECT dromologio.proorismos FROM dromologio WHERE
dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af'),$number_veh,$number_person,CURDATE(),NOW())";
$result=mysql_query($query,$conn) or die(mysql_error());
//Μείωση των διαθέσιμων θέσεων του δρομολογίου με τον αριθμό των εισιτηρίων που
κάνει κράτηση ο πελάτης (dromologio .ar_diath_thesewn-kanei.ar_eis)
$query="UPDATE dromologio,kanei SET dromologio.ar_diath_thesewn=dromologio.ar_diath_thesewn-kanei.ar_eis WHERE dromologio.kwdikos_drom=kanei.kwd_drom AND kanei.ADT='$adt' AND
kanei.date_krat=CURDATE() AND kanei.time_krat=NOW()";
$result=mysql_query($query,$conn) or die(mysql_error());
echo "ΝΕΕΣ ΔΙΑΘΕΣΙΜΕΣ ΘΕΣΕΙΣ.";
echo "<br/>";
echo "<br/>";
//Αποθηκεύω την τιμή του δρομολογίου και στα στοιχεία του πελάτη με το δρομολόγιο
στον πίνακα ‘kanei’ (kanei.ar_eis*dromologio.timh)
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 117
$query="UPDATE dromologio,kanei SET
kanei.kostos_ana_krat=kanei.ar_eis*dromologio.timh WHERE dromologio.kwdikos_drom=kanei.kwd_drom AND kanei.ADT='$adt' AND dromologio.hm_nia='$date' AND dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND kanei.date_krat=CURDATE() AND
kanei.time_krat=NOW()";
$result=mysql_query($query,$conn) or die(mysql_error());
//Αποθηκεύω την τιμή του δρομολογίου και στα στοιχεία του πελάτη στο συνολικό κόστος στον πίνακα ‘pelatis’
$query="UPDATE kanei,pelatis SET pelatis.syn_kostos=(SELECT
SUM(kanei.kostos_ana_krat) FROM kanei WHERE kanei.ADT='$adt') WHERE pelatis.ADT='$adt'";
$result=mysql_query($query,$conn) or die(mysql_error());
//ΕΠΙΛΟΓΗ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ ΓΙΑ ΕΜΦΑΝΙΣΗ ΣΤΗΝ ΟΘΟΝΗ
$sqlquery="SELECT
kanei.ADT,kanei.ar_eis,kanei.kostos_ana_krat,dromologio.kwdikos_drom,dromologio.afethri
a,dromologio.proorismos,dromologio.wra_anaxwrhshs,dromologio.wra_afikshs,dromologio.h
m_nia,dromologio.timh,pragmatopoiei.kwd_drom,pragmatopoiei.onoma_ploiou FROM
kanei,dromologio,pragmatopoiei WHERE pragmatopoiei.kwd_drom=dromologio.kwdikos_drom AND dromologio.hm_nia='$date' AND dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af' AND
kanei.ADT='$adt' AND kanei.date_krat=CURDATE() AND kanei.time_krat=NOW() AND
dromologio.kwdikos_drom=kanei.kwd_drom";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΗΣ ΚΡΑΤΗΣΗΣ ΣΑΣ ΓΙΑ ΤΟ ΔΡΟΜΟΛΟΓΙΟ ΑΠΟ '$post' ΠΡΟΣ
'$destination' ΤΗΝ ΗΜΕΡΟΜΗΝΙΑ '$date' ΕΙΝΑΙ:";
?>
</p>
<table width="544" height="100" border="5" align="left" bordercolor="#2aa3e8"
class="count">
<tr>
<td align="center" width="67" height="50" class="forma" >ΟΝΟΜΑ ΠΛΟΙΟΥ</td>
<td align="center" width="73" class="forma">ΚΩΔ.ΔΡΟΜ</td>
<!--<td align="center" class="forma">ΗΜΕΡ/ΝΙΑ</td>
<td align="center" class="forma">ΑΦΕΤΗΡ.</td>
<td align="center" class="forma">ΠΡΟΟΡ.</td>-->
<td align="center" width="48" class="forma">ΏΡΑ ΑΝΑΧ.</td>
<td align="center" width="48" class="forma">ΏΡΑ ΑΦ.</td>
<td align="center" width="82" class="forma">ΑΡ.ΑΤΟΜΩΝ</td>
<td align="center" width="94" class="forma">ΤΙΜΗ/ΑΤΟΜΟ</td>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 118
<td align="center" width="78" class="forma">ΣΥΝΟΛΙΚΟ ΚΟΣΤΟΣ</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? echo $rows['onoma_ploiou']; ?></td>
<td align="center"><? echo $rows['kwdikos_drom']; ?></td>
<!--<td><? echo $rows['hm_nia']; ?></td>
<td><? echo $rows['afethria']; ?> </td>
<td><? echo $rows['proorismos']; ?></td>-->
<td align="center"><? echo $rows['wra_anaxwrhshs']; ?></td>
<td align="center"><? echo $rows['wra_afikshs']; ?></td>
<td align="center"><? echo $rows['ar_eis']; ?></td>
<td align="center"><? echo $rows['timh']; ?></td>
<td align="center"><? echo $rows['kostos_ana_krat']; ?></td>
</tr>
<?
}
?>
</table>
<?
echo "<br/>";
echo "<br/>";
}
//Αν το άθροισμα «ar_eis» (sum στον πίνακα ‘kanei’) δεν είναι μικρότερο από 5 και αν ο
«number_person» (από την φόρμα) δεν είναι μικρότερο από 6 και αν το άθροισμα του
«number_person» με τον «ar_eis» δεν είναι μικρότερο του 6.
else
{
//Εμφάνιση μηνύματος στην οθόνη
echo "ΠΡΕΠΕΙ ΝΑ ΚΑΝΕΤΕ ΚΡΑΤΗΣΗ ΜΟΝΟ ΓΙΑ 5 ΕΙΣΙΤΗΡΙΑ ΣΥΝΟΛΙΚΑ ΓΙΑ
ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ.";
echo "<br/>";
echo "ΕΧΕΤΕ ΚΑΝΕΙ ΚΡΑΤΗΣΗ ΓΙΑ $sum ΕΙΣΙΤΗΡΙΑ.";
}
}
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 119
//ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΤΟ ΔΡΟΜΟΛΟΓΙΟ
else
{
//Εμφάνιση μηνύματος στην οθόνη
echo "ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ.";
}
}
}
echo "<br/>";
echo "<br/>";
echo "<br/>";
echo "<br/>";
//Κλείνουμε την σύνδεση με την βάση
mysql_close();
?></p>
4.4.2.5
Σελίδα Ακύρωσης Κράτησης Πελάτη
akyrwsi_kratisis.php
<?php session_start();
?>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
$cur_date=date("Y-m-d");
//Διαγραφή στοιχείων κράτησης από τον πίνακα ‘kanei’ αν η ημερομηνία του
δρομολογίου είναι μικρότερη από την τωρινή ημερομηνία
$sqlquery="DELETE FROM kanei WHERE hm_nia<'$cur_date'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Διαγραφή στοιχείων κράτησης από τον πίνακα ‘prakt_drom’ αν η ημερομηνία
του δρομολογίου είναι μικρότερη από την τωρινή ημερομηνία
$sqlquery="DELETE FROM prakt_drom WHERE hm_nia<'$cur_date'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 120
mysql_close($conn);
?>
</p>
<p>
<?php
//ΑΝ ΓΙΝΕΙ Η ΣΥΝΔΕΣΗ ΕΠΙΤΥΧΩΣ ΑΠΟΘΗΚΕΥΩ ΤΟ ‘username’ ΣΕ ΜΙΑ
ΜΕΤΑΒΛΗΤΗ
if(isset($_SESSION['username']))
{
$username=$_SESSION['username'];
//echo $username;
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="login";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
session_start();
$username=$_SESSION['username'];
//Επιλογή στοιχείων από τον πίνακα 'eggrafi_pelati' όπου είναι το ‘username’
του πελάτη
$sqlquery="SELECT * FROM eggrafi_pelati WHERE username='$username'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//Αποθηκεύω τα στοιχεία από τον πίνακα 'eggrafi_pelati' σε μεταβλητές
while($row=mysql_fetch_array($result))
{$onoma=$row['onoma'];
$epitheto=$row['epitheto'];
$thlefwno=$row['thlefwno'];
$dieythynsh=$row['dieythynsh'];
$adt=$row['ADT'];
//echo $row['ADT'];
}
// ΕΛΕΓΧΟΣ ΑΝ ΥΠΑΡΧΟΥΝ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ ‘eggrafi_pelati’
if($num)
{
?>
<?
error_reporting (E_ALL ^ E_NOTICE);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 121
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
$adt=$_POST['adt'];
//Επιλογή ΑΔΤ που έδωσε ο πελάτης στην φόρμα από τον πίνακα ‘kanei’
$sqlquery="SELECT ADT FROM kanei WHERE ADT='$adt'";
//Εκτέλεση ερωτήματος sql και αποθήκευση αποτελέσματος σε μια μεταβλητή
$result
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Κάθε φορά θα παίρνει μια γραμμή του αποτελέσματος και θα την αναθέτει
στην μεταβλητή $num
$num=mysql_num_rows($result);
//Αν υπάρχουν τα στοιχεία του πελάτη στον πίνακα ‘kanei’, επιλέγω τα στοιχεία
από τον πίνακα ‘kanei’ και εμφανίζονται στην οθόνη
if($num)
{
$sqlquery="SELECT * FROM kanei WHERE ADT='$adt'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΟΙ ΚΡΑΤΗΣΕΙΣ ΓΙΑ ΤΟΝ ΑΔΤ '$adt' ΕΙΝΑΙ:"
?>
</p>
<table width="545" height="100" border="5" align="center" bordercolor="#2aa3e8">
<tr>
<td width="39" height="50" align="center" class="forma" >ΑΔΤ</td>
<!--<td align="center" class="forma">ΗΜ/ΝΙΑ ΚΡΑΤ.</td>
<td align="center" class="forma">ΩΡΑ ΚΡΑΤ.</td>-->
<td width="73" align="center" class="forma">ΚΩΔ.ΔΡΟΜ</td>
<td width="71" align="center" class="forma">ΗΜΕΡ/ΝΙΑ</td>
<td width="61" align="center"class="forma">ΑΦΕΤ.</td>
<td width="66" align="center" class="forma">ΠΡΟΟΡ.</td>
<!--<td align="center" class="forma">ΑΡ.ΟΧΗΜ.</td>-->
<td width="65" align="center" class="forma">ΑΡ.ΕΙΣ.</td>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 122
<td width="62" align="center" class="forma">ΚΟΣΤΟΣ</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" ><? echo $rows['ADT']; ?></td>
<!--<td align="center" ><? echo $rows['date_krat']; ?></td>
<td align="center" ><? echo $rows['time_krat']; ?></td>-->
<td align="center" ><? echo $rows['kwd_drom']; ?></td>
<td align="center" ><? echo $rows['hm_nia']; ?></td>
<td align="center" ><? echo $rows['afethria']; ?> </td>
<td align="center" ><? echo $rows['proorismos']; ?></td>
<!--<td align="center" ><? echo $rows['arithmos_oxhmatwn']; ?></td>-->
<td align="center" ><? echo $rows['ar_eis']; ?></td>
<td align="center" ><? echo $rows['kostos_ana_krat']; ?></td>
//link ‘ΑΚΥΡΩΣΗ’ από το οποίο ο χρήστης πηγαίνει στη σελίδα
akyrwsi_kratisis_list_next.php και στέλνουμε τα δεδομένα στην σελίδα αυτή για
να μπορέσουμε να τα χρησιμοποιήσουμε
<td width="159"><a href="akyrwsi_kratisis_list_next.php?kwd_drom=<? echo
$rows['kwd_drom']; ?>&ADT=<? echo $rows['ADT']; ?>&date_krat=<? echo
$rows['date_krat']; ?>&time_krat=<? echo $rows['time_krat']; ?>&ar_eis=<? echo
$rows['ar_eis']; ?> &kostos_ana_krat=<? echo $rows['kostos_ana_krat']; ?>" target="_blank">ΑΚΥΡΩΣΗ</a></td>
</tr>
<?
}
?>
</table>
<?
}
//Αν δεν υπάρχουν τα στοιχεία του πελάτη στον πίνακα ‘kanei’, εμφανίζεται στην
οθόνη το παρακάτω μήνυμα
else
{
echo "ΔΕΝ ΕΧΕΤΕ ΚΑΝΕΙ ΚΡΑΤΗΣΕΙΣ.";
}
echo "<br/>";
echo "<br/>";
echo "<br/>";
echo "<br/>";
}
else
{
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 123
}
else
{
}
mysql_close();
?>
akyrwsi_kratisis_list.php
<?php session_start();
?>
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση δεδομένων τα οποία πήραμε με την μέθοδο GET από την φόρμα
σε τοπικές μεταβλητές
$kwd_drom=$_GET['kwd_drom'];
$date_krat=$_GET['date_krat'];
$time_krat=$_GET['time_krat'];
//Διαγραφή στοιχείων κράτησης από τον πίνακα ‘kanei’
$sqlquery="DELETE FROM kanei WHERE kwd_drom='$kwd_drom' AND
date_krat='$date_krat' AND time_krat='$time_krat'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "Η ΚΡΑΤΗΣΗ ΣΑΣ ΔΙΑΓΡΑΦΗΚΕ ΕΠΙΤΥΧΩΣ";
mysql_close($conn);
?>
</p>
<p>
<?php
//ΑΝ ΓΙΝΕΙ Η ΣΥΝΔΕΣΗ ΕΠΙΤΥΧΩΣ ΑΠΟΘΗΚΕΥΩ ΤΟ ‘username’ ΣΕ ΜΙΑ
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 124
ΜΕΤΑΒΛΗΤΗ
if(isset($_SESSION['username']))
{
$username=$_SESSION['username'];
//echo $username;
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="login";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
session_start();
$username=$_SESSION['username'];
//Επιλογή στοιχείων από τον πίνακα 'eggrafi_pelati' όπου είναι το ‘username’
του πελάτη
$sqlquery="SELECT * FROM eggrafi_pelati WHERE username='$username'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//Αποθηκεύω τα στοιχεία από τον πίνακα 'eggrafi_pelati' σε μεταβλητές
while($row=mysql_fetch_array($result))
{$onoma=$row['onoma'];
$epitheto=$row['epitheto'];
$thlefwno=$row['thlefwno'];
$dieythynsh=$row['dieythynsh'];
$adt=$row['ADT'];
//echo $row['ADT'];
}
// ΕΛΕΓΧΟΣ ΑΝ ΥΠΑΡΧΟΥΝ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ ‘eggrafi_pelati’
if($num)
{
?>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
mysql_query("set names 'greek'",$conn);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 125
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση δεδομένων τα οποία πήραμε με την μέθοδο GET από την φόρμα
σε τοπικές μεταβλητές
$kwd_drom=$_GET['kwd_drom'];
$kostos_ana_krat=$_GET['kostos_ana_krat'];
//Αποθήκευση σημερινής ημερομηνίας σε μια μεταβλητή
$cur_date=date("Y-m-d");
// ΜΙΑ ΜΕΡΑ ΠΡΙΝ ΤΟ ΔΡΟΜΟΛΟΓΙΟ
$sqlquery="SELECT DATE_SUB(hm_nia,INTERVAL 1 DAY) AS date FROM
dromologio
WHERE kwdikos_drom='$kwd_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($rows=mysql_fetch_array($result)){
$date_prin=$rows['date']; // ΜΙΑ ΜΕΡΑ ΠΡΙΝ ΤΟ ΔΡΟΜΟΛΟΓΙΟ
}
//Η ΗΜΕΡΟΜΗΝΙΑ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ
$sqlquery="SELECT hm_nia FROM dromologio WHERE
kwdikos_drom='$kwd_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($rows=mysql_fetch_array($result)){
$date_drom=$rows['hm_nia']; //Η ΗΜΕΡΟΜΗΝΙΑ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ
}
//ΕΛΕΓΧΟΣ ΑΝ 'Η ΣΗΜΕΡΙΝΗ ΗΜΕΡΟΜΗΝΙΑ' ΕΙΝΑΙ = ΜΕ ΤΗΝ
'ΗΜΕΡΟΜΗΝΙΑ ΔΡΟΜΟΛΟΓΙΟΥ' Η' = ΜΕ ΤΗΝ 'ΜΕΡΑ ΠΡΙΝ ΤΟ
ΔΡΟΜΟΛΟΓΙΟ'
if (($cur_date == $date_prin) || ($cur_date == $date_drom ))
{
// Αν είναι ίσα τότε το συνολικό κόστος του πελάτη ισούται με το συνολικό
κόστος-το κόστος ανά κράτηση*0.9 και έτσι επιστρέφεται το 90% της αξίας
$sqlquery="UPDATE pelatis SET pelatis.syn_kostos=pelatis.syn_kostos('$kostos_ana_krat'*0.9) WHERE pelatis.ADT='$ADT'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΕΠΙΣΤΡΑΦΗΚΕ ΤΟ 90% ΤΗΣ ΑΞΙΑΣ ΤΩΝ ΕΙΣΙΤΗΡΙΩΝ";
}
// Διαφορετικά επιστρέφεται όλη η αξία
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 126
else
{
$sqlquery="UPDATE pelatis SET pelatis.syn_kostos=pelatis.syn_kostos'$kostos_ana_krat' WHERE pelatis.ADT='$ADT'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΤΟ ΣΥΝΟΛΙΚΟ ΚΟΣΤΟΣ ΜΕΙΩΘΗΚΕ";
}
}
else
{
}
}
else
{
}
mysql_close($conn);
?></p>
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
$kwd_drom=$_GET['kwd_drom'];
$ar_eis=$_GET['ar_eis'];
// Η διαθέσιμες θέσεις του δρομολογίου αυξάνονται κατά τον αριθμό των εισιτηρίων
$sqlquery="UPDATE dromologio SET dromologio.ar_diath_thesewn=dromologio.ar_diath_thesewn+'$ar_eis' WHERE dromologio.kwdikos_drom='$kwd_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΟΙ ΔΙΑΘΕΣΙΜΕΣ ΘΕΣΕΙΣ ΑΥΞΗΘΗΚΑΝ";
mysql_close($conn);
?>
</p>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 127
4.4.2.6
Σελίδα Αναζήτησης Κρατήσεων Πελάτη
anazitisi_kratisewn.php
<table border="5" align="center" td="TD" width="49%" height="166" bordercolor="#2aa3e8">
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
function formValidator(){
// Make quick references to our fields
var adt = document.getElementById('adt');
// Check each input in the order that it appears in the form!
if(isAlphanumeric(adt, "Συμπληρώστε το πεδίο 'ΑΔΤ' με αριθμούς και γράμματα!")){
return true;
}
return false;
}
// Συνάρτηση εισαγωγής κειμένου αλφαριθμητικών χαρακτήρων (αριθμοί και
γράμματα)
function isAlphanumeric(elem, helperMsg){
var alphaExp = /^[0-9a-zA-Zα-ωΑ-Ω]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
</script>
//Δημιουργία φόρμας
//Επόμενη σελίδα anazitisi_kratisewn_next.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidator()'
<form action="anazitisi_kratisewn_next.php" method="post" name="pelatis"
target="_blank" onsubmit='return formValidator()'>
<tr>
<td height="43" align="left" class="forma">ΑΔΤ:
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 128
<input type="text" name="adt" size="30" id="adt" />
</td>
</tr>
//Δημιουργία button με όνομα «ΑΝΑΖΗΤΗΣΗ»
<tr>
<td height="43" align="center"><strong><font face="Georgia, Times New
Roman, Times, serif">
<input type="submit" value="ΑΝΑΖΗΤΗΣΗ" name="button" id="button" />
</font></strong></td>
</tr>
</form>
</table>
anazitisi_kratisewn_next.php
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση ΑΔΤ το οποίo πήραμε με την μέθοδο POST από την φόρμα σε τοπική μεταβλητή
$adt=$_POST['adt'];
//Επιλογή ΑΔΤ από τον πίνακα ‘kanei’
$sqlquery="SELECT ADT FROM kanei WHERE ADT='$adt'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ΑΔΤ, ΕΠΙΛΕΓΩ ΣΤΟΙΧΕΙΑ ΑΠΟ ΤΟΥΣ ΠΙΝΑΚΕΣ
‘kanei’, ‘dromologio’, ‘pragmatopoiei’ ΚΑΙ ΕΜΦΑΝΙΖΟΝΤΑΙ ΣΤΗΝ ΟΘΟΝΗ
if($num)
{
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 129
$sqlquery="SELECT
kanei.ADT,kanei.kwd_drom,dromologio.kwdikos_drom,kanei.kostos_ana_krat,dromologio.w
ra_anaxwrhshs,dromologio.wra_afikshs,dromologio.hm_nia,dromologio.timh,pragmatopoiei.
kwd_drom,pragmatopoiei.onoma_ploiou FROM kanei,dromologio,pragmatopoiei WHERE
kanei.kwd_drom=dromologio.kwdikos_drom AND
kanei.kwd_drom=pragmatopoiei.kwd_drom AND kanei.ADT='$adt'";
$result_drom=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΟΙ ΚΡΑΤΗΣΕΙΣ ΓΙΑ ΤΟΝ ΑΔΤ '$adt' ΕΙΝΑΙ:"
?>
</p>
<table height="100" border="5" align="left" bordercolor="#2aa3e8">
<tr>
<td align="center" width="68" height="50" class="forma" >ΌΝΟΜΑ ΠΛΟΙΟΥ</td>
<td align="center" width="93" class="forma">ΩΡΑ ΑΝΑΧΩΡΗΣΗΣ</td>
<td align="center" width="90" class="forma">ΩΡΑ ΑΦΙΞΗΣ</td>
<td align="center" width="146" class="forma">ΗΜΕΡ/ΝΙΑ ΤΑΞΙΔΙΟΥ</td>
<!--<td align="center" class="forma">ΠΟΣΟ ΑΝΑ ΑΤΟΜΟ</td>-->
<td align="center" width="136" class="forma">ΣΥΝΟΛΙΚΟ ΚΟΣΤΟΣ</td>
</tr>
<?
while($rows=mysql_fetch_array($result_drom)){
?>
<tr>
<td align="center"><? echo $rows['onoma_ploiou']; ?></td>
<td align="center"><? echo $rows['wra_anaxwrhshs']; ?> </td>
<td align="center"><? echo $rows['wra_afikshs']; ?></td>
<td align="center"><? echo $rows['hm_nia']; ?></td>
<!--<td align="center"><? echo $rows['timh']; ?></td>-->
<td align="center"><? echo $rows['kostos_ana_krat']; ?></td>
</tr>
<?
}
?>
</table>
<?
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ΑΔΤ ΣΤΗΝ ΒΑΣΗ ΤΟΤΕ ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ
ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ ΣΤΗΝ ΟΘΟΝΗ
else
{
echo "ΑΥΤΟ ΤΟ ΑΔΤ ΔΕΝ ΥΠΑΡΧΕΙ. ΠΡΟΣΠΑΘΗΣΤΕ ΞΑΝΑ ΜΕ ΑΛΛΟ ΑΔΤ.";
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 130
//Κλείνουμε την σύνδεση με την βάση
mysql_close();
?>
4.4.2.7
Σελίδα Διαθεσιμότητας Δρομολογίου
lista_drom.php
<table border="5" align="center" td="TD" width="90%" height="234" bordercolor="#2aa3e8">
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
function formValidator(){
// Make quick references to our fields
var date = document.getElementById('date');
var post = document.getElementById('post');
var destination = document.getElementById('destination');
// Check each input in the order that it appears in the form!
if(checkdate(date, "Συμπληρώστε το πεδίο 'Ημερομηνία'!")){
if(madeSelection(post, "Επιλέξτε 'Λιμάνι αναχώρησης'!")){
if(madeSelection(destination, "Επιλέξτε 'Λιμάνι προορισμού'!")){
return true;
}
}
}
return false;
}
//Συνάρτηση επιλογής από μια είσοδο επιλογής με HTML (drop down list)
function madeSelection(elem, helperMsg){
if(elem.value == "--ΕΠΙΛΕΞΤΕ ΛΙΜΑΝΙ--"){
alert(helperMsg);
elem.focus();
return false;
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 131
}else{
return true;
}
}
//Συνάρτηση εισαγωγής έγκυρης ημερομηνίας
function checkdate(input){
var validformat=/^\d{4}\-\d{2}\-\d{2}$/ //Basic check for format validity
var returnval=false
if (!validformat.test(input.value))
alert("Η ημερομηνία αυτή δεν ισχύει. Πρέπει να είναι της μορφής ΥΥΥΥ-ΜΜ-DD. Παρακαλώ συμπληρώστε ξανά.")
else{ //Detailed check for valid date ranges
var yearfield=input.value.split("-")[0]
var monthfield=input.value.split("-")[1]
var dayfield=input.value.split("-")[2]
var dayobj = new Date(yearfield, monthfield-1, dayfield)
if
((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=y
earfield))
alert("Η ημέρα, ο μήνας, ή ο χρόνος δεν ισχύει. Παρακαλώ συμπληρώστε ξανά.")
else
returnval=true
}
if (returnval==false) input.select()
return returnval
}
</script>
//Δημιουργία φόρμας
//Επόμενη σελίδα lista_drom_next.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidator()'
<form action="lista_drom_next.php" method="post" name="pelatis" target="_blank"
onsubmit='return formValidator()'>
<tr>
<td height="55" align="left" class="forma">Ημ/νία αναχώρησης(Έτος-Μήνας-Ημέρα):
<span class="forma">
<input name="date" type="text" value="0000-00-00" size="20" id="date" />
</span></td>
</tr>
<tr>
<td height="55" align="left" class="forma">Λιμάνι αναχώρησης:
<span class="forma">
<select name="post[]" id="post">
<option>--ΕΠΙΛΕΞΤΕ ΛΙΜΑΝΙ--</option>
<option value="ΗΡΑΚΛΕΙΟ">ΗΡΑΚΛΕΙΟ</option>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 132
<option value="ΚΑΡΠΑΘΟΣ">ΚΑΡΠΑΘΟΣ</option>
<option value="ΚΑΣΟΣ">ΚΑΣΟΣ</option>
<option value="ΜΗΛΟΣ">ΜΗΛΟΣ</option>
<option value="ΠΑΡΟΣ">ΠΑΡΟΣ</option>
<option value="ΠΕΙΡΑΙΑΣ">ΠΕΙΡΑΙΑΣ</option>
<option value="ΡΟΔΟΣ">ΡΟΔΟΣ</option>
<option value="ΣΑΝΤΟΡΙΝΗ">ΣΑΝΤΟΡΙΝΗ</option>
<option value="ΧΑΝΙΑ">ΧΑΝΙΑ</option>
</select>
</span></td>
</tr>
<tr>
<td height="59" align="left" class="forma">Λιμάνι προορισμού:
<span class="forma">
<select name="destination[]" id="destination">
<option>--ΕΠΙΛΕΞΤΕ ΛΙΜΑΝΙ--</option>
<option value="ΗΡΑΚΛΕΙΟ">ΗΡΑΚΛΕΙΟ</option>
<option value="ΚΑΡΠΑΘΟΣ">ΚΑΡΠΑΘΟΣ</option>
<option value="ΚΑΣΟΣ">ΚΑΣΟΣ</option>
<option value="ΜΗΛΟΣΣ">ΜΗΛΟΣ</option>
<option value="ΠΑΡΟΣ">ΠΑΡΟΣ</option>
<option value="ΠΕΙΡΑΙΑΣ">ΠΕΙΡΑΙΑΣ</option>
<option value="ΡΟΔΟΣ">ΡΟΔΟΣ</option>
<option value="ΣΑΝΤΟΡΙΝΗ">ΣΑΝΤΟΡΙΝΗ</option>
<option value="ΧΑΝΙΑ">ΧΑΝΙΑ</option>
</select>
</span></td>
</tr>
//Δημιουργία button με όνομα «ΑΝΑΖΗΤΗΣΗ»
<tr>
<td align="center"><strong><font face="Georgia, Times New Roman, Times, serif">
<input type="submit" value="ΑΝΑΖΗΤΗΣΗ" name="button" id="button" />
</font></strong></td>
</tr>
</form>
</table>
lista_drom_next.php
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 133
failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση σημερινής ημερομηνίας σε μια μεταβλητή
$cur_date=date("Y-m-d");
// Αυτόματη διαγραφή κρατήσεων όταν πραγματοποιείται το δρομολόγιο από τον πίνακα ‘kanei’
$sqlquery="DELETE FROM kanei WHERE hm_nia<'$cur_date'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Κλείνουμε την σύνδεση με την βάση
mysql_close($conn);
?>
</p>
<p><?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση ‘date’ τo οποίo πήραμε με την μέθοδο POST από την φόρμα σε τοπική
μεταβλητή
$date=$_POST['date'];
//Για κάθε ‘αφετηρία’ και κάθε ‘προορισμό’ που επιλέγει ο χρήστης από το drοp down
list, επιλέγω τα στοιχεία του δρομολογίου από τον πίνακα ‘dromologio’
foreach($_POST['post'] as $post)
{
foreach($_POST['destination'] as $destination)
{
$sqlquery="SELECT dromologio.kwdikos_drom FROM dromologio WHERE dromologio.hm_nia='$date' AND dromologio.afethria='$post' AND dromologio.proorismos='$destination'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΕΙ ΤΟ ΔΡΟΜΟΛΟΓΙΟ
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 134
if($num)
{
$sqlquery="SELECT dromolodromologio.kwdikos_drom,dromologio.afethria,dromologio.proorismos,dromologio.hm_nia,dromolog
io.wra_anaxwrhshs,dromologio.wra_afikshs,dromologio.ar_diath_thesewn,pragmatopoiei.kw
d_drom,pragmatopoiei.onoma_ploiou,anhkei.kwd_drom,anhkei.onoma_et FROM
dromologio,pragmatopoiei,anhkei WHERE dromologio.kwdikos_drom=pragmatopoiei.kwd_drom AND dromologio.kwdikos_drom=anhkei.kwd_drom AND dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.hm_nia='$date'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//Αν υπάρχουν τα στοιχεία από τους πίνακες ‘dromologio’, ‘pragmatopoiei’ ,‘anhkei’ όπου ο κωδικός δρομολογίου είναι ίδιος με αυτόν του δρομολογίου που επέλεξε ο χρήστης
να δει τα διαθέσιμα δρομολόγια, τα στοιχεία αυτά εμφανίζονται στην οθόνη
if($num)
{
echo " ΤΑ ΔΙΑΘΕΣΙΜΑ ΔΡΟΜΟΛΟΓΙΑ ΑΠΟ '$post' ΠΡΟΣ '$destination' ΣΤΗΣ '$date'
ΕΙΝΑΙ:";
?>
<table height="100" border="5" align="left" bordercolor="#2aa3e8">
<tr>
<td align="center" height="50" class="forma" >ΌΝΟΜΑ ΕΤΑΙΡΕΙΑΣ</td>
<td align="center" class="forma">ΌΝΟΜΑ ΠΛΟΙΟΥ</td>
<td align="center" class="forma">ΩΡΑ ΑΝΑΧΩΡΗΣΗΣ</td>
<td align="center" class="forma">ΩΡΑ ΑΦΙΞΗΣ</td>
<td align="center" class="forma">ΔΙΑΘΕΣΙΜΟΣ ΑΡ.ΕΙΣ.</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? echo $rows['onoma_et']; ?></td>
<td align="center"><? echo $rows['onoma_ploiou']; ?></td>
<td align="center"><? echo $rows['wra_anaxwrhshs']; ?> </td>
<td align="center"><? echo $rows['wra_afikshs']; ?></td>
<td align="center"><? echo $rows['ar_diath_thesewn']; ?></td>
</tr>
<?
}
?>
</table>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 135
<?
}
//Αν δεν υπάρχουν τα στοιχεία από τους πίνακες ‘dromologio’, ‘pragmatopoiei’ ,‘anhkei’
όπου ο κωδικός δρομολογίου είναι ίδιος με αυτόν του δρομολογίου που επέλεξε ο χρήστης να δει τα διαθέσιμα δρομολόγια, εμφανίζεται το παρακάτω μήνυμα στην οθόνη
else
{
echo "ΤΟ ΔΡΟΜΟΛΟΓΙΟ ΑΥΤΟ ΔΕΝ ΑΝΗΚΕΙ ΣΕ ΚΑΠΟΙΑ ΕΤΑΙΡΕΙΑ Η' ΔΕΝ
ΠΡΑΓΜΑΤΟΠΟΙΕΙΤΑΙ ΑΠΟ ΚΑΠΟΙΟ ΠΛΟΙΟ";
}
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΤΟ ΔΡΟΜΟΛΟΓΙΟ ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ
ΜΗΝΥΜΑ ΣΤΗΝ ΟΘΟΝΗ
else
{
echo "ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ.";
}
}
}
//Κλείνουμε την σύνδεση με την βάση
mysql_close();
?>
4.4.2.8
Σελίδα Προσθήκης Εταιρείας
add_etaireia.php
<table border="5" align="center" td="TD" width="60%" height="283" bordercolor="#2aa3e8">
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
function formValidatora(){
// Make quick references to our fields
var name = document.getElementById('name');
var number = document.getElementById('number');
var address = document.getElementById('address');
// Check each input in the order that it appears in the form!
if(isAlphabet(name, "Συμπληρώστε το πεδίο 'Όνομα Πλοίου' ΜΟΝΟ με γράμμαΑγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 136
τα!")){
if(isNumeric(number, "Συμπληρώστε το πεδίο 'Τηλέφωνο' ΜΟΝΟ με αριθμούς!")){
if(notEmpty(address, "Συμπληρώστε το πεδίο 'Διεύθυνση'!")){
return true;
}
}
}
return false;
}
//Συνάρτηση κενών πεδίων
function notEmpty(elem, helperMsg){
if(elem.value.length == 0){
alert(helperMsg);
elem.focus(); // set the focus to this input
return false;
}
return true;
}
//Συνάρτηση εισαγωγής κειμένου μόνο με αριθμούς
function isNumeric(elem, helperMsg){
var numericExpression = /^[0-9]+$/;
if(elem.value.match(numericExpression)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
//Συνάρτηση εισαγωγής κειμένου μόνο με γράμματα
function isAlphabet(elem, helperMsg){
var alphaExp = /^[a-zA-Zα-ωΑ-Ω]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
</script>
//Δημιουργία φόρμας
//Επόμενη σελίδα add_etaireia_next.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidatora()'
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 137
<form action="add_etaireia_next.php" method="post" name="etaireia" target="_blank" onsubmit='return formValidatora()'>
<tr>
<td align="left" class="forma">Όνομα Εταιρείας:</acronym>
<input type="text" name="name" size="20" id="name" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Τηλέφωνο:
<input type="text" name="number" size="20" id="number"/>
</td>
</tr>
<tr>
<td align="left" class="forma">
Διεύθυνση:
<input type="text" name="address" size="20" id="address" />
</td>
</tr>
//Δημιουργία button με όνομα «ΠΡΟΣΘΗΚΗ»
<tr>
<td align="center"><strong><font face="Georgia, Times New Roman, Times,
serif">
<input name="button" type="submit" id="button" value="ΠΡΟΣΘΗΚΗ" />
</font></strong></td>
</tr>
</form>
</table>
add_etaireia_next.php
<p><?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 138
//Αποθήκευση δεδομένων τα οποία πήραμε με την μέθοδο POST από την φόρμα
σε τοπικές μεταβλητές
$name=$_POST['name'];
$number=$_POST['number'];
$address=$_POST['address'];
//Επιλογή ‘onoma’ που έδωσε ο διαχειριστής στην φόρμα από τον πίνακα ‘etaireia’
$sqlquery="SELECT onoma FROM etaireia WHERE onoma='$name'";
//Εκτέλεση ερωτήματος sql και αποθήκευση αποτελέσματος σε μια μεταβλητή
$result
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Κάθε φορά θα παίρνει μια γραμμή του αποτελέσματος και θα την αναθέτει
στην μεταβλητή $num
$num=mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΕΙ ΤΟ ΟΝΟΜΑ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΣΤΟΝ ΠΙΝΑΚΑ ‘etaireia’,
ΤΟΤΕ ΤΑ ΣΤΟΙΧΕΙΑ ΥΠΑΡΧΟΥΝ ΗΔΗ
if($num)
{
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΥΠΑΡΧΟΥΝ ΗΔΗ.";
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΤΟ ΟΝΟΜΑ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΣΤΟΝ ΠΙΝΑΚΑ
‘etaireia’, ΤΟΤΕ ΤΑ ΣΤΟΙΧΕΙΑ ΤΗΣ ΦΟΡΜΑΣ ΑΠΟΘΗΚΕΥΟΝΤΑΙ ΣΤΟΝ
ΠΙΝΑΚΑ ‘etaireia’
else
{
$sqlquery="INSERT INTO etaireia(onoma,thlefwno,dieythynsh)VALUES('$name',$number,'$address')";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΑΠΟΘΗΚΕΥΘΗΚΑΝ ΕΠΙΤΥΧΩΣ.";
}
?></p>
4.4.2.9
Σελίδα Προσθήκης Πλοίου
add_ploio.php
<table border="5" align="center" td="TD" width="60%" height="283" bordercolor="#2aa3e8">
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 139
function formValidatora(){
// Make quick references to our fields
var company = document.getElementById('company');
var name = document.getElementById('name');
var xwr = document.getElementById('xwr');
var year = document.getElementById('year');
// Check each input in the order that it appears in the form!
if(madeSelection(company, "Επιλέξτε 'Εταιρεία'!")){
if(isAlphabet(name, "Συμπληρώστε το πεδίο 'Όνομα Πλοίου' ΜΟΝΟ με γράμματα!")){
if(isNumeric(xwr, "Συμπληρώστε το πεδίο 'Χωρητικότητα' ΜΟΝΟ με αριθμούς!")){
if(isNumeric(year, "Συμπληρώστε το πεδίο 'Έτος καθέλκυσης' ΜΟΝΟ με αριθμούς!")){
return true;
}
}
}
}
return false;
}
//Συνάρτηση επιλογής από μια είσοδο επιλογής με HTML (drop down list)
function madeSelection(elem, helperMsg){
if(elem.value == "--ΕΠΙΛΕΞΤΕ--" ){
alert(helperMsg);
elem.focus();
return false;
}else{
return true;
}
}
//Συνάρτηση εισαγωγής κειμένου μόνο με αριθμούς
function isNumeric(elem, helperMsg){
var numericExpression = /^[0-9]+$/;
if(elem.value.match(numericExpression)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 140
//Συνάρτηση εισαγωγής κειμένου μόνο με γράμματα
function isAlphabet(elem, helperMsg){
var alphaExp = /^[a-zA-Zα-ωΑ-Ω]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
</script>
//Δημιουργία φόρμας
//Επόμενη σελίδα add_ploio_next.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidatora()'
<form action="add_ploio_next.php" method="post" name="ploio" target="_blank" onsubmit='return formValidatora()'>
//Εμφάνιση δεδομένων από την βάση στο drop down list
<tr>
<td align="left" class="forma">Εταιρεία :</acronym>
//Κώδικας PHP
<?php
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect('localhost', 'root', '');
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
//Επιλογή βάσης δεδομένων
mysql_select_db('nautiliaki_etaireia');
//Επιλογή ‘ονόματος εταιρείας’ από τον πίνακα ‘etaireia ’, εκτέλεση ερωτήματος
sql και αποθήκευση αποτελέσματος σε μια μεταβλητή $result
$result = mysql_query('select onoma from etaireia');
?>
<span class="forma">
<select name="company[]" id="company">
<option>--ΕΠΙΛΕΞΤΕ--</option>
//Κώδικας PHP
<?php
// Κάθε φορά θα παίρνει μια γραμμή του αποτελέσματος
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 141
mysql_num_rows($result)
// Αν υπάρχουν εγγραφές στον πίνακα, τότε εμφανίζονται στο drop down list
if(mysql_num_rows($result)) {
while($row = mysql_fetch_row($result))
{
print("<option value=\"$row[0]\">$row[0]</option>");
}
}
// Αν δεν υπάρχουν εγγραφές στον πίνακα, τότε εμφανίζεται το παρακάτω μήνυμα
else {
print("<option value=\"\">No names</option>");
}
?>
</select>
</span></td>
</tr>
<tr>
<td align="left" class="forma">Όνομα Πλοίου:</acronym>
<input type="text" name="name" size="20" id="name" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Χωρητικότητα:
<input type="text" name="xwr" size="20" id="xwr"/>
</td>
</tr>
<tr>
<td align="left" class="forma">
Έτος καθέλκυσης:
<input type="text" name="year" size="20" id="year" />
</td>
</tr>
//Δημιουργία button με όνομα «ΠΡΟΣΘΗΚΗ»
<tr>
<td align="center"><strong><font face="Georgia, Times New Roman, Times,
serif">
<input name="button" type="submit" id="button" value="ΠΡΟΣΘΗΚΗ" />
</font></strong></td>
</tr>
</form>
</table>
add_ploio_next.php
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 142
<p><?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση δεδομένων τα οποία πήραμε με την μέθοδο POST από την φόρμα
σε τοπικές μεταβλητές
$name=$_POST['name'];
$xwr=$_POST['xwr'];
$year=$_POST['year'];
//Επιλογή ‘ονόματος πλοίου’ από τον πίνακα ‘ploio’
$sqlquery="SELECT onoma FROM ploio WHERE onoma='$name'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΟΝΟΜΑ ΠΛΟΙΟΥ ΣΤΗΝ ΒΑΣΗ, ΤΟΤΕ
ΕΜΦΑΝΙΖΕΤΑΙ ΣΤΗΝ ΟΘΟΝΗ ΤΟ ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ
if($num)
{
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΟΥ ΥΠΑΡΧΟΥΝ ΗΔΗ.";
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΟΝΟΜΑ ΠΛΟΙΟΥ ΣΤΗΝ ΒΑΣΗ, ΤΟΤΕ ΤΑ
ΣΤΟΙΧΕΙΑ ΤΗΣ ΦΟΡΜΑΣ ΑΠΟΘΗΚΕΥΟΝΤΑΙ ΣΤΟΝ ΠΙΝΑΚΑ ‘ploio’
else
{
$sqlquery="INSERT INTO
ploio(onoma,xwrhtikothta,etos_kathelkyshs)VALUES('$name',$xwr, $year)";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΟΥ ΑΠΟΘΗΚΕΥΘΗΚΑΝ ΕΠΙΤΥΧΩΣ.";
}
?></p>
<p><?
error_reporting (E_ALL ^ E_NOTICE);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 143
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση ‘name’ το οποίο πήραμε με την μέθοδο POST από την φόρμα σε
τοπική μεταβλητή
$name=$_POST['name'];
//Για κάθε όνομα εταιρείας που επιλέγει ο διαχειριστής από το drop down list, επιλέγουμε τις εγγραφές με το όνομα εταιρείας και το όνομα πλοίου της φόρμας από
τον πίνακα ‘diathetei’
foreach($_POST['company'] as $company)
{
$sqlquery="SELECT * FROM diathetei WHERE onoma_ploiou='$name' AND onoma_et='$company' ";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΟΥΝ ΗΔΗ ΤΑ ΣΤΟΙΧΕΙΑ ‘ΟΝΟΜΑ ΕΤΑΙΡΕΙΑΣ’ ΚΑΙ
‘ΟΝΟΜΑ ΠΛΟΙΟΥ’ ΣΤΗΝ ΒΑΣΗ, ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ
ΜΗΝΥΜΑ ΣΤΗΝ ΟΘΟΝΗ
if($num)
{
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΟΥ ΚΑΙ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΥΠΑΡΧΟΥΝ ΗΔΗ.";
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΟΥΝ ΤΑ ΣΤΟΙΧΕΙΑ ‘ΟΝΟΜΑ ΕΤΑΙΡΕΙΑΣ’ ΚΑΙ
‘ΟΝΟΜΑ ΠΛΟΙΟΥ’ ΣΤΗΝ ΒΑΣΗ, ΑΠΟΘΗΚΕΥΟΝΤΑΙ ΤΑ ΣΤΟΙΧΕΙΑ
ΣΤΟΝ ΠΙΝΑΚΑ ‘diathetei’
else
{
$sqlquery="INSERT INTO diathetei(onoma_et,onoma_ploiou)VALUES('$company','$name')";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΟΥ ΚΑΙ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΑΠΟΘΗΚΕΥΘΗΚΑΝ
ΕΠΙΤΥΧΩΣ.";
}
} ?></p>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 144
4.4.2.10 Σελίδα Προσθήκης Δρομολογίου
add_drom_admin.php
<table border="5" align="center" td="TD" width="90%" height="413" bordercolor="#2aa3e8">
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
function formValidatora(){
// Make quick references to our fields
var company = document.getElementById('company');
var name_ploiou = document.getElementById('name_ploiou');
var post = document.getElementById('post');
var destination = document.getElementById('destination');
var date = document.getElementById('date');
var time_anax = document.getElementById('time_anax');
var time_af = document.getElementById('time_af');
var number_seats = document.getElementById('number_seats');
var number_veh = document.getElementById('number_veh');
var price = document.getElementById('price');
// Check each input in the order that it appears in the form!
if(madeSelection(company, "Επιλέξτε 'Εταιρεία'!")){
if(madeSelection(name_ploiou, "Επιλέξτε 'Όνομα πλοίου'")){
if(madeSelection(post, "Επιλέξτε 'Λιμάνι αναχώρησης'!")){
if(madeSelection(destination, "Επιλέξτε 'Λιμάνι προορισμού'!")){
if(checkdate(date, "Συμπληρώστε το πεδίο 'Ημερομηνία'!")){
if(checktime(time_anax, "Συμπληρώστε το πεδίο 'Ώρα αναχώρησης'!")){
if(checktime(time_af, "Συμπληρώστε το πεδίο 'Ώρα άφιξης'!")){
if(isNumeric(number_seats, "Συμπληρώστε το πεδίο 'Αριθμός θέσεων' ΜΟΝΟ με αριθμούς!")){
if(isNumeric(number_veh, "Συμπληρώστε το πεδίο 'Αριθμός θέσεων οχημάτων' ΜΟΝΟ με
αριθμούς!")){
if(isNumeric(price, "Συμπληρώστε το πεδίο 'Τιμή δρομολογίου' ΜΟΝΟ με αριθμούς!")){
return true;
}
}
}
}
}
}
}
}
}
}
return false;
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 145
}
//Συνάρτηση επιλογής από μια είσοδο επιλογής με HTML (drop down list)
function madeSelection(elem, helperMsg){
if(elem.value == "--ΕΠΙΛΕΞΤΕ--" ){
alert(helperMsg);
elem.focus();
return false;
}else{
return true;
}
}
//Συνάρτηση εισαγωγής κειμένου μόνο με αριθμούς
function isNumeric(elem, helperMsg){
var numericExpression = /^[0-9]+$/;
if(elem.value.match(numericExpression)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
//Συνάρτηση κενών πεδίων
function notEmpty(elem, helperMsg){
if(elem.value.length == 0){
alert(helperMsg);
elem.focus(); // set the focus to this input
return false;
}
return true;
}
//Συνάρτηση εισαγωγής έγκυρης ημερομηνίας
function checkdate(input){
var validformat=/^\d{4}\-\d{2}\-\d{2}$/ //Basic check for format validity
var returnval=false
if (!validformat.test(input.value))
alert("Η ημερομηνία αυτή δεν ισχύει. Πρέπει να είναι της μορφής ΥΥΥΥ-ΜΜ-DD. Παρακαλώ συμπληρώστε ξανά.")
else{ //Detailed check for valid date ranges
var yearfield=input.value.split("-")[0]
var monthfield=input.value.split("-")[1]
var dayfield=input.value.split("-")[2]
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 146
var dayobj = new Date(yearfield, monthfield-1, dayfield)
if
((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=y
earfield))
alert("Η ημέρα, ο μήνας, ή ο χρόνος δεν ισχύει. Παρακαλώ συμπληρώστε ξανά.")
else
returnval=true
}
if (returnval==false) input.select()
return returnval
}
//Συνάρτηση εισαγωγής έγκυρης ώρας
function checktime(input) {
// Checks if time is in HH:MM:SS format.
var validformat=/^[0-2][0-9]\:[0-6][0-9]\:[0-6][0-9]$/
if (!validformat.test(input.value)){
alert ("Η ώρα αυτή δεν ισχύει. Πρέπει να είναι της μορφής HH:MM:SS. Παρακαλώ συμπληρώστε ξανά.");
return false;
}
return true;
}
</script>
//Δημιουργία φόρμας
//Επόμενη σελίδα add_drom_admin_next.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidatora()'
<form action="add_drom_admin_next.php" method="post" name="drom" target="_blank" onsubmit='return formValidatora()'>
//Εμφάνιση ονομάτων εταιρειών από τον πίνακα ‘etaireia’
<tr>
<td align="left" class="forma">Εταιρεία :</acronym>
<?php
$conn=mysql_connect('localhost', 'root', '');
mysql_query("set names 'greek'",$conn);
mysql_select_db('nautiliaki_etaireia');
$result = mysql_query('select onoma from etaireia');
?>
<span class="forma1">
<select name="company[]" id="company">
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 147
<option>--ΕΠΙΛΕΞΤΕ--</option>
<?php
if(mysql_num_rows($result)) {
while($row = mysql_fetch_row($result))
{
print("<option value=\"$row[0]\">$row[0]</option>");
}
}
else {
print("<option value=\"\">No names</option>");
}
?> </select>
</span></td>
</tr>
//Εμφάνιση ονομάτων πλοίων από τον πίνακα ‘ploio’
<tr>
<td align="left" class="forma">Όνομα πλοίου:</acronym>
<?php
$conn=mysql_connect('localhost', 'root', '');
mysql_query("set names 'greek'",$conn);
mysql_select_db('nautiliaki_etaireia');
$result = mysql_query('select onoma from ploio');
?>
<span class="forma1">
<select name="name_ploiou[]" id="name_ploiou">
<option>--ΕΠΙΛΕΞΤΕ--</option>
<?php
if(mysql_num_rows($result)) {
while($row = mysql_fetch_row($result))
{
print("<option value=\"$row[0]\">$row[0]</option>");
}
}
else {
print("<option value=\"\">No names</option>");
}
?>
</select>
</span></td>
</tr>
<tr>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 148
<td align="left" class="forma">Λιμάνι αναχώρησης:
<span class="forma">
<select name="post[]" id="post">
<option>--ΕΠΙΛΕΞΤΕ--</option>
<option value="ΗΡΑΚΛΕΙΟ">ΗΡΑΚΛΕΙΟ</option>
<option value="ΚΑΡΠΑΘΟΣ">ΚΑΡΠΑΘΟΣ</option>
<option value="ΚΑΣΟΣ">ΚΑΣΟΣ</option>
<option value="ΜΗΛΟΣ">ΜΗΛΟΣ</option>
<option value="ΠΑΡΟΣ">ΠΑΡΟΣ</option>
<option value="ΠΕΙΡΑΙΑΣ">ΠΕΙΡΑΙΑΣ</option>
<option value="ΡΟΔΟΣ">ΡΟΔΟΣ</option>
<option value="ΣΑΝΤΟΡΙΝΗ">ΣΑΝΤΟΡΙΝΗ</option>
<option value="ΧΑΝΙΑ">ΧΑΝΙΑ</option>
</select>
</span></td>
</tr>
<tr>
<td align="left" class="forma">Λιμάνι προορισμού:
<span class="forma">
<select name="destination[]" id="destination">
<option>--ΕΠΙΛΕΞΤΕ--</option>
<option value="ΗΡΑΚΛΕΙΟ">ΗΡΑΚΛΕΙΟ</option>
<option value="ΚΑΡΠΑΘΟΣ">ΚΑΡΠΑΘΟΣ</option>
<option value="ΚΑΣΟΣ">ΚΑΣΟΣ</option>
<option value="ΜΗΛΟΣ">ΜΗΛΟΣ</option>
<option value="ΠΑΡΟΣ">ΠΑΡΟΣ</option>
<option value="ΠΕΙΡΑΙΑΣ">ΠΕΙΡΑΙΑΣ</option>
<option value="ΡΟΔΟΣ">ΡΟΔΟΣ</option>
<option value="ΣΑΝΤΟΡΙΝΗ">ΣΑΝΤΟΡΙΝΗ</option>
<option value="ΧΑΝΙΑ">ΧΑΝΙΑ</option>
</select>
</span></td>
</tr>
<tr>
<td align="left" class="forma">Ημ/νία(Έτος-Μήνας-Ημέρα) :</acronym>
<input name="date" type="text" value="0000-00-00" size="20" id="date" />
</td>
</tr>
<tr>
<td align="left" class="forma">Ώρα αναχώρησης(Ώρα-Λεπτά-Δευτ.) :</acronym>
<input name="time_anax" type="text" value="00:00:00" size="20" id="time_anax"
/></td>
</tr>
<tr>
<td align="left" class="forma">
Ώρα άφιξης(Ώρα-Λεπτά-Δευτ.):
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 149
<input name="time_af" type="text" value="00:00:00" size="20" id="time_af" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Αριθμός θέσεων:
<input type="text" name="number_seats" size="20" id="number_seats" />
</td>
</tr>
<tr>
<td align="left" class="forma">Αριθμός θέσεων οχημάτων :</acronym>
<input type="text" name="number_veh" size="20" id="number_veh" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Τιμή δρομολογίου:
<input type="text" name="price" size="20" id="price" />
</td>
</tr>
//Δημιουργία button με όνομα «ΠΡΟΣΘΗΚΗ»
<tr>
<td align="center"><strong><font face="Georgia, Times New Roman, Times, serif">
<input name="submit1" type="submit" id="submit1" value="ΠΡΟΣΘΗΚΗ" />
</font></strong></td>
</tr>
</form>
</table>
add_drom_admin_next.php
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 150
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση ‘σημερινής ημερομηνίας’ σε μια μεταβλητή
$cur_date=date("Y-m-d");
//Αυτόματη διαγραφή στοιχείων από τον πίνακα ‘kanei’ όπου η ημερομηνία του δρομολογίου είναι μικρότερη από την σημερινή μέρα
$sqlquery="DELETE FROM kanei WHERE hm_nia<'$cur_date'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Αυτόματη διαγραφή στοιχείων από τον πίνακα ‘prakt_drom’ όπου η ημερομηνία του
δρομολογίου είναι μικρότερη από την σημερινή μέρα
$sqlquery="DELETE FROM prakt_drom WHERE hm_nia<'$cur_date'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Κλείνουμε την σύνδεση με την βάση
mysql_close($conn);
?>
</p>
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
$date=$_POST['date'];
$time_anax=$_POST['time_anax'];
$time_af=$_POST['time_af'];
$number_seats=$_POST['number_seats'];
$number_veh=$_POST['number_veh'];
$price=$_POST['price'];
//ΓΙΑ ΚΑΘΕ ΕΤΑΙΡΕΙΑ, ΠΛΟΙΟ,ΑΦΕΤΗΡΙΑ,ΠΡΟΟΡΙΣΜΟ ΠΟΥ ΕΠΙΛΕΓΕΙ Ο
ΔΙΑΧΕΙΡΙΣΤΗΣ ΑΠΟ ΤΟ DROP DOWN LIST ΤΗΣ ΦΟΡΜΑΣ
foreach($_POST['company'] as $company)
{
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 151
foreach($_POST['name_ploiou'] as $name_ploiou)
{
foreach($_POST['post'] as $post)
{
foreach($_POST['destination'] as $destination)
{
//ΕΠΙΛΟΓΗ ‘ΚΩΔΙΚΟΥ ΔΡΟΜΟΛΟΓΙΟΥ’ ΚΑΙ ‘ΗΜΕΡΟΜΗΝΙΑ’ΑΠΟ ΤΟΝ
ΠΙΝΑΚΑ ‘dromologio’
$sqlquery="SELECT dromologio.kwdikos_drom,dromologio.hm_nia,pragmatopoiei.kwd_drom,pragmatopoiei.onoma_ploi
ou FROM dromologio,pragmatopoiei WHERE pragmatopoiei.onoma_ploiou='$name_ploiou'
AND dromologio.kwdikos_drom=pragmatopoiei.kwd_drom";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($row=mysql_fetch_array($result))
{
$hm_nia=$row['hm_nia'];
// $wra_anaxwrhshs=$row['wra_anaxwrhshs'];
}
// ΑΝ ΤΟ ΠΛΟΙΟ ΕΚΤΕΛΕΙ ΑΛΛΟ ΔΡΟΜΟΛΟΓΙΟ ΤΗΝ ΣΥΓΚΕΚΡΙΜΕΝΗ
ΗΜΕΡΟΜΗΝΙΑ, ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ
if($date==$hm_ nia)
{
echo "ΑΥΤΟ ΤΟ ΠΛΟΙΟ ΕΚΤΕΛΕΙ ΔΡΟΜΟΛΟΓΙΟ ΑΥΤΗ ΤΗΝ
ΗΜΕΡΟΜΗΝΙΑ. ΕΠΙΛΕΞΤΕ ΑΛΛΟ ΠΛΟΙΟ ΓΙΑ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ.";
}
// ΑΝ ΤΟ ΠΛΟΙΟ ΔΕΝ ΕΚΤΕΛΕΙ ΑΛΛΟ ΔΡΟΜΟΛΟΓΙΟ ΤΗΝ ΣΥΓΚΕΚΡΙΜΕΝΗ
ΗΜΕΡΟΜΗΝΙΑ
else{
//ΑΠΟΘΗΚΕΥΣΗ ΣΤΟΙΧΕΙΩΝ ΤΗΣ ΦΟΡΜΑΣ ΣΤΟΝ ΠΙΝΑΚΑ
ΔΡΟΜΟΛΟΓΙΟ
$sqlquery="INSERT INTO dromologio (afethria,proorismos,wra_anaxwrhshs,wra_afikshs,hm_nia,ar_diath_thesewn,plhthos_thesewn,plh
thos_oxhmatwn,timh)VALUES('$post','$destination','$time_anax','$time_af','$date',$number_
seats,$number_seats,$number_veh,$price)";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ ΑΠΟΘΗΚΕΥΘΗΚΑΝ ΕΠΙΤΥΧΩΣ.";
//ΑΠΟΘΗΚΕΥΣΗ ‘ΚΩΔΙΚΟΥ ΔΡΟΜΟΛΟΓΙΟΥ’ ΚΑΙ ‘ΟΝΟΜΑ ΠΛΟΙΟΥ’ ΣΤΟΝ
ΠΙΝΑΚΑ ‘pragmatopoiei’
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 152
$sqlquery="INSERT INTO pragmatopoiei(pragmatopoiei.kwd_drom,pragmatopoiei.onoma_ploiou)VALUES((SELECT dromologio.kwdikos_drom FROM dromologio WHERE dromologio.afethria='$post' AND dromologio.proorismos='$destination' AND dromologio.wra_anaxwrhshs='$time_anax' AND dromologio.wra_afikshs='$time_af' AND dromologio.hm_nia='$date'),'$name_ploiou')";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//ΑΠΟΘΗΚΕΥΣΗ ‘ΚΩΔΙΚΟΥ ΔΡΟΜΟΛΟΓΙΟΥ’ ΚΑΙ ‘ΟΝΟΜΑ ΕΤΑΙΡΕΙΑΣ’ ΣΤΟΝ
ΠΙΝΑΚΑ ‘anhkei’
$sqlquery="INSERT INTO anhkei(anhkei.kwd_drom,anhkei.onoma_et)VALUES((SELECT
dromologio.kwdikos_drom FROM dromologio WHERE dromologio.afethria='$post' AND
dromologio.proorismos='$destination' AND dromologio.wra_anaxwrhshs='$time_anax' AND
dromologio.wra_afikshs='$time_af' AND dromologio.hm_nia='$date'),'$company')";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
}
}
}
}
}
mysql_close();
?>
</p>
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
$date=$_POST['date'];
$time_anax=$_POST['time_anax'];
$time_af=$_POST['time_af'];
//ΓΙΑ ΚΑΘΕ ΕΤΑΙΡΕΙΑ, ΠΛΟΙΟ,ΑΦΕΤΗΡΙΑ,ΠΡΟΟΡΙΣΜΟ ΠΟΥ ΕΠΙΛΕΓΕΙ Ο
ΔΙΑΧΕΙΡΙΣΤΗΣ ΑΠΟ ΤΟ DROP DOWN LIST ΤΗΣ ΦΟΡΜΑΣ
foreach($_POST['company'] as $company)
{
foreach($_POST['name_ploiou'] as $name_ploiou)
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 153
{
foreach($_POST['post'] as $post)
{
foreach($_POST['destination'] as $destination)
{
// ΕΠΙΛΟΓΗ ΣΤΟΙΧΕΙΩΝ ΑΠΟ ΤΟΥΣ ΠΙΝΑΚΕΣ ‘anhkei’
(ΕΤΑΙΡΕΙΑ,ΚΩΔΙΚΟΣ ΔΡΟΜ) ΚΑΙ ‘dromologio’
$sqlquery="SELECT anhkei.onoma_et,dromologio.kwdikos_drom,dromologio.afethria,dromologio.proorismos,drom
ologio.wra_anaxwrhshs,dromologio.wra_afikshs,dromologio.hm_nia,dromologio.timh,
dromologio.plhthos_thesewn,dromologio.plhthos_oxhmatwn,dromologio.timh FROM anhkei,dromologio WHERE dromologio.hm_nia='$date' AND dromologio.afethria='$post'
AND dromologio.proorismos='$destination' AND dromologio.wra_anaxwrhshs='$time_anax'
AND dromologio.wra_afikshs='$time_af' AND dromologio.kwdikos_drom=anhkei.kwd_drom AND anhkei.onoma_et='$company'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΟΥΝ ΤΑ ΣΤΟΙΧΕΙΑ ΠΟΥ ΕΠΙΛΕΞΑΜΕ ΑΠΟ ΤΗΝ ΒΑΣΗ,
ΕΜΦΑΝΙΖΟΝΤΑΙ ΣΤΗΝ ΟΘΟΝΗ
if($num)
{
?> </p>
<table height="100" border="5" align="center" bordercolor="#2aa3e8">
<tr>
<td width="41" height="50" class="forma" >ΚΩΔΙΚΟΣ ΔΡΟΜ</td>
<td width="80" class="forma">ΕΤΑΙΡΕΙΑ</td>
<td width="80" class="forma">ΗΜΕΡ/ΝΙΑ</td>
<td width="88"class="forma">ΑΦΕΤ.</td>
<td width="111"class="forma">ΠΡΟΟΡ.</td>
<td width="116" class="forma">ΏΡΑ ΑΝΑΧ.</td>
<td width="82"class="forma">ΏΡΑ ΑΦΙΞΗΣ</td>
<td width="111"class="forma">ΑΡΙΘΜΟΣ ΘΕΣΕΩΝ</td>
<td width="116" class="forma">ΑΡΙΘΜΟΣ ΘΕΣΕΩΝ ΟΧ.</td>
<td width="82"class="forma">ΤΙΜΗ</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? echo $rows['kwdikos_drom']; ?></td>
<td align="center"><? echo $rows['onoma_et']; ?></td>
<td align="center"><? echo $rows['hm_nia']; ?></td>
<td align="center"><? echo $rows['afethria']; ?> </td>
<td align="center"><? echo $rows['proorismos']; ?></td>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 154
<td align="center"><? echo $rows['wra_anaxwrhshs']; ?></td>
<td align="center"><? echo $rows['wra_afikshs']; ?></td>
<td align="center"><? echo $rows['plhthos_thesewn']; ?></td>
<td align="center"><? echo $rows['plhthos_oxhmatwn']; ?></td>
<td align="center"><? echo $rows['timh']; ?></td>
</tr>
<?
}
?>
</table>
<?
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΟΥΝ ΤΑ ΣΤΟΙΧΕΙΑ ΠΟΥ ΕΠΙΛΕΞΑΜΕ ΑΠΟ ΤΗΝ ΒΑΣΗ,
ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ
else
{
echo "ΔΕΝ ΥΠΑΡΧΟΥΝ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΗΝ ΒΑΣΗ";
}
}
}
}
}
//Κλείνουμε την σύνδεση με την βάση
mysql_close();
?>
4.4.2.11 Σελίδα Ακύρωσης Δρομολογίου
delete_drom_admin.php
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 155
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση ‘σημερινής ημερομηνίας’ σε μια μεταβλητή
$cur_date=date("Y-m-d");
//Αυτόματη διαγραφή στοιχείων από τον πίνακα ‘kanei’ όπου η ημερομηνία του
δρομολογίου είναι μικρότερη από την ‘σημερινή μέρα’
$sqlquery="DELETE FROM kanei WHERE hm_nia<'$cur_date'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//Αυτόματη διαγραφή στοιχείων από τον πίνακα ‘prakt_drom’ όπου η ημερομηνία του δρομολογίου είναι μικρότερη από την ‘σημερινή μέρα’
$sqlquery="DELETE FROM prakt_drom WHERE hm_nia<'$cur_date'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
mysql_close($conn);
?>
</p>
<p><?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Επιλογή στοιχείων δρομολογίου από τον πίνακα ‘dromologio’ ταξινομημένα
ανά ημερομηνία
$sqlquery="SELECT * FROM dromologio ORDER BY hm_nia DESC";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num = mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΟΥΝ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ ‘dromologio’ ΣΤΗΝ ΒΑΣΗ,
ΕΜΦΑΝΙΖΟΝΤΑΙ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΗΝ ΟΘΟΝΗ
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 156
if($num)
{
echo "ΛΙΣΤΑ ΔΡΟΜΟΛΟΓΙΩΝ:"
?></p>
<table height="100" border="5" align="center" bordercolor="#2aa3e8">
<tr>
<td align="center" width="41" height="50" class="forma" >ΚΩΔΙΚΟΣ
ΔΡΟΜ</td>
<td align="center" width="80" class="forma">ΗΜΕΡΟΜΗΝΙΑ</td>
<td align="center" width="88"class="forma">ΑΦΕΤΗΡΙΑ</td>
<td align="center" width="111"class="forma">ΠΡΟΟΡΙΣΜΟΣ</td>
<td align="center" width="116" class="forma">ΏΡΑ ΑΝΑΧ.</td>
<td align="center" width="82"class="forma">ΏΡΑ ΑΦΙΞΗΣ</td>
<td align="center" width="66"class="forma">ΚΟΣΤΟΣ</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? echo $rows['kwdikos_drom']; ?></td>
<td align="center"><? echo $rows['hm_nia']; ?></td>
<td align="center"><? echo $rows['afethria']; ?></td>
<td align="center"><? echo $rows['proorismos']; ?></td>
<td align="center"><? echo $rows['wra_anaxwrhshs']; ?></td>
<td align="center"><? echo $rows['wra_afikshs']; ?></td>
<td align="center"><? echo $rows['timh']; ?></td>
//link ‘ΑΚΥΡΩΣΗ’ από το οποίο ο χρήστης πηγαίνει στη σελίδα delete_drom_admin_next.php και στέλνουμε τα δεδομένα στην σελίδα αυτή για να
μπορέσουμε να τα χρησιμοποιήσουμε (ΚΩΔΙΚΟΣ ΔΡΟΜΟΛΟΓΙΟΥ)
<td width="61"><a href="delete_drom_admin_next.php?kwdikos_drom=<? echo
$rows['kwdikos_drom']; ?>" target="_blank">ΑΚΥΡΩΣΗ</a></td>
</tr>
<?
}
?>
</table>
<?
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΟΥΝ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ ‘dromologio’ ΣΤΗΝ
ΒΑΣΗ, ΕΜΦΑΝΙΖΕΤΑΙ ΣΤΗΝ ΟΘΟΝΗ ΤΟ ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ
else
{
echo "ΔΕΝ ΥΠΑΡΧΟΥΝ ΔΡΟΜΟΛΟΓΙΑ.";
}
?>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 157
delete_drom_admin_next.php
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση ‘κωδικού δρομολογίου’ το οποίο πήραμε με την μέθοδο GET από την
φόρμα σε τοπική μεταβλητή
$kwdikos_drom=$_GET['kwdikos_drom'];
//ΔΙΑΓΡΑΦΗ ΔΡΟΜΟΛΟΓΙΟΥ
$sqlquery="DELETE FROM dromologio WHERE kwdikos_drom='$kwdikos_drom' ";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//ΔΙΑΓΡΑΦΗ ΤΩΝ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ-ΠΛΟΙΑΡΧΟΥ
$sqlquery="DELETE FROM drom_ploiar WHERE kwd_drom='$kwdikos_drom' ";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//ΔΙΑΓΡΑΦΗ ΤΩΝ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ-ΠΛΟΙΟΥ
$sqlquery="DELETE FROM pragmatopoiei WHERE kwd_drom='$kwdikos_drom' ";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//ΔΙΑΓΡΑΦΗ ΤΩΝ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ-ΕΤΑΙΡΕΙΑΣ
$sqlquery="DELETE FROM anhkei WHERE kwd_drom='$kwdikos_drom' ";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
//ΕΛΕΓΧΟΣ ΑΝ ΥΠΑΡΧΕΙ Ο ΚΩΔΙΚΟΣ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ ΣΤΟΝ ΠΙΝΑΚΑ
'kanei' Η' ΣΤΟΝ ΠΙΝΑΚΑ ‘prakt_drom’
$sqlquery="SELECT kanei.kwd_drom FROM kanei WHERE
kanei.kwd_drom='$kwdikos_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num_kanei = mysql_num_rows($result);
$sqlquery="SELECT prakt_drom.kwd_drom FROM prakt_drom WHERE
prakt_drom.kwd_drom='$kwdikos_drom'";
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 158
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num_prakt= mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΕΙ ΚΡΑΤΗΣΗ ΑΠΟ ΠΕΛΑΤΗ ΓΙΑ ΑΥΤΟ ΔΡΟΜΟΛΟΓΙΟ Η΄ΣΤΟΝ
ΕΝΑ ΠΙΝΑΚΑ Η' ΣΤΟΝ ΑΛΛΟ
if($num_kanei || $num_prakt)
{
//ΕΠΙΛΕΓΩ ΤΟ ΑΔΤ,ΚΩΔΙΚΟ_ΔΡΟΜ,ΑΡ_ΕΙΣ,KOΣTOS ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ 'kanei'
ΟΠΟΥ ΥΠΑΡΧΕΙ Ο ΣΥΓΚΕΚΡΙΜΕΝΟΣ ΚΩΔΙΚΟΣ ΔΡΟΜΟΛΟΓΙΟΥ
$sqlquery="SELECT
kanei.ADT,kanei.kwd_drom,kanei.ar_eis,kanei.kostos_ana_krat,pelatis.ADT,pelatis.onoma,p
elatis.epitheto,pelatis.thlefwno,pelatis.dieythynsh FROM kanei,pelatis WHERE
kanei.ADT=pelatis.ADT AND kanei.kwd_drom='$kwdikos_drom'";
$kanei_list=mysql_query($sqlquery,$conn) or die(mysql_error());
//ΕΠΙΛΕΓΩ ΤΟ ΑΔΤ,ΚΩΔΙΚΟ_ΔΡΟΜ,ΑΡ_ΕΙΣ,KOSTOS ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ
'prakt_drom' ΟΠΟΥ ΥΠΑΡΧΕΙ Ο ΣΥΓΚΕΚΡΙΜΕΝΟΣ ΚΩΔΙΚΟΣ ΔΡΟΜΟΛΟΓΙΟΥ
$sqlquery="SELECT
prakt_drom.ADT,prakt_drom.kwd_drom,prakt_drom.ar_eis,prakt_drom.kostos_ana_krat,pela
tis.ADT,pelatis.onoma,pelatis.epitheto,pelatis.thlefwno,pelatis.dieythynsh FROM
prakt_drom,pelatis WHERE prakt_drom.ADT=pelatis.ADT AND
prakt_drom.kwd_drom='$kwdikos_drom'";
$prakt_list=mysql_query($sqlquery,$conn) or die(mysql_error());
//ΕΜΦΑΝΙΣΗ ΣΤΟΙΧΕΙΩΝ ΠΕΛΑΤΩΝ ΣΤΗΝ ΟΘΟΝΗ ΚΑΙ ΑΠΟ ΤΟΥΣ 2
ΠΙΝΑΚΕΣ
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΩΝ ΕΠΙΒΑΤΩΝ ΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ ΠΟΥ ΔΙΑΓΡΑΦΗΚΕ ΜΕ
ΚΩΔΙΚΟ '$kwdikos_drom' ΕΙΝΑΙ:"
?>
</p>
<table height="100" border="5" align="center" bordercolor="#2aa3e8">
<tr>
<td align="center" width="41" height="50" class="forma" >ΑΔΤ</td>
<td align="center" width="80" class="forma">ΟΝΟΜΑ</td>
<td align="center" width="116" class="forma">ΕΠΙΘΕΤΟ</td>
<td align="center" width="88"class="forma">ΤΗΛΕΦΩΝΟ</td>
<td align="center" width="111"class="forma">ΔΙΕΥΘΥΝΣΗ</td>
<td align="center" width="82"class="forma">ΑΡΙΘΜΟΣ ΕΙΣΙΤΗΡΙΩΝ</td>
<td align="center" width="82"class="forma">ΣΥΝ. ΚΟΣΤΟΣ ΔΡΟΜ.</td>
</tr>
<?
//ΕΜΦΑΝΙΖΩ ΤΑ ΣΤΟΙΧΕΙΑ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ 'ΠΕΛΑΤΗΣ'
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 159
ΣΥΜΦΩΝΑ ΜΕ ΤΟ ΑΔΤ ΣΤΟΝ ΠΙΚΑΚΑ 'kanei'
while($rows=mysql_fetch_array($kanei_list)){
?>
<tr>
<td align="center"><? echo $rows['ADT']; ?></td>
<td align="center"><? echo $rows['onoma']; ?></td>
<td align="center"><? echo $rows['epitheto']; ?></td>
<td align="center"><? echo $rows['thlefwno']; ?> </td>
<td align="center"><? echo $rows['dieythynsh']; ?></td>
<td align="center"><? echo $rows['ar_eis']; ?></td>
<td align="center"><? echo $rows['kostos_ana_krat']; ?></td>
</tr>
<?
}
//ΕΜΦΑΝΙΖΩ ΤΑ ΣΤΟΙΧΕΙΑ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ 'ΠΕΛΑΤΗΣ' ΣΥΜΦΩΝΑ
ΜΕ ΤΟ ΑΔΤ ΣΤΟΝ ΠΙΚΑΚΑ 'prakt_drom'
while($rows=mysql_fetch_array($prakt_list)){
?>
<tr>
<td align="center"><? echo $rows['ADT']; ?></td>
<td align="center"><? echo $rows['onoma']; ?></td>
<td align="center"><? echo $rows['epitheto']; ?></td>
<td align="center"><? echo $rows['thlefwno']; ?> </td>
<td align="center"><? echo $rows['dieythynsh']; ?></td>
<td align="center"><? echo $rows['ar_eis']; ?></td>
<td align="center"><? echo $rows['kostos_ana_krat']; ?></td>
</tr>
<?
}
?>
</table>
<?
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΚΡΑΤΗΣΗ ΑΠΟ ΠΕΛΑΤΗ ΓΙΑ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ
ΣΤΟΥΣ 2 ΠΙΝΑΚΕΣ, ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ
else
{
echo "ΔΕΝ ΥΠΑΡΧΟΥΝ ΠΕΛΑΤΕΣ ΓΙΑ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ.";
}
?>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 160
4.4.2.12 Σελίδα Προσθήκης Υπαλλήλου
add_yp.php
<table border="5" align="center" td="TD" width="90%" height="283" bordercolor="#2aa3e8">
//Έλεγχος πεδίων που συμπληρώνουμε στη φόρμα
<script type='text/javascript'>
function formValidatora(){
// Make quick references to our fields
var adt = document.getElementById('adt');
var name = document.getElementById('name');
var surname = document.getElementById('surname');
var number = document.getElementById('number');
var address = document.getElementById('address');
var eidik = document.getElementById('eidik');
var misthos = document.getElementById('misthos');
// Check each input in the order that it appears in the form!
if(isAlphanumeric(adt, "Συμπληρώστε το πεδίο 'ΑΔΤ' με αριθμούς και γράμματα!")){
if(isAlphabet(name, "Συμπληρώστε το πεδίο 'Όνομα' ΜΟΝΟ με γράμματα!")){
if(isAlphabet(surname, "Συμπληρώστε το πεδίο 'Επίθετο' ΜΟΝΟ με γράμματα!")){
if(isNumeric(number, "Συμπληρώστε το πεδίο 'Τηλέφωνο' ΜΟΝΟ με αριθμούς!")){
if(notEmpty(address, "Συμπληρώστε το πεδίο 'Διεύθυνση'!")){
if(notEmpty(eidik, "Συμπληρώστε το πεδίο 'Ειδικότητα'!")){
if(isNumeric(misthos, "Συμπληρώστε το πεδίο 'Μισθός' ΜΟΝΟ με αριθμούς!!")){
return true;
}
}
}
}
}
}
}
return false;
}
//Συνάρτηση εισαγωγής κειμένου μόνο με αριθμούς
function isNumeric(elem, helperMsg){
var numericExpression = /^[0-9]+$/;
if(elem.value.match(numericExpression)){
return true;
}else{
alert(helperMsg);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 161
elem.focus();
return false;
}
}
//Συνάρτηση κενών πεδίων
function notEmpty(elem, helperMsg){
if(elem.value.length == 0){
alert(helperMsg);
elem.focus(); // set the focus to this input
return false;
}
return true;
}
// Συνάρτηση εισαγωγής κειμένου αλφαριθμητικών χαρακτήρων (αριθμοί και
γράμματα)
function isAlphanumeric(elem, helperMsg){
var alphaExp = /^[0-9a-zA-Zα-ωΑ-Ω]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
//Συνάρτηση εισαγωγής κειμένου μόνο με γράμματα
function isAlphabet(elem, helperMsg){
var alphaExp = /^[a-zA-Zα-ωΑ-Ω]+$/;
if(elem.value.match(alphaExp)){
return true;
}else{
alert(helperMsg);
elem.focus();
return false;
}
}
</script>
//Δημιουργία φόρμας
//Επόμενη σελίδα add_yp_next.php
//Έλεγχος πεδίων με JavaScript onsubmit='return formValidatora()'
<form action="add_yp_next.php" method="post" name="ypallilos" target="_blank" onsubmit='return formValidatora()'>
<tr>
<td align="left" class="forma">ΑΔΤ:</acronym>
<input type="text" name="adt" size="30" id="adt" />
</td>
</tr>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 162
<tr>
<td align="left" class="forma">
Όνομα:
<input type="text" name="name" size="30" id="name" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Επίθετο:
<input type="text" name="surname" size="30" id="surname" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Τηλέφωνο:
<input type="text" name="number" size="30" id="number" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Διεύθυνση:
<input type="text" name="address" size="30" id="address" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Ειδικότητα:
<input type="text" name="eidik" size="30" id="eidik" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Μισθός:
<input type="text" name="misthos" size="30" id="misthos" />
</td>
</tr>
<tr>
<td align="left" class="forma">
Κωδικός δρομ.(πλοίαρχος):
<input type="text" name="kwd_drom" size="20" />
</td>
</tr>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 163
//Δημιουργία button με όνομα «ΠΡΟΣΘΗΚΗ»
<tr>
<td align="center"><strong><font face="Georgia, Times New Roman, Times,
serif">
<input name="button" type="submit" id="button" value="ΠΡΟΣΘΗΚΗ" />
</font></strong></td>
</tr>
</form>
</table>
add_yp_next.php
<p><?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database
failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση δεδομένων τα οποία πήραμε με την μέθοδο POST από την φόρμα σε τοπικές μεταβλητές
$adt=$_POST['adt'];
$name=$_POST['name'];
$surname=$_POST['surname'];
$number=$_POST['number'];
$address=$_POST['address'];
$eidik=$_POST['eidik'];
$misthos=$_POST['misthos'];
$kwd_drom=$_POST['kwd_drom'];
//ΑΝ Η ΕΙΔΙΚΟΤΗΤΑ ΕΙΝΑΙ ΠΛΟΙΑΡΧΟΣ, ΕΠΙΛΕΓΟΥΜΕ ΤΟ ‘ΑΔΤ’ ΑΠΟ ΤΟΝ
ΠΙΝΑΚΑ ‘ypallhlos’
//ΑΝ Η ΕΙΔΙΚΟΤΗΤΑ ΕΙΝΑΙ ΠΛΟΙΑΡΧΟΣ
if($eidik=="πλοίαρχος" || $eidik=="ΠΛΟΙΑΡΧΟΣ" )
{
$sqlquery="SELECT A_D_T FROM ypallhlos WHERE A_D_T='$adt'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 164
//ΑΝ ΥΠΑΡΧΕΙ ΗΔΗ ΣΤΟΝ ΠΙΝΑΚΑ ΥΠΑΛΛΗΛΟΣ
if($num)
{
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΕΙΝΑΙ ΗΔΗ ΑΠΟΘΗΚΕΥΜΕΝΑ ΣΤΟΝ ΠΙΝΑΚΑ
'ΥΠΑΛΛΗΛΟΣ'.";
echo "<br />";
//ΕΠΙΛΕΓΟΥΜΕ ΤΟΝ ‘ΚΩΔΙΚΟ ΔΡΟΜ’ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ ‘drom_ploiar’
$sqlquery="SELECT * FROM drom_ploiar WHERE kwd_drom='$kwd_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ Ο ‘ΚΩΔΙΚΟΣ ΔΡΟΜΟΛΟΓΙΟΥ’ ΥΠΑΡΧΕΙ ΗΔΗ ΣΤΟΝ ΠΙΝΑΚΑ
'DROM_PLOIAR', ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ
if($num)
{
echo "ΥΠΑΡΧΕΙ ΠΛΟΙΑΡΧΟΣ ΓΙΑ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ.";
}
//ΑΝ Ο ‘ΚΩΔΙΚΟΣ ΔΡΟΜΟΛΟΓΙΟΥ’ ΔΕΝ ΥΠΑΡΧΕΙ ΗΔΗ ΣΤΟΝ ΠΙΝΑΚΑ
'DROM_PLOIAR', ΤΟΤΕ ΓΙΝΕΤΑΙ ΕΛΕΓΧΟΣ ΑΝ Ο ΠΛΟΙΑΡΧΟΣ ΕΧΕΙ
ΔΡΟΜΟΛΟΓΙΟ ΤΗΝ ΣΥΓΚΕΚΡΙΜΕΝΗ ΗΜΕΡΟΜΗΝΙΑ
else
{
//ΕΠΙΛΟΓΗ ‘ΗΜΕΡΟΜΗΝΙΑΣ’ ΔΡΟΜΟΛΟΓΙΟΥ ΠΟΥ ΕΙΣΑΓΑΜΕ ΣΤΗΝ
ΦΟΡΜΑ
$sqlquery="SELECT * FROM dromologio WHERE kwdikos_drom='$kwd_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($row=mysql_fetch_array($result))
{
$date=$row['hm_nia'];
//$time_anax=$row['wra_anaxwrhshs'];
}
//ΕΠΙΛΟΓΗ ‘ΗΜΕΡΟΜΗΝΙΑΣ’ ΔΡΟΜΟΛΟΓΙΟΥ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ
‘DROM_PLOIAR’ ΟΠΟΥ ΤΟ ΑΔΤ ΤΟΥ ΠΛΟΙΑΡΧΟΥ ΕΙΝΑΙ ΑΥΤΟ ΠΟΥ
ΕΙΣΑΓΑΜΕ ΣΤΗΝ ΦΟΡΜΑ
$sqlquery="SELECT dromologio.kwdikos_drom,dromologio.hm_nia,dromologio.wra_anaxwrhshs,dromologio.afethria,
dromologio.proorismos,drom_ploiar.kwd_drom,drom_ploiar.adt_ploiar FROM dromologio,drom_ploiar WHERE drom_ploiar.adt_ploiar='$adt' AND dromologio.kwdikos_drom=drom_ploiar.kwd_drom";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
while($row=mysql_fetch_array($result))
{
$hm_nia=$row['hm_nia'];
//$wra_anaxwrhshs=$row['wra_anaxwrhshs'];
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 165
//ΑΝ ΟΙ ΗΜΕΡΟΜΗΝΙΕΣ ΕΙΝΑΙ ΙΔΙΕΣ, ΤΟΤΕ ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ
ΜΗΝΥΜΑ ΣΤΗΝ ΟΘΟΝΗ
if($date==$hm_nia)
{
echo "ΑΥΤΟΣ Ο ΠΛΟΙΑΡΧΟΣ ΕΙΝΑΙ ΣΕ ΑΛΛΟ ΔΡΟΜΟΛΟΓΙΟ ΑΥΤΗ
ΤΗΝ ΗΜΕΡΟΜΗΝΙΑ. ΕΠΙΛΕΞΤΕ ΑΛΛΟΝ ΠΛΟΙΑΡΧΟ Η' ΑΛΛΟ ΔΡΟΜΟΛΟΓΙΟ.";
}
//ΑΝ ΟΙ ΗΜΕΡΟΜΗΝΙΕΣ ΔΕΝ ΕΙΝΑΙ ΙΔΙΕΣ
else{
//ΑΠΟΘΗΚΕΥΩ ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΑΡΧΟΥ ΣΤΟΝ ΠΙΝΑΚΑ
'DROM_PLOIAR' ΠΟΥ ΕΙΝΑΙ ΤΑ ΣΤΟΙΧΕΙΑ ΔΡΟΜΟΛΟΓΙΟΥ-ΠΛΟΙΑΡΧΟΥ
$sqlquery="INSERT INTO drom_ploiar (onoma_ploiar,epith_ploiar,adt_ploiar,kwd_drom)VALUES('$name','$surname','$adt',$kwd_drom
)";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΑΡΧΟΥ ΠΡΟΣΤΕΘΗΚΑΝ ΕΠΙΤΥΧΩΣ ΣΤΑ ΣΤΟΙΧΕΙΑ
ΠΟΥ ΚΡΑΤΑΜΕ ΓΙΑ ΤΟ ΔΡΟΜΟΛΟΓΙΟ.";
}
}
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΣΤΟΝ ΠΙΝΑΚΑ ΥΠΑΛΛΗΛΟΣ
else
{
//ΑΠΟΘΗΚΕΥΩ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ 'ΥΠΑΛΛΗΛΟΣ'
$sqlquery="INSERT INTO ypallhlos
(A_D_T,onoma,epitheto,thlefwno,dieythynsh,eidikothta,misthos)VALUES('$adt','$name','$su
rname',$number,'$address','$eidik',$misthos)";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΑΡΧΟΥ ΠΡΟΣΤΕΘΗΚΑΝ ΕΠΙΤΥΧΩΣ.";
//ΕΠΙΛΕΓΟΥΜΕ ΤΟΝ ‘ΚΩΔΙΚΟ ΔΡΟΜ’ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ ‘drom_ploiar’
$sqlquery="SELECT * FROM drom_ploiar WHERE kwd_drom='$kwd_drom'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ Ο ‘ΚΩΔΙΚΟΣ ΔΡΟΜΟΛΟΓΙΟΥ’ ΥΠΑΡΧΕΙ ΗΔΗ ΣΤΟΝ ΠΙΝΑΚΑ
'DROM_PLOIAR', ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ
if($num)
{
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 166
echo "ΥΠΑΡΧΕΙ ΠΛΟΙΑΡΧΟΣ ΓΙΑ ΑΥΤΟ ΤΟ ΔΡΟΜΟΛΟΓΙΟ";
}
//ΑΝ Ο ‘ΚΩΔΙΚΟΣ ΔΡΟΜΟΛΟΓΙΟΥ’ ΔΕΝ ΥΠΑΡΧΕΙ ΗΔΗ ΣΤΟΝ ΠΙΝΑΚΑ
'DROM_PLOIAR'
else
{
//ΑΠΟΘΗΚΕΥΩ ΤΑ ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ 'DROM_PLOIAR' ΠΟΥ ΕΙΝΑΙ
ΤΑ ΣΤΟΙΧΕΙΑ ΔΡΟΜΟΛΟΓΙΟΥ-ΠΛΟΙΑΡΧΟΥ
$sqlquery="INSERT INTO drom_ploiar (onoma_ploiar,epith_ploiar,adt_ploiar,kwd_drom)VALUES('$name','$surname','$adt',$kwd_drom
)";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
}
}
}
//ΑΝ Η ΕΙΔΙΚΟΤΗΤΑ ΔΕΝ ΕΙΝΑΙ ΠΛΟΙΑΡΧΟΣ, ΕΠΙΛΕΓΩ ΤΟ ΑΔΤ ΤΟΥ
ΥΠΑΛΛΗΛΟΥ
else
{
$sqlquery="SELECT A_D_T FROM ypallhlos WHERE A_D_T='$adt'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΟΥΝ ΣΤΟΝ ΠΙΝΑΚΑ ‘ypallhlos’, ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ
ΜΗΝΥΜΑ ΣΤΗΝ ΟΘΟΝΗ
if($num)
{
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΥΠΑΛΛΗΛΟΥ ΥΠΑΡΧΟΥΝ ΗΔΗ.";
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΟΥΝ ΣΤΟΝ ΠΙΝΑΚΑ ‘ypallhlos’, ΑΠΟΘΗΚΕΥΟΝΤΑΙ ΤΑ
ΣΤΟΙΧΕΙΑ ΣΤΟΝ ΠΙΝΑΚΑ ‘ypallhlos’
else
{
$sqlquery=mysql_query("INSERT INTO ypallhlos
(A_D_T,onoma,epitheto,thlefwno,dieythynsh,eidikothta,misthos)VALUES('$adt','$name','$su
rname',$number,'$address','$eidik',$misthos)");
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΥΠΑΛΛΗΛΟΥ ΠΡΟΣΤΕΘΗΚΑΝ ΕΠΙΤΥΧΩΣ.";
}
}
?></p>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 167
4.4.2.13 Σελίδα Διαγραφής Υπαλλήλου
delete_yp.php
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//ΕΠΙΛΟΓΗ ΣΤΟΙΧΕΙΩΝ ΥΠΑΛΛΗΛΟΥ
$sqlquery="SELECT * FROM ypallhlos";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
// ΑΝ ΥΠΑΡΧΟΥΝ ΣΤΟΙΧΕΙΑ ΣΤΗΝ ΒΑΣΗ, ΤΑ ΕΜΦΑΝΙΖΩ ΣΤΗΝ ΟΘΟΝΗ
if($num)
{
echo "ΛΙΣΤΑ ΥΠΑΛΛΗΛΩΝ:"
?>
</p>
<table height="100" border="5" align="center" bordercolor="#2aa3e8">
<tr>
<td align="center" width="41" height="50" class="forma" >ΑΔΤ</td>
<td align="center" width="80" class="forma">ΟΝΟΜΑ</td>
<td align="center" width="88"class="forma">ΕΠΙΘΕΤΟ</td>
<td align="center" width="111"class="forma">ΤΗΛΕΦΩΝΟ</td>
<td align="center" width="116" class="forma">ΔΙΕΥΘΥΝΣΗ</td>
<td align="center" width="82"class="forma">ΕΙΔΙΚΟΤΗΤΑ</td>
<td align="center" width="82"class="forma">ΜΙΣΘΟΣ</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? echo $rows['A_D_T']; ?></td>
<td align="center"><? echo $rows['onoma']; ?></td>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 168
<td align="center"><? echo $rows['epitheto']; ?> </td>
<td align="center"><? echo $rows['thlefwno']; ?></td>
<td align="center"><? echo $rows['dieythynsh']; ?></td>
<td align="center"><? echo $rows['eidikothta']; ?></td>
<td align="center"><? echo $rows['misthos']; ?></td>
//link ‘ΔΙΑΓΡΑΦΗ’ από το οποίο ο χρήστης πηγαίνει στη σελίδα
delete_yp_next.php και στέλνουμε τα δεδομένα στην σελίδα αυτή για να μπορέσουμε να τα χρησιμοποιήσουμε
<td width="61"><a href="delete_yp_next.php?A_D_T=<? echo
$rows['A_D_T']; ?>" target="_blank">ΔΙΑΓΡΑΦΗ</a></td>
</tr>
<?
}
?>
</table>
<?
}
// ΑΝ ΔΕΝ ΥΠΑΡΧΟΥΝ ΣΤΟΙΧΕΙΑ ΣΤΗΝ ΒΑΣΗ, ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ
ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ ΣΤΗΝ ΟΘΟΝΗ
else
{
echo "ΔΕΝ ΥΠΑΡΧΟΥΝ ΥΠΑΛΛΗΛΟΙ";
}
?>
delete_yp_next.php
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 169
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//Αποθήκευση ΑΔΤ που πήραμε με την μέθοδο GET από την φόρμα σε τοπική
μεταβλητή
$A_D_T=$_GET['A_D_T'];
//ΕΠΙΛΟΓΗ ‘ΑΔΤ’ ΠΛΟΙΑΡΧΟΥ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ ‘drom_ploiar’
$sqlquery="SELECT adt_ploiar FROM drom_ploiar WHERE adt_ploiar='$A_D_T'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num_rows = mysql_num_rows($result);
//ΑΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ‘ΑΔΤ’ ΣΤΟΝ ΠΙΝΑΚΑ(ΔΗΛΑΔΗ ΑΝ Ο ΠΛΟΙΑΡΧΟΣ
ΕΚΤΕΛΕΙ ΔΡΟΜΟΛΟΓΙΟ), ΕΜΦΑΝΙΖΕΤΑΙ ΤΟ ΠΑΡΑΚΑΤΩ ΜΗΝΥΜΑ ΣΤΗΝ
ΟΘΟΝΗ
if($num_rows)
{
echo "ΔΕΝ ΕΙΝΑΙ ΔΥΝΑΤΗ Η ΔΙΑΓΡΑΦΗ ΤΟΥ ΠΛΟΙΑΡΧΟΥ ΓΙΑΤΙ ΕΚΤΕΛΕΙ
ΔΡΟΜΟΛΟΓΙΟ!";
}
//ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΑΥΤΟ ΤΟ ‘ΑΔΤ’ ΣΤΟΝ ΠΙΝΑΚΑ, ΔΙΑΓΡΑΦΟΝΤΑΙ ΤΑ
ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΛΟΙΑΡΧΟΥ Η’ ΤΟΥ ΥΠΑΛΛΗΛΟΥ ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ
‘ypallhlos’
else
{$sqlquery=mysql_query("DELETE FROM ypallhlos WHERE A_D_T='$A_D_T'");
echo "ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΥΠΑΛΛΗΛΟΥ ΔΙΑΓΡΑΦΗΚΑΝ ΕΠΙΤΥΧΩΣ!";
}
?>
</p>
4.4.2.14 Σελίδα Συγκεντρωτικής Αναφοράς
sum_drom_admin.php
<p>
<?
error_reporting (E_ALL ^ E_NOTICE);
$server="localhost";
$username="root";
$password="";
$db_name="nautiliaki_etaireia";
//Σύνδεση με την βάση δεδομένων
$conn=mysql_connect($server,$username,$password) or die ("connection to the database failed");
//Καθορίζουμε την κωδικοποίηση χαρακτήρων στα ελληνικά
mysql_query("set names 'greek'",$conn);
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 170
$db=mysql_select_db($db_name,$conn) or die ("database name not available");
//ΕΠΙΛΟΓΗ ΣΤΟΙΧΕΙΩΝ ΔΡΟΜΟΛΟΓΙΟΥ ΤΑΞΙΝΟΜΗΜΕΝΑ ΜΕ
ΒΑΣΗ ΤΟ ΠΛΗΘΟΣ ΤΩΝ ΕΠΙΒΑΤΩΝ ΑΠΟ ΑΥΤΟ ΜΕ ΤΟΥΣ
ΠΕΡΙΣΣΟΤΕΡΟΥΣ ΠΡΟΣ ΕΚΕΙΝΟ ΜΕ ΤΟΥΣ ΛΙΓΟΤΕΡΟΥΣ (ORDER BY
epiv DESC) ΚΑΙ ΣΥΝΟΛΙΚΗΣ ΑΞΙΑΣ ΤΩΝ ΕΙΣΙΤΗΡΙΩΝ ΠΟΥ
ΕΚΔΟΘΗΚΑΝ ΓΙΑ ΤΟ ΚΑΘΕ ΔΡΟΜΟΛΟΓΙΟ (SUM(plhthos_thesewn)SUM(ar_diath_thesewn) AS epiv)
(echo $rows['timh']*$rows['epiv'];)
$query="SELECT
kwdikos_drom,afethria,proorismos,hm_nia,timh,SUM(plhthos_thesewn)SUM(ar_diath_thesewn) AS epiv FROM dromologio GROUP BY kwdikos_drom
ORDER BY epiv DESC";
$result=mysql_query($query,$conn) or die(mysql_error());
echo "ΛΙΣΤΑ ΔΡΟΜΟΛΟΓΙΩΝ ΜΕ ΒΑΣΗ ΤΟ ΠΛΗΘΟΣ ΤΩΝ ΕΠΙΒΑΤΩΝ ΚΑΙ Η
ΣΥΝΟΛΙΚΗ ΑΞΙΑ ΤΩΝ ΕΙΣΙΤΗΡΙΩΝ ΓΙΑ ΚΑΘΕ ΔΡΟΜΟΛΟΓΙΟ:"
?>
</p>
//ΕΜΦΑΝΙΣΗ ΣΤΗΝ ΟΘΟΝΗ (ΚΩΔΙΚΟΣ
ΔΡΟΜ/ΗΜΕΡΟΜΗΝΙΑ/ΑΦΕΤΗΡΙΑ/ΠΡΟΟΡΙΣΜΟΣ/ΣΥΝΟΛΟ
ΕΠΙΒΑΤΩΝ/ΣΥΝΟΛΙΚΗ ΑΞΙΑ ΕΙΣΙΤΗΡΙΩΝ)
<table height="100" border="5" align="center" bordercolor="#2aa3e8">
<tr>
<td align="center" width="41" height="50" class="forma" >ΚΩΔΙΚΟΣ
ΔΡΟΜ</td>
<td align="center" width="80" class="forma">ΗΜΕΡΟΜΗΝΙΑ</td>
<td align="center" width="88"class="forma">ΑΦΕΤΗΡΙΑ</td>
<td align="center" width="111"class="forma">ΠΡΟΟΡΙΣΜΟΣ</td>
<!-- <td align="center" width="116" class="forma">ΏΡΑ ΑΝΑΧ.</td>
<td align="center" width="82"class="forma">ΏΡΑ ΑΦΙΞΗΣ</td>-->
<td align="center" width="82"class="forma">ΣΥΝΟΛΟ ΕΠΙΒΑΤΩΝ</td>
<td align="center" width="82"class="forma">ΣΥΝ. ΑΞΙΑ ΕΙΣ.</td>
</tr>
<?
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? echo $rows['kwdikos_drom']; ?></td>
<td align="center"><? echo $rows['hm_nia']; ?></td>
<td align="center"><? echo $rows['afethria']; ?> </td>
<td align="center"><? echo $rows['proorismos']; ?></td>
<!-- <td align="center"><? //echo $rows['wra_anaxwrhshs']; ?></td>
<td align="center"><? //echo $rows['wra_afikshs']; ?></td>-->
<td align="center"><? echo $rows['epiv'] ; ?></td>
<td align="center"><? echo $rows['timh']*$rows['epiv']; ?></td>
</tr>
<?
}
?> </table>
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 171
//Κλείνουμε την σύνδεση με την βάση
<?
mysql_close($conn);
?>
4.4.2.15 Σελίδα Προσθήκης-Ακύρωσης Κράτησης Πράκτορα
Στις σελίδες Προσθήκη Κράτησης και Ακύρωση Κράτησης του Πράκτορα, ο κώδικας είναι περίπου ίδιος με τις σελίδες Προσθήκη Κράτησης και Ακύρωση Κράτησης Πελάτη. Η μόνη διαφορά είναι ότι ο έλεγχος των στοιχείων γίνεται με το username του πράκτορα βρίσκοντας το όνομα του. Ετσι λοιπόν όταν κάνει κράτηση αποθηκεύεται το όνομα του, τα στοιχεία
του πελάτη και τα στοιχεία του δρομολογίου στον πίνακα «prakt_drom». Όταν γίνεται ακύρωση κράτησης διαγράφεται η κράτηση από την λίστα σύμφωνα με το όνομα του πράκτορα.
session_start();
$username=$_SESSION['username'];
//ΕΠΙΛΟΓΗ ΣΤΟΙΧΕΙΩΝ ΠΙΝΑΚΑ 'login_prakt' ΓΙΑ ΝΑ ΒΡΟΥΜΕ ΤΟ «onoma
praktora» ΓΙΑ ΝΑ ΓΙΝΕΙ ΕΛΕΓΧΟΣ
$sqlquery="SELECT * FROM login_prakt WHERE username='$username'";
$result=mysql_query($sqlquery,$conn) or die(mysql_error());
$num=mysql_num_rows($result);
//ΑΠΟΘΗΚΕΥΣΗ «onoma praktora» ΑΠΟ ΤΟΝ ΠΙΝΑΚΑ 'login_prakt' ΣΕ ΜΙΑ
ΜΕΤΑΒΛΗΤΗ ΓΙΑ ΝΑ ΤΗΝ ΧΡΗΣΙΜΟΠΟΙΗΣΟΥΜΕ ΣΤΙΣ ΕΡΩΤΗΣΕΙΣ MYSQL
while($row=mysql_fetch_array($result))
{$name_prakt=$row['onoma_prakt'];
}
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 172
5º ΚΕΦΑΛΑΙΟ
5.1 Αποτελέσματα- Συμπεράσματα
Σε αυτό το κεφάλαιο το οποίο είναι και το τελικό μας, θα εκθέσουμε τα συμπεράσματα και την άποψη μας για την λειτουργία της εφαρμογής μας και για την περαιτέρω ανάπτυξη της και την χρήση που μπορεί να βρει σε κάποιες εταιρίες για αγορά εισιτήριων μέσω
μιας ιστοσελίδας. Θα αναλύσουμε επίσης τα αποτελέσματα που προκύπτουν από την εφαρμογή που αναλύσαμε στο 4ο κεφάλαιο.
Η εργασία μας έχει σαν αποτέλεσμα μια ιστοσελίδα για την εύκολη διαχείριση ενός
πελάτη που θέλει να αγοράσει ένα εισιτήριο είτε έναν διαχειριστή που θέλει να αλλάξει κάτι
στη σελίδα της εταιρίας. Σαν ιστοσελίδα μπορεί να είναι φτιαγμένη για ναυτιλιακή εταιρία,
όμως γενικά η δομή της με κάποιες αλλαγές και κάποιες προσθήκες μπορεί να χρησιμοποιηθεί πέρα από τα προαναφερθέντα. Μια ναυτιλιακή εταιρία διαχειρίζεται καθημερινά ένα
μεγάλο όγκο πελατών που επιθυμούν να αγοράσουν εισιτήρια για τα δρομολόγια της και
καλείται να ανταπεξέλθει. Με την ιστοσελίδα αυτή ο πελάτης μπορεί εύκολα να αγοράσει
ένα εισιτήριο χωρίς να χρειαστεί να βγει απτό σπίτι του, βεβαία και ο διαχειριστής μπορεί να
δει το πλήθος των εισπράξεων.
Με το πέρας αυτής της εργασίας έχουμε κατανοήσει αρκετά πράγματα,. Δουλεύοντας πάνω στο χτίσιμο της ιστοσελίδας κατανοήσαμε πως λειτουργεί μία εφαρμογή φτιαγμένη με την γλώσσα php, πως φτιάχνουμε τα κουμπιά τα οποία μας πηγαίνουν από την μία
σελίδα στην άλλη, πως φτιάχνουμε τους υπερσυνδέσμους. Κατανοήσαμε επίσης πως φτιάχνεται μια βάση δεδομένων η οποία αλληλεπιδρά με τον κώδικα στην σελίδα μας και συνεργάζεται αρμονικά, αυτό που λέμε με πιο απλά λόγια δυναμική εφαρμογή. Μελετήσαμε και
εκπονήσαμε το στήσιμο μίας βάσης από την αρχή ,δηλαδή από το διάγραμμα οντοτήτωνσυσχετίσεων, μέχρι την πλήρη υλοποίηση σε γραφικό περιβάλλον με το πρόγραμμα Easy
Php το οποίο και αναλύσαμε σε προηγούμενο κεφάλαιο. Είδαμε την σύνδεση της σελίδα μας
με την βάση δεδομένων την οποία υλοποιήσαμε με την χρήση της γλώσσας php και το οποίο
εξηγήσαμε στο κεφάλαιο 4 όπως εξηγήσαμε και όλο τον κώδικα της εφαρμογής μας καθώς
και τον παραγόμενο sql κώδικα από την βάση δεδομένων, μιας και όλες τις ενέργειες τις κάναμε γραφικά και θα άξιζε τον κόπο να εξηγήσουμε ορισμένα πράγματα. Αποκομίσαμε γενικές γνώσεις πάνω στην κατασκευή μιας δυναμικής ιστοσελίδας με προοπτική για περεταίρω ανάπτυξη και εκπαίδευση πάνω στην κατασκευή ιστοσελίδων. Η συνολική εργασία μπορεί να θεωρηθεί ως ένα ερασιτεχνικό αποτέλεσμα δημιουργημένο εξολοκλήρου από κώδικα
php,html,JavaScript και MySQL.
5.2 Μελλόντική Εργασία και Επεκτάσεις
Βέβαια η εφαρμογή μας δεν είναι αυτό που λέμε πλήρης, δηλαδή να είναι ολοκληρωμένη. Λέγοντας ολοκληρωμένη εννοούμε να υπάρχει και ένας τρόπος για να μπορεί ο πελάτης της εταιρίας να αγοράσει το εισιτήριο μέσω μιας πιστωτικής κάρτας πράγμα που δεν
μπορεί να το κάνει τώρα. Θα μπορούσε να έχει ας πούμε κάποιο χάρτη για να φαίνονται τα
δρομολόγια και οι περιοχές στις όποιες φτάνουν τα καράβια. Επίσης μια μηχανή αναζήτησης για κάποια ξενοδοχεία στις περιοχές αυτές ή και γραφεία ενοικίασης αυτοκίνητων ή μηχανών. Όλες αυτές τις λειτουργίες και όσες χρειάζονται ακόμα θα μπορούσαν να αποτελέσουν ένα δεύτερο κομμάτι πτυχιακής εργασίας καθώς απαιτείται η ίδια δουλεία που είχε η
εφαρμογή μας για να φτάσει στο παρόν στάδιο .Εμείς με την προσθήκη ενός template προσπαθήσαμε να κάνουμε το interface της σελίδας πιο φιλικό με χρώματα και εικόνες γιατί
όπως και να το κάνουμε αναφέρεται κυρίως σε πελάτες οπότε θα πρέπει να είναι ελκυστικό
στο μάτι καθώς και να έχει μια ομοιομορφία.
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 173
ΠΙΝΑΚΑΣ ΕΙΚΟΝΩΝ
Εικόνα 1. HTML Form
Εικόνα 2. Επιλογή Γλώσσας Easy Php
Εικόνα 3. Προορισμός Εγκατάστασης Easy Php
Εικόνα 4. Εφαρμογή Easy Php
Εικόνα 5. Task Manager - Processes
Εικόνα 6. Εφαρμογή Easy Php
Εικόνα 7. Συντόμευση EasyPHP
Εικόνα 8. Μενού Easy Php
Εικόνα 9. Σελίδα διαχείρισης της εφαρμογής EasyPHP
Εικόνα 10. Σελίδα διαχείρισης της εφαρμογής phpMyAdmin
Εικόνα 11. Το λογισμικό Adobe DreamWeaver CS4
Εικόνα 12. Περιβάλλον Δημιουργίας Σελίδας Html
Εικόνα 13. Οι πληροφορίες για τους πελάτες μιας ναυτιλιακής εταιρείας
Εικόνα 14. Παράδειγμα διαγραφής στοιχεών πατώντας ένα link
Εικόνα 15. Διάγραμμα Οντοτήτων-Συσχετίσεων
Εικόνα 16. Πίνακας ‘admin’
Εικόνα 17. Πίνακας ‘eggrafi_pelati’
Εικόνα 18. Πίνακας ‘login_prakt’
Εικόνα 19. Πίνακας ‘anhkei’
Εικόνα 20. Πίνακας ‘diathetei’
Εικόνα 21. Πίνακας ‘drom_ploiar’
Εικόνα 22. Πίνακας ‘dromologio’
Εικόνα 23. Πίνακας ‘etaireia’
Εικόνα 24. Πίνακας ‘kanei’
Εικόνα 25. Πίνακας ‘pelatis’
Εικόνα 26. Πίνακας ‘ploio’
Εικόνα 27. Πίνακας ‘pragmatopoiei’
Εικόνα 28. Πίνακας ‘prakt_drom’
Εικόνα 29. Πίνακας ‘ypallhlos’
Εικόνα 30. Αρχική Σελίδα
Εικόνα 31. Σελίδα Σύνδεσης Πελάτη
Εικόνα 32. Σελίδα Εγγραφής Πελάτη
Εικόνα 33. Σελίδα Σύνδεσης Πράκτορα
Εικόνα 34. Σελίδα Σύνδεσης Διαχειριστή
Εικόνα 35. Αρχική Σελίδα Πελάτη
Εικόνα 36. Σελίδα Αναζήτησης Δρομολογίων-Σελίδα Πελάτη
Εικόνα 37. Σελίδα Λίστας Δρομολογίων-Σελίδα Πελάτη
Εικόνα 38. Σελίδα Προσθήκης Κράτησης-Σελίδα Πελάτη
Εικόνα 39. Σελίδα Επιβεβαίωσης Κράτησης-Σελίδα Πελάτη
Εικόνα 40. Σελίδα Λίστας Κρατήσεων για Ακύρωση-Σελίδα Πελάτη
Εικόνα 41. Σελίδα Επιβεβαίωσης Ακύρωση Κράτησης-Σελίδα Πελάτη
Εικόνα 42. Σελίδα Αναζήτησης Κρατήσεων
Εικόνα 43. Σελίδα Λίστας Αναζήτησης Κρατήσεων
Εικόνα 44. Σελίδα Επικοινωνίας
Εικόνα 45. Αρχική Σελίδα Διαχειριστή
Εικόνα 46. Σελίδα Προσθήκης Εταιρείας
Εικόνα 47. Σελίδα Προσθήκης Πλοίου
Εικόνα 48. Σελίδα Προσθήκης Δρομολογίου
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 174
Εικόνα 49. Σελίδα Επιβεβαίωσης Στοιχείων Δρομολογίου
Εικόνα 50. Σελίδα Ακύρωσης Δρομολογίου
Εικόνα 51. Σελίδα Επιβεβαίωσης Ακύρωσης Δρομολογίου-Λίστα Επιβατών
Εικόνα 52. Σελίδα Προσθήκης Υπαλλήλου
Εικόνα 53. Σελίδα Διαγραφής Υπαλλήλου-Λίστα Υπαλλήλων
Εικόνα 54. Σελίδα Λίστας Δρομολογίων
Εικόνα 55. Σελίδα Συγκεντρωτικής Αναφοράς
Εικόνα 56. Αρχική Σελίδα Πράκτορα
Εικόνα 57. Σελίδα Αναζήτησης Δρομολογίων-Σελίδα Πράκτορα
Εικόνα 58. Σελίδα Προσθήκης Κράτησης- Σελίδα Πράκτορα
Εικόνα 59. Σελίδα Επιβεβαίωσης Κράτησης-Σελίδα Πράκτορα
Εικόνα 60. Σελίδα Λίστας Κρατήσεων για Ακύρωση-Σελίδα Πράκτορα
Εικόνα 61. Σελίδα Επιβεβαίωσης Ακύρωση Κράτησης-Σελίδα Πράκτορα
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 175
ΒΙΒΛΙΟΓΡΑΦΙΑ
[1] http://www.netrino.gr/reloaded/blog-post.php?bp_id=798
[2] http://en.wikipedia.org
[3] http://www.w3schools.com/html/default.asp
[4] http://www.w3schools.com/css/default.asp
[5] http://www.php.net/
[6] http://www.tizag.com/javascriptT/javascriptform.php
[7] http://www.easyphp.org/
[8] http://www.phpmyadmin.net/home_page/index.php
[9] http://help.adobe.com/el_GR/Dreamweaver/10.0_Using/dreamweaver_cs4_help.pdf
[10] http://www.webdesign.org/web-programming/php/how-to-install-easyphp-php-mysqlapache-phpmyadmin.15102.html
[11] http://www.tizag.com/mysqlTutorial/mysqlsum.php
[12] http://phpeasystep.com/mysql.php
[13] Εισαγωγή στα Συστήματα Βάσεων Δεδομένων (C. J. Date)
[14] Ανάπτυξη Web Εφαρμογών με PHP και MySQL (Luke Welling & Laura Thomson)
Αγγελάκη Ελευθερία Α.Μ. 2146
Γιαννός Κώστας Α.Μ 1192
Σελίδα 176
Fly UP