TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Σχετικά έγγραφα
TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

Ενότητα. Σχεδίαση Βάσεων Δεδομένων

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

Ενότητα. Επεξεργασία πινάκων

Περιεχόμενα. Μέρος 1: Βασικές έννοιες Πληροφορικής και επικοινωνιών Μέρος 2: Χρήση υπολογιστή και διαχείριση αρχείων Πρόλογος...

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

Υπολογιστικά Συστήματα

Σχεδιασμός των Πινάκων μίας Βάσης Δεδομένων

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

XAMPP Apache MySQL PHP javascript xampp

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΕΦΑΡΜΟΓΗ ΔΙΑΧΕΙΡΙΣΗΣ ΙΣΤΟΣΕΛΙΔΩΝ ΜΕΛΩΝ ΔΕΠ, ΤΜΗΜΑΤΟΣ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΑΤΡΩΝ ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΠΛΟΗΓΗΣΗΣ ΚΑΙ ΧΡΗΣΗΣ

Οδηγίες Οργάνωσης Μαθήματος στην Ιδρυματική πλατφόρμα του open e class. Σύνταξη: MY-AOC

Ειδικά Θέματα Προγραμματισμού

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Σχεδίαση Βάσεων Δεδομένων

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο) Διδάσκων: Ανδρέας Γιαννακουλόπουλος Επιστημονικός συνεργάτης Εργαστηρίου: Στέλλα Λάμπουρα

Ανοικτό Ψηφιακό Μάθημα για την κατάρτιση του προσωπικού υποστήριξης ανάπτυξης ψηφιακών μαθημάτων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΣΙΑ ΠΑΝΕΠΙΣΗΜΙΟ ΚΡΗΣΗ

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

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ: Εντολές κίνησης και στροφής στο προγραμματιστικό περιβάλλον Scratch. ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Γενικά. Change Reference

Εγχειρίδιο Χρήσης. για ΟΙΚΟΝΟΜΙΚΟΥΣ ΦΟΡΕΙΣ

TEC510 Ανάπτυξη Δικτυακών Τόπων (Ε εξάμηνο) Διδάσκων: Ανδρέας Γιαννακουλόπουλος Επιστημονικός συνεργάτης Εργαστηρίου: Γιώργος Μηλιώτης

Asset Management Software Client Module. Οδηγός χρήσης

Vodafone Business Connect

Ψηφιακή Τεχνολογία σε Ακαδημαϊκό Περιβάλλον

ΟΔΗΓΙΕΣ ΧΡΗΣΤΗ ΓΙΑ ΤΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΤΑΞΗΣ

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Δραστηριότητα 9 Δημιουργία και διαχείριση blog μέσω του Blogger. Δημιουργία ιστολογίου


ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΟΔΗΓΙΕΣ ΕΙΣΑΓΩΓΗΣ ΚΑΤΑΛΟΓΟΥ ΥΠΟΧΡΕΩΝ ΑΠΟ ΑΡΧΕΙΟ EXCEL

Ενότητα. Εισαγωγή στη Microsoft Access

Σενάριο Χρήσης Moodle

Εργαλεία. Επικοινωνίας & Συνεργασίας Πανεπιστήμιο Κύπρου

Ελέγξτε την ταινία σας

Δομημένος Προγραμματισμός

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

ΥΠΗΡΕΣΙΑ ΣΠΟΥΔΩΝ ΚΑΙ ΦΟΙΤΗΤΙΚΗΣ ΜΕΡΙΜΝΑΣ. Οδηγός για Συμπλήρωση Αίτησης Εισδοχής. Ελλαδιτών Φοιτητών στο Πανεπιστήμιο Κύπρου ή/και το ΤΕΠΑΚ

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

ΥΠ.ΕΣ. - Δ.Μ.Η.Ε.Σ. ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΕΦΑΡΜΟΓΗΣ ΛΗΞΙΑΡΧΕΙΟΥ V 1.2

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΩΝ ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΠΡΑΞΕΩΝ ΔΕΛΤΙΟ ΔΗΛΩΣΗΣ ΔΑΠΑΝΩΝ (ΕΕΣ)

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ Π.Σ. ΦΟΙΤΗΤΟΛΟΓΙΟΥ- ΓΙΑ ΤΟ ΔΙΔΑΣΚΟΝΤΑ (ClassWeb)

Οδηγός Γρήγορης Παραμετροποίησης Auto Moto Cube

ΔΟΜΗ. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Εργαστήριο 2. Δημιουργία πινάκων Ιδιότητες πεδίων. Ευάγγελος Γ. Καραπιδάκης

Διαχείριση Βάσης Δεδομένων (dbadmin)

ΥΠ.ΕΣ. - Δ.Μ.Η.Ε.Σ. ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΕΦΑΡΜΟΓΗΣ ΛΗΞΙΑΡΧΕΙΟΥ

Περιεχόμενα. Λίγα λόγια από το συγγραφέα... 7

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

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Εργαστηριακός Οδηγός. Βάσεις Δεδομένων της Γ' Τάξης ΕΠΑΛ

Αναλυτικά Φύλλα Μισθοδοσίας

Σχεδίαση με Ηλεκτρονικούς Υπολογιστές

Διαγραφή Επιλέγετε Διαγραφή για να διαγράψετε μία ήδη υπάρχουσα διαδικασία εισαγωγής ASCII

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Πληροφορική. Εργαστηριακή Ενότητα 6 η : Ταξινόμηση & Ομαδοποίηση Δεδομένων

Σύστημα Αναγνώρισης/Αντιστοιχίας Μαθημάτων. Εγχειρίδιο Χρήσης Φοιτητές

Οδηγίες Ηλεκτρονικής Υποβολής Προτάσεων

Εγχειρίδιο χρήσης δικτυακού τόπου του προγράμματος, ΆΞΟΝΑΣ 3: "Ποιότητα ζωής στις αγροτικές περιοχές και διαφοροποίηση της αγροτικής οικονομίας"

ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Ηλεκτρονικοί Υπολογιστές

Εισαγωγή στις Βάσεις Δεδομζνων II

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Σύστημα Αναγνώρισης/Αντιστοιχίας Μαθημάτων. Εγχειρίδιο Χρήσης - Φοιτητές

Πρότυπα βιβλίων εργασίας και ονόματα κελιών

Υπολογιστές Ι. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Βάσεις δεδομένων (Access)

6 Εισαγωγή στο Wordpress 3.x

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel... 9

Οδηγίες Χρήσης Πλατφόρμας Ασύγχρονης Τηλεκπαίδευσης (Moodle) του Τμήματος ΔΕΤ

Πληροφορική ΙΙ Θεματική Ενότητα 5

Πληροφορική. Εργαστηριακή Ενότητα 3 η : Επεξεργασία Κελιών Γραμμών & Στηλών. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access Κεφάλαιο 2 Χειρισμός πινάκων... 27

Εργαστήριο «Βάσεις Οικολογικών Δεδομένων και Εφαρμογές»

Είσοδος. Καλωσορίσατε στο Ενιαίο Σύστημα Πληρωμών Δαπανών Ηλεκτρονικών Υπηρεσιών.

Πληροφορική. Εργαστηριακή Ενότητα 1 η : Εισαγωγή στα Λογιστικά Φύλλα με το MS Excel. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Ηλεκτρονικοί Υπολογιστές I

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Εύδοξος - Δήλωση Συγγραμμάτων

Εργαστήριο 9. Προγραμματιστικές Εφαρμογές στο Διαδίκτυο. Στόχος. Προετοιμασία περιβάλλοντος εργασίας

ΕΡΓΑΣΤΗΡΙΟ ΠΛΗΡΟΦΟΡΙΚΗ I. 3o ΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑ ΜΕ ΤΟ WORD

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

Εργαστήριο #10 (Ε10) 1

Transcript:

TEC610 (ΣΤ εξάμηνο) Διδάσκων: Ανδρέας Γιαννακουλόπουλος Εαρινό εξάμηνο

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ιόνιο Πανεπιστήμιο» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 1

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons 2

Συστήματα Διαχείρισης Περιεχομένου - Παράδειγμα 2

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

1. Προσπελάστε το διακομιστή MySQL που χρησιμοποιείτε και καθορίστε το σύνολο χαρακτήρων της επικοινωνίας. CHARSET utf8; 2. Δημιουργήστε μια νέα βάση δεδομένων CREATE DATABASE forum2 CHARACTER SET utf8; USE forum2 Αν η τοποθεσία σας φιλοξενείται σε απομακρυσμένο υπολογιστή υπηρεσίας και δεν μπορείτε να δημιουργήσετε δικές σας βάσεις δεδομένων, χρησιμοποιήστε τη βάση δεδομένων που προορίζεται για εσάς και επιλέξτε την. 4

Είτε δημιουργήσετε τη βάση δεδομένων από την αρχή είτε χρησιμοποιήσετε μια νέα βάση δεδομένων, είναι πολύ σημαντικό οι πίνακες να χρησιμοποιούν κωδικοποίηση UTF-8, ώστε να μπορούν να υποστηρίζουν πολλές γλώσσες. 1.Δημιουργήστε έναν πίνακα languages 5

Αυτός είναι ο πιο απλός πίνακας της βάσης. Δε θα περιλαμβάνει πολλές γλώσσες οπότε το πρωτεύον κλειδί (lang_id) μπορεί να είναι τύπου TINYINT. Η στήλη lang ορίζεται λίγο μεγαλύτερη επειδή θα περιέχει χαρακτήρες άλλων γλωσσών που χρειάζονται περισσότερο χώρο. Η συγκεκριμένη στήλη θα πρέπει να είναι μοναδική. Σημειώστε ότι δε μπορώ να ονομάσω τη στήλη language επειδή η λέξη αυτή είναι δεσμευμένη στην MySQL. Η στήλη lang_eng περιέχει το αγγλικό ισοδύναμο της γλώσσας, ώστε ο διαχειριστής να μπορεί να ξεχωρίζει εύκολα τις γλώσσες. 6

4. Δημιουργήστε τον πίνακα threads Ο πίνακας αυτός περιέχει 4 στήλες και σχετίζεται με τους πίνακες languages και users (μέσω των ξένων κλειδιών lang_id και user_id, αντίστοιχα). 7

Η στήλη subject (θέμα) θα πρέπει να είναι αρκετά μεγάλη ώστε να χωράει τα θέματα σε διάφορες γλώσσες. Για τις στήλες που θα χρησιμοποιούνται σε ενώσεις και όρους WHERE lang_id και user_id έχει οριστεί ευρετήριο όπως και στη στήλη thread_id (αφού είναι πρωτεύον κλειδί). 5. Δημιουργήστε τον πίνακα posts. 8

Η κύρια στήλη αυτού του πίνακα είναι η message, στην οποία αποθηκεύεται κάθε δημοσίευση (μήνυμα). Δυο στήλες είναι ξένα κλειδιά και συσχετίζουν τον πίνακα posts με τους πίνακες threads και users. Η στήλη posted_on είναι τύπου DATETIME και χρησιμοποιεί Παγκόσμια Ώρα (UTC Coordinated Universal Time). 6.Δημιουργήστε τον πίνακα users 9

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

7.Δημιουργήστε τον πίνακα words 11

Σε αυτόν τον πίνακα αποθηκεύονται διάφορες μεταφράσεις των συνηθισμένων στοιχείων της τοποθεσίας. Όλες οι στήλες είναι τύπου VARCHAR εκτός από τη στήλη intro που περιέχει ένα τμήμα κειμένου το οποίο θα εμφανίζεται στην κύρια σελίδα. Το όνομα κάθε στήλης υπονοεί το είδος δεδομένων που θα αποθηκεύονται σε αυτή. Σε μια από τις στήλες χρησιμοποιήθηκε ως όνομα η δεσμευμένη λέξη της MySQL language για να δείτε πως γίνεται αυτό. (Αυτό που χρειάζεται είναι να κλείσετε το όνομα της στήλης σε βαρείες, όχι μονά εισαγωγικά) 12

8. Συμπληρώστε τον πίνακα languages 13

9. Συμπληρώστε τον πίνακα users Πρέπει να καταχωρίσουμε μερικούς χρήστες, επειδή τα σενάρια PHP θα εμφανίζουν τους χρήστες που έχουν δημοσιεύσει μηνύματα. Σε κάθε χρήστη αντιστοίχισα μια γλώσσα και μια ζώνη ώρας. Ο κωδικός πρόσβασης θα κρυπτογραφείται με τη συνάρτηση SHA1(). 14

10. Συμπληρώστε τον πίνακα words Αυτοί είναι οι όροι που αντιστοιχούν στα βασικά στοιχεία της τοποθεσίας, στα Αγγλικά. Η τιμή του πεδίου lang_id είναι ίση με 1, ίδια με την αντίστοιχη τιμή του πεδίου lang_id του πίνακα languages για τα αγγλικά. 15

1.2 Δημιουργία των Προτύπων Όπως σε κάθε τοποθεσία που περιλαμβάνει πολλές σελίδες έτσι και εδώ θα χρησιμοποιήσουμε ένα πρότυπο (template) για να διαχωρίσουμε τη μορφοποίηση από τον κώδικα. Θα αποθηκεύσουμε το μεγαλύτερο μέρος του κώδικα της HTML σε αρχεία κεφαλίδας και υποσέλιδου και κάθε σενάριο PHP θα συμπεριλαμβάνει αυτά τα αρχεία για να δημιουργήσει μια πλήρη σελίδα HTML. Η πολυπλοκότητα της συγκεκριμένης τοποθεσίας έγκειται στο ότι έχει στόχο να εξυπηρετεί χρήστες σε πολλές διαφορετικές γλώσσες δηλαδή ολόκληρη η τοποθεσία πρέπει να είναι μεταφρασμένη σε πολλές γλώσσες. 16

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

1. Ξεκινήστε ένα νέο έγγραφο Επειδή αυτό το σενάριο θα πρέπει να κάνει αρκετή επικύρωση και ανάκτηση δεδομένων ξεκινάει με ένα μπλοκ κώδικα PHP. Επίσης το σενάριο ενημερώνει το φυλλομετρητή ότι η κωδικοποίηση είναι UTF-8, με τη συνάρτηση header. 18

2. Ξεκινήστε μια περίοδο εργασίας Για την παρακολούθηση των χρηστών μετά από τη σύνδεσή τους η τοποθεσία θα χρησιμοποιεί περιόδους εργασίας. 19

3. Συμπεριλάβετε το σενάριο σύνδεσης στη βάση δεδομένων και επικυρώστε το αναγνωριστικό γλώσσας αν υπάρχει. Το αναγνωριστικό γλώσσας αποθηκεύεται στην περίοδο εργασίας ώστε να είναι πάντα διαθέσιμο. Ο όρος elseif εκτελείται μόνο αν το αναγνωριστικό γλώσσας δε μεταβιβάστηκε στη σελίδα και δεν καθορίζεται στην περίοδο εργασίας. Σε αυτή την περίπτωση επιλέγεται μια προεπιλεγμένη γλώσσα. 20

4.Ανακτήστε τα βασικά στοιχεία που είναι μεταφρασμένα σε αυτή τη γλώσσα. Το επόμενο βήμα στο αρχείο κεφαλίδας είναι η ανάκτηση των στοιχείων που είναι μεταφρασμένα στη γλώσσα που επέλεξε ο χρήστης από τη βάση δεδομένων. Αν το ερώτημα επιστρέψει μια εγγραφή οι τιμές αυτές θα προσκομιστούν στη μεταβλητή $words. 21

5. Αν συμβεί κάποιο πρόβλημα ανακτήστε τα προεπιλεγμένα στοιχεία. Αν η μεταβλητή $_SESSION[ lid ] δεν είναι μεγαλύτερη από 0, ή αν το ερώτημα του βήματος 4 δεν επέστρεψε εγγραφή, πρέπει να ανακτηθούν τα στοιχεία της προεπιλεγμένης γλώσσας. 22

6. Απελευθερώστε τους πόρους και κλείστε την ενότητα της PHP. Η κλήση της mysqli_free_results() δεν είναι απαραίτητη, αλλά περιλαμβάνεται για λόγους καλής προγραμματιστικής τεχνικής. 23

7. Ξεκινήστε την ιστοσελίδα της HTML. Η κωδικοποίηση δηλώνεται και με μια ετικέτα ΜΕΤΑ παρόλο που η συνάρτηση header() της PHP καθορίζει την κωδικοποίηση. Αυτό γίνεται για λόγους πληρότητας. 24

8. Προσθέστε τον κώδικα CSS 25

9. Ολοκληρώστε την κεφαλίδα του κώδικα HTML και ξεκινήστε το σώμα της σελίδας. Η διάταξη της σελίδας δημιουργείται με έναν πίνακα όπου η πρώτη γραμμή περιέχει τον τίτλο της σελίδας, η δεύτερη αριστερά τους συνδέσμους πλοήγησης και δεξιά το περιεχόμενο και η τρίτη τα πνευματικά δικαιώματα. 26

10. Ξεκινήστε τη δημιουργία των συνδέσμων. Οι δυο πρώτοι σύνδεσμοι θα εμφανίζονται πάντα, είτε ο χρήστης έχει συνδεθεί είτε όχι και ανεξάρτητα από την ενεργό σελίδα. Το κείμενο κάθε συνδέσμου θα είναι μεταφρασμένο στην επιλεγμένη γλώσσα. 27

11. Αν ο χρήστης έχει συνδεθεί, εμφανίστε τους συνδέσμους νέου νήματος (new thread) και αποσύνδεσης (logout). Για να επαληθεύσουμε αν ο χρήστης έχει συνδεθεί ελέγχουμε τη μεταβλητή $_SESSION[ user_id ]. Αν έχει οριστεί τότε δημιουργούμε τον σύνδεσμο αποσύνδεσης. 28

12. Δημιουργήστε τους συνδέσμους που θα εμφανίζονται στους μη συνδεδεμένους χρήστες. Αν ο χρήστης δεν έχει συνδεθεί, στον φυλλομετρητή του θα εμφανίζονται σύνδεσμοι εγγραφής και σύνδεσης. 29

13. Ξεκινήστε μια φόρμα για την επιλογή γλώσσας. Ο χρήστης μπορεί να επιλέξει μια γλώσσα από ένα πτυσσόμενο μενού. Η πρώτη τιμή του μενού είναι η λέξη language μεταφρασμένη στην προεπιλεγμένη γλώσσα του χρήστη. 30

14. Ανακτήστε όλες τις γλώσσες από τη βάση δεδομένων. Αυτό το ερώτημα ανακτά τις γλώσσες και τα αναγνωριστικά τους από τον πίνακα languages. Κάθε μια από τις γλώσσες προστίθεται στο μενού επιλογών. 31

15. Προσθέστε κάποιες εντολές εκκαθάρισης. Αυτές οι γραμμές κώδικα δεν είναι απαραίτητες αλλά μπορούν να βοηθήσουν στον περιορισμό των σφαλμάτων. 16. Ολοκληρώστε τη φόρμα και τη σελίδα της PHP. 32

17. Αποθηκεύστε το αρχείο με το όνομα header.html 18. Δημιουργήστε ένα νέο έγγραφο. <!- - Script 15.2 footer.html - -> 19. Ολοκληρώστε τη σελίδα της HTML. 20. Αποθηκεύστε το αρχείο με το όνομα footer.html 21. Τοποθετήστε και τα δύο αρχεία μέσα στο φάκελο includes. 33

1.3 Δημιουργία της Αρχικής Σελίδας Η αρχική σελίδα του παραδείγματος περιέχει ένα εισαγωγικό κείμενο και τους συνδέσμους εγγραφής και σύνδεσης χρήστη, επιλογής γλώσσας και φόρουμ. 1.Δημιουργήστε ένα νέο έγγραφο PHP <?php # Script 15.3 index.php 2.Συμπεριλάβετε την κεφαλίδα της HTML. include ( includes/header.html ); Το αρχείο συμπερίληψης χρησιμοποιεί τις συναρτήσεις header() και session_start(). 3.Εμφανίστε το περιεχόμενο στη συγκεκριμένη γλώσσα. echo $words[ intro ]; Το μητρώο words ορίζεται μέσα στο αρχείο κεφαλίδας 34

4. Ολοκληρώστε τη σελίδα. include ( includes/footer.html );?> 5. Αποθηκεύστε το αρχείο με το όνομα index.php 35

1.4 Δημιουργία της Σελίδας του Φόρουμ Στη σελίδα του φόρουμ θα εμφανίζονται τα νήματα του φόρουμ (κάθε γλώσσα θα έχει το δικό της φόρουμ). Η σελίδα θα χρησιμοποιεί το αναγνωριστικό γλώσσας, που θα της μεταβιβάζεται με τη διεύθυνση URL και θα αποθηκεύεται σε μια περίοδο εργασίας, ώστε να ξέρει ποια νήματα θα εμφανίσει. Η βασική λειτουργία της σελίδας στηρίζεται στην εκτέλεση ενός πολύπλοκου ερωτήματος όπου: 1.Εκτελεί μια ένωση 3 πινάκων. 2.Χρησιμοποιεί 3 συγκεντρωτικές συναρτήσεις και έναν όρο GROUP BY. 3.Μετατρέπει τις ημερομηνίες στη ζώνη ώρας του χρήστη, αλλά μόνο αν ο χρήστης που βλέπει τη σελίδα έχει συνδεθεί. 36

1.Δημιουργήστε ένα έγγραφο PHP 2.Προσδιορίστε τι ημερομηνίες και ώρες θα χρησιμοποιήσετε. 37

Για να κάνουμε δυναμικό το ερώτημα, αποθηκεύουμε σε μεταβλητές τις τιμές ημερομηνίας και ώρας που επιλέχθηκαν. Αν ο χρήστης δεν έχει συνδεθεί, η μεταβλητή $_SESSION[ user_tz ] δε θα έχει τιμή, οι ημερομηνίες θα λαμβάνονται αυτούσιες από τον πίνακα. Η στήλη του πίνακα όπου γίνεται αναφορά δημοσιεύεται (posted_on) στον πίνακα posts. Αν ο χρήστης έχει συνδεθεί, η συνάρτηση CONVERT_TZ() μετατρέπει την τιμή της μεταβλητής posted_on από UTC, στη ζώνη ώρας του χρήστη. 38

3.Ορίστε και εκτελέστε το ερώτημα. 39

Το ερώτημα πρέπει να επιστρέφει 6 στοιχεία: το αναγνωριστικό και το θέμα κάθε νήματος (από τον πίνακα threads), το όνομα του χρήστη που ξεκίνησε το νήμα (από τον πίνακα users), το πλήθος των απαντήσεων κάθε νήματος, την ημερομηνία έναρξης του νήματος και την ημερομηνία της τελευταίας απάντησης (όλα από τον πίνακα posts). Η βασική δομή του ερωτήματος αυτού είναι μια ένωση μεταξύ των πινάκων threads και posts με βάση τη στήλη thread_id (ίδια και στους 2 πίνακες). Στη συνέχεια το αποτέλεσμα ενώνεται με τον πίνακα users με βάση τη στήλη user_id. 40

4. Δημιουργήστε έναν πίνακα για τα αποτελέσματα. 41

5. Προσκομίστε και τυπώστε τις εγγραφές που επιστρέφει το ερώτημα. Το θέμα κάθε νήματος συνδέεται με τη σελίδα read.php μεταβιβάζοντας στη σελίδα αυτή το αναγνωριστικό νήματος (thread_id) μέσω της διεύθυνσης URL. 42

5. Ολοκληρώστε τη σελίδα Ο όρος else εκτελείται αν το ερώτημα δεν επιστρέψει αποτελέσματα 6. Αποθηκεύστε το αρχείο με όνομα forum.php 43

1.5 Δημιουργία της Σελίδας του Νήματος Ακολουθεί η σελίδα που εμφανίζει όλα τα μηνύματα ενός νήματος. Αυτή η σελίδα φορτώνεται όταν ο χρήστης πατάει στον αντίστοιχο σύνδεσμο της σελίδας forum.php. 44

1.5.1 Δημιουργία του Σεναρίου read.php 1. Δημιουργήστε ένα έγγραφο PHP 2. Ξεκινήστε την επικύρωση του αναγνωριστικού του νήματος. 45

Πρώτα ορίζουμε μια μεταβλητή σημαία ως FALSE. Στη συνέχεια ένας έλεγχος επαληθεύει ότι το αναγνωριστικό νήματος μεταβιβάστηκε μέσω της διεύθυνσης URL και ότι είναι αριθμητική τιμή. Τέλος, μετατρέπουμε τον τύπο του σε ακέραιο και ελέγχουμε αν έχει θετική τιμή. 3.Προσδιορίστε αν πρέπει να μετατραπούν οι ημερομηνίες και οι ώρες. 46

4. Εκτελέστε το ερώτημα. Το ερώτημα εκτελεί μια ένωση μεταξύ τριών πινάκων για να πάρει το θέμα του νήματος, το κείμενο των μηνυμάτων και τα ονόματα των χρηστών. Αυτά τα στοιχεία ταξινομούνται με αύξουσα σειρά κατά ημερομηνία δημοσίευσης. 47

Αν το ερώτημα δεν επιστρέψει καμιά γραμμή, τότε το αναγνωριστικό νήματος δεν είναι έγκυρο και στη μεταβλητή σημαίας αντικαθίσταται η μεταβλητή FALSE. 5.Ολοκληρώστε τις συνθήκες και ελέγξτε ξανά αν το αναγνωριστικό είναι έγκυρο. Πριν από την εμφάνιση των μηνυμάτων του νήματος, χρησιμοποιούμε μια τελευταία συνθήκη η οποία θα είναι ψευδής αν δοθεί μια αριθμητική τιμή αναγνωριστικού νήματος μεγαλύτερη από 0 αλλά δεν επιστραφεί καμία γραμμή από τη βάση δεδομένων. 48

6. Εμφανίστε όλα τα μηνύματα. 49

Το θέμα του νήματος χρειάζεται να τυπωθεί μόνο μια φορά. Όμως το ερώτημα επιστρέφει το θέμα κάθε φορά που επιστρέφει ένα μήνυμα. Για να παρακάμψουμε το πρόβλημα δημιουργούμε μια μεταβλητή σημαίας. Αν η μεταβλητή $printed έχει τιμή FALSE το θέμα πρέπει να τυπωθεί. 7.Συμπεριλάβετε τη φόρμα δημοσίευσης ενός μηνύματος. include ( post_form.php ); επειδή οι χρήστες μπορούν να δημοσιεύσουν μηνύματα με δυο τρόπους (ως απάντηση σε ένα υπάρχον ή ως πρώτη δημοσίευση) ο κώδικας της φόρμας τοποθετήθηκε σε ξεχωριστό αρχείο. 50

8. Ολοκληρώστε τη σελίδα. 9. Αποθηκεύστε το μήνυμα σφάλματος σε όλες τις γλώσσες στον πίνακα words. 10. Αποθηκεύστε το αρχείο με όνομα read.php 51

1.6 Δημοσίευση Μηνυμάτων Για τη δημοσίευση των μηνυμάτων θα δημιουργήσουμε δυο αρχεία. Το ένα θα δημιουργεί τη φόρμα δημοσίευσης και το άλλο θα τη χειρίζεται. 52

1.6.1 Δημιουργία της Φόρμας Η πρώτη σελίδα που απαιτείται για τη δημοσίευση των μηνυμάτων είναι η post_form.php και έχει κάποιες ιδιαιτερότητες: 1. Για να προσπελαστεί πρέπει να συμπεριληφθεί σε άλλα αρχεία. 2. Θα πρέπει να εμφανίζεται μόνο όταν ο χρήστης έχει συνδεθεί. 3. Όταν χρησιμοποιείται για την απάντηση σε ένα υπάρχον μήνυμα, θα πρέπει να εμφανίζει μόνο μια περιοχή εισόδου για το σώμα του μηνύματος. 4. Όταν χρησιμοποιείται για τη δημιουργία νέου νήματος, πρέπει να εμφανίζει εισόδους και για το θέμα του νήματος και για το σώμα του μηνύματος. 5. Θα πρέπει να είναι παραμένουσα. 53

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

3. Επαληθεύστε ότι ο χρήστης έχει συνδεθεί και ξεκινήστε τη φόρμα. Μόνο οι εγγεγραμμένοι χρήστες μπορούν να δημοσιεύσουν μηνύματα, οπότε πριν από την εμφάνιση της φόρμας ελέγξτε αν υπάρχει η μεταβλητή $_SESSION[ user_id ]. Η ίδια η φόρμα θα υποβληθεί στο σενάριο post.php. Στη φόρμα προσθέτουμε και το χαρακτηριστικό accept-charset= utf-8. 55

4. Ελέγξτε αν υπάρχει αναγνωριστικό νήματος. Όταν συμπεριλαμβάνεται με το σενάριο read.php χρησιμοποιείται για την απάντηση σε ένα υπάρχον νήμα. Για να ελεγχθεί αυτό το σενάριο κοιτάζει αν έχει οριστεί η μεταβλητή $tid και αν έχει τιμή TRUE. Όταν το σενάριο συμπεριλαμβάνεται με το σενάριο post.php η μεταβλητή $tid έχει και πάλι οριστεί αλλά έχει τιμή FALSE. Αν η συνθήκη είναι αληθής εμφανίζεται στη γλώσσα του χρήστη λεζάντα Post a Reply και το αναγνωριστικό νήματος αποθηκεύεται σε μια κρυφή είσοδο της φόρμας. 56

5. Ολοκληρώστε τη συνθήκη που ξεκινήσατε στο Βήμα 4. Αν δεν πρόκειται για απάντηση τότε εμφανίζεται η λεζάντα New Thread στη γλώσσα του χρήστη και δημιουργείται μια είσοδος για το θέμα του νήματος. 57

6. Δημιουργήστε την περιοχή κειμένου για το σώμα του μηνύματος. 58

7. Ολοκληρώστε τη φόρμα Το μόνο που μένει είναι να γίνει η προσθήκη ενός κουμπιού για την υποβολή της φόρμας στη γλώσσα του χρήστη και την κρυφή είσοδο που θα δείχνει αν η φόρμα έχει υποβληθεί. 59

8. Ολοκληρώστε τη σελίδα Το μόνο που μένει είναι να γίνει η προσθήκη ενός κουμπιού για την υποβολή της φόρμας στη γλώσσα του χρήστη και την κρυφή είσοδο που θα δείχνει αν η φόρμα έχει υποβληθεί. 9. Αποθηκεύστε το αρχείο με όνομα post_form.php 60

1.6.2 Χειρισμός της Φόρμας Το αρχείο post.php θα χρησιμοποιηθεί για το χειρισμό των δεδομένων της φόρμας post_form.php. Η σελίδα αυτή θα καλείται σε τρεις διαφορετικές περιπτώσεις: 1. Για να χειρίζεται τη φόρμα μιας απάντησης σε υπάρχον νήμα. 2. Για να εμφανίζει τη φόρμα έναρξης ενός νέου νήματος. 3. Για να χειρίζεται τη φόρμα έναρξης ενός νέου νήματος. Η σελίδα θα προσπελάζεται είτε με τη μέθοδο POST (1,3) είτε με τη μέθοδο GET (2). 61

Όταν δημιουργείται ένα νέο νήμα πρέπει να εκτελεστούν δύο ερωτήματα: 1. Πού θα προστεθεί το νήμα στον πίνακα threads; 2. Πού θα προστεθεί το σώμα του αρχικού νήματος στον πίνακα; Αν η υποβολή είναι απάντηση σε υπάρχον νήμα τότε απαιτείται μόνο ένα ερώτημα που θα προσθέτει μια εγγραφή στον πίνακα posts. Όσον αφορά την επικύρωση το θέμα και το σώμα, ως τύποι κειμένου, θα ελέγχονται μόνο ως προς την ύπαρξη κενών τιμών. Όλες οι ετικέτες θα αφαιρεθούν από το θέμα και θα μετατραπούν σε ενότητες στο σώμα, επιτρέποντας τη χρήση κώδικα χωρίς αυτός να εκτελείται όταν εμφανίζεται το νήμα. 62

1. Ξεκινήστε ένα έγγραφο php 2. Ελέγξτε αν έχει υποβληθεί η φόρμα και επικυρώστε το αναγνωριστικό νήματος. 63

Το αναγνωριστικό νήματος θα υπάρχει αν η φόρμα υποβλήθηκε ως απάντηση σε υπάρχον νήμα. Η διαδικασία επικύρωσής του: βεβαιωθείτε ότι έχει οριστεί και είναι αριθμητικό και μετά μετατρέψτε τον τύπο του. Αν το αναγνωριστικό δεν είναι μεγαλύτερο από το 0 τότε είναι άκυρο. 3.Επικυρώστε το θέμα του μηνύματος. 64

Η δυσκολία στην επικύρωση του θέματος είναι ότι υπάρχουν 3 περιπτώσεις: 1. Αν δεν υπάρχει έγκυρο αναγνωριστικό νήματος, τότε πρόκειται για νέο νήμα και το θέμα δεν μπορεί να είναι κενό. Αν είναι κενό τότε συνέβη σφάλμα και θα εμφανιστεί μήνυμα. 2. Αν δεν υπάρχει έγκυρο αναγνωριστικό νήματος και το θέμα δεν είναι κενό, πρόκειται για νέο νήμα, έχει καταχωρηθεί θέμα, και το σενάριο πρέπει να το χειριστεί. 3. Η φόρμα υποβάλλεται ως απάντηση σε ένα υπάρχον νήμα. Εδώ η μεταβλητή $tid είναι έγκυρη και δεν απαιτείται θέμα. 65

4. Επικυρώστε το σώμα του μηνύματος. 5. Ελέγξτε αν η φόρμα συμπληρώθηκε σωστά 66

6. Δημιουργήστε ένα νέο νήμα αν πρέπει. Αν δεν υπάρχει αναγνωριστικό νήματος πρόκειται για νέο νήμα και πρέπει να εκτελεστεί ένα ερώτημα στον πίνακα threads. 67

7. Προσθέστε την εγγραφή στον πίνακα posts. 68

Αυτό το ερώτημα πρέπει να εκτελείται μόνο αν υπάρχει το αναγνωριστικό νήματος. Αν το βήμα 6 απέτυχε τότε αυτό εδώ δεν θα εκτελεστεί. 8. Ολοκληρώστε τη σελίδα. 9. Αποθηκεύστε το αρχείο με το όνομα post.php 69

70