Μηχανή αναζήτησης βασισμένη σε AJAX και Soundex. Πτυχιακή Εργασία



Σχετικά έγγραφα
Π ΤΥ Χ ΙΑ Κ Η ΕΡΓΑΣΙΑ

ΣΥΝΕΝΤΕΥΞΗ ΣΤΗΝ ΕΦΗΜΕΡΙΔΑ «ΚΡΗΤΙΚΗ ΕΝΗΜΕΡΩΣΗ» ΝΟΕΜΒΡΙΟΣ 2005

Από το ξεκίνημά του ο ΤΙΤΑΝ εκφράζει

Εγχειρίδιο Συμμετοχής σε Ψηφοφορία για την ανάδειξη Προέδρου του ΤΕΙ ΑΘΗΝΑΣ 2013

Κατερίνα Παναγοπούλου: Δημιουργώντας κοινωνικό κεφάλαιο την εποχή της κρίσης

Βουλευτικές Εκλογές 2011

Σοφία Γιουρούκου, Ψυχολόγος Συνθετική Ψυχοθεραπεύτρια

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

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

Ο «ΕΚΑΛΟΓΟΣ» ΤΟΥ ΚΑΛΟΥ ΥΠΟΨΗΦΙΟΥ

Καθηγητές στο μικροσκόπιο, ιδιώτες στην έρευνα. Ο νέος νόμος-πλαίσιο για τα πανεπιστήμια. Εφημερίδα: ΤΟ ΒΗΜΑ Ρεπορτάζ: ΜΑΡΝΥ ΠΑΠΑΜΑΤΘΑΙΟΥ

Συνέντευξη με την συγγραφέα Μαριλίτα Χατζημποντόζη!

ΣΥΖΗΤΗΣΗ ΝΟΜΟΣΧΕΔΙΟΥ ΥΠ.ΓΕΩΡΓΙΑΣ

ΕΡΓΑΣΙΑ ΤΕΧΝΟΛΟΓΙΑΣ «ΚΑΤΟΙΚΙΔΙΑ ΖΩΑ»

Έλλειψη εσωτερικής ελευθερίας

Ονοματεπώνυμο Βαθμίδα Πανεπιστήμιο Ιδιότητα. Επίκουρη Καθηγήτρια. Καθηγητής. Λέκτορας

ΤΜΗΜΑ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΤΗ ΔΙΟΙΚΗΣΗ Κ ΣΤΗΝ ΟΙΚΟΝΟΜΙΑ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΘΕΜΑ : Κατασκευή Ηλεκτρονικού Καταστήματος (e-shop) Σπουδαστές:

ΔΙΑΔΟΣΗ ΘΕΡΜΟΤΗΤΑΣ Φυσική Β' Γυμνασίου. Επιμέλεια: Ιωάννης Γιαμνιαδάκης

Ατομικό ιστορικό νηπίου

«ΣΥΝΕΝΤΕΥΞΗ ΤΟΥ ΗΜΑΡΧΟΥ ΙΛΙΟΥ, Κ. ΝΙΚΟΥ ΖΕΝΕΤΟΥ ΣΤΗΝ ΕΦΗΜΕΡΙ Α «ΜΙΤΟΣ» ΚΑΙ ΤΗ ΗΜΟΣΙΟΓΡΑΦΟ ΑΘΗΝΑ ΠΕΡΡΑΚΗ»

Το ολοκαύτωμα της Κάσου

* Από την αγγλική λέξη «boss», αφεντικό. ** «Core houses» στο πρωτότυπο, μικρά ισόγεια σπίτια ανθεκτικής κατασκευής με πρόβλεψη επέκτασης. (Σ.τ.Ε.

"Διαδικτυακή υπηρεσία πληροφοριών φαρμακείων"

ΜΗ ΤΥΠΙΚΟΤΗΤΑ ΚΑΙ ΜΗ ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ ΣΤΙΣ ΑΓΟΡΕΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

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

ΙΑΧΕΙΡΙΣΗ ΙΣΤΟΤΟΠΟΥ (Οδηγίες χρήσης και λειτουργιών) Έκδοση /10/2008

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

Σεπτέμβριος 2011: Εφημερίδα μηνός Αυγούστου, έκδ. 34 η

ΤΖΟΤΖΕΦ ΚΙΠΛΙΝΓΚ

Υποψήφιοι Σχολικοί Σύμβουλοι

ΟΜΙΛΙΑ ΠΡΟΕΔΡΟΥ Ο.Κ.Ε. κ. Χ. ΠΟΛΥΖΩΓΟΠΟΥΛΟΥ

Κύριες συντάξεις - άθλια προνοιακά φιλοδωρήματα ΣΕΛΙΔΑ 2. Θα πετσοκόψουν άμεσα και τις καταβαλλόμενες σήμερα συντάξεις ΣΕΛΙΔΑ 3

«Συλλογή, μεταφορά και διαχείριση επικίνδυνων στερεών αποβλήτων της Γ.Μ.Μ.Α.Ε. ΛΑΡΚΟ»

ΑΔΑ: ΒΕΝΔΩΗΡ-Β2Χ. Περί απευθείας μίσθωση ακινήτου για την προσωρινή αποθήκευση και μεταφόρτωση των αστικών στερεών αποβλήτων του Δήμου Τρίπολης.

ΑΠΟΦΑΣΗ 34750/2006 (Αριθμός καταθέσεως πράξεως 43170/2006) ΤΟ ΠΟΛΥΜΕΛΕΣ ΠΡΩΤΟΔΙΚΕΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΙΑΔΙΚΑΣΙΑ ΕΚΟΥΣΙΑΣ ΔΙΚΑΙΟΔΟΣΙΑΣ ΣΥΓΚΡΟΤΗΘΗΚΕ από

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

Απώλεια και μετασχηματισμοί της τραυματικής εμπειρίας. Παντελής Παπαδόπουλος

ΘΕΜΑ: «Παραθεριστικοί Οικοδοµικοί Συνεταιρισµοί. Μελέτη Περίπτωσης του «Βραχόκηπου» ήµου Γουβών Ηρακλείου Κρήτης»

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

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

ΠΤΥΧΕΣ ΤΟΥ ΣΥΓΧΡΟΝΟΥ ΦΑΙΝΟΜΕΝΟΥ ΤΗΣ ΖΩΟΛΑΤΡΙΑΣ! ΛΑΜΠΡΟΥ Κ. ΣΚΟΝΤΖΟΥ Θεολόγου - καθηγητού Δε χρειάζεται να είναι κάποιος ειδικός για να διαπιστώσει

Σε ποιες κατηγορίες μειώνεται η σύνταξη από 1/1/2009 (σε εφαρμογή του Ν.3655/2008)

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

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

ταν αρκετά αργά το πρωί όταν το σκοτάδι άρχισε να διαλύεται. Η Ζόγια Νικολάγεβνα Πέτροβα, χοντρή και σκοτεινή, περπατούσε γεμάτη αποφασιστικότητα στο

I.Επί της Αρχής του σχεδίου Νόµου: ΙΙ. Επί των άρθρων του σχεδίου Νόµου: ΕΙΣΗΓΗΤΙΚΗ ΕΚΘΕΣΗ

Όταν το μάθημα της πληροφορικής γίνεται ανθρωποκεντρικό μπορεί να αφορά και την εφηβεία.

ΣΥΝΑΣΠΙΣΜΟΣ ΡΙΖΟΣΠΑΣΤΙΚΗΣ ΑΡΙΣΤΕΡΑΣ ΕΝΩΤΙΚΟ ΚΟΙΝΩΝΙΚΟ ΜΕΤΩΠΟ ΔΕΛΤΙΟ ΤΥΠΟΥ. Εισηγητική ομιλία του Προέδρου της Κ.Ο. του ΣΥΡΙΖΑ-ΕΚΜ, Αλέξη Τσίπρα,

Συνήγορος του Καταναλωτή Νομολογία ΕφΑθ 5253/2003

Εκδήλωση προς τιμήν της Θρακιώτισσας ηρωίδας Δόμνας Βισβίζη

Ομιλία του Υφυπουργού Ανάπτυξης κου Θανάση Σκορδά στο CapitalVision 2012

ΑΣΦΑΛΙΣΗ ΑΥΤΟΚΙΝΗΤΟΥ

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

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

ΓΙΩΡΓΟΣ ΜΠΛΑΝΑΣ ΓΙΑ ΤΟΝ ΑΝΑΡΧΙΣΜΟ

Ο αρτινός συγγραφέας Γιάννης Καλπούζος, μιλάει στην «Γ», με την ευκαιρία της έκδοσης του νέου του βιβλίου

ΕΤΟΣ 16ο ΑΡΙΘ. ΦΥΛΛΟΥ 88 ΙΑΝΟΥΑΡΙΟΣ-ΜΑΡΤΙΟΣ 2006

Συµπερασµατικές σκέψεις και προτάσεις

Θεµατικές ενότητες: παρεµβάσεις και ενδεικτικές υποθέσεις. 1. Οικονοµική πολιτική. Παρεµβάσεις οικονοµικού χαρακτήρα

8 Μάρτη. Η βία κατά των γυναικών

Τοποθέτηση Δημάρχου Γ. Πατούλη. για τεχνικό πρόγραμμα 2010

Βόλος, Αρ. Πρωτ.: ΠΡΟΣ: Τον Πρόεδρο του Δημοτικού Συμβουλίου

Οι 21 όροι του Λένιν

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΝΟΜΟΣ ΗΡΑΚΛΕΙΟΥ ΔΗΜΟΣ ΓΑΖΙΟΥ

Ακίνητα: Προϋπόθεση μεταβίβασης ο ενιαίος φόρος Υποχρέωση «επόπτη» σε συμβολαιογράφους, φύλακες μεταγραφών και προϊσταμένους κτηματολογικών γραφείων

Θεσσαλονίκη: 177 πινακίδες σε 26 κόμβους... για να μη χανόμαστε στο Πανόραμα - Daveti Home Brok Thursday, 01 November :13

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

ΕΛΛΗΝΙΚΗ ΗΜΟΚΡΑΤΙΑ ΠΕΡΙΦΕΡΕΙΑ ΣΤΕΡΕΑΣ ΕΛΛΑ ΑΣ ΓΡΑΦΕΙΟ ΠΕΡΙΦΕΡΕΙΑΡΧΗ ΥΨΗΛΑΝΤΗ ΛΑΜΙΑ. Λαµία ΠΡΟΣ: Μ.Μ.Ε.

*Απόσπασμα από το βιβλίο των Σέργιου Δημητριάδη και Αλεξίας Μ. Τζωρτζάκη, ΜΑΡΚΕΤΙΝΓΚ, Αρχές, Στρατηγικές, Εφαρμογές, εκδόσεις Rosili, Αθήνα, 2010.

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

Υπηρεσία StudentsWeb ΟΔΗΓΟΣ ΣΠΟΥΔΑΣΤΩΝ ΤΟΥ ΤΜΗΜΑΤΟΣ TEXNOΛΟΓΩΝ ΠΕΡΙΒΑΛΛΟΝΤΟΣ ΓΙΑ ΤΙΣ ΗΛΕΚΤΡΟΝΙΚΕΣ ΕΓΓΡΑΦΕΣ ΚΑΙ ΔΗΛΩΣΕΙΣ ΜΑΘΗΜΑΤΩΝ

Ασυντήρητες και επικίνδυνες οικοδομές

Ηλεκτρονική διακυβέρνηση με ανθρώπινη διάσταση. Καθηγητής B. Ασημακόπουλος

ΟΜΙΛΙΑ ΣΤΗ ΣΥΓΚΕΝΤΡΩΣΗ ΤΟΥ ΣΥΝΔΙΚΑΤΟΥ ΜΕΤΑΛΛΟΥ ΓΙΑ ΤΟ ΑΤΥΧΗΜΑ ΣΤΗ ΧΑΛΥΒΟΥΡΓΙΑ. 9/12/2014, Αγ. Νικόλαος

ΠΡΩΤΟΣ ΕΠΕΡΩΤΩΝ ΕΥΑΓΓΕΛΟΣ ΜΠΑΣΙΑΚΟΣ (ΕΛΑΙΟΚΑΛΛΙΕΡΓΙΑ)

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

ΜΟΥΣΕΙΟ ΚΑΠΝΟΥ ΚΑΒΑΛΑΣ ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ

Περίοδος της Μεγάλης Τεσσαρακοστής Ο Ιησούς περπατά στους δρόμους μας, έρχεται στα σπίτια μας για να μας προσφέρει την πίστη

ΟΡΟΙ ΚΑΙ ΠΡΟΫΠΟΘΕΣΕΙΣ

Ένα βιβλίο βασισμένο στο μυθιστόρημα της Λενέτας Στράνη «Το ξενοπούλι και ο Συνορίτης ποταμός»

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

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ Σχ ολή Διοίκησή και Οικονομίας Τμήμα Λογιστική

Συνοπτική Παρουσίαση. Ελλάδα

ΤΟ ΦΩΣ ΤΩΝ ΠΛΑΝΩΝ ΑΣΤΕΡΙΩΝ 11. Πριν...

ΚΕΦΑΛΑΙΟ 3 ο ΤΟ ΜΕΛΛΟΝ ΤΗΣ ΕΥΡΩΠΑΪΚΗΣ ΕΝΩΣΗΣ. 3.1 Εισαγωγή

Τίτλος Ειδικού Θεματικού Προγράμματος: «Διοίκηση, Οργάνωση και Πληροφορική για Μικρο-μεσαίες Επιχειρήσεις»

Παραμυθιά Τάξη Α Μάστορα Έλλη

Πρακτικό 1/2012 της συνεδρίασης της Δημοτικής Επιτροπής Διαβούλευσης του Δήμου Λήμνου,

ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΗ ΛΟΓΙΣΤΙΚΗ

Η χορεύτρια. Τοιχογραφία από τα διαμερίσματα της βασίλισσας

11. ΚΩΔΙΚΑΣ ΔΕΟΝΤΟΛΟΓΙΑΣ ΕΙΣΑΓΩΓΗ

ΕΛΕΥΘΕΡΟΤΥΠΙΑ - 24/11/2007

Παραμονή Παγκόσμιας Ημέρας Αντικαταναλωτισμού*, 28 Νοεμβρίου 2008

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

Ο αθλητισμός εμπνέεται από την ειρήνη. Η ειρήνη εμπνέεται από τον αθλητισμό.

ΟΜΙΛΙΑ ΤΟΥ ΠΡΟΕΔΡΟΥ ΤΗΣ Κ.Ο. ΤΟΥ ΣΥΡΙΖΑ / ΕΚΜ, ΑΛΕΞΗ ΤΣΙΠΡΑ ΣΤΗΝ ΠΑΝΕΛΛΑΔΙΚΗ ΣΥΝΔΙΑΣΚΕΨΗ ΤΟΥ ΣΥΡΙΖΑ / ΕΚΜ

Στο Δηµόσιο Σχολείο «µας»...

Το σχέδιο έχει ως βάση ένα ενιαίο σύστημα κλειστών αγωγών το οποίο εκτείνεται

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

Transcript:

ΒίΟΜηγανικτί Πλΐΐοοφορική Τ.Ε.Ι. ΚΑΒΑΛΑΣ Μηχανή αναζήτησης βασισμένη σε AJAX και Soundex Πτυχιακή Εργασία llai')/>oc Ντυαένο^ Επιβλέττων Κ αθηγητής: Δμ Στέλιος Παπαδάκης ΚΑΒΑΛΑ 2008

Βιοαΐίγανίκή ΠληροφορικτΙ Τ.Ε.1. ΚΑΒΑΛΑΣ Θέίΐα ΠτυγιακΊΐς: Δημιουργία ιστοσελίδας που θα προσφέρει υπηρεσίες τη/χφο^νικού καταλόγου και άλλων προσωπικών πληροφοριών με χρήση των μηχανισμών Ajax και Soundex. Υλοποίηση: Ντυμένος Παύλος Α.Ε.Μ. : 102 Επιβλέπων Καθηγητής: Στέλιος Παπαδάκης Ημερομηνία ολοκλήρωσης: 10 / 04 / 2008 Απρίλιος 2008

ΠΡΡΙΓ.ΧΟΜΕΝΑ Κεφάλαιο 1. - Εισαγωγή...^ 1.1. Αντικείμενο εργασίας... ^ 1.2. Εργαλεία που χρησιμοποιήθηκαν... Κεφάλαιο 2. - Το Ajax... ο 2.1. Τι είναι το Ajax... 2.2. Η διαφορετικότητα του Ajax... 2.3. Η Αίτηση (HTTP Request)...13 2.3.1. Δημιουργία του αντικειμένου...13 2.3.2. Αποστολή αίτησης...13 2.3.3. Κατάσταση ετοιμότιιτας...13 2.3.4. Κωδικοί κατάστασης...16 2.4. Η απόκριση - JSON...1^ 2.5. Δημιουργία της μηχανής Ajax... 21 Κεφάλαιο 3. - Το Soundex...28 3.1. Τι είναι το Soundex... 28 3.2. Πως λειτουργεί... 29 3.2.1. Περιληπηκά...29 3.2.2. Αναλυηκά...29 3.3. Παραδείγματα Soundex... 33 3.4. Η συνάρτηση mysoundex... 35 Κεφάλαιο 4. - Η Αναζήτηση...37 4.1. Σύντομη περιγραφή... 37 4.2. Αναλυτική περιγραφή... 38 4.2.1. Συλλογή και αποστολή δεδομένων... 38 4.2.2. Επεξεργασία αίτησης... 40 4.2.3. Εμφάνιση αποτελεσμάτων... 46 Κεφάλαιο 5. - Εγγραφή... 48 5.1. Φόρμα εγγραφής...48 5.2. Επτλογή ονόματος χρήστη-usemame... 49 5.3. Ετηλογή κωδικού πρόσβασης... 50 5.4. Εισαγωγή ηλεκτρονικής διεύθυνσης... 51 5.4.1. Έλεγχος εγκυρότητας... 51 5.4.2. Έλεγχος ταύτισης... 52 5.4.3. Έλεγχος διαθεσιμότητας... 52 5.5. Εισαγωγή προσωπικών στοιχείων... 53 5.6. Εισαγωγή τηλεφώνων... 53 5.7. Ολοκλήρωση εγγραφής... 54

Κεφάλαιο 6. - Σύνδεση - Log In... 55 6.1. Σύνδεση χρήστη... 55 6.2. Υπηρεσία Αντικατάστασης Χαμένου Κωδικού...56 6.3. Λογαριασμοί... 57 Κεφάλαιο 7. - Συμπεράσματα... 59 7.1. Αποτελέσματα... 59 7.2. Τελικά συμπεράσματα...59 Κεφάλαιο 8. - Κώδικας... 61 8.1. Αρχειοθέτηση... 61 8.2. Βάση δεδομένων... 63 8.3. Κώδικας... 65 Κεφάλαιο 9. - Βιβλιογραφία...165

ΚΕΦΑΛΑΙΟ 1 Εισαγωγή 1.1. Αντικείμενο εργασίας ο στόχος αυτής της πτυχιακής είναι η κατασκευή μιας αυτόνομης ιστοσελίδας που θα προσφέρει υπηρεσίες τηλεφωνικού καταλόγου. Το πλεονέκτημα αυτής της ιστοσελίδας είναι ότι στον μηχανισμό της έχουν εισαχθεί τεχνολογίες που προσφέρουν μια βελτιωμένη εμπειρία στο χρήστη σε σχέση με άλλες αντίστοιχες εφαρμογές. Οι τεχνολογίες αυτές βελτιώνουν τη διαδραστικότητα αλλά και την ευκολία με την οποία ο χρήστης χειρίζεται την εφαρμογή. Σκοπός λοιπόν αυτής της πτυχιακής, όπως αναφέραμε παραπάνω, είναι να προσφέρουμε υπηρεσίες τηλεφωνικού καταλόγου, έχει όμως μεγάλη σημασία να τονίσουμε τον τρόπο με τον οποίο θα προσφέρονται αυτές οι υπηρεσίες και που ως αποτέλεσμα έχουν την ευκολία με τη\' οποία ο χρήστης θα αναζητά πληροφορίες μέσω αυτής της εφαρμογής. Ο χρήστης είτε εγγεγραμμένος ή απλά επισκέπτης θα μπορεί να αναζητά πληροφορίες που αφορούν τηλεφωνικούς αριθμούς, ηλεκτρονικές διευθύνσεις κ.α. για κάτιοιο συγκεκριμένο άτομο. Η αναζήτηση αυτιί πραγματοποιείται αυτόματα με την εισαγωγή κάποιου κριτηρίου στο χκδίο αναζήτησης, χωρίς να πατηθεί το πλήκτρο enter ή κάποιο αντίστοιχο κουμπί submit. Το πραγματικό πλεονέκτημα αυτής της εφαρμογής είναι ότι μπορεί να «συγχωρεί» ορθογραφικά λάθη και να εμφανίζει στο χρήστη τις πληροφορίες που επιθυμεί άσχετα αν το κριτήριό του αναζήτησης ήταν ανορθόγραφο. Η εφαρμογή μάλιστα δεν είναι απλά σε θέση να επιστρέφει αποτελέσματα ενώ έχουμε κάνει λάθος στην ορθογραφία ενός ονόματος, αλλά μπορεί να μας εμφανίσει ονόματα που ακούγονται παρόμοια με αυτό που αναζητάμε! Ο χρήστης θα είναι σε θέση με τη χρήση ενός slider να ρυθμίζει την ένταση της «ανεκτικότητας» λαθών ή τη δύναμη της αναζήτησης σχεηκά με το να επιστρέφει παρόμοια προφερόμενα ονόματα. Η αμεσότητα της αναζήτησης οφείλεται στη μηχανή AJAX (Asynchronous JavaScript And XML) μέσω της οποίας η ιστοσελίδα ενημερώνεται δυναμικά, δηλαδή σε κάθε αναζήτηση η σελίδα ενημερώνεται μόνο στο πεδίο που εμφανίζονται τα αποτελέσματα και όχι ολόκληρη. Με αυτόν τον τρόπο δημιουργούμε μια πιο γρήγορη εφαρμογή τόσο για τον εξυπηρετητή (server) αλλά όσο και για τον χρήστη.

Η ευκολία της αναζήτησης οφείλεται στον μηχανισμό Soundex ο οποίος δίνει το πλεονέκτημα στον χρήστη να του εμφανίζει τα αντίστοιχα αποτελέσματα ακόμα και αν δεν γνωρίζει τη σωστή ορθογραφία του ονόματος που αναζητά. Επίσης μέσω της ρύθμισης της ευαισθησίας της αναζήτησης μπορεί να πάρει αποτελέσματα που ακούγονται παρόμοια με το όνομα που έχει εισάγει ως κριτήριο. Συνδυάζοντας λοιπόν αυτές τις δύο τεχνολογίες ο χρήστης είναι στην ευχάριστη θέση να απολαμβάνει την ευκολία, την αμεσότητα, την ταχύτητα και τη διαδραστικότητα που προσφέρει μια νέας γενιάς αναζήτηση δίνοντάς του την εμπειρία όχι μιας στατικής ιστοσελίδας αλλά μιας διαδραστυαίς εφαρμογής που δικαιωματικά μπορεί να ενταχθεί στην νέα οικογένεια διαδικτυακών εφαρμογών γνωστή ως WEB2. 1.2. Εργαλεία που χρησιμοποιήθηκαν Για την υλοποίηση αυτής της πτυχιακής χρησιμοποιήθηκαν αρκετά προγράμματα. Τα κυριότερα από αυτά είναι τα ακόλουθα: 1.2.1. ΧΑΜΡΡ Το ΧΑΜΡΡ είναι ένα δωρεάν πρόγραμμα που εγκαθιστά τα απαραίτητα εργαλεία για να λειτουργήσει μια ιστοσελίδα. Τα κυριότερα εργαλεία που εγκαθιστά είναι: Apache HTTP Server, MySQL Database, το phpmyadmin καθώς και τις γλώσσες ΡΗΡ και Perl. Το όνομά του είναι ακρωνύμια των λέξεων: X (το οποίο συμβολίζει το X, και σημαίνει οποιοδήποτε από τα 4 λειτουργικά συστήματα: Windows, Linux, MacOS, Solaris) MySQL PHP Perl O Apache HTTP Server γνωστός και απλά ως Apache είναι ένας εξυπηρετητής του παγκόσμιου ιστού (web). Η MySQL Database είναι η βάση δεδομένων που χρησιμοποιείται. Το phpmyadmin είναι μια εφαρμογή με τιιν οποία μπορεί κανείς να διαχειριστεί πολύ εύκολα τη βάση δεδομένων του, όπως για παράδειγμα να δημιουργήσει, να τροποποιήσει, να διαγράψει ή και να αντιγράψει πίνακες.

Η έκδοση του ΧΑΜΡΡ που χρησνμοττοιήθηκε είναι η 1.6.5 η οποία περιλαμβάνει και εγκαθιστά τα εξής: + Apache 2.2.6 + MySQL 5.0.51 + ΡΗΡ 5.2.5 + ΡΗΡ 4.4.7 + PEAR + PHP-Switch Win32 1.0 + ΧΑΜΡΡ Control Version 2.5 from www.nat32.com + ΧΑΜΡΡ Security 1.0 + SQLite 2.8.15 + OpenSSL 0.9.8g + phpmyadmin 2.11.3 + ADOdb 4.96 + Mercury Mail Transport System v4.52 + FileZilla FTP Server 0.9.24 + Webalizer 2.01-10 + Zend Optimizer 3.3.0 + eaccelerator 0.9.5.2 for PHP 5.2.5 (comment out in the php.ini) a ΧΑΜΡΡ httd://w w w.a D a c h e fr ier ^ cn/xam pp.htm l 1.2.2. Dreamweaver 8.02 Με το πρόγραμμα αυτό υλοποιήθηκε όλος ο απαραίτητος κώδικας που αποτελεί την ιστοσελίδα. Κατά την υλοποίηση της σελίδας χρησιμοποιηθήκαν επίσης και άλλα προγράμματα όπως τα Programmers Notepad και το PSPad Editor (έκδοση 4.5.3). Και τα δύο αυτά προγράμματα προσφέρονται δωρεάν. Επίσης πρέτιει να αναφέρουμε ότι μια σύγκριση ανάμεσα σε αυτά τα τρία προγράμματα είναι μάλλον ατυχής γιατί το Dreamweaver δεν είναι μια δωρεάν εφαρμογή σε αντίθεση με τα άλλα δύο. Εξάλλου το Dreamweaver δημιουργήθηκε αποκλειστικά για να καλύψει πς ανάγκες δημιουργίας ιστοσελίδων, ενώ το Programmers Notepad και το PSPad Editor δεν επικεντρώνονται σε συγκεκριμένο τύπο κώδικα. Είναι σημαντικό επίσης να αναφέρουμε όη το Programmers - 7 -

Notepad κατά τη δημιουργία αρχείων σε UTF8 κωδικοποίηση εισάγει τον χαρακτήρα ΒΟΜ. κάτι που δημιουργεί σίγουρα προβλήματα στη δημιουργία κώδικα σε ΡΗΡ γλώσσα. 1.2.3. Paint.Net Ένα ακόμα πρόγραμμα που χρησιμοποιήθηκε κατά ττ ν υλοποίηση της ιστοσελίδας ήταν το Paint.Net. Το Paint.Net είναι ένα πρόγραμμα επεξεργασίας εικόνας και παρέχεται δωρεάν. Πρόκειται για μια αρκετά καλή εφαρμογή η οποία μπορεί να δεχτεί plugins και να επεκτείνει τις δυνατότητές της. Σίγουρα δεν αποτελεί την καλύτερη λύση στη δημιουργία γραφικών αλλά παρέχει αρκετά καλά εργαλεία για να ετητύχει κάποιος το ετηθυμητό αποτέλεσμα. Με αυτό το πρόγραμμα δημιουργήθηκαν ή επεξεργάστηκαν πολλές εικόνες της ιστοσελίδας. Ένα χαρακτιιριστικό παράδειγμα εικόνας που δημιουργήθηκε εξολοκλήρου με το Paint.Net είναι το λογότυπο της ιστοσελίδας. Εικόνα: Λογότυπο ιστοσελίδας llb 'p a in t.p if it http://www.getpaint.net/

ΚΕΦΑΛΑΙΟ 2 To AJAX 2.1. Τι είναι το AJAX To AJAX είναι αρκτικόλεξο των λέξεων Asynchronous JavaScript And XML. Στην ουσία όταν αναφερόμαστε στον όρο AJAX δεν ετηκεντρωνόμαστέ σε μία συγκεκριμένη τεχνολογία αλλά σε ένα σύνολο τεχνολογιών που συνεργάζονται με σκοπό τη δημιουργία διαδραστικών διαδικτυακών εφαρμογών. Το κυριότερο χαρακτηριστικό του AJAX είναι η αυξημένη διαδραστικότητα και η ανταπόκριση των ιστοσελίδων η οποία επιτυγχάνεται με την ανταλλαγή μικρού όγκου δεδομένων με τον εξυπηρετητή (server) στο παρασκήνιο. Με αυτόν τον τρόπο δεν απαιτείται να φορτωθεί ολόκληρη η ιστοσελίδα ξανά κάθε φορά που παραλαμβάνουμε νέα δεδομένα από τον εξυτιηρετητή, έτσι επιτυγχάνουμε να αυξήσουμε τη διαδραστικότητα. την ταχύτητα και την ευχρηστία της ιστοσελίδας. Το AJAX λειτουργεί ασύγχρονα δηλαδή ο μικρός όγκος δεδομένων που ανταλλάσσεται με τον εξυπηρετητή και φορτώνεται στο παρασκήνιο είναι ανεξάρτητο από την απεικόνιση και τη συμπεριφορά της υπόλοιπης σελίδας. Η γλώσσα στην οποία υλοποιείται ο πυρήνας του AJAX είναι η JavaScript και ο πυρήνας του θεωρείται το αντικείμενο XMLHtrpReauest το οποίο είναι διαθέσιμο σε όλους τους σύγχρονους browsers. Επίσης άσχετα με την ονομασία του AJAX η μορφή των ασύγχρονα μεταφερόμενων δεδομένων δεν είναι απαραίτητο να είναι σε XML. Μια άλλη πολύ δημοφιλής και ίσως καλύτερη μορφή από την XML είναι η JSON. Η λέξη JSON σχηματίζεται από τις λέξεις JavaScript Object Notation To AJAX μπορεί να χρησιμοποιηθεί σε πολλά λειτουργικά συστήματα, αρχιτεκτονικές, και web browser γιατί είναι βασισμένο σε «ανοιχτά» πρότυπα (open standards) όπως είναι η JavaScript και το DOM (Document Object Model). - 9 -

Για να λειτουργήσει το AJAX χρησιμοποιεί ένα συνδυασμό από: XHTML (ή HTML) και δεδομένων για το σχεδιασμό και την εμφάνιση των απεσταλμένων Το DOM το οποίο διαχειρίζεται μεσω μίας γλώσσας που εκτελείται στον πελάτη (client-side scripting language), κυρίως την JavaScript ή την JScript, για να μεταβάλλει δυναμικά και διαδραστικά το μέρος της σελίδας που μας ενδιαφέρει. Το αντικείμενο XMLHttpReauest το οποίο χρησιμοποιείται για να γίνει η ανταλλαγή των δεδομένων ασύγχρονα με τον εξυπηρετητή. XML η οποία είναι η μορφή με τιιν οποία συνηθίζεται να μεταφέρονται τα δεδομένα από τον εξυπηρετητή (server) στον πελάτη (client), παρόλα αυτά και άλλες μορφές δεδομένων είναι αποδεκτές και μπορούν να λειτουργήσουν με το AJAX. Τέτοιες μορφές είναι η JSON. απλό κείμενο ή HTML. Αυτά τα αρχεία δημιουργούνται δυναμικά από κάποιο script που εκτελείται στον server (server-side scripting). client (X)HTML/CSS JavaScript (X)HTML Μηχανισμός Ajax Αίτηση HTTP Μέθοδος GET server Εικόνα: Μοντέλο Ajax

2.2. Η διαφορετικότητα του Ajax Το Ajax ουσιαστικά αποτελεί ένα ολόκληρο επίπεδο που παρεμβόώ^χται ανάμεσα στον χρήστη (client) και στον εξυπηρετητή (server). Αν και η ιδέα της πρόσθεσης ενός επιπ>χον επιπέδου δημιουργεί την εντύπωση πως θα επιβαρύνει την εφαρμογή στην πραγματικότητα μπορούμε να πούμε ότι συμβαίνει το αντίθετο. Στην κλασσική αρχιτεκτονική η ετηκοινωνία με το server γίνεται σύγχρονα και αποτελείται από τα εξής απλά βήματα: Ορίζετε μια σε).ίδα για κάθε γεγονός στην εφαρμογή Κάθε γεγονός ή εΐ έργεια στέλνει πίσω στον browser μια πλήρη σε>.ίδα Η σελίδα αυτή αποδίδεται στο χρήστη JavaScript call ^ HTML+CSS ijata Ajax engine f HTTP request 'Ms) : I Webserver f web and/or xml server Ψ f classic web application model Ajax web application model Εικόνα: Σύγκριση κλασσικού και μοντέλου Ajax

To Ajax παρέχει μία καινούρια αρχιτεκτονική, στην οποία η επικοινωνία με τον server γίνεται ασΐιγχρονα. Τα βασικά βήματα της αρχιτεκτονικής Ajax είναι: H μηχανή Ajax μπορεί να ενεργοποιηθεί με οποιαδήποτε ενέργεια του χρήστη: Οι σύγχρονοι φυλλομετρητές αντιλαμβάνονται κάθε ενέργεια (event) του χρήσττι που μπορούν αντιλαμβάνεται και το λειτουργικό σύστημα. Τέτοιες ενέργειες μπορεί να είναι το πάττ μα ενός κουμπιού, η κίνηση και η θέση του δείκτη του ποντικιού και πολλά άλλα. Μικρά γεγονότα (events) στην πλευρά του διακομιστή: Τα αντικείμενα της εφαρμογής αποστέλλουν μικρές αιτήσεις στον διακομιστή, λαμβάνουν κάποιες πληροφορίες και προσαρμόζουν τη σελίδα στην οποία αλλάζει το DOM. Δε γίνεται πλήρης ανανέωση της σελίδας, αλλά η σελίδα ενημερώνεται τοπικά. Ασύγχρονη λειτουργία: Οι αιτήσεις που αποστέλλονται στον server δεν προκαλούν συμφόρηση του φυλλομετρητή. Ο χρήστης μπορεί να χρησιμοποιεί άλλα τμήματα της εφαρμογής και μόλις μία αίτηση ολοκληρωθεί η εφαρμογή ενημερώνει το χρήστη. classic web application model (synchronous) Εικόνα: Σύγκριση κλασσικού και μοντέλου Ajax - 12-

2.3. Η Αίτηση (HTTP Request) 2.3.1. Δημιουργία του αντικειμένου Για να γίνει μία αίτηση Ajax μέσω JavaScript απαιτείται ένα ανπκείμενο που ονομάζεται XMLHttDRequest. Το αντικείμενο αυτό είναι ενσωματωμένο σε όλους τους σύγχρονους φυλλομετρητές (browsers) όπως στους Firefox, Safari. Opera αλλά και στον Internet Explorer 7. Σε παλιότερες εκδόσεις του Internet Explorer δε χρησιμοποιείται αυτό το αντικείμενο αλλά ένα ActiveX αντικείμενο, το XMLHTTP. Για να μπορούν όμως οι εφαρμογές μας να λειτουργούν στους περισσότερους φυλλομετρητές θα τφέπει να μπορούμε να δημιουργήσουμε και τα δύο αντικείμενα ανάλογα με το φυλλομετρητή που τρέχει τη σελίδα. Ένας απλός τρόπος για να το πετύχουμε αυτό είναι ο παρακάτω κώδικας; function makerequest(url) var httprequest; if (window.xmlhttprequest) // IE7, Mozilla, Safari,... httprequest = new XMLHttpRequest); ) else if (window.activexobject) // IE6,IE5 httprequest = new ActiveXObject("Microsoft.XMLHTTP"); I sendrequest(url); Όπως φαίνεται από τον παραπάνω κώδικα η δημιουργία του αντικειμένου είναι μία αρκετά απλή εργασία. Για να το πετύχουμε δημιουργούμε μία μέθοδο με το όνομα makerequest με την οποία αρχικά ορίζουμε το κατάλληλο αντικείμενο ανάλογα με τον browser που χρησιμοποιούμε και στη συνέχεια μπορούμε να πραγματοποιήσουμε μία αίτηση. Η αποκρυπτογράφησιι του είδους του αντικειμένου που χρησιμοποιεί ο browser γίνεται με τη δημιουργία μίας συνθήκης η οποία ελέγχει για το εγγενές αντικείμενο XMLHTTPRequest (Firefox. Safari. Opera, Internet Explorer 7). Av το αντικείμενο αυτό δεν είναι διαθέσιμο τότε ελέγχουμε για το ActiveXObject (Internet Explorer).

Αφού έχει προσδιοριστεί ο σωστός τύπος αντικειμένου για το τρέχων πρόγραμμα περιήγησης, το σωστό αντικείμενο αποκτά στιγμιότυπο και δημιουργείται ένα αντικείμενο αίτησης. Αυτό το αντικείμενο μπορεί τώρα να χρησιμοποιηθεί για πρόσβαση σε όλες τις ιδιότητες και μεθόδους που διαθέτει. Οι ιδιότητες και οι μέθοδοι αυτού του αντικειμένου φαίνονται στους παρακάτω τήνακες. Ιδιότητες onreadystatechange readystate responsetext responsexml status statustext Ορισμοί Ένας χειρισμός συμβάντος που πυροδοτείται όταν η κατάσταση του αντικειμένου αίττ σης αλλάζει. Επιστρέφει αριθμητικές τιμές που δηλώνουν την τρέχουσα κατάσταση του αντικειμένου. Έκδοση ακολουθίας χαρακτήρων της απόκρισης από τον server Αντικείμενο εγγράφου συμβατού με το DOM της απόκρισης από τον server. Κωδικός κατάστασης της απόκρισης από τον server. Μήνυμα κατάστασης επιστρεφόμενο ως ακολουθία χαρακτήρων. Λίστα μεθόδων του αντικειμένου XMLHTTPRequest Μέθοδοι Abort() getallresponseheaderso getresponseheader( label ) Ορισμοί Ακυρώνει την τρέχουσα αίτηση HTTP. Ανακτά τις τιμές όλων των επικεφαλίδων HTTP. Ανακτά την τιμή μιας καθορισμένης επικεφαλίδας HTTP από το σώμα της απόκρισης. Open( method, URL [, asyncflag[, ' usemame [, password ]]]) Αποστέλλεται μία αίτηση MSXML2.XMLHTTP ή Microsoft.XMLHTTP και καθορίζει την μέθοδο, το URL και τις πληροφορίες πιστοποίησης για την αίτηση. Send(content) SetRequestHeader( label, value ) Αποστέλλει μία αίτηση HTTP στον server και λαμβάνει μια απόκριση. Καθορίζει την τιμή μιας επικεφαλίδας HTTP με βάση την ετικέτα.

2.3.2. Αποστολή αίτησης Αφού δημιουργήσουμε το αντικείμενο τότε είμαστε έτοιμοι να προχωρήσουμε στο επόμενο βήμα που είναι η αποστολή της αίτησης. Η αποστολή των δεδομένων γίνεται με την μέθοδο send(). Πριν όμως στείλουμε την αίτηση πρέπει να χρησιμοτιοιήσουμε τη μέθοδο open). Η μέθοδος open() του αντικειμένου XMLHTTPRequest αρχικοποιεί την αίτηση και δέχεται τρεις παραμέτρους. Η πρώτη είναι μία ακολουθία χαρακτήρων που ανατιαριστά τη μέθοδο με την οτιοία πρόκειται να αποσταλεί η αίτηση. Αυτή η μέθοδος μπορεί να είναι GET. POST ή PUT. Η δεύτερη παράμετρος είναι το URL το οποίο δείχνει τη σε^.ίδα στην οποία περιλαμβάνεται ο κώδικας που θα εκτελεστεί στη πλευρά του server και από τον οποίο θα παραχθεί μια ακολουθία χαρακτήρων. Η τελευταία παράμετρος είναι εκείνη που δημιουργεί την ασύγχρονη επικοινωνία. Η παράμετρος αυτή είναι μια Boolean τιμή (true, false) και καθορίζει τον τύπο της ετηκοινωνίας. Αν η τιμή αυτή είναι true τότε η επικοινωνία θα είναι ασύγχρονη, ενώ αν είναι false, κάτι που δε συνίσταταη τότε η επικοινωνία θα είναι σύγχρονη. Στην περίπτωση που δεν καθορίσουμε αυτή την παράμετρο η μετάδοση θα είναι ασύγχρονη. Η χρήση των δύο αυτών μεθόδων φαίνεται παρακάτω: request.open( GET, url, true); request.send(null); 2.3.3. Κατάσταση Ετοιμότητας To αντικείμιενο XMLHTTPRequest από τη στιγμή που δημιουργείται μέχρι τη στιγμή που ολοκληρώνεται η αίτηση μεταβαίνει σε διάφορες καταστάσεις. Κατά τη μετάβαση από τη μια κατάσταση στην άλλη μεταβάλλεται και η τιμή της ιδιότητας readystate. Οι τιμές αυτής της ιδιότητας κυμαίνονται από το μηδέν μέχρι το τέσσερα και αντιπροσωπεύουν την κατάσταση στην οποία βρίσκεται το αντικείμενο. Οι τιμές και οι ερμηνείες της "readystate παρουσιάζονται στον παρακάτω πίνακα:

Λίστα των τιμών readystate Τιμές readystate Ερμηνείες Ορισμοί 0 Χωρίς αρχική τιμή Το αντικείμενο δεν έχει αρχική τιμή με δεδομένα 1 Φόρτωση Το αντικείμενο φορτώνει τα δεδομένα του 2 Φορτώθηκε Το αντικείμενο έχει ολοκληρώσει τη φόρτωση των δεδομένων του 3 Διαδραστικό 0 χρήστης μπορεί να αλληλετηδράσει με το αντικείμενο ακόμη κι αν δεν έχει φορτωθεί πλήρως. 4 Ολοκληρωμένο Το αντικείμενο έχει ξεκινήσει πλήρως 2.3.4. Κωδικοί Κατάστασης Η κατάσταση της αίτησης στην οποία βρίσκεται το αντικείμενο XMLHTTPRequest είναι ίδια με την κατάσταση HTTP του αρχείου που ζητείται. Οι κωδικοί κατάστασης HTTP αναπαριστούν την απόκριση του εξυπηρετητή όταν ζητείται κάποιο αρχείο. Οι κωδικοί κατάστασης χωρίζονται σε πέντε καττ γορίες οι οποίες είναι: Λίστα κωδικών κατάστασης HTTP Κατηγορία κωδικού κατάστασης Ιχχ 2χχ Κατάσταση Πληροφοριακή Επιτυχής 3 XX Ανακατεύθυνση 4χχ 5χχ Σφάλμα πελάτη (client) Σφάλμα εξυπηρετητή (server)

Γνωρίζοντας τον κωδικό κατάστασης ενός αντικειμένου XMLHTTPRequest γνωρίζουμε παράλληλη αν η αίτησή μας εκτελέστηκε με επιτυχία ή συνέβη κάποιο σιρά>νμα. Αν λοιπόν πραγματοποιήσουμε μία αίτηση εξετάζοντας την τιμή της readystate και του κοιδικού κατάστασης δηλαδή την ημή της ιδιότητας status, τότε έχουμε π^,ήρη εικόνα για το αντικείμενό μας και την απάντηση που τιεριμένουμε από αυτό. Ας τιαρουσυίσουμε δυο απλά παραδείγματα: Παράδειναα 1 : Υποθέτουμε πως πραγματοποιούμε μία αίτηση και σε κάποια συγκεκριμένη στιγμή το αντικείμενό μας έχει: readystate = 4 status = 200 Τότε σημαίνει πως π αίτηση έγει ολοκ>,τιοωθεί επιτυγώς χωρίς κανένα σφάλμα. ΠαράδείΎαα 2'*: Στην περίπτωση όμως που είχαμε τις εξής τιμές : readystate = 4 status = 404 τότε σημαίνει πως η αίτησή μας έχει ολοκληρωθεί αλλά με κάποιο σφάλμα. Το σιράλμα αυτό ίσως μας θυμίζει τον κωδικό σφάλματος που ετηστρέφεται όταν ζητάμε από τον browser μια σελίδα που δεν υπάρχει. Αυτό φυσικά δεν είναι τυχαίο καθώς ο κωδικός αυτός αντιπροσωπεύει την απόκριση File Not Found. Με λίγα λόγια λοιπόν η αίτησή uac τερρατίστηκε αλλά το αργείο που Cnτoύσα^ε δεν βρέθηκε. Οι δύο αυτές ιδιότητες του αντικειμένου θα αποδειχθούν πολύ χρήσιμες τόσο για τον προγραμματιστή όσο και για τον απλό χρήστη της web ειραρμογής. Ο προγραμμαηστής είναι σε θέση να γνωρίζει αν οι αιτήσεις διεξάγονται κανονικά και μπορεί να εγείρει το κατάλληλο συμβάν ανάλογα με την τιμή της readystate. Ο τελικός χρήστης μπορεί να παίρνει τα κατάλληλα μηνύματα επιτυχημένης ή αποτυχημένης αίτησης.

2.4. Η Απόκριση - JSON Αφού αποσταλεί η αίτηστ), κάποια στιγμή θα λάβουμε την απόκριση από τον server. H, απόκριση μιας αίτησης Ajax μπορεί να είναι σε πολλές μορφές ανταλλαγής δεδομένων. Τέτοιες μορφές είναι η XML. η JSON, απλό κείμενο και άλλες. Οι συνηθέστερες είναι δύο, η ευρύτερα αποδεκτή XML και η JSON. JSON To JSON ή JavaScript Object Notation είναι ένα ελαφρύ πρότυπο ανταλλαγής δεδομένων το οποίο βασίζεται πάνω σε ένα υποσύνολο της γλώσσας προγραμματισμού JavaScript (Standard ECMA-262 Έκδοση 3η - Δεκέμβριος 1999). Η μορφή JSON μπορεί να διαβαστεί αλλά και να συνταχτεί εύκολα από τους ανθρώπους (human readable). Είναι επίσης εύκολο να αναλυθεί (parse) και να παραχθεί (generate) από ης μηχανές. Το JSON είναι ένα πρότυπο κειμένου το οποίο είναι τελείως ανεξάρτητο από γλώσσες προγραμματισμού αλλά χρησιμοποιεί πρακτικές (conventions) οι οποίες είναι γνωστές στους προγραμματιστές της οικογένειας προγραμματισμού C, συμπεριλαμβανομένων των C, C++, C#, Java, JavaScript, Perl, Python, και πολλών άλλων. Αυτές οι ιδιότητες κάνουν το JSON μια ιδανική γλώσσα προγραμματισμού ανταλλαγής δεδομένων. Η μορφή αυτή καθίσταται όλο και περισσότερο αποδεκτή ως μία βιώσιμη μορφή για εφαρμογές Ajax. Στην ουσία αποτελεί έναν συνδετικό τήνακα ή πίνακα hash δηλαδή αποτελείται από ονόματα ή ετικέτες οι οποίες συσχετίζονται με τιμές σε μια δομή πίνακα ή λίστας διαχωρισμένη με κόμματα. Η ανάλυση της μορφής JSON υποστηρίζεται εγγενώς με τη μέθοδο eval της JavaScript, που την καθιστά εξαιρετικά απλή για ανάλυση όταν χρησιμοποιείται στις εφαρμογές Ajax. Το μειονέκτημα είναι ότι η ανάλυστ μπορεί να είναι αρκετά αργή, αλλά και αρκετά επισφαλής λόγω αυτής της μεθόδου (eval). Αυτό όμως δε σημαίνει πως με τη χρήση της μορφής JSON δεν μπορούμε να δημιουργήσουμε ασφαλείς εφαρμογές Ajax. Η ασφάλεια της εφαρμογής μπορεί να αυξηθεί σημαντικά με την εισαγωγή κρυπτογραφημένων κωδικών πρόσβασης στις αιτήσεις Ajax. Το JSON είναι χτισμένο σε δύο δομές: Μία συλλογή από ζευγάρια ονομάτων/τιμών. Σε διάφορες γλώσσες προγραμματισμού αυτό μπορεί να ισοδυναμεί με ένα ένα αντικείμενο, μία καταχώριση, μία δομή, έναν πίνακα hash (hash table), μία λίστα κλειδιών, ή έναν associative Μία ταξινομημένη λίστα τιμών. Στις περισσότερες γλώσσες προγραμματισμού, αυτό ισοδυναμεί με έναν πίνακα (array), ένα διάνυσμα, μία λίστα ή μία ακολουθία. - 18-

Αυτά είναι τα Universal Data Structures. Ουσιαστικά όλες οι μοντέρνες γλώσσες προγραμματισμού τα υποστηρίζουν με τον έναν ή τον άλλον τρόπο. Όλοι οι τύποι δεδομένων JSON αναπαρίστανται από ένα όνομα ή ετικέτα ιος μία τιμή ακολουθίας χαρακτήρων ακολουθούμενη από άνω και κάτω τελεία. Τα δομικά στοιχεία από τα οποία μπορεί να απαρτίζεται ένα JSON αρχείο, δηλαδή οι τύποι δεδομένων που υττοστηρίζει αυτό το πρότυπο είναι: Ακολουθίες χαρακτήροιν (String) Αριθμοί (Number) Boolean τιμές (true, false) Πίνακες (Array) Αντικείμενα (Object) Αντικείηενο: Ένα αντικείμενο (object) είναι ένα άτακτο σύνολο από ζευγάρια ο\όμάτω\'/πμών. Ξεκινάει με ένα αριστερό άγκιστρο και τελειώνει με δεξί άγκιστρο Κάθε όνομα ακολουθείται από άνω και κάτω τελεία χωρίζονται από κόμμα,. I Ι - Ο - Ι Ο C value ^ - και τα ζευγάρια ονόματος/τιμής Ο-------------^ Εικόνα: Σύνταξη ενός αντικειμένου σε μορφή JSON

Timi: Με τον όρο τνμή εννοούμε τους τύπους String. Number και Boolean. Οι τρεις τύποι αυτοί έχουν το κοινό ότι μεταφέρουν μία μόνο τιμή σε αντίθεση με έναν τήνακα, και συντάσσονται με τον ίδιο τρόπο. Μία τιμή λοιπόν συντάσσεται με τον εξής τρόπο. Ξεκινάει με το όνομα της τιμής το οποίο περιβάλλεται από διπλά quotes ( ). Το όνομα ακολουθείται από άνω-κάτω τελεία και τελικά εισάγεται η τιμή. Π.χ. icon : images/myicon.png Πίνακαι;: Ένας πίνακας (array) είναι μια συλλογή από τιμές σε σειρά. Ένας πίνακας (array) ξεκινάει με αριστερή αγκύλη και τελειώνει με δεξιά ] ενώ οι τιμές του χωρίζονται με κόμμα,. array h - O -0>Η Εικόνα: Σύνταξη ενός πίνακα σε μορφή JSON

2.5. Δημιουργία της μηχανής Ajax Η μηχανή του Ajax tou θα δημιουργήσουμε είναι βασισμένη σε ένα αντικείμενο το oroio θα διαχειρίζεται όλες τις αιτήσεις του αντικειμένου XMLHTTPRequest. Η διαχείριση αυτή θα μπορούσε να γίνει με απλές, ξεχωριστές συναρτήσεις που κάθε μία θα εξυπηρετούσε συγκεκριμένο σκοπό, όπως τη συνάρτηση makerequest που παρουσιάσαμε στη αρχή του κεφαλαίου. Ομολογουμένως κάτι τέτοιο αποτελεί την καλύτερη λύση σε πολύ απλές εφαρμογές Ajax όχι όμιος και στην περίτιτωση που θέλουμε να δημιουργήσουμε μια καλέ συγκροτημένη, ευέλικτη μηχανή ή όταν η ανάγκες της εφαρμογής απαιτούν μια περίπλεκη δομή. Η καλύτερη λύση σε αυτή την περίπτωση είναι μια μηχανή βασισμένη στον αντικειμενοστραφή προγραμματισμό. Η Μηχανή Ajax Η μηχανή που θα δημιουργήσουμε είναι βασισμένη στο ομώνυμο αντικείμενο AJAX το οποίο θα διαχειρίζεται όλες τις αιτήσεις στον serv er μέσω του XMLHTTPRequest. Για να χρησιμοποιήσουμε αυτό το αντικείμενο θα πρέπει πρώτα να το δομήσουμε όπως παρακάτω: AJAX= }; Αφού δομηθεί το αντικείμενο, μπορούμε να δημιουργήσουμε όλες τις μεθόδους που θα χρειαστεί να καλέσουμε για να υποβάλουμε αιτήσεις, να ελέγξουμε την κατάσταση της αίτησης και τέλος να διαχειριστούμε την απόκριση. Η πρώτη μέθοδος που θα δημιουργήσουμε είναι αυτή που δημιουργεί το κατάλληλο αντικείμενο για τον κάθε browser. Ο κώδικας αυτής της μεθόδου φαίνεται παρακάτω: Κώδικας μεθόδου builder AJAX.builder = function() if (window.xmlhttprequest) // Mozilla, Safari, IE7... this.request = new XMLHttpRequest(); } else if (window.activexobject) // IE5, IE6 this.request = new ActiveXObject("MSXML2.XMLHTTP.3.b");

Αφού δημιουργήσουμε το αντικείμενο XMLHttpRequest ή το αντίστοιχο ActiveXObject για τον Internet Explorer, ορίζουμε ττ) μέθοδο που θα πραγματοποιεί την αίτηση. Κώδικας μεθόδου makerequest AJAX.makeRequest = function(method, url, params, callback, async) var contenttype = "application/x-www-form-urlencoded; charset=utf-8"; if(async = null) async = true; } this.cancelo; // Καταργεί την τρέχουσα αίτηση για να δημιουργήσει μια νέα this.buildero; // Δημιουργεί μια νέα αίτηση this.isupdating = true; this.callbackmethod = callback; this.request.onreadystatechange = function()ajax.checkreadystate();}; if(method = "GET") url = url + '?params=' + params; this.request.open(method, url, async); this.request.send(null); } else if(method = "POST") this.request.open(method, url, async); this.request.setrequestheader("content-type", contenttype); this.request.setrequestheader("content-length", params.length); this.request.setrequestheader("connection", "close"); this.request.send("params="+params); H μέθοδος makerequest λαμβάνει πέντε ορίσματα. To πρώτο όρισμα είναι η μέθοδος με την οποία θα γίνει η αίτηση. Η μέθοδος αυτή μπορεί να είναι ""GET ή ""POST". Η μέθοδος που θα ετηλέξουμε εξαρτάται από τα δεδομένα που θα στείλουμε προς επεξεργασία. -2 2 -

Η ''GET χαρακτηρίζεται για την ταχύτητά της και ενδείκνυται για μικρό όγκο δεδομένων καθώς υτιάρχει τιεριορισμένος όγκος τιου μπορεί να διαχειριστεί. Επίσης τα δεδομένα που ατιοστέλλονται με αυτή τη μέθοδο προσαρτώνται στο URL της σελίδας. Αυτό έχει ως συνέπεια οι πληροφορίες τιου στέλνουμε να είναι ορατές από τον καθένα δημιουργώντας σημαντικό θέμα ασφάλειας σε περιπτώσεις που αυτές οι πληροφορίες αποτελούν ευαίσθητα προσωπικά δεδομένα π.χ. κωδικός. Η "POST είναι ιδιαιτέρως χρήσιμη όταν αποστέλλονται δεδομένα μεγαλύτερα των 512 bytes, ένας όγκος τον οποίο δεν μπορεί να διαχειριστεί η "GET ". Η "POST" επίσης αποτελεί μονόδρομο στις αιτήσεις που η ασιράλεια παίζει κύριο ρόλο π.χ. στη δημιουργία ενός λογαριασμού. Το δεύτερο όρισμα makerequest είναι το URL της σελίδας που θα ατιοσταλούν τα δεδομένα. Στη μέθοδο "GET" τα δεδομένα προσαρτώνται στο τέλος αυτής της διεύθυνσης Π.χ. αν η σελίδα είναι URL = www.mvdage.php και θέλουμε να αποστείλουμε τα δεδομένα ; params = 105, τότε το URL θα γίνει www.mvpage.php?params=105. Το τρίτο όρισμα params είναι τα δεδομένα που θα αποστείλουμε μέσω της αίτησης. Το τέταρτο όρισμα callback είναι η μέθοδος ανάκλησης δηλαδή η μέθοδος too θα διαχειριστεί την απόκριση. Αυτή η μέθοδος καλείται όταν το αντικείμενο XMLHTTPReqtjest έχει ξεκινήσει πλήρως. Όταν λοιπόν η κατάστασης της τιμής readystate γίνει τέσσερα καλείται αυτή η μέθοδος. Το πέμπτο και τελευταίο όρισμα async " είναι μια Boolean τιμή (true, false) η οποία χρησιμοποιείται στη μέθοδο open. Η τιμή αυτή καθορίζει τον τρόπο με τον οποίο θα πραγματοποιηθεί η επικοινωνία. Αν η τιμή αυτή είναι true τότε η επικοινωνία θα είναι ασύγχρονη, ενώ αν είναι false η ετπκοινωνια με τον sen>er θα είναι σύγχρονη. Στην περίπτωση που δεν εισαχθεί αυτό το όρισμα, τότε η ετηκοινωνία γίνεται ασύγχρονα. Ας δούμε αναλυτικά τον κώδικα αυτή της μεθόδου. Αρχικά θέτουμε ως προεπιλογή την τιμή της async ίση με true. Έτσι ακόμα και αν δεν δώσουμε αυτό το όρισμα στη μέθοδο makerequest η ετηκοινωνία θα γίνει ασύγχρονα. Στην ττερίπτωση όμως που για κάποιο λόγο θελήσουμε η επικοινωνία μας να είναι σύγχρονη πρέπει να δώσουμε την τιμι\ false. Συνήθως όμως κάτι τέτοιο δεν προτείνεται γιατί οι αιτήσεις παίρνουν τη μορφή λίστας και κάθε μία περιμένει την ολοκλήρωση της προηγούμενης για να πραγματοποιηθεί. Αυτό έχει ιος -2 3 -

αποτέλεσμα να προκαλείται συμφόρηση αιτήσεων και η εφαρμογή μας να γίνεται εξαιρετικά αργή. Στη συνέχεια χρησιμοποιούμε μία άλλη μέθοδο του αντικειμένου Ajax, την cancelq. Η μέθοδος αυτή καταργεί όποια αίτηση είναι σε εξέλιξη για να δημιουργήσει μία νέα. Αυτό έχει μεγάλη στ μασία για τη συμπεριφορά ττ ς αναζήτησης καθώς η μέθοδος αυτή αποτελεί σημαντικό μέρος της. Καταργώντας την όποια αίττιση είναι σε εξέλιξη επιτυγχάνουμε να εξαλείψουμε τα «αρνητικά» αποτελέσματα της ασύγχρονης επικοινωνίας στη μηχανή αναζήτησης. Όταν η επικοινωνία γίνεται ασύγχρονα, σημαίνει πως νέες αιτήσεις μπορούν να δημιουργούνται συνεχώς, η απόκριση όμως αυτών των αιτήσεων δεν είναι απαραίτητο να έχει την ίδια σειρά με την οποία δημιουργήθηκαν. Για κάποιο λόγο λοιπόν μπορεί κάποια αίτηση που δημιουργήθηκε πρώτη να καθυστερήσει περισσότερο από την απόκριση μιας άλλης που δημιουργήθηκε λίγο αργότερα. Αν και μια τέτοια συγκριτική καθυστέρηση συνήθως διαρκεί πολύ λίγα δευτερόλεπτα ή και χιλιοστά του δευτερολέπτου, θα δημιουργούσε μια περίεργη συμπεριφορά στη μηχανή αναζήτησης. Ας παρουσιάσουμε ένα απλό παράδειγμα για να εξηγήσουμε αυτή την παράξενη και ανεπιθύμητη συμπεριφορά. Ένας χρήστης εισάγει ένα κριτήριο στο αντίστοιχο πεδίο αναζήτησης. Αμέσως δημιουργείται μία αίτηση η οποία κατευθύνεται προς τον server. Για κάποιο λόγο ο χρήστης τροποποιεί το κριτήριό του μέσα σε πολύ μικρό χρονικό διάστημα. Μία νέα αίτηση δημιουργείται πάλι. Για κάποιο λόγο η απόκριση της πρώτης καθυστερεί περισσότερο από τη δεύτερη. Η απόκρισης της δεύτερης αίτησης καταφτάνει στον υπολογιστή του χρήστη, επεξεργάζεται και τελικά εμφανίζονται τα επιθυμητά αποτελέσματα της αναζήτησης. Σε πολύ μικρό χρονικό διάστημα καταφτάνει η απόκριση από τη πρώτη αίτηση-αναζήτηση- η οποία επεξεργάζεται και τελικά εμφανίζονται τα αποτελέσματα στην οθόνη του χρήστη. Το τελικό αποτέλεσμα είναι να εμφανίζονται λάθος αποτελέσματα στην οθόνη του υπολογιστή του χρήστη καθώς αυτά τα αποτελέσματα ανήκουν στην πρώτη αναζήτηση που πραγματοποιήθηκε και όχι στη δεύτερη. Καταργώντας λοιπόν την τρέχουσα αίτηση με τη μέθοδο "cancelq αντιμετωπίζουμε αυτό το φαινόμενο. Στη συνέχεια χρησιμοποιούμε τη μέθοδο "builderq για να δημιουργήσουμε ένα νέο XMLHTTPRequest αντικείμενο. Μόλις δημιουργηθεί το σωστό αντικείμενο θέτουμε την ιδιότητα isupdating του ανηκειμένου Ajax ίση με true. Η ιδιότητα αυτή δείχνει την κατάσταση της αίτησης. Όταν η αίτηση είναι σε εξέλιξη και δεν έχει ολοκληρωθεί τότε παίρνει την τιμή true και σε κάθε άλλη περίπτωση την αμι\ false. Αμέσως μετά ενημερώνουμε την ιδιότητα callbackmethod. Η ιδιότητα αυτή δείχνει τη συνάρτηση ανάκλησης που δώσαμε ως όρισμα. Η συνάρτηση αυτή μπορεί να χρησιμοποιηθεί αργότερα από τη μέθοδο checkreadystateq του αντικειμένου AJAX.

Αφού ορίσουμε την callhackmethod χρησιμοποιούμε την onreadyxiatechange του αντικειμένου XMLHTTPRequest. Σε κάθε μεταβολή της κατάστασης του αντικειμένου τιυροδοτείται ο χειρισμός συμβάντος onreadystatechange. δηλαδή όταν η κατάσταση του αντικειμένου αίτησης αλλάζει τότε εκτελείται η σιη'άρτηση που αντιστοιχεί σε αυτό το event. Στη συγκεκριμένη περίπτωση είναι μια ανώνυμη συνάρτηση η οποία απ>ό)ς κα>χί τη μέθοδο checkreadystateq. Αυτό μας επιτρέπει να θέσουμε μια μέθοδο ανάκ>.ησης που θα εκτε>χίται όταν το αντικείμενο είναι ολοκληρωμένο και η αίτηση έχει ολοκληροοθεί χωρίς σφάλματα. Για τη μέθοδο checkreadystateq θα αναφέρουμε τιερισσότερα παρακάτω που την εξετάζουμε και αναλύουμε ξεχωριστά. Ολοκληρώνοντας τις απαραίτητες διαδικασίες είμαστε έτοιμοι να στείλουμε την αίτηση ανάλογα με τη μέθοδο GET ή POST που έχουμε επιλέξει. Για τη μέθοδο GET εκτε/.είται ο παρακάτω κώδικας : url = url + '?params=' + params; this.request.open(method. url. async); this.request.send(null); Όπως έχουμε προαναφέρει η μέθοδος αυτή μεταφέρει τα δεδομένα στο URL της σελίδας. Αρχικά λοιπόν τροποποιούμε τη παράμετρο url προσαρτώντας στο τέλος τα δεδομένα που θέλουμε να μεταφέρουμε από την παράμετρο params. Στη συνέχεια χρησιμοποιούμε τις δύο απαραίτητες μεθόδους για την αποστολή της αίτησης openq και sendq. Η πραγματική μέθοδος που αποστέλλει την αίτηση HTTP είναι η μέθοδος sendq. Στην περίπτωση που η αίτηση γίνεται με την GET η μέθοδος sendq παίρνει το όρισμα null. Για τη μέθοδο POST" εκτελείται ο παρακάτω κώδικας this.request.open(method, url, async); this.request.setrequestheader("content-type", contenttype); this.request.setrequestheader("content-length", params.length); this.request.setrequestheaderc'connection", "close"); this.request.send("params="+params); Και σε αυτή ττ μέθοδο γίνεται χρήση των απαραίτητων μεθόδων openq και sendq με τη διαφορά όμως ότι τα δεδομένα δε μεταφέρονται στο URL της σελίδας. Σε αυτήν την

περίτιτωση η μέθοδος sendq παίρνει μία παράμετρο ακολουθίας που είναι ένα ζεύγος κλειδιού / τιμής. Επίσης πρέπει να χρησιμοποιήσουμε τη μέθοδο setrequestheadero του αντικειμένου αίτησης για να ορίσουμε τον τύπο περιεχομένου και το μήκος των παραμέτρων που αποστέλλονται. Εδώ ολοκληρώνεται και η ανάλυση της μεθόδου makerequest(). Είμαστε λοιπόν έτοιμοι να δημιουργήσουμε και να αποστείλουμε μία αίτηση HTTP κάνοντας χρήση μιας από τις δύο διαθέσιμες μεθόδους GET" ή POST. Παρακάτω θα αναλύσουμε τη μέθοδο checkreadystateq η οποία καλεί τη συνάρτηση ανάκλησης. Η μέθοδος checkreadystateq εξετάζει την κατάσταση και τον κωδικό κατάστασης της HTTP αίτησης και υπό ορισμένες συνθήκες καλεί τη μέθοδο callbackmethodq του αντικειμένου Ajax. Η callbackmethodq είναι μέθοδος ανάκλησης, δηλαδή η μέθοδος που διαχειρίζεται την απόκριση. Η μέθοδος αυτή όμως μπορεί να κληθεί μόνο όταν το αντικείμενο XMLHTTPRequest είναι ολοκληρωμένο δηλαδή όταν έχει ξεκινήσει πλήρως. Το αντικείμενο θεωρείται ολοκληρωμένο όταν η τιμή της ιδιότητας readystate είναι ίση με 4. Εττίσης θα ήταν άσκοπο να καλέσουμε αυτή τη μέθοδο στην περίπτωση που το αντικείμενο έχει μεν ολοκληρωθεί αλλά έχει συμβεί κάποιο σφάλμα. Άρα λοιπόν πρέπει να ορίσουμε τις κατάλληλες προϋποθέσεις στις οποίες θα καλείται η μέθοδος ανάκλησης callbackmethodq. Όπως προαναφέραμε οι δυο προϋποθέσεις που πρέπει να ισχύουν είναι: Το αντικείμενο αίτησης (XMLHTTPRequest) θα πρέπει να έχει ολοκληρωθεί, δηλαδή η τιμή της ιδιότητας readystate να είναι ίση με 4. Να μην έχει προκληθεί κάποιο σφάλμα, δηλαδή η τιμή της ιδιότητας status (κωδικός κατάστασης της HTTP αίτησης) να είναι ίση με 200. Μετά την κλήση της μεθόδου ανάκλησης η checkreadystateq αναλαμβάνει να ενημερώσει την τιμή της ιδιότητας is Updating του αντικειμένου Ajax. Η τιμή της ιδιότητας αυτή μεταβάλλεται σε false, και δείχνει ότι η αίτηση δεν είναι πλέον σε εξέλιξη αλλά έχει πλέον ολοκληρωθεί.

Κώδικας μεθόδου checkreadystate AJAX.checkreadystate = function() if(this.request.readystate = 4) if(this.request.status = 200) this.callbackmethod(); this.isupdating = false;

ΚΕΦΑΛΑΙΟ 3 To Soundex 3.1. Τι είναι το Soundex To Soundex είναι ένας φωνητικός αλγόριθμος, ο οποίος παίρνει ως είσοδο μια λέξη και παράγει ένα αντίστοιχο κλειδί. Η δύναμη αυτού του αλγόριθμου κρύβεται στο ότι όμοια προφερόμενες λέξεις παράγουν το ίδιο soundex κλειδί. Το Soundex είναι ο πιο δημοφιλής από τους φωνητικούς αλγόριθμους και για αυτό πολλές φορές αναφέρεται λανθασμένα ως συνώνυμο του «φωνητικού αλγόριθμου». Το κλειδί soundex αποτελείται από έναν ορμαθό συγκεκριμένου μήκους χαρακτήρων (6 στην παρούσα υλοποίηση) όπου ο πρώτος χαρακτήρας είναι το πρώτο γράμμα της λέξης που κωδικοποιήθηκε και οι υπόλοιποι χαρακτήρες είναι αριθμοί. Ο αλγόριθμος soundex είναι ενσωματωμένος στην ΡΗΡ και υλοποιείται από την ομώνυμη συνάρτηση. Η συνάρτηση όμως αυτή δουλεύει μόνο με λατινικούς χαρακτήρες, για αυτό για ης ανάγκες της πτυχιακιίς υλοποιήθηκαν εκ νέου για την ελληνική και για την αγγλική γλώσσα. Η μόνη διαφορά της ενσωματωμένης συνάρτησης στην ΡΗΡ και στην δική μου υλοποίηση (για την αγγλική γλώσσα) έγκειται μόνο στη διαφορά μήκους του παραγόμενου κλειδιού (4 στην ΡΗΡ, 6 στη δική μου συνάρτηση).

3.2. Πως λειτουργεί το Soundex 3.2.1. Περιληπτικά Τα βασικά βήματα εξαγωγής κλειδιού soundex είναι τα εξής; 1. Κανονικοποίηση της λέξης. 2. Θέτουμε ως πρώτο χαρακτήρα στο κλειδί, τον πρώτο χαρακτήρα της κανονικοποιημένης λέξης. 3. Κωδικοποίηση του κάθε χαρακτήρα σύμφωνα με την κατηγορία φθόγγων στην οποία ανήκει (π.χ. το π ανήκει στα χειλικά) 4. Αφαίρεση των μηδενικών 5. Προσαρμογή του παραγόμενου κλειδιού σ 9 προεπΰχγμένο μήκος (6 χαρακτήρες στην παρούσα υλοποίηση) 3.2.2. Αναλυτικά 1. Κανονικοποίηση της λέξης Η επεξεργασία της κανονικοποίησης εξαρτάται από το αν πρόκειται για ελληνική ή αγγλική λέξη. a) Αν πρόκειται για ελληνική λέξη τότε γίνεται η παρακάτω επεξεργασία: Απαλοιφή εσωτερικών σηαείων oritnc. Μετατροπή κεφαλαίων γαοακτήοιον σε πεζούς Απαλοιφή διπλών συιιφώνων, π.γ. uu. w Αντικατάσταση των οαόηγων γοαααάτων και διφθόγγων αε έναν οαόηγο γαοακτήοα ι, η, υ, ει, οι, υι ε, αι ο, ω

Αντικατάσταση των διπλών συαιοώνων ιχε ένα σύαβολο της ετπλΰγης μας η, γκ => g τσ, τζ => j Μετατροττή του γράααατος υ σε β ή (Ρ ανάλογα αε την ποοοοοά. Εδώ ακ'ολουοούχ ται οι παρακάτω κανόνεα της Ύοααααπκής: ϊ. Αν το προηγούμενο γράμμα είναι το α και το υ ακολουθείται από (κ, π, τ, χ, φ, θ, τ, σ, ξ, ψ) τότε το υ προφέρεται ως φ. παράδειγαα: αυ (+ κ, π, τ, χ, φ, 0, τ, σ, ξ, ψ) => αφ αυτός ϋ. Αν το προηγούμενο γράμμα είναι το α καν το υ ακολουθείται από (α, ε, η, ι, ο, υ, ω, β, γ, δ, ζ, τζ, μπ, ντ, γκ, λ, μ, ν, ρ) τότε το υ προφέρεται ως β αυ (+α, ε, η, ι, ο, υ, ω, β, γ, 6, ζ, τζ, μπ, ντ, γκ, λ, μ, ν, ρ) => αβ παράδειναα: Παύλος αετατοέπεται σε παβλος ϋΐ. Αν το προηγούμενο γράμμα είναι το ε και το υ ακολουθείται από (κ, π, τ, χ, φ, θ, τ, σ, ξ, ψ) τότε το υ προφέρεται ως φ. (+ κ, π, τ, χ, φ, θ, τ, σ, ξ, ψ) => εφ παράδειγρα: εύκολο αετατοέπεται σε εφκολο

iv. Αν το προηγούμενο γράμμα είναι το ε και το υ ακολουθείται από (α, ε, η, ι, ο, υ, ω, β, γ, δ, ζ, τζ, μπ. ντ, γκ, λ, μ, ν. ρ) τότε το υ προφέρεται ως β ευ (+α, ε, η, ι, ο, υ, ω, β, γ, δ, ζ, τζ, μπ, ντ, γκ, μ, ν, ρ) = παράδειναα: ευέλικτο αετατοέπεται σε εβέλικτο b) Αν πρόκειται για αγγλική λέξη τότε γίνεται η παρακάτω επεξεργασία: Μετατροπή κεφαλαίων γαρακτήρϋΐν σε πεέούς. Απαλοιφή διπλών συαιοώνων. π.γ. ss. cc. Ποοοίδειγιιοτοί Κονονικοττοιτίίττί'^ 1) Γ ιώ ρ γ ο ς = > γ ιο ρ γ ο ς 2 ) Ε υ α γγελ ία = > εβ α ελ ία 3 ) Φ ίλιππος => φίλιπος 4 ) Ε ιρ ή νη = > ιρ ιν ι 5 ) ad d ress = > a d res 6) h ello = > h elo 2. Ορίζουμε τον πρώτο χαρακτήρα του κλειδιού Θέτουμε ως πρώτο χαρακτιίρα του κλειδιού soundex τον πρώτο χαρακτήρα της κανονικοποιημένης λέξης. παράδειγαα: Παύλος Soundex: Π χχχχχ

3. Κωδικοποίηση της λέξης Κωδικοποιούμε κάθε χαρακτήρα της λέξης σύμφωνα με την κατηγορία φθόγγων στην οποία ανήκει. Για ελληνική λεξιι ακολουθούνται οι παρακάτω κανόνες: ΦωΛήεντα: α, ε, ι, ο, ου = 0 Χειλικά; π, β, φ, μπ = 1 Ουρανικά; κ, γ, χ, γκ = 2 Οδοντικά: τ, δ, θ, ντ = 3 Υγρά: ρ, λ = 4 Ένρινα: ν, μ = 5 Συριστικά: σ, ζ, τσ, τζ = 6 Δίφθογγοι: ξ, ψ = 7 Γ ια αγγλική λέξη ακολουθούνται οι παρακάτω κανόνες: a, e, h, i, ο, u, w, y = 0 р, V, f, b = 1 с, g, j, k, q, s, X, z = 2 d,t = 3 4. Αφαίρεση των μηδενικών Αφαιρούμε όλα τα μηδενικά του κλειδιού που δημιουργήθηκε στο προηγούμενο βήμα.

5. Προσαρμογή του παραγόμενου κλειδιού στο προεπι/χγμένο μήκος Σε αυτό το βήμα γίνεται η παρακάτω επεξεργασία: a) Αν το παραγόμενο κλειδί έχει μήκος μεγαλύτερο από 6 χαρακτήρες, διατηρούνται οι 6 πρώτοι και διαγράφεται η πλεονάζουσα πληροφορία. b) Αν το παραγόμενο κλειδί έχει μήκος μικρότερο από 6 χαρακτήρες, τότε συμπληρώνεται με όσα μηδενικά απαιτούνται για να φτάσει στο ετητρεπόμενο μήκος. 3.3. Παραδείγματα Soundex Ας χρησιμοποιήσουμε το όνομα Παύλος για να δείξουμε την παραγωγή του αντίστοιχου κλειδιού soundex; 1 Βήμα: Κανονικοποίηση me λέ ης Η λέξη «Παύλος» περιέχει το γράμμα υ το οποίο προηγείται από το γράμμα α και ακολουθείται από το γράμμα λ. Σύμφωνα με τον κανόνα της γραμματικής: αυ (+α, ε, η, ι, ο, υ, ω, β, γ, δ, ζ, τζ, μπ, ντ, γκ, λ, μ, ν, ρ) => αβ Το υ σε αυτή την περίπτωση διαβάζεται ως β, για αυτό στην κανονικοποιημένη λέξη έχει ανπκατασταθεί από αυτό. (κανονικοποίηση) Παύλος => παβλος 2" Βήμα: Ατηηουργούαε τον πρώτο ταρακτήοα του κλειδιού soundex Παίρνουμε το πρώτο γράμμα της κανονικοποιημένης λέξης, το μετατρέπουμε σε κεφαλαίο και το θέτουμε ως πρώτο χαρακτι'ιρα στο κλειδί soundex παβλος ΠΧΧΧ.ΧΧ

3 Βήμα: Κωδικοποίηση των υπόλοιπων γαρακτήοων παβλος => Π01406 4" Βήμα: Αφαίρεση αηδενικών Π01406 5 Βήμα: Αηιιιουργία κλειδιού 6 γαρακτήοων Επειδή σε αυτή την περίπτωση το παραγόμενο κλειδί έχει μήκος 4 χαρακτήρες, δηλαδή μικρότερο από το προεπιλεγμένο - 6 χαρακτήρες - προσθέτονται στο τέλος 2 μηδενικά. ΤΕΛΙΚΟ ΑΠΟΤΕΛΕΣΜΑ: Άρα λοιπόν το παραγόμενο soundex κλειδί της λέξης Παύλος είναι το Π14600. Παύλος Π14600 Παοάδειγαα: Για τη λέξη «Παναγιώτης» το κλειδί soundex είναι: Π52360

3.4. Η συνάρτηση mysoundex Ετιεώή κατά την υλοποίηση της ιστοσελίδας χρησιμοποιήθηκε το σετ χαρακτήριον utf-8 πρέπει να δηλώσουμε ότι οι λέξεις που θα επεξεργαστούν οι συναρτήσεις που σχετίζονται με την παραγιογή των κλειδιών soundex θα είναι σε αυτή τη μορφή και όχι στην προεπιλεγμένη (αγγλική). Για να γίνει αυτό στη γλώσσα ΡΗΡ θα πρέπει να ορίσουμε ποια είναι η εσωτερική κωδικοποίηση των λέξεων. Επίσης θα πρέπει να χρησιμοποιήσουμε όπου χρειάζεται τις αντίστοιχες εντολές της ΡΗΡ με το πρόθεμα mb (δηλαδή multibyte). Αυτό συμβαίνει γιατί οι χαρακτήρες που είναι κωδικοποιημένοι σε utf-8 δεν έχουν σταθερό μέγεθος byte. Για τιαράδειγμα, οι λατινικοί χαρακτήρες έχουν μέγεθος 1 byte, ενώ οι ελληνικοί 2 byte. Επομένως οι πρώτες εντολές του κώδικα του αρχείου soundex.php είναι; mb_intemai_encoding("utf-8"); mb_regex_encoding("utf-8"); Για να δημιουργήσουμε το soundex κλειδί μιας ελληνικής ή μίας αγγλικής λέξης έχουν υλοποιηθεί οι δύο αντίστοιχες συναρτήσεις. Όμως αυτές οι συναρτήσεις δεν είναι σε θέση να ξεχωρίσουν αν πρόκειται για ελληνική ή αγγλική λέξη. Έτσι για παράδειγμα για μια αγγλική λέξη η ελληνική soundex συνάρτηση θα παράξει κάποιο soundex κλειδί, το οποίο όμως δε θα είναι σωστό. Η ελληνική soundex συνάρτηση για τη λέξη HELLO δημιουργεί το κλειδί; 000000. Το οποίο δεν μεταφέρει καμία πληροφορία. Το σωστό κλειδί για αυτή τη λέξη είναι: Η40000. Το ίδιο συμβαίνει και αν από την αγγλική soundex συνάρτηση ζητήσουμε να πάρουμε το κλειδί για μία ελληνική λέξη. Για αυτό πρέπει να εφεύρουμε έναν τρόπο με τον οποίο θα κωδικοποιούμε τη κάθε λέξη με τη σωστή συνάρτηση. Γ ια αυτό το λόγο δημιουργήσαμε τη συνάρτηση mysoundex η οποία θα είναι υπεύθυνη να καλεί τη σωστή soundex συνάρτηση κάθε φορά, αλλά και να καθορίζει το σταθερό μέγεθος των παραγόμενων κλειδιών, τα οποία θα πρέπει να έχουν ακριβώς 6 χαρακτήρες. Για να επιτύχει αυτή η συνάρτηση τη σωστι'ι κωδικοποίηση μιας λέξης εξετάζει το πρώτο γράμμα της, αν αυτό είναι ελληνικός χαρακτι'ιρας, τότε καλεί την ελληνική soundex συνάρτηση, αν είναι λατινικός καλεί την αντίστοιχη αγγλική συνάρτηση. Στην περίπτωση που ο πρώτος χαρακτήρας της λέξης είναι κάποιος άλλος χαρακτήρας εκτός του ελληνικού ή του λατινικού αλφάβητου, η συνάρτηση επιστρέφει το κλειδί; 000000.

Κώδικας «η)νάρτησης mysoiindex function mysoundex($word) $SOUNDEX_LENGTH = 6; SfirstChar = mb_strtolower(mb_substr($word, 0, 1)); // Av περιέχει μόνο ελληνικούς χαρακτήρες if(preg_match("/''[0-6]/", SfirstChar) = 1) Ssoundex = elsoundex(sword); // Av περιέχει λατινικούς χαρακτήρες elseif(preg_match("/''[a-z]/", SfirstChar) == 1) Ssoundex = engsoundex(sword); } // Σβήσε τα μηδενικά Ssoundex = str_replace('0',", Ssoundex); // Συμπλήρωσε στο τέλος όσα μηδενικά χρειάζεται Ssoundex = ΌΟΟΟΟΟΟ'; // Δώσε το προκαθορισμένο μήκος στο κλειδί Ssoundex = mb substrfssoundex, 0, SSOUNDEX LENGTH); return Ssoundex;

ΚΕΦΑΛΑΙΟ 4 Η Αναζήτηση 4.1. Σύντομη περιγραφή Ο μηχανισμός της αναζήτησης ενεργοποιείται κάθε φορά που πληκτρολογούμε κάποιο χαρακτήρα στο πεδίο αναζήτησης. Ο μηχανισμός αγνοεί κάθε λέξη που έχει μήκος μικρότερο από τέσσερις χαρακτήρες. Στην περίπτωση που εισαχθεί μια λέξη με τουλάχιστον 4 χαρακτήρες μήκος εμφανίζεται το μήνυμα της «αναμονής» που υποδηλώνει ότι η αναζήτηση έχει ξεκινήσει αλλά δεν έχει ολοκληρωθεί. Κατά τη διάρκεια που ο χρήστης λαμβάνει το αντίστοιχο μήνυμα αναμονής, έχει ενεργοποιηθεί ένας ολόκληρος μηχανισμός μεταξύ πελάτη (client) και εξυπηρετητή (server) μέσω της μηχανής AJAX. Τα δεδομένα αναζήτησης στέλνονται στον server και εκεί παράγεται το soundex κλειδί του ονόματος που ψάχνουμε. Στη συνέχεια γίνεται αναζήτηση στη βάση δεδομένων για παρόμοιες καταχωρήσεις και αμέσως μετά το αποτέλεσμα της αναζήτησης ετηστρέφεται στον πελάτη σε μορφή JSON (JavaScript Object Notation). Τέλος, η σελίδα ενημερώνεται δυναμικά με τα αποτελέσματα της αναζήτησης χωρίς να απαιτείται να ξαναφορτωθεί ή να γίνει μεταπήδηση σε άλλη σελίδα.

4.2. Αναλΐ)τική περιγραφή Θα μπορούσαμε να πούμε ότι η αναζήτηση ενός ονόματος χωρίζεται σε τρία μέρη τα οποία 1. Συλλογή και αποστολή δεδομένων. 2. Εκτέλεση της αναζήτησης. 3. Εμφάνιση των αποτελεσμάτων στον χρήστη. Από αυτά τα τρία βέβαια είναι προφανές ότι ο τιυρήνας της αναζήτησης είναι το δεύτερο μέρος το οποίο εκτελείται στον server σε αντίθεση με το πρώτο και τρίτο μέρος που εκτελούνται στην πλευρά του πελάτη ( client-side '). 4.2.1. 1 uepoc - Συλλογή και αποστολή δεδοκένων Κλήση της συνάρτηση oncharset() Κάθε φορά που ο χρήστης πληκτρολογεί ένα κείμενο στο πεδίο αναζήτησης, τη στιγμή που αφήνει το πλήκτρο ενεργοποιείται το αντίστοιχο event της JavaScript που λέγεται onkeyup. Όποτε ενεργοποιείται αυτό το event καλείται η συνάρτηση oncharset. Η συνάρτηση αυτή ελέγχει το κείμενο το οποίο είχε εισάγει ο χρήστης την τελευταία φορά που πληκτρολόγησε κάποιο κριτήριο, με το κείμενο που μόλις πληκτρολογήθηκε και αν αναγνωρίσει κάποια διαφορά μεταξύ τους τότε προχωράει στον επόμενο έλεγχο, αλλιώς επιστρέφει false και τερματίζεται. Στη συνέχεια ελέγχει το κείμενο που μόλις πληκτρολογήθηκε και μετράει το μήκος του σε χαρακτήρες. Αν το μήκος της λέξης είναι μικρότερο από 4 χαρακτήρες τότε επιστρέφει false και σταματά την εκτέλεσή της. Αν είναι μεγαλύτερο ή ίσο από 4 χαρακτήρες τότε περιμένει 500ms μήπως πατηθεί νέος χαρακτήρας, εάν δεν πατηθεί νέος χαρακτήρας στο χρονικό αυτό διάστημα τότε εκτελεί τη συνάρτιιση finduser ". Αυτό γίνεται για να αποφύγουμε τις συνεχόμενες αιτήσεις στον server που προκαλεί η συνάρτηση "finduser " στην περίπτωση που ο χρήστης πληκτρολογεί γρήγορα.

Κ/.ήση της συνάρτησης finduser Όταν εκτελείται αυτή η συνάρτηση παίρινει το κείμενο που πληκτρολογήσαμε και την ετηστρεφόμενη τιμή του slider, με το οποίο ορίσαμε την ευαισθησία της αναζήτησης και κάνει μία αίτηση μέσω του αντικειμένου AJAX. Επίσης ετηστρέφει στο χρήστη το μήνυμα αναμονής που δηλώνει ότι η αίτησή του είναι υπό εξέλιξη. Τα δεδομένα στέ>,νονται στον εξυπηρετητή (server) μέσω της συνάρτησης makerequest() του αντικειμένου AJAX και εκεί εκτελείται ο κώδικας του αρχείου search.php. Μόλις εκτελεστεί ο παραπάνω κώδικας ο server θα επιστρέψει τα αποτελέσματα της αναζήτησης στον πελάτη (client) σε μορφή JSON και αυτόματα θα κληθεί η συνάρτηση showresults() -αυτή είναι η callback συνάρτηση- η οποία θα πάρει αυτά τα δεδομένα, θα τα αναλύσει και θα τα παρουσιάσει στο χρήστη. Κώδικας της συνάρτησης finduser var finduser = function() var str = document.getelementbyld("search_input").value; var gap = document.getelementbyld("soundexgap").value; var url = "../core/search.php"; var params = str + '&gap=' + gap; currpagenum = 1; $("#ajaxloader").show(); AJAX.makeRequest("POST", url, params, showresults); //(method, url, params, callback, async)

4.2.2. 2 μέρος - Επεξεργασία αίτησης Το αρχείο "starch.php περιέχει τον κώδικα που δίκαια μπορεί να χαρακτηριστεί ως ο πυρήνας της αναζήττ σης. Η εκτέλεση αυτού του κώδικα ακολουθεί την παρακάτω σειρά: 1. Ορίζονται οι απαραίτητες συναρτήσεις και γίνεται σύνδεση με τη βάση δεδομένων. Σε αυτό το στάδιο γίνεται η σύνδεση με τη βάση δεδομένων και δημιουργούμε τέσσερις συναρτήσεις. Οι συναρτήσεις αυτές είναι: make_word_arra>() Η συνάρτηση αυτι'ι παίρνει ως όρισμα ένα ορμαθό (string) και επιστρέφει έναν ττίνακα με τις λέξεις του ορμαθού αυτού statemento Η συνάρτηση αυτή είναι η σημαντικότερη από όλες τις άλλες, καθώς ορίζει τη συνθήκη η οποία θα ενσωματωθεί στο ερώτημα που θα πραγματοποιήσουμε στη βάση δεδομένων για να πάρουμε τα επιθυμητά αποτελέσματα. errorhandleo Η συνάρτηση αυτή ελέγχει για τυχών σφάλματα κατά ττ) διάρκεια ενός ερωτήματος στη βάση δεδομένων και μας επιβεβαιώνει ότι όλα εξελίχθηκαν ομαλά. Στην αντίθετη περίπτωση δηλαδή στιιν περίπτωση που δημιουργηθεί κάποιο σφάλμα, παύει τη εξέλιξη του κώδικα και ετηστρέφει το αντίστοιχο μήνυμα σφάλματος σε μορφή JSON. isemptyo Η συνάρτηση λαμβάνει ως όρισμα έναν ορμαθό και εξετάζει αν πρόκειται για ορμαθό χωρίς χαρακτήρες, δηλαδή που αποτελείται μόνο από τον χαρακτήρα null ή από ένα πλήθος κενών χαρακτήρων (spaces). Αν ανιχνεύσει ότι ο ορμαθός αυτός περιέχει μόνα κενά ή αν δεν μεταφέρει κάποια πληροφορία τότε θέτει τη μεταβλητή isempty ίση με TRUE και στην αντίθετη περίπτωση ίση με FALSE.

2. Αποθήκευση των απεσταλμένων δεδομένοίν. Στη συνέχεια γίνεται αποθήκευση των ατιεσταλμένων δεδομένων. Τα δεδομένα αυτά είναι το κριτήριο αναζήτησης που έθεσε ο χρήστης και η τιμή του slider. Η τιμή αυτή κυμαίνεται μεταξύ 0 και 2 και παίρνει την τιμή 0 όταν ο χρήστης ετπ>-έξει «κανονική» ευαισθησία, στη «δυνατή» παίρνει την τιμή 1 και στιχν «πολύ δυνατή» την τιμή 2. 3. Ελέγχει αν το κριτήριο αναζήτησης είναι κενό Με χρήση της συνάρτησης isemptjo ελέγχουμε αν το κριτήριο αναζήτησης περιέχει μόνο κενά. Αν ναι, τότε επιστρέφεται το αντίστοιχο μήνυμα σε μορφή JSON και σταματά η εκτέλεση του υπόλοιπου κώδικα. Στην αντίθετη τιερίπτωση δεν αποστέλλεται κάποιο μήνυμα και συνεχίζει κανονικά η εκτέλεση του κώδικα. 4, Γίνεται αναζήτηση στη βάση δεδομένων Αυτό είναι το κυριότερο σημείο της αναζήτησης, καθώς στο σημείο αυτό πραγματοποιείται το σύνθετο εκείνο ερώτημα στη βάση δεδομένων με το οποίο παίρνουμε τα επιθυμητά αποτελέσματα ακόμα και σε περίπτωση ορθογραφικών σφαλμάτων. Για να επιτευχθεί αυτό χρησιμοποιούμε τη συνάρτηση statemento" η οποία διαμορφώνει τη συνθήκη σύμφωνα με την οποία θα γίνει η αναζήτηση. Η συνάρτηση αυτή στην πραγμαηκότητα επιστρέφει έναν ορμαθό λέξεων ο οποίος διαμορφώνεται ανάλογα με τα δεδομένα που απέστειλε ο χρήστης. Ο ορμαθός αυτός ορίζει μια συνθήκη σε γλώσσα SQL η οποία προστίθεται στην εντολή της MySQL που θα εκτελέσει την αναζήτηση και καθορίζει το αποτέλεσμά της. Κατά την εκτέλεση της αναζήτησης δημιουργείται ο προσωρινός πίνακας results στον οποίο εισάγονται και αποθηκεύονται τα αποτελέσματα της αναζήτησης. Ο πίνακας αυτός είναι προσωρινός δηλαδή στο τέλος κάθε αναζήτησης διαγράφεται αυτόματα. Η συνάρτηστι statement λειτουργεί με τον παρακάτω τρόπο. Παίρνει ως όρισμα το κριτήριο αναζήτησης και το βαθμό ευαισθησίας της αναζήτησης. Στη συνέχεια διαχωρίζει τις λέξεις με τη συνάρτηση make word array και τις καταχωρεί σε έναν πίνακα. Ύστερα δημιουργεί τα soundex κλειδιά για κάθε μία λέξη και τα αποθηκεύει σε έναν ξεχωριστό πίνακα. Κατά την αναζήττιση γίνεται σύγκριση μεταξύ των κλειδιών που μόλις δημιουργήθηκαν και των καταχωρημένων στη βάση κλειδιών και όποτε βρεθεί κάποιο κλειδί ίδιο με αυτό που ψάχνουμε τότε η εγγραφή αυτή συγκαταλέγεται στα -41 -