Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Προγραμματισμός Παγκόσμιου Ιστού 10 η Διάλεξη Δημοσθένης Κυριαζής Δευτέρα 22 Μαΐου 2017
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 2
Client-Server & PHP Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 3
Βασική σύνταξη ΡΗΡ Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 4
Μεταβλητές (2/5) <?php?> $txt="hello World!"; $x=5; $y=10.5; Υποστηρίζονται οι τύποι δεδομένων int: 5, 7 15 float, double, real: 0.56, 3.14 string: "Hello", "Red 15" bool, boolean: true/false array: ["Fiat", "Mercedes", "Nissan"] οbject: τύπος αντικειμένου για σύνθετα αντικείμενα NULL: «όχι τιμή» Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 5
Πίνακες Ένα array αποθηκεύει πολλαπλές τιμές σε μία μοναδική μεταβλητή Τρεις τύποι πινάκων Array με δείκτες - Πίνακες με αριθμητικό δείκτη Associative array - Πίνακες με κλειδιά ονομάτων Πολυδιάστατα arrays - Πίνακες που περιέχουν μία ή περισσότερες συστοιχίες Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 6
Associative arrays Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 7
Συμβολοσειρές Διπλά εισαγωγικά > αντικατάσταση Μονά εισαγωγικά > μη-αντικατάταση Συνένωση με τον τελεστή τελεία Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 8
Βρόχος foreach Διευκολύνει την πρόσβαση στις τιμές ενός array Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 9
Superglobals (2/2) Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 10
Προκαθορισμένες τιμές ορισμάτων Μπορούμε να θέσουμε μια προκαθορισμένη τιμή σε ένα ή περισσότερα ορίσματα, ώστε αν δεν αποστείλουμε τιμή να λαμβάνει αυτή Ορισμός με προκαθορισμένα ορίσματα Παράδειγμα Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 11
Επιστροφή τιμής Η συνάρτηση μπορεί επίσης να μας επιστρέφει κάποια τιμή. Αυτό γίνεται με την εντολή return Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 12
Αντικείμενα Δήλωση κλάσεων με τη λέξη-κλειδί class Προσοχή: τα ονόματα των κλάσεων είναι case-sensitive Ενσωματωμένη συνάρτηση print_r: εκτυπώνει πληροφορίες για το αντικείμενο σε αναγνώσιμη μορφή 13
Δημιουργία αντικειμένων Με τη λέξη-κλειδί new $object = new User; $object = new User('John Doe', 'j0hnd03'); Μια κλάση μπορεί να απαιτεί ή να απαγορεύει τα ορίσματα στην αρχικοποίηση Μπορεί επίσης να τα επιτρέπει, αλλά να μην τα απαιτεί Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 14
Πρόσβαση σε αντικείμενα (1/2) Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 15
Πρόσβαση σε αντικείμενα (2/2) Πρόσβαση στην (public) ιδιότητα property αντικειμένου $object με: $object->property και όχι με $object-> $property Με παρόμοιο τρόπο καλούμε μεθόδους: $object->save_user(); Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 16
Κλωνοποίηση αντικειμένων Έξοδος Έξοδος 17
Χειρισμός φορμών Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 18
Χρήση της Superglobal μεταβλητής $_REQUEST Χρησιμοποιείται για την πρόσβαση δεδομένων φόρμας που έχουν αποσταλεί είτε με μέθοδο GET είτε με μέθοδο POST Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 19
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 20
Δημιουργία και επιλογή βάσης δεδομένων Δημιουργία με την εντολή CREATE MariaDB [(none)]> CREATE DATABASE mydb; Επιλογή ΒΔ προς χρήση με την εντολή USE MariaDB [(none)]> USE mydb; MariaDB [mydb]> Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 21
Δημιουργία πίνακα Mε την εντολή CREATE CREATE TABLE classics (author VARCHAR(128), title VARCHAR(128), type VARCHAR(16), year CHAR(4)); Δημιουργεί τον πίνακα με όνομα «classics» και πεδία author, title, type, year Κάθε πεδίο ακολουθείται από τον τύπο του Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 22
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 23
Τύποι δεδομένων VARCHAR(n): συμβολοσειρά μεταβλητού μήκους n<=65535 CHAR (n): συμβολοσειρά μήκους n<=255 BINARY (n): ακολουθία από n<=255 bytes που δεν αντιστοιχούν σε χαρακτήρες VARBINARY (n): ακολουθία από n<=65535 bytes που δεν αντιστοιχούν σε χαρακτήρες Π.χ. για την αποθήκευση ενός μικρού αρχείου εικόνας GIF Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 24
Αριθμητικοί τύποι δεδομένων Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 25
Ημερομηνίες Ο τύπος TIMESTAMP δε διαφέρει στη μορφή από τον τύπο DATETIME Μόνη διαφορά είναι ότι αν δεν εισαχθεί για κάποια εγγραφή, εισάγεται αυτόματα από το σύστημα ο τρέχων χρόνος Στον DATETIME αντίθετα, η τιμή γίνεται NULL Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 26
Τύπος AUTOINCREMENT Χρήσιμος για εξασφάλιση μοναδικότητας κάθε εγγραφής του πίνακα Μπορούμε να προσθέσουμε στήλη με όνομα id που είναι τέτοιου τύπου ALTER TABLE classics ADD id INT UNSIGNED NOT NULL AUTOJNCREMENT INT UNSIGNED: μη αρνητικός ακέραιος NOT NULL: εξασφαλίζεται ότι το πεδίο θα έχει πάντα τιμή AUTOINCREMENT: αυξάνει κατά 1 αυτόματα για κάθε νέα εγγραφή Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 27
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 28
Πράξεις σε πίνακες (1/3) Προβολή περιγραφής MariaDB [mydb]> DESCRIBE classics; Διαγραφή στήλης (πεδίου) MariaDB [mydb]> ALTER TABLE classics DROP id; Εισαγωγή δεδομένων στον πίνακα INSERT INTO classics(author, title, type, year) VALUES('Mark Twain','The Adventures of Tom Sawyer', 'Fiction','1876'); INSERT INTO classics(author, title, type, year) VALUES('Charles Darwin','The Origin of Species', 'Non-Fiction','1856'); Αν δώσουμε τιμές όλα τα πεδία, δε χρειάζεται να δώσουμε τα ονόματά τους εντός παρενθέσεως δίπλα από τον πίνακα
Πράξεις σε πίνακες (2/3) Προβολή όλων των περιεχομένων SELECT * FROM classics; Μετονομασία πίνακα ALTER TABLE classics RENAME prel900; Αλλαγή τύπου ενός πεδίου (στήλης) ALTER TABLE classics MODIFY year SMALLINT; Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 30
Πράξεις σε πίνακες (3/3) Προσθήκη στήλης ALTER TABLE classics ADD pages SMALLINT UNSIGNED; Διαγραφή στήλης ALTER TABLE classics DROP pages; Μετονομασία στήλης ALTER TABLE classics CHANGE type category VARCHAR(16); Διαγραφή πίνακα: DROP TABLE classics; Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 31
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 32
Ερωτήματα ανάκτησης δεδομένων (1/5) Βασική Σύνταξη SELECT something FROM tablename; To «something» μπορεί να είναι * που σημαίνει όλα τα πεδία λίστα συγκεκριμένων πεδίων, χωριζόμενων με κόμματα SELECT author,title FROM classics; SELECT title,isbn FROM classics; Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 33
Ερωτήματα ανάκτησης δεδομένων (2/5) Απαρίθμηση εγγραφών πίνακα SELECT COUNT(*) FROM classics Ανάκτηση διακριτών εγγραφών μόνο, στο αποτέλεσμα SELECT DISTINCT author FROM classics; σε περίπτωση που ο πίνακας έχει τον ίδιο συγγραφέα > 1 φορές Διαγραφή εγγραφής DELETE FROM classics WHERE title='little Dorrit'; Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 34
Ερωτήματα ανάκτησης δεδομένων με συνθήκη WHERE (3/5) Παραδείγματα SELECT author,title FROM classics WHERE author="mark Twain"; SELECT author,title FROM classics WHERE isbn="9781598184891 ; Μπορούμε να έχουμε και σύνθετες συνθήκες SELECT author,title FROM classics WHERE author="mark Twain" AND year="1876"; SELECT author,title FROM classics WHERE isbn="9781598184891" OR (year="1876" AND category="fiction"); Οι παρενθέσεις ορίζουν τη σειρά αποτίμησης των λογικών εκφράσεων Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 35
Ερωτήματα ανάκτησης δεδομένων με διάταξη ORDER BY (4/5) Μπορούμε να διατάξουμε τις εγγραφές που επιστρέφονται SELECT author,title,year FROM classics WHERE author="mark Twain" ORDER BY year; Υποτίθεται ότι > 1 εγγραφές ικανοποιούν author ="Mark Twain... και διάταξη με φθίνουσα σειρά του έτους SELECT author,title,year FROM classics WHERE author="mark Twain" ORDER BY year DESC; Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 36
Ερωτήματα ανάκτησης δεδομένων με ομαδοποίηση GROUP BY (5/5) Μπορούμε να ομαδοποιήσουμε τις επιστρεφόμενες εγγραφές SELECT author,title,year FROM classics GROUP BY author; Υποτίθεται ότι υπάρχουν > 1 καταχωρήσεις ανά συγγραφέα Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 37
Σύνοψη χρήσιμων εντολών SQL ALTER Μεταβολή ΒΔ ή πίνακα CREATE Δημιουργία ΒΔ DELETE Διαγραφή εγγραφής από πίνακα DESCRIBE Περιγραφή στηλών πίνακα DROP Διαγραφή ΒΔ ή πίνακα EXIT/QUIT Έξοδος από το τερματικό INSERT Εισαγωγή εγγραφών σε πίνακα UPDATE Ενημέρωση πεδίου εγγραφής USE Χρήση συγκεκριμένης ΒΔ Οι εντολές γράφονται με κεφαλαία κατά σύμβαση. Η MySQL δέχεται και πεζά 38
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 39
Διαδικασία Σύνδεση στον διακομιστή (server) του ΣΔΒΔ Επιλογή Βάσης Δεδομένων από τον διακομιστή Πολλές ΒΔ μπορεί να είναι διαθέσιμες στον ίδιο διακομιστή Δημιουργία συμβολοσειράς ερωτήματος προς τη ΒΔ Εκτέλεση ερωτήματος προς τη ΒΔ Ανάκτηση αποτελεσμάτων ερωτήματος και προβολή σε HTML Αποσύνδεση από το διακομιστή του ΣΔΒΔ Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 40
Σύνδεση με διακομιστή ΒΔ Το ΣΔΒΔ προσβαίνεται μέσω διακομιστή Για σύνδεση σε αυτόν χρησιμοποιείται η (ενσωματωμένη) κλάση mysqli: $conn = new mysqli($host, $uname, $passwd, $db); Ορίσματα $host: διεύθυνση του διακομιστή ΣΔΒΔ $uname: όνομα χρήστη στον διακομιστή ΣΔΒΔ $passwd: κωδικός χρήστη στον διακομιστή ΣΔΒΔ $db: όνομα βάσης στην οποία θέλουμε να εργαστούμε Αν δε θέλουμε να δηλώσουμε βάση, παραλείπουμε το όρισμα $db $conn = new mysqli($host, $uname, $passwd); 41
Παράδειγμα Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 42
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 43
Δημιουργία ΒΔ Κατόπιν σύνδεσης στο ΣΔΒΔ Δημιουργούμε νέα βάση δεδομένων με τη μέθοδο mysqli::query // Create database $sql = "CREATE DATABASE mydb"; if ($conn->query($sql) === TRUE) { echo "DB created successfully"; } else { echo "Error creating DB: ". $conn->error; } Η μέθοδος mysql::query εκτελεί ερωτήσεις SQL προς το ΣΔΒΔ Επιστρέφει το αποτέλεσμα Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 44
Παράδειγμα Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 45
Μέσω phpmyadmin Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 46
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 47
Ερωτήσεις SQL στη ΒΔ Γίνονται με τη μέθοδο mysql::query Όρισμα: Συμβολοσειρά ερωτήματος SQL Επιστρέφει Είτε πίνακα με τα αποτελέσματα της ερώτησης ή ότι η ερώτηση εκτελέστηκε επιτυχώς ανάλογα με το είδος του ερωτήματος Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 48
Δημιουργία πίνακα στη ΒΔ (SQL statement) Ερώτημα SQL CREATE TABLE phonebook ( ) id INT NOT NULL, PRIMARY KEY(id), lname VARCHAR(20) NOT NULL, fname VARCHAR(20), address VARCHAR(30), age INT, phone VARCHAR(1O) Παρατήρηση Επιλέγεται το πεδίο id σαν πρωτεύον κλειδί Θα πρέπει η τιμή του να διαφέρει σε κάθε εγγραφή 49
Δημιουργία πίνακα στη ΒΔ (php) Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 50
Μέσω phpmyadmin Επιλέγοντας Databases και, κατόπιν, τη βάση με το όνομά της (mydb) Από τη λίστα των πινάκων μπορούμε να δούμε τα περιεχόμενά τους, να τους διαγράψουμε και να τους μεταβάλουμε Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 51
Παράδειγμα <?php $conn = new mysqli("localhost","root","mydb"); $sql="insert INTO PhoneBook VALUES ('O', 'Giorgos', 'Papadopoulos', 'Odou 1', '11111', '2101111777')"; $conn->query($sql); if (!$conn->error) echo "Successful record insertion.<br>"; $conn->close();?> Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη
Μέσω phpmyadmin Mε επιλογή Browse, έχοντας επιλέξει τον πίνακα που μας ενδιαφέρει Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 53
Ανάκτηση δεδομένων: 1-1 πεδίο Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 54
Ανάκτηση δεδομένων: 1-1 εγγραφή Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 55
Ανάκτηση δεδομένων: χρήση βρόχου while Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 56
Παρατηρήσεις β Η μέθοδος fetch_array μπορεί να επιστρέφει Associative Array: με όρισμα MYSQLLASSOC Αριθμημένο Array: με όρισμα MYSQLLNUM Και τα δύο: με όρισμα MYSQLLBOTH Σε κάθε κλήση η μέθοδος επιστρέφει την επόμενη εγγραφή Αν δεν υπάρχει επόμενη επιστρέφει NULL To NULL ισοδυναμεί με FALSE στη συνθήκη while Είναι καλό να «κλείνετε» τη μεταβλητή αποτελεσμάτων Απλευθερώνει μνήμη που δεσμεύτηκε για τη φύλαξή τους Ισοδύναμα μπορείτε να καλείτε τη μέθοδο free() $result->free(); Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 57
Παράδειγμα ενημέρωσης δεδομένων Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 58
Σημερινή διάλεξη Σύνοψη προηγούμενης διάλεξης SQL Δημιουργία ΒΔ Δημιουργία πίνακα Τύποι δεδομένων Πράξεις σε πίνακα Ερωτήματα ανάκτησης δεδομένων PHP & SQL Διαδικασία Σύνδεση με διακομιστή ΒΔ Δημιουργία ΒΔ Ερωτήσεις SQL στη ΒΔ Ολοκληρωμένο παράδειγμα 59
Σχεδιασμός φόρμας Στόχος Φόρμα εισαγωγής εγγραφών Προβολή υπαρχουσών εγγραφών Δυνατότητα διαγραφής εγγραφών Όλα σε ένα PHP πρόγραμμα 60
ΒΔ Για το παράδειγμα αυτό θεωρούμε μία ΒΔ με όνομα mydb Η βάση περιλαμβάνει ένα μοναδικό πίνακα που δημιουργείται με CREATE TABLE classics ( author VARCHAR(128), title VARCHAR(128), category VARCHAR(16), year SMALLINT, isbn CHAR(13)); Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 61
Διαχείριση διαγραφής Αν έχουν τεθεί superglobals $_POST['delete'], $_POST['isbn'] γνωρίζουμε ότι πατήθηκε κουμπί διαγραφής κάποιας εγγραφής 62
Διαχείριση εισαγωγής εγγραφής Αν έχουν τεθεί οι συγκεκριμένες superglobals, τότε εισαγωγή νέας εγγραφής. 63
Προβολή φόρμας εισαγωγής εγγραφής Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη
Προβολή εγγραφών Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη 65
Συνάρτηση μορφοποίησης εισόδου για τη ΒΔ $result->close(); $conn->close(); function get_post($conn, $var) { return $conn->real_escape_string($_post[$var]); } Η μέθοδος real_escape_string «καθαρίζει» τη συμβολοσειρά Από «άσχετους» χαρακτήρες που δε θα πρέπει να εισαχθούν στη βάση Συνήθης πρακτική όταν εισάγουμε δεδομένα που διαβάστηκαν από φόρμα Προγραμματισμός Παγκόσμιου Ιστού, 10η Διάλεξη