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



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

Διαβάστε στο Παράρτημα Α.1 πώς θα γράψετε ένα πρόγραμμα PHP για την παροχή δεδομένων σε μορφή διαφορετική από την HTML.

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

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

Σχεδιασμός Βάσεων Δεδομένων

10 η Διάλεξη Python Βάσεις δεδομένων στη python

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

Οδηγίες Χρήσης της MySQL

Εργαστήριο #12. Βήμα 1 ο. Βήμα 2 ο. Βήμα 3 ο. Βήμα 4 ο.

Οδηγίες Χρήσης της MySQL

ΤΕΣΤ ΠΙΣΤΟΠΟΙΗΣΗΣ ΓΝΩΣΕΩΝ ΚΑΙ ΔΕΞΙΟΤΗΤΩΝ

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

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

Μαλούτα Θεανώ Σελίδα 1

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

HTTP API v1.6 SMSBOX.GR HTTP API v

Γιάννης Σαμωνάκης. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP)

Προγραμματισμός Παγκόσμιου Ιστού

Τίτλος Εργασίας Εκπαιδευτικού Σεναρίου

Εργαστήριο Βάσεων Δεδομένων

Εργαστήριο #9 Τι πρέπει να έχετε ολοκληρώσει από το προηγούμενο εργαστήριο. βεβαιωθείτε ότι έχετε ολοκληρώσει τις προηγούμενες ασκήσεις Οδηγίες

Τίτλος Εργασίας. Επώνυμο και Όνομα Πρώτου Εισηγητή (ΠΡΟΣΟΧΗ: πρώτα το Επώνυμο) Ιδιότητα, Εργασιακός Φορέας, Διεύθυνση

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

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο Διδάσκων Καθ.: Νίκος Τσαπατσούλης

Από τα Δεδομένα στην Πληροφορία: Διδακτικό Σενάριο για Εισαγωγή στη Γλώσσα SQL. Σ. Φίλου Β. Βασιλάκης

XAMPP Apache MySQL PHP javascript xampp

Vodafone Business Connect

. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Μάθημα Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Τίτλος Εργασίας Εργαστηριακής Παρουσίασης

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Το αίτημα (http request) για την αποστολή μηνύματος γίνεται στον server μας στο URL με τις ακόλουθες μεταβλητές.

Τίτλος Εργασίας Καινοτόμου Προγράμματος και Δράσης

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

Ημερομηνία Παράδοσης: 4/4/2013

databases linux - terminal (linux / windows terminal)

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

Διάλεξη 6η CSS Advanced

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

Τίτλος Πακέτου Certified Computer Expert-ACTA

Εισαγωγή στην επιστήμη των υπολογιστών

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

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

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures):

Social Network : Programming on FACEBOOK

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

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

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

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

ΠΡΩΤΟΚΟΛΟ HTTP ΕΝΤΟΛΩΝ ΔΙΑΣΥΝΔΕΣΗΣ ΕΚΔΟΣΗ 1.2

ΔΗ Μ Ι Ο ΥΡ Γ Ι Α W I K I με τ η χρήση τ η ς υπ ηρεσίας h t t p : / id ot.com /

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

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

ΕΡΓΑΣΙΑ. (στο μάθημα: Τεχνολογίες Εφαρμογών Διαδικτύου του Η εξαμήνου σπουδών του Τμήματος Πληροφορικής & Τηλ/νιών)

Αυτοματοποιημένη χαρτογραφία

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός

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

Διαδικτυακές Εφαρμογές Ενότητα 1: JPA

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

1. ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ

Διαδικτυακές Εφαρμογές Ενότητα 7: Προσπέλαση ΒΔ με το JDBC

Εφαρµογές διαδικτύου µε PHP

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

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

Το απεικονιστικό μοντέλο μορφοποίησης των CSS

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Ακαδημαϊκό Έτος , Χειμερινό Εξάμηνο Μάθημα: Εργαστήριο «Πληροφορική Υγείας» ΕΙΣΑΓΩΓΗ ΣΤΗΝ ACCESS

Βάσεις Δεδομένων. Ενότητα 6: Γλώσσα Structured Query Language -SQL. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

ΘΕΜΑ : ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΗΣΗΣ. ΔΙΑΡΚΕΙΑ: 1 περιόδους. 22/1/ :11 Όνομα: Λεκάκης Κωνσταντίνος καθ. Τεχνολογίας

Εγχειρίδιο Χρήσης Ψηφιακής Υπηρεσίας

Λίγα λόγια από το συγγραφέα...7

Οδηγίες για προσθήκη Web Frames Tools to the Quick Access Bar σε μεταγενέστερη έκδοση του Word

CSS Εργαστήριο 5. Θέση και διάταξη

Γραπτή εξέταση. Γαβαλάς Δαμιανός Δικτυακά Πολυμέσα ΙΙ Διάλεξη #12 η : Επανάληψη, προετοιμασία για τις γραπτές εξετάσεις

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Προγραμματισμός και Συστήματα στον Παγκόσμιο Ιστό Ενότητα 3: Server Side Scripting II PHP & MySQL

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

Βάσεις Δεδομένων. Εισαγωγή για το Εργαστήριο. Δρ. Τιάκας Ελευθέριος. Τμήμα Πληροφορικής ΑΠΘ

Θέματα Προγραμματισμού Διαδικτύου ~ MySQL & PHP ~

8o ΕΡΓΑΣΤΗΡΙΟ ΣΦΑΛΜΑΤΑ, ΜΟΡΦΟΠΟΙΗΣΗ ΥΠΟ ΟΡΟΥΣ ΚΑΙ ΓΡΑΦΗΜΑΤΑ

Αντικειμενοστρεφής Προγραμματισμός

Τμήμα Πληροφορικής ΑΠΘ

Hellenic European Law Concordance

ΤΕΙ Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών. Επώνυμο Όνομα: Α.Μ. : Εξάμηνο : Αίθουσα

Προγραμματισμός διαδικτυακών εφαρμογών με PHP

Transcript:

Εργαστήριο #10 Από τα προηγούμενα εργαστήρια......θα χρειαστείτε ορισμένες από τις οδηγίες μορφοποίησης CSS (ανατρέξτε στις εκφωνήσεις του 8 ου και 9 ου εργαστηρίου).! Οδηγίες Στη δυναμική δημιουργία ιστοσελίδων σχεδόν πάντα χρησιμοποιείται ένα σύστημα σχεσιακής βάσης δεδομένων (relational database) για την αποθήκευση της πληροφορίας που εμφανίζεται. Η PHP διαθέτει τις κατάλληλες βιβλιοθήκεςεπεκτάσεις (extensions) για να συνδεθείτε σε μια τέτοια βάση και να ανακτήσετε την επιθυμητή πληροφορία. Οι σχεσιακές βάσεις δεδομένων καλύπτονται εδώ κατά στοιχειώδη τρόπο και μόνο Την πλήρη θεωρία θα διδαχθείτε σε μεγαλύτερα εξάμηνα. Μπορείτε να ανατρέξετε στην ύλη της Εισαγωγής στην Επιστήμη των Η/Υ για μια εισαγωγή στο αντικείμενο των βάσεων δεδομένων και της γλώσσας SQL. Στο εργαστήριο θα χρησιμοποιηθεί η βάση δεδομένων MySQL, η οποία βρίσκεται εγκατεστημένη στον server δοκιμών του εργαστηρίου. Κωδικοί πρόσβασης στη βάση θα δοθούν κατά τη διεξαγωγή του εργαστηρίου. Στο σημερινό εργαστήριο θα ανακτήσετε πληροφορία που υπάρχει ήδη στη βάση δεδομένων σε κωδικοποίηση UTF-8: αρκεί λοιπόν μετά την ανάκτηση να απεικονίσετε την πληροφορία αυτή ως ιστοσελίδα! 1. Μια επανάληψη-αστραπή για τα χαρακτηριστικά των σχεσιακών βάσεων δεδομένων και τα πολύ απλά ερωτήματα SQL που θα χρειαστείτε στο σημερινό εργαστήριο: διαβάστε τα Παραρτήματα Α και Β! 2. Διαβάστε το Παράρτημα Γ για να μάθετε πώς μπορείτε να ανακτήσετε δεδομένα από τη βάση μέσω PHP. Στη συνέχεια, δημιουργήστε από τα δεδομένα αυτά ιστοσελίδα με έναν πίνακα HTML με τις εξής στήλες: Τίτλος, Συγγραφείς, Έκδοση, Εκδότης, ISBN. Μορφοποιήστε την ιστοσελίδα και τον πίνακα όπως ακριβώς στο 8 ο εργαστήριο. 3. Τα δεδομένα δεν πρέπει υποχρεωτικά να εμφανίζονται ως πίνακας! Δείτε το Παράρτημα Δ για οδηγίες δημιουργίας μιας εναλλακτικής ιστοσελίδας με τα δεδομένα των βιβλίων. Συμβουλευτείτε επίσης την εκφώνηση του 9 ου εργαστηρίου. (Ε10) 1

Παράρτημα A: Σχεσιακές (relational) βάσεις δεδομένων. Στο εργαστήριο θα χρησιμοποιήσετε μια σχεσιακή βάση δεδομένων, όπου η πληροφορία μπορεί να αναπαρασταθεί σε μορφή πινάκων, όπως στο σχήμα 1: Πίνακας: books id title authors isbn γραμμή (row): πληροφορίες για ένα βιβλίο Συνοπτικά: π.χ. η ιδιότητα title για το συγκεκριμένο βιβλίο Σχήμα 1 Κάθε γραμμή του πίνακα αντιστοιχεί σε μια ξεχωριστή οντότητα πληροφορίας, π.χ. αν ο πίνακας περιγράφει πληροφορίες βιβλίων, τότε κάθε γραμμή (row) μπορεί να περιέχει πληροφορία για ένα βιβλίο. Στις στήλες του πίνακα υπάρχουν οι ιδιότητες κάθε οντότητας, π.χ. στον ίδιο πίνακα βιβλίων μπορεί να υπάρχει μια στήλη με τον τίτλο του κάθε βιβλίου, μια στήλη με τους συγγραφείς του κλπ. Συνήθως μια στήλη περιέχει έναν αναγνωριστικό αριθμό (id), διαφορετικό για κάθε γραμμή. Αυτή η αρίθμηση μπορεί να χρησιμοποιηθεί για τη συγκρότηση σχέσεων μεταξύ πινάκων (στο επόμενο εργαστήριο). Στο σημερινό εργαστήριο θα χρησιμοποιήσετε έναν υπάρχοντα πίνακα πληροφοριών για διδακτικά βιβλία που μπορείτε να επιλέξετε στο Α' εξάμηνο. Ο πίνακας ονομάζεται books και κάθε γραμμή του περιγράφει ένα βιβλίο. Οι στήλες του πίνακα books είναι: 1. id: αναγνωριστικό γραμμής (δεν θα το χρησιμοποιήσετε στο εργαστήριο αυτό). 2. title: ο τίτλος του βιβλίου. 3. code: ο κωδικός του βιβλίου στον Εύδοξο. 4. authors: οι συγγραφείς του βιβλίου. 5. publisher: ο εκδοτικός οίκος του βιβλίου. 6. isbn: ο αριθμός ISBN του βιβλίου. 7. edition: ο αριθμός έκδοσης του βιβλίου. 8. imagelink: η διεύθυνση URL μιας εικόνας (thumbnail) του βιβλίου. (Ε10) 2

Παράρτημα Β: Structured Query Language (SQL). Μέσω της PHP μπορείτε να συνδεθείτε σε μια βάση δεδομένων για να αναζητήσετε πληροφορίες ή να εκτελέσετε εντολές. Η πρότυπη γλώσσα για την εισαγωγή ερωτημάτων και εκτέλεση εντολών σε σχεσιακές βάσεις δεδομένων ονομάζεται SQL (Structured Query Language). Παραδείγματα απλών ερωτήσεων ανάκτησης πληροφορίας: Εάν θέλετε να δείτε όλες τις στήλες του πίνακα με όνομα books για όλες τις γραμμές του, η σύνταξη της ερώτησης SQL θα ήταν: SELECT * FROM books; Συνήθως δεν θέλουμε την πληροφορία κάθε στήλης, αλλά μόνο ορισμένων από αυτές. Για να δείτε π.χ. μόνο τις στήλες title και authors, για όλες τις γραμμές του πίνακα books: SELECT title,authors FROM books; Και στις δύο προηγούμενες περιπτώσεις ερωτήσεων, η βάση δεδομένων θα επιστρέψει το σύνολο των γραμμών που υπάρχουν μέσα στον πίνακα, τη μια γραμμή μετά την άλλη. Στο επόμενο εργαστήριο θα δούμε πώς μπορούμε να επιλέξουμε ορισμένες γραμμές μόνο, με βάση κάποιο κριτήριο. Παράρτημα Γ: Προσπέλαση βάσης δεδομένων μέσω PHP. Η PHP διαθέτει μια σειρά από βιβλιοθήκες-επεκτάσεις (libraries-extensions) για την επικοινωνία με σχεσιακές βάσεις δεδομένων. Σκοπός των βιβλιοθηκών αυτών είναι να παρέχουν ένα API (σετ συναρτήσεων) που θα επιτρέψουν στο πρόγραμμά μας να συνδεθεί και να στείλει εντολές SQL στη βάση δεδομένων, καθώς και να λάβει τα δεδομένα που επιστρέφονται από τη βάση (σχήμα 2). κώδικας PHP: query( SELECT * FROM books; ); ερώτημα SQL: SELECT * FROM books; βιβλιοθήκη σύνδεσης με βάση δεδομένων βάση δεδομένων πρόγραμμα PHP Σχήμα 2 (Ε10) 3

Αν και η SQL είναι πρότυπη γλώσσα και υλοποιείται σε όλα τα συστήματα σχεσιακών βάσεων δεδομένων, κάθε βάση έχει τις δικές της ιδιομορφίες. Έτσι, η PHP διαθέτει ξεχωριστές βιβλιοθήκες ή drivers για κάθε γνωστό σύστημα βάσης. Η βιβλιοθήκη PHP Data Objects (PDO). (http://www.php.net/manual/en/book.pdo.php) Η βιβλιοθήκη-επέκταση PDO της PHP παρέχει μια μορφή αφαίρεσης κατά την πρόσβαση διαφορετικών βάσεων δεδομένων: προσφέρει ένα κοινό API για κάθε γνωστό σύστημα βάσης δεδομένων. Φυσικά, υπάρχουν ιδιαιτερότητες που δεν μπορούν να καλυφθούν κατά έναν κοινό τρόπο τέτοιες ιδιαιτερότητες όμως δεν θα συναντήσουμε στο εργαστήριο. Η βιβλιοθήκη PDO είναι γραμμένη με αντικειμενοστρεφή τρόπο (ναι, η PHP διαθέτει και τέτοια χαρακτηριστικά!). Στις οδηγίες που ακολουθούν θα δείτε τη χρήση αντικειμένων και μεθόδων κλάσεων. Ένας πολύ γρήγορος οδηγός χρήσης (όχι συγγραφής!) κλάσεων ακολουθεί: Πώς δημιουργούμε το αντικείμενο μιας κλάσης; $ob = new aclassname(param1,param2,...); Πώς καλούμε μια συνάρτηση (μέθοδο) ενός αντικειμένου; $ob->funcname(); 1. Σύνδεση με τη βάση δεδομένων. Πριν οποιαδήποτε ερώτηση ή άλλη εντολή προς τη βάση δεδομένων, πρέπει να ζητήσουμε από την PHP να συνδεθεί με τη βάση, η οποία εδώ ονομάζεται labdb: $db = new PDO('mysql:host=localhost;dbname=labdb', 'username','password'); Ο πιο πάνω κώδικας δημιουργεί ένα νέο αντικείμενο της κλάσης PDO, το οποίο αντιπροσωπεύει τη σύνδεση με την επιθυμητή βάση δεδομένων. Τα ορίσματα για την κατασκευή του αντικειμένου είναι: Το πρώτο όρισμα ( Data Source Name - DSN) περιγράφει τη βάση που θα συνδεθείτε: το είδος της βάσης (MySQL), τον υπολογιστή (ίδιο με τον webserver, localhost) και το όνομα της βάσης για το εργαστήριο (labdb). Ο κωδικός χρήστη της βάσης (δεν σχετίζεται απαραίτητα με λογαριασμό χρήστη στο σύστημα, αντικαταστήστε το με το όνομα που θα σας δοθεί). Το κωδικό κλειδί για τον χρήστη της βάσης (παρατηρήστε ότι το κλειδί αναγράφεται μη κωδικοποιημένο! Πρέπει να εξασφαλίσετε ότι δεν μπορούν να δουν άλλοι το πρόγραμμα PHP! Αντικαταστήστε το με το όνομα που θα σας δοθεί). 2. Τερματισμός σύνδεσης. (Ε10) 4

Όταν ολοκληρώσετε την επικοινωνία με τη βάση, καλό είναι να κλείσετε τη σύνδεση: $db = null;! 3. Χειρισμός σφαλμάτων σύνδεσης. Η δημιουργία του αντικειμένου τύπου PDO μπορεί να προκαλέσει ένα σφάλμα (exception) σύνδεσης, όταν η βάση δεν είναι διαθέσιμη για οποιοδήποτε λόγο. Όταν συμβεί αυτό, η PHP διακόπτει την εκτέλεση του προγράμματος και αρχίζει να επιστρέφει από τις συναρτήσεις (αν η εκτέλεση βρίσκεται μέσα σε συνάρτηση). Αν εσείς δεν πιάνετε (εντολή catch) πουθενά το σφάλμα, το πρόγραμμα διακόπτεται οριστικά και η PHP τυπώνει ένα μήνυμα λάθους. Επειδή το μήνυμα αυτό δε ενδιαφέρει τον τελικό χρήστη (περιέχει τεχνικές λεπτομέρειες) και -ακόμα χειρότερα- μπορεί να αποκαλύψει απόρρητες πληροφορίες στον κακόβουλο χρήστη (όπως π.χ. με ποιο username και password δοκιμάσατε να συνδεθείτε στη βάση), πρέπει πάντα να το πιάσετε! Το πώς θα γίνει αυτό φαίνεται στο επόμενο υπόδειγμα κώδικα, το οποίο πρέπει να αποτελέσει τη βάση για το δικό σας πρόγραμμα. try { $db = new PDO('mysql:host=localhost;dbname=labdb', 'username','password'); // βάλτε εδώ οποιαδήποτε λειτουργία της βάσης $db = null; catch (PDOException $e) { echo 'database error';! 4. Απλά SQL ερωτήματα (SELECT). Στο σημερινό εργαστήριο θα χρησιμοποιήσετε στατικά ερωτήματα SELECT προς τη βάση δεδομένων. Στατικά σημαίνει προκαθορισμένα ερωτήματα που δεν εξαρτώνται από τιμές μεταβλητών ή από δεδομένα που έδωσε ο χρήστης. Αν το ερώτημα είναι δυναμικό, τότε η μέθοδος που ακολουθεί δεν είναι η πιο κατάλληλη και ίσως δημιουργεί προβλήματα ασφάλειας! Δυναμικά ερωτήματα θα δούμε στο επόμενο εργαστήριο. (Ε10) 5

Ένα στατικό SQL ερώτημα SELECT, για την ανάκτηση μίας ή περισσότερων γραμμών από ένα πίνακα της βάσης, εκτελείται με τη βοήθεια της μεθόδου query() του αντικειμένου τύπου PDO που έχετε δημιουργήσει κατά τη σύνδεση με τη βάση: // $db είναι το αντικείμενο τύπου PDO της σύνδεσης $st = $db->query('select title,authors from books'); Η συνάρτηση (μέθοδος) query() δέχεται ως όρισμα το ερώτημα SQL ως string και επιστρέφει ένα αντικείμενο τύπου PDOStatement, μέσω του οποίου θα ανακτήσουμε τα αποτελέσματα. Κάθε γραμμή (row) αποτελεσμάτων επιστρέφεται ως ένα array της PHP, με δείκτες τόσο αριθμητικούς (οι στήλες με τη σειρά που τις ζητήσατε στο ερώτημα SELECT) όσο και με το όνομα της στήλης, όπως δείχνει το παράδειγμα του σχήματος 3: Πίνακας: books select title,authors from books id title authors isbn... αβγ δεζ... Σχήμα 3 παράδειγμα γραμμής αποτελέσματος: array ( 'title' => 'αβγ' 0 => 'αβγ' 'authors' => 'δεζ' 1 => 'δεζ' ) α) Ανάκτηση όλων των αποτελεσμάτων ως λίστα. Στο παράδειγμα που ακολουθεί, χρησιμοποιούμε τη μέθοδο fetchall() του αντικειμένου PDOStatement για να ανακτήσουμε το σύνολο των γραμμών ως λίστα, την οποία μπορούμε να διασχίσουμε και να επεξεργαστούμε στη συνέχεια: $st = $db->query('select title,authors from books'); $result = $st->fetchall(); foreach ($result as $row) { // επεξεργασία μιας γραμμής αποτελεσμάτων // π.χ. echo $row['authors']; // ή echo $row[0]; β) Ανάκτηση των αποτελεσμάτων γραμμή προς γραμμή. (Ε10) 6

Μπορείτε επίσης να προσπελάσετε μία-μία τις γραμμές του αποτελέσματος με τη μέθοδο fetch(), όπως στο επόμενο παράδειγμα: $st = $db->query('select title,authors from books'); while ($row = $st->fetch()) { // επεξεργασία μιας γραμμής αποτελεσμάτων // π.χ. echo $row['authors']; // ή echo $row[0]; Παράρτημα Δ: Εμφάνιση δεδομένων ως λίστα HTML. Το ζητούμενο είναι να εμφανίσετε μια ιστοσελίδα με όλα τα βιβλία της βάσης, μορφοποιημένη όπως φαίνεται στο σχήμα 4: λίστα ul στοιχείο li... στοιχείο img (float) στοιχείο li border-bottom του στοιχείου li στοιχείο li... Σχήμα 4 Για να αποφύγετε την εμφάνιση κουκίδων (bullets) της λίστας ul, χρησιμοποιήστε την ιδιότητα CSS list-style-type: none. Επίσης, εξουδετερώστε σε μηδέν το αριστερό περιθώριο (margin) και παραγέμισμα (padding) του στοιχείου ul. Αυτό πρέπει να γίνει γιατί η λίστα έχει εξ'ορισμού αριστερό περιθώριο για τις κουκίδες. (Ε10) 7

Τι συμβαίνει όταν τα γράμματα είναι πολύ μικρά; Οι εικόνες ως floats βγαίνουν έξω από το στοιχείο li που τις περιέχει! Για να το αποφύγετε αυτό και να αναγκάσετε το στοιχείο li να περικλείει την εικόνα του, πρέπει να προσθέσετε ως τελευταίο στοιχείο μέσα στο li, ένα στοιχείο με την ιδιότητα clear:both (βλ. 9 ο εργαστήριο). Ποιο στοιχείο όμως; Θα μπορούσατε να βάλετε ένα κενό <div>. Συνήθως όμως εισάγεται τεχνητά ένα μη ορατό στοιχείο με τον επιλογέα :after, ως εξής: li:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; Ο επιλογέας li:after εισάγει μέσα στο στοιχείο li, και αμέσως μετά το τελευταίο παιδί του, ένα μη ορατό στοιχείο απλού κειμένου με την ιδιότητα clear:both. (Ε10) 8