You are on page 1of 155

Πληροφοριακά Συστήματα Bάσεων Δεδομένων

(MySQL - PHP)

Αθ. Λουκόπουλος, Π. Μπάγκος

Πανεπιστήμιο Θεσσαλίας

ΕΙΣΑΓΩΓΗ ΣΤΗΝ HTML


Περιεχόμενα
 Τι είναι HTML και CSS;
 Περιεχόμενο και μορφοποίηση.
 Πότε χρησιμοποιώ το ένα και πότε το άλλο.

 Βασική δομή της HTML.


 XML

 DOCTYPE

 Τίτλοι,παράγραφοι, επικεφαλίδες
 Λίστες, σύνδεσμοι, εικόνες

 Πίνακες, φόρμες

HTML και CSS


 HTML: Περιγράφει το περιεχόμενο
 HyperText Markup Language
 CSS: Περιγράφει τη μορφοποίηση
 Cascading StyleSheets

 Σωστός διαχωρισμός από την αρχή, πάντα


HTML CSS
Περιεχόμενο Μορφοποίηση
 Τίτλος  Χρώματα
 Κείμενο  Θέση
 Λίστα  Μέγεθος
 Πίνακας  Στοίχιση
 Εικόνα  Πλαίσια
 Σύνδεσμος  Γραμμές
 Φόντο

Παράδειγμα: Βιβλίο
Περιεχόμενο Μορφοποίηση
 Τίτλος  Μέγεθος τίτλου

 Συγγραφέας  Θέση ονόματος

 Επικεφαλίδες συγγραφέα
κεφαλαίων  Στοίχιση επικεφαλίδων

 Κείμενο  Περιθώριο κειμένου

 Χωρισμός κεφαλαίων  Κενές σελίδες ανάμεσα

 Χωρισμός παραγράφων στα κεφάλαια


 Υποσημειώσεις  Υποσημειώσεις με
πλάγια γράμματα
Περιεχόμενο ή μορφοποίηση;
 Τα γράμματα μιας παραγράφου έχουν γραμματοσειρά
Calibri.
 Ο τίτλος του βιβλίου είναι: Τα ταξίδια του Γκιούλιβερ.
 Ο τίτλος του βιβλίου είναι γραμμένος με μπλε γράμματα.
 Το βιβλίο έχει 30 κεφάλαια.
 Υπάρχει μια κενή σελίδα μετά από κάθε κεφάλαιο.
 Στην πρώτη παράγραφο, στο όνομα του ήρωα έχει δοθεί
έμφαση.
 Σε κάθε παράγραφο, το πρώτο γράμμα εμφανίζεται ως
αρχίγραμμα.

XML
 Μέθοδος αναπαράστασης
δεδομένων
 Tags και Elements

 Attributes
Tags
 Κάθε tag ξεκινάει με < και τελειώνει με >.
 Υπάρχουν τριών ειδών tags:
 Starttags: <date>
 End tags: </date>

 Empty-element tags: <new-line />

 Κάθε tag έχει ένα όνομα

Elements
 Κάθε element ξεκινάει με ένα start tag και τελειώνει
με ένα end tag, ή αποτελείται μόνο από ένα empty-
element tag.
 <date>16/10/2011</date>

 <new-line />

 Περιέχουν κείμενο ή/και άλλα elements:


 <greeting>Hello, <strong>World</strong></greeting>

 Δενδρική δομή: Ό,τι ανοίγει πρώτο κλείνει τελευταίο.


Παράδειγμα
<album>
<title>American Idiot</title>
<artist>Green Day</artist>
<date>September 21, 2004</date>
<songs>
<song>
<title>American Idiot</title>
<length>2:54</length>
</song>
<song>
<title>Jesus of suburbia</title>
<length>9:08</length>
</song>
</songs>
</album>

Ιεραρχία των elements


 Το a είναι πατέρας του b <a>
Το a περιέχει άμεσα το b
<b>
 Το b είναι παιδί του a <c></c>
Το b περιέχεται άμεσα στο a <d />
 Το a είναι πρόγονος του c </b>
Το a περιέχει το c </a>
 Το c είναι απόγονος του a
Το c περιέχεται στο a

 Το c είναι αδερφός του d


Το c και το d έχουν κοινό πατέρα.
Attributes
 Στα start tags και empty-element tags μπορούμε να αναθέσουμε
attributes
 Κάθε attribute έχει όνομα και τιμή
 Όνομα από τιμή χωρίζονται με =
 Η τιμή περιλαμβάνεται σε “εισαγωγικά”
 Μονά ή διπλά ό,τι προτιμάτε
 Τα attributes χωρίζονται με κενό από το όνομα του tag και από τα άλλα
attributes
 <user id=“120” name=“Johnny”>

(X)HTML
 Γράφουμε σε αρχεία .html
 Τα επεξεργαζόμαστε με απλό κειμενογράφο
 Περιέχει κώδικα σε μορφή XML
 Γίνεται interpret και όχι compile
 Τρέχει μέσα στους browsers
 Τρέχει και τοπικά
Βασική δομή μιας σελίδας
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<body>
Hello World!
</body>
</html>

DOCTYPE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

 Δηλώνει την έκδοση της HTML


 Κάνει τον browser να συμπεριφέρεται σωστά
 Το κάνουμε copy/paste στην αρχή της σελίδας
<html>, <head>, <title> και <body>
 <html>: Περιέχει ολόκληρη τη σελίδα
 <head>: Περιέχει meta-πληροφορίες για τη σελίδα
 <title>: Περιέχει τον τίτλο της σελίδας
 <body>: Περιέχει το περιεχόμενο της σελίδας

 Το <html> πρέπει υποχρεωτικά να περιέχει μόνο


<head> και <body>, με αυτή τη σειρά. Το <title>
πρέπει να περιέχεται στο <head>

Ελάχιστα περιεχόμενα μιας σελίδας


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My First Page</title>
</head>
<body>
Hello World!
</body>
</html>
Παράγραφοι
 Η HTML αγνοεί τις αλλαγές γραμμών και τα κενά.
 Πολλά κενά και αλλαγές γραμμών αντικαθίστανται από ένα
μόνο κενό.

Αυτή είναι η πρώτη μου σελίδα.


Είμαι ενθουσιασμένος!

Αυτή είναι η πρώτη μου σελίδα. Είμαι ενθουσιασμένος

Παράγραφοι
 <p>: Ορίζει μια παράγραφο (μνημονικό: paragraph)

<p>Αυτή είναι η πρώτη μου σελίδα.</p>


<p>Είμαι ενθουσιασμένος!</p>

Αυτή είναι η πρώτη μου σελίδα.


Είμαι ενθουσιασμένος!
Αλλαγή γραμμής
 <br />: Ορίζει μια αλλαγή γραμμής (μνημονικό: break)

 Προσοχή: Δεν πρέπει να χρησιμοποιείται για μορφοποίηση!

 Αυξομειώνουμε την κάθετη απόσταση με μορφοποίηση


μέσω CSS.

Έμφαση
 <em>: Δίνει έμφαση σε ένα τμήμα κειμένου (emphasis)
 <strong>: Δίνει ιδιαίτερη έμφαση σε ένα τμήμα κειμένου (strong
emphasis)

 Συνηθίζεται το <em> να μορφοποιείται με πλάγια και το <strong>


με έντονα γράμματα.

 Δεν χρησιμοποιούμε <strong> και <em> για μορφοποίηση!

 Ορίζουμε τι θα έχει έντονη ή πλάγια γραφή με CSS. Οι ετικέτες


αυτές καθορίζουν μόνο την έμφαση στο περιεχόμενο.
Επικεφαλίδες
 <h1>: Επικεφαλίδα 1ου επιπέδου (headline)
 <h2>: Επικεφαλίδα 2ου επιπέδου.
 …
 <h6>: Επικεφαλίδα 6ου επιπέδου.

 Η <h1> χρησιμοποιείται 1 φορά.

 Επόμενη πρέπει να βρίσκεται κάτω από προηγούμενη.

 Δεν υπάρχει h7

Επικεφαλίδες
<h1>

<h2>

<h2>
Λίστες
 Αριθμημένες: Σειρά έχει σημασία, χρήση <ol>
 Μη αριθμημένες: Σειρά δεν έχει σημασία, χρήση <ul>

(μνημονικά: ordered list, unordered list)

 <li>: ένα στοιχείο μιας λίστας (μνημονικό: list item)

 Πανομοιότυπος HTML κώδικας για την περιγραφή τους.


<ol>
<li>Πρώτο στοιχείο</li>
<li>Δεύτερο στοιχείο</li>
<li>Τρίτο στοιχείο</li>
</ol>

Λίστες
Αριθμημένες Μη αριθμημένες
 Μέρες της εβδομάδας  Λίστα για τα ψώνια
 Εξάμηνα φοίτησης  Μαθήματα σε κάθε εξάμηνο
 Νικητές της Formula 1  Μαθητές στο αμφιθέατρο
 Εκδόσεις του Photoshop  Οι e-mail διευθύνσεις μου
 Κεφάλαια ενός βιβλίου  Οι σελιδοδείκτες μου
 Αυτή η λίστα
Αριθμημένη λίστα:
Δρόμος προς την επιτυχία

<ol>
<li>Μάθε HTML</li> 1. Μάθε HTML
<li>Μάθε CSS</li> 2. Μάθε CSS
<li>Μάθε Javascript</li> 3. Μάθε Javascript
<li>Μάθε PHP</li> 4. Μάθε PHP
<li>Μάθε MySQL</li> 5. Μάθε MySQL
<li>???</li> 6. ???
<li>PROFIT!!!</li> 7. PROFIT!!!
</ol>

Μη αριθμημένη λίστα: Σελιδοδείκτες

<ul>
• Gmail
<li>Gmail</li>
• Facebook
<li>Facebook</li>
• Thmmy
<li>Thmmy</li>
• Άστρα και όραμα
<li>Άστρα και όραμα</li>
• Πιτσαρία
<li>Πιτσαρία</li>
</ul>
Εμφώλευση
 Η απλότητα και η δύναμη της HTML!
 Επιτρέπεται η εμφώλευση σε λίστες, παραγράφους κλπ.

<h1>Λόγοι που έρχομαι στο σεμινάριο</h1>


<ol>
<li>Για να εντυπωσιάσω:
<ul>
<li>Τη γάτα μου</li>
<li>Το σκύλο μου</li>
<li>Την Αννούλα</li>
</ul>
<li>Για να μάθω</li>
<li>Για να γίνω διάσημος</li>
</ol>

Λόγοι που έρχομαι στο σεμινάριο


1. Για να εντυπωσιάσω:
• Τη γάτα μου
• Το σκύλο μου
• Την Αννούλα
2. Για να μάθω
3. Για να γίνω διάσημος
Διευθύνσεις
 Απόλυτες: Ξεκινούν με το πρωτόκολλο
 “http://www.google.com”
 “http://www.htmldog.com/guides/htmlbeginner/links”

 Σχετικές: Παράγονται με βάση την παρούσα σελίδα


 “foo” στο http://mysite.gr/bar -> http://mysite.gr/bar/foo
 “/foo” στο http://mysite.gr/bar -> http://mysite.gr/foo
 “#foo” στο http://mysite.gr/bar -> http://mysite.gr/bar#foo

Σύνδεσμοι
<a> Ορίζει έναν σύνδεσμο (μνημονικό: anchor)

href: ορίζει τον προορισμό του συνδέσμου


Σύνδεσμοι
<a href=“http://htmldog.com”>Μάθε HTML!</a>

Μάθε HTML!

Περιοχές εγγράφου
id: Ονομάζει μια ιδιότητα. Μπορεί να περιέχεται σε
οποιαδήποτε ετικέτα.

<a href=“#names”>Μετάβαση στα ονόματα</a>



<h2 id=“names”>Ονόματα συμμετεχόντων</h2>
Εικόνες στο web
Χρήση Χρώματα Διαφάνεια Μέγεθος
JPG Φωτογραφίες Πολλά Όχι Μικρό
PNG Γραφικά Πολλά Πλήρης Μέτριο
GIF Γραφικά 256 Δυαδική Πολύ μικρό
SVG Γραφικά Πολλά Πλήρης Ελάχιστο

Εικόνες
 <img>: Περιγράφει μια εικόνα
 src: Το αρχείο της εικόνας, ως διεύθυνση (υποχρεωτικό)
 alt: Μια περιγραφή της εικόνας (υποχρεωτικό)

 Το element <img> δεν περιλαμβάνει περιεχόμενο:


 <img src=“images/pencil.png” alt=“the pencil” />
Πίνακες
 Χρησιμοποιούνται μόνο για δεδομένα πίνακα
 Για τοποθέτηση στοιχείων σε ορισμένες θέσεις
χρησιμοποιούμε CSS και όχι HTML πίνακες!
 Διακριτός διαχωρισμός γραμμών και στηλών.

Παράδειγμα:
 Πίνακας μαθητών με στοιχεία όνομα, επώνυμο, βαθμολογία

 Πίνακας διάσημων επιστημόνων με στοιχεία όνομα,

επώνυμο, τομέας, σπουδαιότερη ανακάλυψη.

Διάσημοι επιστήμονες
Όνομα Επίθετο Τομέας Ανακάλυψη
Alan Turing Επιστήμη Υπολογισμού Turing machines
Bertrand Russell Φιλοσοφία Tractatus
Αρχιμήδης Μηχανικός Μοχλός
Leonard Euler Μαθηματικά eιπ + 1 = 0

<table>: Περιγράφει έναν πίνακα


Διάσημοι επιστήμονες
Όνομα Επίθετο Τομέας Ανακάλυψη
Alan Turing Επιστήμη Υπολογισμού Turing machines
Bertrand Russell Φιλοσοφία Tractatus
Αρχιμήδης Μηχανικός Μοχλός
Leonard Euler Μαθηματικά eιπ + 1 = 0

<tr>: Περιγράφει μια γραμμή σε έναν πίνακα


Περιέχεται στο <table>

Διάσημοι επιστήμονες
Όνομα Επίθετο Τομέας Ανακάλυψη
Alan Turing Επιστήμη Υπολογισμού Turing machines
Bertrand Russell Φιλοσοφία Tractatus
Αρχιμήδης Μηχανικός Μοχλός
Leonard Euler Μαθηματικά eιπ + 1 = 0

<td>: Περιγράφει ένα κελί


Περιέχεται στο <tr>
Πίνακες
 <table>: Ορίζει έναν πίνακα
 <tr>: Ορίζει μια γραμμή πίνακα
 <td>: Ορίζει ένα κελί πίνακα

 <table> περιέχει μόνο <tr>


 <tr> περιέχει μόνο <td>
 <td> περιέχεται μόνο σε <tr>
 <tr> περιέχεται μόνο σε <table>

<table>
<tr>
<td>Alan</td><td>Turing</td>
<td>Επιστήμη Υπολογισμού</td><td>Turing Machines</td>
</tr>
<tr>
<td>Ludwig</td><td>Wittgenstein</td>
<td>Φιλοσοφία</td><td>Tractatus</td>
</tr>
<tr>
<td>Αρχιμίδης</td><td></td>
<td>Μηχανικός</td><td>Μοχλός</td>
</tr>
<tr>
<td>Leonhard</td><td>Euler</td>
<td>Μαθηματικά</td><td>e<sup>ιπ</sup> + 1 = 0</td>
</tr>
</table>
Περιεχομενα "at a glance"

1. Βάσεις Δεδομένων
2. Πίνακες, Στήλες, Πεδία
3. Σχήματα Βάσεων Δεδομένων
4. Εισαγωγή στη γλώσσα SQL
5. SELECT, WHERE
6. INSERT INTO, DELETE, UPDATE
7. Συνδυασμός PHP/MySQL
Πρώτο Πρόγραμμα

1. Βάσεις Δεδομένων

Τι είναι Βάση Δεδομένων?


 Η Βάση Δεδομένων είναι μια συλλογή από σχετικά
μεταξύ τους δεδομένα - αντικείμενα.
 Σκοπός της είναι να διευκολύνει τον χρήστη στην
εισαγωγή, διαγραφή, χειρισμό και επεξεργασία
μεγάλου όγκου δεδομένων.
 Τα δεδομένα που χειρίζεται είναι δυναμικά,
δηλαδή αλλάζουν συνεχώς.
Χρήστες Βάσεων Δεδομένων
 Είναι όσοι χρησιμοποιούν την Βάση Δεδομένων
είτε για να αποκτήσουν πληροφορίες είτε για να
την συντηρήσουν.
 Διαχειριστής Συστήματος.
 Ιδιοκτήτης Βάσης Δεδομένων.

 Χρήστες με διάφορες διαβαθμίσεις δικαιωμάτων.

Συστήματα Διαχείρισης Βάσεων Δεδομένων

 Ειναι το λογισμικό που επιτρέπει στους χρήστες να


δημιουργούν και να χρησιμοποιούν μια Βάση
Δεδομένων.
 Δυνατότητες που παρέχει στους χρήστες:
1. Ορισμός Βάσης Δεδομένων.
2. Κατασκευή Βάσης Δεδομένων.
3. Χρήση / Προσπέλαση Βάσης Δεδομένων.
4. Διαγραφή Βάσης Δεδομένων.
Συστήματα Διαχείρισης Βάσεων Δεδομένων (2)

 Θα μπορούσαμε να υλοποιήσουμε μια Βάση


Δεδομένων και χωρίς την χρήση Συστήματος
Διαχείρισης (πχ. με χρήση αρχείων).
 Τα σημαντικότερα πλεονεκτήματά του είναι:
1. Ευκολία στην σχεδιάση και την υλοποίηση.
2. Γρήγορη ανάπτυξη εφαρμογών.
3. Ακεραιότητα δεδομένων - Ασφάλεια.
4. Επίπεδα χρηστών – Έλεγχος πρόσβασης.
5. Ταυτόχρονη χρήση από πολλούς χρήστες.
6. Ελέγχος ορθότητας – Πλεονασμών.
7. Έτοιμες Συναρτήσεις - Αλγόριθμοί

Δομή Σ. Δ. Βάσεων Δεδομένων

 Το Σύστημα Διαχείρισης παρέχει μια γλώσσα


υποβολής ερωτήσεων προς την Βάση Δεδομένων.
 Οι ερωτήσεις αυτές επεξεργάζονται από το Λογισμικό
Χειρισμού Ερωτήσεων και μετατρέπονται σε εντολές
για ανάκληση ή επεξεργασία δεδομένων.
 Το Λογισμικό Αποθήκευσης και Ανάκλησης
Δεδομένων αναλαμβάνει να μεταφέρει τις εντολές
του χρήστη στο επίπεδο του υλικού.
Αρχιτεκτονική Βάσεων Δεδομένων

1. Εξωτερικό Επίπεδο
 Παρουσιάση δεδομένων στον χρήστη της Βάσης.
2. Επίπεδο Αντίληψης
 Συνδέει το φυσικό επίπεδο με το εξωτερικό επίπεδο.
 Επεξεργάζεται τις εντολές του χρήστη και βρίσκει
την κατάλληλη πληροφορία στην Βάση.
 Μεταφράζει τις εντολές του χρήστη σε εντολές
κατανοητές από το Μηχανισμό Ανάκλησης και
Αποθήκευσης Δεδομένων

Αρχιτεκτονική Βάσεων Δεδομένων

3. Φυσικό Επίπεδο
 Το επίπεδο όπου τα δεδομένα είναι αποθηκευμένα
σε μορφή bytes στον σκληρό δίσκο.
 Περιλαμβάνει τις έννοιες
1. Πίνακας
2. Εγγραφή
3. Πεδίο
4. Τιμή Πεδίου
5. Τύπος Δεδομένων
Trailers

1. Βάσεις Δεδομένων
2. Πίνακες, Στήλες, Πεδία

Σχεσιάκη Βάση Δεδομένων


 Τα δεδομένα της Βάσης αποθηκεύονται σε
πίνακες.
 Ένας πίνακας αντιπροσωπεύει μια σχέση.
 Κάθε σχέση αποτελείται από Μ στοιχεία.
 Κάθε στοιχείο ανήκει σε ένα Τύπο Δεδομένων.
 Εγγραφή: Κάθε Μ-άδα για την οποία αληθεύει η
σχέση.
 Πεδίο (ή Στήλη): Κάθε ένα στοιχείο της Μ-αδας.
 Τιμή Πεδίου: Η τιμή ενός πεδίου για μια
συγκεκριμένη εγγραφή.
5 Best Selling Albums Of All Time
Όνομα Πίνακα

Όνομα
Όνομα Καλλιτέχνης
Καλλιτέχνης Έτος Είδος Πωλήσεις
Thriller Michael Jackson 1982 Pop / R & B 112M

Back
BackIn
InBlack
Black AC/DC
AC/DC 1980 Hard Rock 49M
Dark
DarkSide
Side Of
OfThe
The Pink
PinkFloyd
Floyd 1980 Progressive Rock 45M
Moon
Moon
The
Bat Bodyguard Whitney 1992 Soundtrack 44M
TheOut
The Of Hell
Bodyguard
Bodyguard Meat Loaf
Whitney
Whitney 1977
1992 Classic Rock
Soundtrack 43M
44M
OST Houston
OST
OST Houston
Houston
Bat Out Of Hell Meat Loaf 1977 Classic Rock 43M
Bat
BatOut
OutOf
OfHell
Hell Meat
MeatLoaf
Loaf 1977 Classic Rock 43M

Πίνακας

5 Best Selling Albums Of All Time


Τίτλος Πεδίου

Όνομα Καλλιτέχνης Έτος Είδος Πωλήσεις


Thriller Michael Jackson 1982 Pop / R & B 112Μ
Back In Black AC/DC 1980 Hard Rock 49M
Dark Side Of The Pink Floyd 1980 Progressive 45M
Moon Rock
The Bodyguard Whitney 1992 Soundtrack 44M
OST Houston
Bat Out Of Hell Meat Loaf 1977 Rock 43M

Πεδίο
Τύποι Πεδίου
 Κάθε πεδίο αποθηκεύει συγκεκριμένο τύπο
δεδομένων
 int: Ακέραιος αριθμός.
 float: Δεκαδικός αριθμός.
 text: Αλφαριθμητικό.
 char(n): Αλφαριθμητικό σταθερού μεγέθους n.
 varchar(n): Αλφαριθμητικό μέγιστου μεγέθους n.
 date: Ημερομηνία.
 datetime: Ημερομηνία και ώρα.

Και πολλοί άλλοι…

NULL
 Ειδική τιμή
 Αντιπροσωπεύει την απουσία τιμής
5 Best Selling Albums Of All Time

Όνομα Καλλιτέχνης Έτος Είδος Πωλήσεις


Thriller Michael Jackson 1982 Pop / R & B 112Μ
Back In Black AC/DC 1980 Hard Rock 49M
Dark Side Of The Pink Floyd 1980 Progressive 45M
Moon Rock
The Bodyguard Whitney 1992 Soundtrack 44M
OST Houston
Bat Out Of Hell Meat Loaf 1977 Rock 43M

Εγγραφή

5 Best Selling Albums Of All Time

Όνομα Καλλιτέχνης Έτος Είδος Πωλήσεις


Thriller Michael Jackson 1982 Pop / R & B 112Μ
Back In Black AC/DC 1980 Hard Rock 49M
Dark Side Of The Pink Floyd 1980 Progressive 45M
Moon Rock
The Bodyguard Whitney 1992 Soundtrack 44M
OST Houston
Bat Out Of Hell Meat Loaf 1977 Rock 43M

Τιμή Πεδίου
Σσσσ, αρχίζει...

1. Βάσεις Δεδομένων
2. Πίνακες, Στήλες, Πεδία
3. Σχήματα Βάσεων Δεδομένων

Σχήμα - Ονοματολογία
 Σχήμα ονομάζεται η δομή των πινάκων και των
στηλών μιας Βάσης Δεδομένων.
 Για την δημιουργία σχήματος σκεφτόμαστε:
 Τι είδους αντικείμενα θα αποθηκεύσουμε? => Πίνακες
 Τι ιδιότητες έχει κάθε τέτοιο αντικείμενο? => Πεδία

 Ονοματολογία Βάσεων – Πινάκων – Πεδίων


 Αρχίζουν από γράμμα.
 Περιέχουν λατινικά γράμματα, αριθμούς, underscore (_).
 Είναι case sensitive.
Παράδειγμα Σχήματος
 Μουσική Εγκυκλοπαίδεια
 Τι είδους αντικείμενα χρειαζόμαστε?
 Τραγούδια

 Καλλιτέχνες

 Μπάντες

 Αλμπουμ

 Τι ιδιότητες χρειαζόμαστε για κάθε αντικείμενο?

Παράδειγμα Σχήματος (2)


 Καλλιτέχνης (Artist)
 Όνομα (name)
 Επίθετο (lastname)

 Ημερομηνία Γέννησης (birthdate)

 Χώρα (country)

 Είδος (genre)
Παράδειγμα Σχήματος (3)

name lastname birthdate country genre


Michael Jackson 29/08/1959 USA Pop / R & B
Whitney Houston 09/08/1963 USA Soul / R & B
Tarja Turunen 17/08/1977 Finland Metal
Σώτης Βολάνης 10/11/1971 Ελλάδα Γύφτικο

Μοναδικό Αναγνωριστικό (id)


 Σε κάθε πίνακα έχουμε μια στήλη-αναγνωριστικό.
 Συνήθως την ονομάζουμε
 id
 Όνομα πίνακα + id => artistid
 Είναι θετικοί φυσικοί αριθμοί
 Ξεκινούν από το 1.
 Κάθε νέα εγγραφή έχει τον επόμενο αριθμό.
 Αυτόρυθμίζεται για να γίνεται αυτόματα από το
σύστημα της Βάσης Δεδομένων με
AUTO_INCREMENT.
Μοναδικό Αναγνωριστικό (id)
 Με αυτόν τον τρόπο μπορούμε να
 Αναφερθούμε σύντομα σε μια εγγραφή
 Ο καλλιτέχνης με id 10.
 To τραγούδι με id 123.
 Το άλμπουμ με id 666 (“Number of The Beast”).
 Ξεχωρίσουμε δύο εγγραφές με ίδια στοιχεία
 Καλλιτέχνης Tom Jones από USA, id 3

 Καλλιτέχνης Tom Jones από USA, id 305


 Αυτό το πεδίο ονομάζεται primary key (πρωτεύον
κλειδί).

Παράδειγμα Σχήματος (4)


Primary Key

id name lastname birthdate country genre


1 Michael Jackson 29/08/1959 USA Pop / R & B
2 Whitney Houston 09/08/1963 USA Soul / R & B
3 Tarja Turunen 17/08/1977 Finland Metal
4 Σώτης Βολάνης 10/11/1971 Ελλάδα Γύφτικο

Στήλη
AUTO_INCREMENT
Παράδειγμα Σχήματος (5)
 Album  Band
 albumid  bandid
 title  name
 year  country
 studioname  year
 studiolocation  studioname
 studiofunded  studiolocation

 studiofunded

Πίνακας Album

albumid title year studioname studiolocation studiofunded


1 Thriller 1982 Westlake USA 1974
2 Off The 1979 Westlake USA 1974
Wall
3 Bad 1984 Westlake USA 1974
4 Τσικουλάτα 2004 Vasipap Greece 2001

Ανεπιθύμητη επανάληψη
Αποφυγή Επανάληψης
 Για να αποφύγουμε την επανάληψη περίσσειας
πληροφορίας στους πίνακες μας, φτιάχνουμε ένα
πίνακα ξεχωριστά για τα Recording Studios.

 Studio
 studioid

 name

 location

 funded

Αναφορές Πινάκων
studioid name location funded
1 Westlake USA 1974
2 Vasipap Greece 2001

αναφέρεται σε
αναφέρεται σε

albumid title year studioid


1 Thriller 1982 1
2 Off The 1979 1
Wall
3 Bad 1984 1
4 Τσικουλάτα 2004 2
Γραφική Αναπαράσταση Βάσης
name:
Michael
Artist Michael

Whitney lastname:
Jackson
Music
Album The Wall
Encyclopedia

genre: Drum
Prodigy N Bass

Band Pussycat genre: R & B


Dolls

MySQL Server
 Η MySQL είναι ένα πρόγραμμα Server.
 Συνήθως τρέχει στον ίδιο υπολογιστή με τον Apache.
 Σε μεγάλα sites τρέχει σε διαφορετική φυσική τοποθεσία
για μεγαλύτερη ασφάλεια και σταθερότητα.
 Η PHP συνδέεται στην MySQL
 Στέλνει ερωτήματα σε βάσεις.
 Δέχεται τις απαντήσεις.

 Η PHP είναι ένας MySQL client


 Ενώ ταυτόχρονα συνεχίζει να τρέχει στον HTTP Server
(Apache).
Διαδρομή Λειτουργιών

Apache Server

Καλεί την hello.php

Find Page hello.php


Browser

Return Process Database


HTML PHP Access

PHP + MySQL = B.F.F.E.

MySQL Client MySQL Server

Φέρε τα στοιχεία του Michael Jackson

Πάρε τα στοιχεία του Βασιλιά!

Προσθεσε στη Βάση την Ke$ha

Φίνο γκομενάκι μου φαίνεται! ΟΚ!

Διάγραψε από τη Βάση τους


βρωμιάρηδες τους Nickelback

ΕΝΝΟΕΙΤΑΙ! Επιτέλους!
Διάλλειμα

1. Βάσεις Δεδομένων
2. Πίνακες, Στήλες, Πεδία
3. Σχήματα Βάσεων Δεδομένων
4. Εισαγωγή στη γλώσσα SQL

Ερώτημα
 Μια εντολή προς το Σύστημα Διαχείρισης Βάσεων
Δεδομένων.
 Ο τρόπος που επικοινωνούμε με τις Βάσεις.
 Μπορούμε να ζητήσουμε
 Δημιουργία Εγγραφών (Create)
 Ανάγνωση Εγγραφών (Read)
 Ενημέρωση Εγγράφων (Update) Create
 Διαγραφή Εγγραφών (Delete)

Delete Read

Update
Ερώτημα (2)
 Σε αντίθεση με το σχήμα της Βάσης που το
φτιάχνουμε off-line με την phpMyAdmin:
 Τα ερωτήματα τρέχουν στον χρόνο εκτέλεσης, πχ. όταν
τρέχει ένα PHP Script.

 Παραδείγματα
 Ο χρήστης θέλει να δημιουργήσει έναν λογαριασμό
πατώντας το κατάλληλο κουμπί στο site.
 Καλείτε το PHP Script register.php με HTTP POST.
 Τρέχει το ερώτημα προσθήκης των στοιχείων του νέου
μέλους.

Γλώσσα T-SQL
 Χρησιμοποιείται για να γράψουμε τα ερωτήματα προς την
Βάση.
 Περιγράφει τι θέλουμε να συμβεί.
 Οχι το πως θέλουμε να συμβεί.
 Κάθε ερώτημα τελειώνει με semicolon (;).
 Space insensitive (τα κενά δεν παίζουν ρόλο).
Ερώτημα Απάντηση
Δημιουργία • Εντάξει ή Όχι εντάξει
• Τιμή πρωτεύοντος κλειδιού
Ανάγνωση • Δεδομένα
Επεξεργασία • Εντάξει ή Όχι εντάξει
• Πλήθος εγγραφών
Διαγραφή • Εντάξει ή Όχι εντάξει
• Πλήθος εγγραφών
Η συνέχεια...

1. Βάσεις Δεδομένων
2. Πίνακες, Στήλες, Πεδία
3. Σχήματα Βάσεων Δεδομένων
4. Εισαγωγή στη γλώσσα SQL
5. SELECT, WHERE

Ανάγνωση Εγγραφών
 Ερώτημα SELECT  Παράδειγμα
 Σύνταξη SELECT
SELECT name, lastname
πεδίο1, πεδίο2, ... , πεδίοΝ FROM
FROM Artist;
όνομα Πίνακα;

name lastname
 Επιστρέφει συγκεκριμένα Michael Jackson
πεδία από όλες τις Whitney Houston
εγγραφές ενός πίνακα. Tarja Turunen
Σώτης Βολάνης
Φιλτράρισμα Εγγραφών
 Εντολή WHERE
 Σύνταξη
WHERE λογική πρόταση

 Οι λογικές προτάσεις:
 Παίρνουν τιμή true (1) ή false (0).
 Μπορούν να περιέχουν
 Ονόματα πεδίων: artistid, name, location.
 Σταθερές: 5, “Hello World!”, “20/11/2011”.
 Αληθεύουν πιθανώς για κάποιες εγγραφές.
 Δεν αληθεύουν πιθανώς για άλλες εγγραφές.

Λογικές Προτάσεις

Τελεστές Λειτουργία
+, -, *, / Αριθμητικές πράξεις
OR, AND, NOT Λογικές πράξεις: ή, και, όχι

=, !=, <, >, <=, >= Σύγκριση

 Παραδείγματα λογικών προτάσεων


 WHERE name = “Michael”
 WHERE lastname != “Houston”
 WHERE artistid < 10
 WHERE name = “Michael” AND lastname = “Jordan”
 Έλεγχος για NULL με τον τελεστή IS NULL
 Π.χ. WHERE birthdate IS NULL
Ανάγνωση Εγγραφών (2)
 Ερώτημα SELECT WHERE  Παράδειγμα
 Σύνταξη SELECT
SELECT
πεδίο1, πεδίο2, ... , πεδίοΝ name, lastname
(ή *) FROM
FROM
Artist
όνομα Πίνακα
WHERE WHERE
λογική πρόταση; country = “USA”;

 Επιστρέφει συγκεκριμένα πεδία


από όλες τις εγγραφές ενός
πίνακα που ικανοποιούν την name lastname
λογική πρόταση.
Michael Jackson
 Με το αστεράκι επιστρέφουμε
όλα τα πεδία. Whitney Houston

Πίνακας Αποτελέσματος
 Ο πίνακας που είναι αποθηκευμένος και ο πίνακας
που επιστρέφει το ερώτημα μπορεί να είναι
διαφορετικοί.
 Διαφορετικά πεδία
Η απάντηση έχει συνήθως μόνο κάποια πεδία.
 Διαφορετικές εγγραφές
Η απάντηση συνήθως έχει μόνο κάποιες εγγραφές.
 Ο προσωρινός πίνακας που επιστρέφεται
ονομάζεται πίνακας αποτελέσματος.
Παράδειγμα
 Αποθηκευμένος Πίνακας
albumid title year studioid
1 Thriller 1982 1
2 Off The Wall 1979 1
3 Bad 1984 1
4 Τσικουλάτα 2004 2

 Πίνακας Αποτελέσματος SELECT


title, year
title year
FROM
Thriller 1982
Off The Wall 1979
Album
Bad 1984 WHERE
studioid = 1;

Αυτός που αλλού έχει παίξει?

1. Βάσεις Δεδομένων
2. Πίνακες, Στήλες, Πεδία
3. Σχήματα Βάσεων Δεδομένων
4. Εισαγωγή στη γλώσσα SQL
5. SELECT, WHERE
6. INSERT INTO, DELETE, UPDATE
Δημιουργία Εγγραφής
 Ερώτημα INSERT INTO
 Σύνταξη  Εναλλακτική Σύνταξη
INSERT INTO INSERT INTO
όνομα Πίνακα όνομα Πίνακα
SET ( πεδίο1 , πεδίο2 ,..., πεδίοΝ )
πεδίο1 = τιμή1, Values
πεδίο2 = τιμή2, ( τιμή1, τιμή2 ,..., τιμήΝ );
...
πεδίοΝ = τιμήΝ;

Παράδειγμα Δημιουργίας

INSERT INTO
Artist
SET
name = “Michael”,
lastname = “Jackson”,
birthdate = “29/08/1959”;
 Παρατηρούμε ότι παραλείπουμε την τιμή για το πεδίο
id, που το έχουμε ορίσει AUTO_INCREMENT.
 Όσα πεδία παραλείπονται παίρνουν:
 Την προεπιλεγμένη τιμή που ορίζουμε στο σχήμα μας.
 Την προεπιλεγμένη τιμή σύμφωνα με τον τύπο τους αν
δεν έχουμε ορίσει εμείς μια.
Ενημέρωση Εγγραφών
 Ερώτημα UPDATE
 Σύνταξη  Εναλλακτική Σύνταξη
UPDATE UPDATE
όνομα Πίνακα όνομα Πίνακα
SET SET
πεδίο1 = τιμή1, πεδίο1 = τιμή1,
πεδίο2 = τιμή2, πεδίο2 = τιμή2,
... ...
πεδίοΝ = τιμήΝ; πεδίοΝ = τιμήΝ
 Αλλάζει όλες τις εγγραφές WHERE
του πίνακα. λογική έκφραση
 Τα πεδιά που δεν
εμφανίζονται δεν αλλάζουν.

Παράδειγμα Ενημέρωσης
UPDATE
Artist
SET
lastname = “Bolton”
WHERE
name = “Michael”;
Διαγραφή Εγγραφών
 Ερώτημα DELETE
 Εναλλακτική Σύνταξη
 Σύνταξη
DELETE FROM
DELETE FROM
όνομα Πίνακα
όνομα Πίνακα WHERE
 Διαγράφειόλες τις λογική έκφραση
εγγραφές του πίνακα.  Φιλτράρουμετις
εγγραφές που θα
διαγραφούν με την
WHERE.

Παράδειγμα Ενημέρωσης
DELETE FROM
Artist
WHERE
name = “Σώτης”;
Κοντά στο Happy End!

1. Βάσεις Δεδομένων
2. Πίνακες, Στήλες, Πεδία
3. Σχήματα Βάσεων Δεδομένων
4. Εισαγωγή στη γλώσσα SQL
5. SELECT, WHERE
6. INSERT INTO, DELETE, UPDATE
7. Συνδυασμός PHP/MySQL

Συνδυασμός PHP και MySQL


 Απαιτείται η επέκταση MySQL της PHP
 Πάλι καλά που τα εγκαταστήσαμε όλα μαζί...

 Τα SQL ερωτήματα για την PHP είναι αλφαριθμητικά.


 Η βιβλιοθήκη MySQL για PHP περιέχει συναρτήσεις
που τις καλούμε για να πετύχουμε επικοινωνία PHP
και MySQL μέσω των ερωτημάτων.
 Τα ερωτήματα περνούν ως παράμετροι.
Σύνδεση στη Βάση
 Εντολή mysql_connect()
 Σύνταξη
mysql_connect( διεύθυνση , χρήστης , κωδικός );
 Διεύθυνση
 Σε ποιόν
υπολογιστή τρέχει ο MySQL Server.
 Συνήθως localhost.
 Χρήστης – Κωδικός
 Είναι απαραίτητα για την πρόσβαση
στην Βάση
 Ρυθμίζονται κατά την εγκατάσταση της MySQL ή από το
phpMyAdmin.
Η σύνδεση κλείνει αυτόματα στο τέλος του script.

Ερωτήματα σε Βάση
 Εντολή mysql_select_db()
 Σύνταξη
mysql_select_db( όνομα βάσης )
 Επιλέγει σε ποια βάση θα τρέξουν τα ερωτήματα.
 O MySQL Server μπορεί να αποθηκεύει πολλές βάσεις.
 Συνήθως έχουμε μια για κάθε web εφαρμογή.

 Εντολή mysql_query()
 Σύνταξη
$res = mysql_query( ερώτημα )
 Εκτελεί το ερώτημα και επιστρέφει την απάντηση.
 True / False σε περίπτωση ερωτημάτων Δημιουργίας, Ενημέρωσης,
Διαγραφής.
 Ένα resource (πίνακας συνήθως) που μπορεί να χρησιμοποιηθεί σε
περίπτωση Ανάγνωσης.
Εκτέλεση Ερωτήματος
mysql_connect(“localhost”,“Anty”,“Stewie”);
mysql_select_db( “Music” );
$success = mysql_query(
“UPDATE
Artist
SET
lastname = ‘Bolton’
WHERE
name = ‘Michael’; “
);

Χρήσιμες Εντολές PHP


 mysql_insert_id()
 Επιστρέφει το AUTO_INCREMENT της εγγραφής που
δημιουργήθηκε στο πιο πρόσφατο ερώτημα.

 mysql_affected_rows()
 Επιστρέφει το πλήθος των γραμμών που άλλαξαν από την
εκτέλεση του πιο πρόσφατου ερωτήματος.

 mysql_num_rows( $res )
 Παίρνει ως παράμετρο το resource που επιστρέφει η
mysql_query()
 Επιστρέφει το πλήθος των εγγραφών του αποτελέσματος.
Παράδειγμα Εισαγωγής Εγγραφής
 database.php
mysql_connect(“localhost”,“Anty”,“Stewie”);
mysql_select_db( “Music” );

 Συνήθως χρησιμοποιούμε ένα αρχείο php για την


σύνδεση μας με την βάση, το οποιό το κάνουμε
include στο script που κάνουμε το ερώτημα.

Παράδειγμα Εισαγωγής Εγγραφής (2)


include “database.php”;
mysql_query(
“INSERT INTO
Artist
SET
name = ‘Mariah’,
lastname = ‘Carey’,
birthdate = ‘27/03/1970’,
country = ‘USA’; “
);
$id = mysql_insert_id();
echo “Καταχωρήθηκε ο καλλιτέχνης $id”;
Παράδειγμα Διαγραφής Δεδομένων
include “database.php”;
mysql_query(
“DELETE FROM
Album
WHERE
title = ‘Τσικουλάτα’; “
);
if (mysql_affected_rows() == 1){
echo “Μπούλο ο Ξανθιώτης”;
}
else {
echo “Αιντι μάλε τσικουλάτα τσικιτα, τσικι τσικι τσικιτά”;
}

Παράδειγμα Ανάγνωσης Δεδομένων


include “database.php”;
$res = mysql_query(
“SELECT
title
FROM
Album
WHERE
studioid = 2; “
);
echo “Έχουν ηχογραφηθεί “ . mysql_num_rows( $res );
echo “δισκάρες στη Vasipap!”;

Έχουν ηχογραφηθεί 10 δισκάρες στην Vasipap!


Ανάγνωση Δεδομένων
 Εντολή mysql_fetch_array()
 Σύνταξη
mysql_fetch_array( $res)
 Παίρνει ως παράμετρο το resource που επέστρεψε το
mysql_query().
 Αν ο πίνακας αποτελέσματος έχει Ν εγγραφές, επιστρέφει
 Την πρώτη φορά, την πρώτη εγγραφή του πίνακα αποτελέσματος.
 Την δεύτερη φορά, την δεύτερη εγγραφή του πίνακα
αποτελέσματος.
 ...
 Την Ν-οστή φορά, την τελευταία εγγραφή του πίνακα
αποτελέσματος.
 Την (Ν+1)-οστή φορά που θα κληθεί, false.

Ανάγνωση Δεδομένων (2)


 Η πρώτη κλήση της mysql_fetch_array( $res )
επιστρέφει ένα λεξικό.
 Αντιπροσωπεύει την πρώτη εγγραφή του
αποτελέσματος.
 Κλειδιά: τα ονόματα των πεδίων
 Τιμές: οι τιμές των συγκεκριμένων πεδίων για την
συγκεκριμένη εγγραφή.
 κτλ. για τις πρώτες N κλήσεις.
 Μέχρι να εξαντληθεί ο πίνακας αποτελέσματος.
name lastname $sql = “SELECT
Michael Jackson
name, lastname
FROM
Whitney Houston Artist
Tarja Turunen WHERE
artistid < 4;”;
include “database.php”;
$res = mysql_query( $sql );
$first = mysql_fetch_array( $res );
$second = mysql_fetch_array( $res );
$third = mysql_fetch_array( $res );
$end = mysql_fetch_array( $res );

echo $first[ “name” ] . “<br />”;


echo $second[ “name” ] . “ ”; Michael
Whitney Houston
echo $second[ “lastname” ] . “<br />”; Turunen
echo $third[ “lastname”] . “<br />”;

Παράδειγμα Ανάγνωσης
include “database.php”;
$sql = “…”; while ($row = mysql_fetch_array( $res ))
$res = mysql_query( $sql );
$count = mysql_num_rows( $res );
for ( $i = 0; $i < $count; ++$i ) {
$row = mysql_fetch_array( $res );
echo “Row $i:”;
$name = $row[ “name”];
$lastname = $row[ “lastname” ];
echo “The name is $lastname, $name. <br />”;
?>
}
Row 0: The name is Jackson, Michael.
Row 1: The name is Houston, Whitney.
Row 2: The name is Turunen, Tarja.
Διαλέχτε, καλέ κυρία, Διαλέχτε

1. Ταξινόμηση

2. Περιορισμοί

3. Τελεστές LIKE, IN, BETWEEN

4. Ψευδώνυμα - Ημερομηνίες

5. Ενώσεις Πινάκων
Έχω πρώτο πράγμα...

1. Ταξινόμηση

Ταξινόμηση
 Εντολή ORDER BY
 Ταξινομεί το αποτέλεσμα με βάση ένα πεδίο.
 ASC: Αύξουσα Ταξινόμηση (προεπιλογή).
 DESC: Φθίνουσα Ταξινόμηση.
 Ακολουθεί πάντα τον όρο WHERE.
 Είτε υπάρχει είτε όχι.

 Παράδειγμα
Select πεδία FROM πίνακας WHERE συνθήκη
ORDER BY πεδιο ASC (DESC);
Ταξινόμηση (2)
 Αποθηκευμένος πίνακας Artist

artistid name lastname birthdate country genre


1 Tori Amos 1963-08-22 USA Pop / Jazz
2 Britney Spears 1981-12-02 USA Pop
3 Bruce Dickinson 1958-08-07 England Metal
4 Μιχαλάρας Ρακιντζής 1962-01-05 Greece Λίγο από όλα

Ταξινόμηση (3)

SELECT
artistid, name, lastname, birthdate
FROM
Artist
ORDER BY
birthdate ASC;

 Πίνακας αποτελέσματος
Artistid name lastname birthdate
3 Bruce Dickinson 1958-08-07
4 Μιχαλάρας Ρακιντζής 1962-01-05
1 Tori Amos 1963-08-22
2 Britney Spears 1981-12-02
Ταξινόμηση (4)

SELECT
artistid, name, lastname, birthdate
FROM
Artist
ORDER BY
birthdate DESC;

 Πίνακας αποτελέσματος
Artistid name lastname birthdate
2 Britney Spears 1981-12-02
1 Tori Amos 1963-08-22
4 Μιχαλάρας Ρακιντζής 1962-01-05
3 Bruce Dickinson 1958-08-07

Ταξινόμηση (5)
SELECT
artistid, name, lastname, birthdate
FROM
Artist
WHERE
name = ‘Britney’ OR lastname = ‘Amos’
ORDER BY
birthdate DESC;

 Πίνακας αποτελέσματος
Artistid name lastname birthdate
2 Britney Spears 1981-12-02
1 Tori Amos 1963-08-22
Οτι πάρεις ένα ευρώ, ότι πάρεις.

1. Ταξινόμηση

2. Περιορισμοί

Περιορισμοί
 Εντολή LIMIT
 Περιορίζει τον πλήθος των εγγραφών του πίνακα
αποτελέσματος.
 Ο όρος αυτός ακολουθεί το ORDER BY.
 Είτε υπάρχει, είτε δεν υπάρχει.
 Κρατάει τα πρώτα N στοιχεία.

 Παράδειγμα
Select πεδία FROM πίνακας WHERE συνθήκη
ORDER BY πεδιο LIMIT N;
Περιορισμοί (2)

SELECT
artistid, name, lastname, birthdate
FROM
Artist
ORDER BY
birthdate ASC
LIMIT 3;

 Πίνακας αποτελέσματος
Artistid name lastname birthdate
3 Bruce Dickinson 1958-08-07
Τρία αποτελέσματα
4 Μιχαλάρας Ρακιντζής 1962-01-05
1 Tori Amos 1963-08-22

Οι υπόλοιπες εγγραφές παραλείπονται.

Περιορισμοί (2)
 Ποια είναι τα στοιχεία του γηραιότερου
καλλιτέχνη της βάσης?
SELECT
artistid, name, lastname, birthdate
FROM
Artist
ORDER BY
birthdate ASC
LIMIT 1;

Artistid name lastname birthdate


3 Bruce Dickinson 1958-08-07
Περιορισμοί (3)
 To LIMIT εφαρμόζεται και σε ερωτήματα UPDATE
και DELETE.
 ΚΑΛΗ ΠΡΑΚΤΙΚΗ!
 LIMIT 1 σε ερωτήματα που περιμένουμε να αλλάξουν
/ διαγράψουν μόνο μια εγγραφή.
 Θα σώσουν την κατάσταση αν ξεχάσεις το WHERE.
DELETE FROM
Artist
WHERE
artistid = 3
LIMIT 1;

Περιορισμοί (4)
 Πλήρης Σύνταξη του LIMIT
 LIMIT offset, N

 Σε αυτή τη μορφή
 Παραλείπει
εγγραφές από την αρχή του
αποτελέσματος ίσες με το offset.
 Αν offset = 0  καμία παράλειψη.
 Περιορίζει
το πλήθος των εγγραφών του
αποτελέσματος κατά Ν.
Παράδειγμα LIMIT με offset

SELECT
artistid, name, lastname, birthdate
FROM
Artist
ORDER BY
1 εγγραφή από την αρχή παραλείπεται
birthdate DESC
LIMIT 1, 2;

 Πίνακας αποτελέσματος
Artistid name lastname birthdate
2 Britney Spears 1981-12-02
1 Tori Amos 1963-08-22
Δύο έγγραφές
4 Μιχαλάρας Ρακιντζής 1962-??-??
3 Bruce Dickinson 1958-08-07

Παράδειγμα LIMIT με offset (2)


 Ποια είναι τα στοιχεία του δεύτερου γηραιότερου
καλλιτέχνη της βάσης?
SELECT
artistid, name, lastname, birthdate
FROM
Artist
ORDER BY
birthdate ASC
LIMIT 1,1;

Artistid name lastname birthdate


4 Μιχαλάρας Ρακιντζής 1962-01-05
Καρέκλες και τραπέζια και καρέκλες έχω!!!

1. Ταξινόμηση

2. Περιορισμοί

3. Τελεστές LIKE, IN, BETWEEN

Αναζήτηση μέσα σε Αλφαριθμητικά


 Τελεστής LIKE
 Σύνταξη
WHERE πεδίο LIKE έκφραση
 Έκφραση
 Αλφαριθμητικό που περιέχει % ως χαρακτήρα-μπαλαντέρ.
 Σημαίνει οποιοσδήποτε χαρακτήρας.
 Παραδείγματα
“Kiss%”: Αρχίζει από “Kiss”
 “Kiss Me” OK
 “Gimme A Kiss Kiss” NOT OK
“Kiss%You”: Αρχίζει από “Kiss” και τελειώνει με “You”
 “Kissing You” OK
 “Kiss You and your sister!!!” NOT OK
Παράδειγμα LIKE
SELECT
artistid, name, lastname, birthdate
FROM
Artist
WHERE
lastname LIKE ’S%’
LIMIT 1;

Artistid name lastname birthdate


2 Britney Spears 1981-12-02

Αναζήτηση μέσα σε Αλφαριθμητικά (2)

 Τελεστής IN
 Σύνταξη
Πεδίο IN ( τιμή1, τιμη2, ... , τιμήΝ)
 Ελέγχει αν μια τιμή ενός πεδίου ανήκει σε ένα σύνολο
τιμών.

SELECT
artistid, name, lastname
artistid name lastname
FROM
Artist 1 Tori Amos
WHERE 3 Bruce Dickinson
name IN (‘Tori’, ‘Bruce’);
Σύγκριση
 Οι τελεστές =, <, >, <=, >= λειτουργούν σε:
 Αριθμούς
3<4
5=5
 12.2 > -9

 Αλφαριθμητικά (λεξικογραφικά)
 ‘Tori’ >= ‘Bruce’

 Ημερομηνίες (χρονολογικά)
 ‘2001-09-11’ >‘1987-11-30’
 ‘2011-11-22 00:00:00’ <= ‘2011-11-22 01:01:01’

Αναζήτηση μέσα σε Αλφαριθμητικά (3)

 Τελεστής BETWEEN… AND


 Σύνταξη
Πεδίο BETWEEN κάτω_φράγμα AND άνω_φράγμα
 Ελέγχειαν μια τιμή βρίσκεται μεταξύ των δύο
φραγμάτων (μεγαλύτερο ισο / μικρότερο ίσο).
SELECT
name, lastname
FROM
Artist
WHERE
name BETWEEN ‘Tori’ AND ‘Zed’;
name lastname
Tori Amos
Τα δύο μισή τιμή σε λέω...

1. Ταξινόμηση

2. Περιορισμοί

3. Τελεστές LIKE, IN, BETWEEN

4. Ψευδώνυμα - Ημερομηνίες

Ψευδώνυμα Στηλών
 Εισάγονται με το AS
 Σύνταξη

πεδίο AS ψευδώνυμο
 Αλλάζουν το όνομα μιας στήλης του αποθηκευμένου
πίνακα στον πίνακα αποτελέσματος.

SELECT
artistid AS code, name, lastname
code name lastname
FROM
Artist 1 Tori Amos
WHERE 3 Bruce Dickinson
name IN (‘Tori’, ‘Bruce’);
Τελεστές Ημερομηνιών
 Λέξη-κλειδί INTERVAL
 Λέξεις-κλειδιά διάρκειας:
 SECOND
 MINUTE
 HOUR
 DAY
 MONTH
 YEAR
 Μορφή: INTERVAL Ν διάρκεια
 Μπορεί να προστεθεί / αφαιρεθεί από ημερομηνία
για να δώσει μία άλλη

Τελεστές Ημερομηνιών (2)


 Συνάρτηση NOW()
 Επιστρέφει την τωρινή ημερομηνία/ώρα.

NOW(): ‘2010 – 11 – 30 20:00:21’


Παράδειγμα NOW()
 Πως θα δείξω ποίοι είναι μέσα στην σελίδα μου?
 Στήλη lastactive στον πίνακα users
 Ενημέρωση κάθε φορά που ανοίγει ένα PHP αρχείο:

UPDATE
users
SET
lastactive = NOW()
WHERE
userid = 5
LIMIT 1;

Ερώτημα για να πάρω τους online χρήστες:


SELECT
username
FROM
users
WHERE
lastactive + INTERVAL 5 MINUTE > NOW();

Πράξεις κατά την Επιλογή


 Το SELECT επιτρέπει και πράξεις κατά την επιλογή
 Δηλαδή τα πεδία στην πραγματικότητα είναι παραστάσεις.
SELECT
(artistid + 10) AS code, name, lastname
FROM code name lastname
Artist 11 Tori Amos
WHERE 13 Bruce Dickinson
name IN (‘Tori’, ‘Bruce’);

SELECT
name, lastname, (birtdate + INTERVAL 100 YEARS) AS death
FROM
Artist name lastname death
WHERE
name IN (‘Tori’, ‘Bruce’); Tori Amos 2063-08-22
Bruce Dickinson 2058-08-07
Κληρώνει δεν λερώνει...

1. Ταξινόμηση

2. Περιορισμοί

3. Τελεστές LIKE, IN, BETWEEN

4. Ψευδώνυμα – Ημερομηνίες

5. Ενώσεις Πινάκων

ΕΝΩΣΕΙΣ ΠΙΝΑΚΩΝ
 Συνδυασμός δεδομένων από πολλούς
διαθέσιμους αποθηκευμένους πίνακες.
 Ο πίνακας αποτελέσματος μπορεί να
περιλαμβάνει δεδομένα από όποιους του
ζητήσουμε.
 Μπορεί επίσης να φιλτράρει τα αποτελέσματα με
χρήση πεδιών από όσους από αυτούς θέλουμε.
 Πολλάπλές ενώσεις, ενώνοντας το αποτέλεσμα
μιας ένωσης πινάκων με άλλον πίνακα.
ΑΠΛΗ ΕΝΩΣΗ
 Είναι η ένωση δύο ή περισσότερων πινάκων σε
ένα ερώτημα.
 Για να πάρουμε δεδομένα από όλους.
 Για να βάλουμε καποια κριτήρια στα αποτελέσματά
μας.

 Για να ξεχωρίσουμε τα πεδία που έχουν κοινά


ονόματα κάνουμε αναφορά σε πεδίο πίνακα
 πίνακας.πεδίο

Παράδειγμα
studioid name location funded
1 Westlake USA 1974
2 Vasipap Greece 2001

albumid name year studioid


1 Thriller 1982 1
3 Bad 1984 1
4 Τσικουλάτα 2004 2

SELECT
Album.name AS title, year, Studio.name AS recording_studio
FROM
Album, Studio
WHERE
Studio.studioid = Album.studioid;
ΑΠΛΗ ΕΝΩΣΗ (2)
 Σωστότερη σύνταξη
SELECT
πεδία
FROM
Α
INNER JOIN B
ON A.x = B.y

 Έτσι το WHERE μπορεί να χρησιμοποιηθεί και πάλι


για φιλτράρισμα και όχι για ένωση πινάκων.

Παραδείγμα (2)
SELECT
Album.name AS title, year, Studio.name AS recording_studio
FROM
Album
INNER JOIN
Studio ON Studio.studioid = Album.studioid
WHERE
Studio.studioid = 1;

title year recording_studio


Thriller 1982 Westlake
Bad 1984 Westlake
Δεύτερο Παραδείγμα
 Ποιο είναι το studio που ηχογραφήθηκε το πιο
παλιό album?

SELECT
Studio.name AS recording_studio
FROM
Studio
INNER JOIN
Album ON Studio.studioid = Album.studioid
ORDER BY year ASC
LIMIT 1;

Τρίτο Παραδείγμα
 Όλοι οι τίτλοι των album και η τοποθεσία του
studio που ηχογραφήθηκαν?

SELECT
Album.name AS title, Studio.location
FROM
Album
INNER JOIN
Studio ON Studio.studioid = Album.studioid;
name location
Thriller USA
Bad USA
Τσικουλάτα Greece
ΑΡΙΣΤΕΡΗ ΕΝΩΣΗ
 Στην περίπτωση που δεν έχουμε για όλα τα
studios πληροφορίες.
studioid name location funded
1 Westlake USA 1974

 Τώρα αν κάνουμε το ερώτημα της απλής ένωσης,


δεν θα επιστραφούν όλες οι τιμές.
SELECT
Album.name AS title, Studio.location
FROM
Album
INNER JOIN
Studio ON Studio.studioid = Album.studioid;

ΑΡΙΣΤΕΡΗ ΕΝΩΣΗ (2)


 Αποτέλεσμα
title location
Thriller USA
Bad USA

 Κάποια album θα λείπουν επειδή λείπει το studio


στο οποίο ηχογραφήθηκε.
 Εμείς όμως θέλουμε τις πληροφορίες του album
ακόμα και αν δεν έχουμε στοιχεία για το studio.
ΑΡΙΣΤΕΡΗ ΕΝΩΣΗ (3)
 Αλλάζουμε το INNER JOIN με LEFT OUTER JOIN
 Αν υπάρχει το κλειδί της ένωσης στον δεξιό πίνακα
 Κάνει το ίδιο με την απλή ένωση.
 Ανκαμιά εγγραφή του δεξιού πίνακα δεν ταιριάζει με
την εκάστοτε του αριστερού
 Κρατάει τα στοιχείατης εγγραφής του αριστερού πίνακα.
 Γεμίζει τα στοιχεία των στηλών του δεξιού πίνακα του
αποτελέσματος με NULL.

Παράδειγμα Αριστερής Ένωσης


SELECT
Album.name AS title, Studio.location
FROM
Album
LEFT OUTER JOIN
Studio ON Studio.studioid = Album.studioid;

title location
Thriller USA
Bad USA
Τσικουλάτα NULL
Καρτεσιανό Γινόμενο
 ΑxB
 Κάθε εγγραφή του πίνακα Α.
 Συνδυάζεται με κάθε εγγραφή του πίνακα Β.

 Παράδειγμα
studioid name
1 Westlake Studio
2 Vasipap
x
albumid title year studio
1 Thriller 1982 1
Album
3 Bad 1984 1
4 Τσικουλάτα 2004 2

Καρτεσιανό Γινόμενο (2)


 Αποτέλεσμα

albumid title year studio studioid name


1 Thriller 1982 1 1 Westlake
1 Thriller 1982 1 2 Vasipap
3 Bad 1984 1 1 Westlake
3 Bad 1984 1 2 Vasipap
4 Τσικουλάτα 2004 2 1 Westlake
4 Τσικουλάτα 2004 2 2 Vasipap
Παράδειγμα
SELECT
title, year, name
FROM
Album, Studio

title year name


Thriller 1982 Westlake
Thriller 1982 Vasipap
Bad 1984 Westlake
Bad 1984 Vasipap
Τσικουλάτα 2004 Westlake
Τσικουλάτα 2004 Vasipap

Παράδειγμα (2)
 Από μόνο του άχρηστο.
 Πολύ πιο χρήσιμο με το WHERE.

SELECT
title, year, name title year name
Thriller 1982 Westlake
FROM Bad 1984 Westlake
Album, Studio Τσικουλάτα 2004 Vasipap
WHERE
studio = studioid
Παράδειγμα Πολλαπλών Ενώσεων
user: blog: comment:
- userid - blogid - commentid
- username - title - text
- password - text - blogid
- email - userid - userid
- created

Παράδειγμα Πολλαπλών Ενώσεων (2)

 Ολοι οι τίτλοι και τα κείμενα από τις αναρτήσεις


(postblogs) του χρήστη #5
SELECT
text, title
FROM
blog
WHERE
userid = 5
Παράδειγμα Πολλαπλών Ενώσεων (3)

 Το κείμενο από όλα τα σχόλια που έγιναν σε όλα τα


postblogs του χρήστη #5
SELECT
comment.text
FROM
comment INNER JOIN blog
ON comment.blogid = blog.blogid
WHERE
blog.userid = 5

Χρησιμοποιούμε την ένωση για να πάρουμε στοιχεία από τον


πίνακα comment και να φιλτράρουμε με βάση τον πίνακα blog.

Παράδειγμα Πολλαπλών Ενώσεων (4)


 Το κείμενο και ο χρήστης που έγραψε το σχόλιο από όλα
τα σχόλια που έγιναν σε όλα τα postblogs του χρήστη #5

SELECT
comment.text, user.name
FROM
comment INNER JOIN blogs
ON comment.blogid = blog.blogid
INNER JOIN user
ON user.userid = comment.userid
WHERE
blog.userid = 5
Χρησιμοποιούμε την ένωση για να πάρουμε στοιχεία από τον
πίνακα comment και user και να φιλτράρουμε με βάση τον
πίνακα blog (ένωση στην ένωση).
Παράδειγμα Πολλαπλών Ενώσεων (5)

 Το κείμενο από το πιο πρόσφατο σχόλιο που έγινε σε


κάποιο blog του χρήστη #5 μαζί με τον τίτλο του blog;
SELECT
blog.title, comment.text
FROM
comment INNER JOIN blog
ON comment.blogid = blog.blogid
WHERE blog.userid = 5
ORDER BY
comment.created DESC
LIMIT 1
Χρησιμοποιούμε την ένωση για να πάρουμε στοιχεία από τον πίνακα
comment και comment και για να φιλτράρουμε με χρήση αναφοράς.

Τα μάθατε καλέ κυρία?

1. Ψευδώνυμα Πινάκων

2. Ένωση Πίνακα με τον εαυτό του

3. Ομαδοποίηση

4. Aggregated Functions (Συναρτήσεις Σύνοψης)

5. Υποερωτήματα
Τι καλέ???

1. Ψευδώνυμα Πινάκων

Ψευδώνυμα Πινάκων
 Εκτός από τα πεδιά, στην SQL επιτρέπεται να
δώσουμε ψευδώνυμο ακόμα και σε ολόκληρο
πίνακα.
 Σύνταξη
 Εισάγονται με το AS.
 όνομα πίνακα AS ψευδώνυμο.

 Χρησιμοποιούνται για να μας διευκολύνουν όταν


έχουμε πολλαπλές ενώσεις ή πολύπλοκα
ερωτήματα.
Παραδείγμα
SELECT
Album.name AS title, year, Studio.name AS recording_studio
FROM
Album
INNER JOIN
Studio ON Studio.studioid = Album.studioid
WHERE
Studio.studioid = 1;

title year recording_studio


Thriller 1982 Westlake
Bad 1984 Westlake

Παραδείγμα (2)
SELECT
a.name AS title, year, b.name AS recording_studio
FROM
Album AS a
INNER JOIN
Studio AS b ON b.studioid = a.studioid
WHERE
b.studioid = 1;

title year recording_studio


Thriller 1982 Westlake
Bad 1984 Westlake
ΝΕΑ ΓΑΡΙΔΑΚΙΑ ΛΟΤΑΡΙΑ!!!

1. Ψευδώνυμα Πινάκων

2. Ένωση Πίνακα με τον εαυτό του

Αυτοένωση Πινάκων
 Στην SQL επιτρέπεται και η ένωση ενός πίνακα με
τον εαυτό του.
 Σε αυτή την περίπτωση είναι απαραίτητο να έχουν
ψευδώνυμα οι πίνακες καθώς μόνο έτσι
μπορούμε να τους ξεχωρίσουμε μεταξύ τους.
 Επιτρέπεται να χρησιμοποιήσουμε όλων των
ειδών τις ενώσεις (Απλή / Αριστερή Ένωση,
Καρτεσιανό Γινόμενο).
Παράδειγμα
person:
- personid

- name

- surname
personid name lastname fatherid
- fatherid 1 Νάταλι Θάνου 2
2 Παναγιώτης Τόκος NULL
3 Ακίνδυνος Γκίκας 2
4 Βασίλης Λεβέντης NULL
5 Τάκης Γκώνιας 4
6 Ανίτα Πάνια 5

Παράδειγμα (2)
 Εμφάνιση όλων των ατόμων μαζι με το όνομα πατρός όπου αυτό
υπάρχει.

SELECT
child.name AS name,
child.lastname AS lastname,
father.name AS fathername
FROM
person AS child
LEFT OUTER JOIN
person AS father
ON child.fatherid = father.personid;
Αποτέλεσμα (Vapona)

name lastname fathername


Νάταλι Θάνου Μπάμπης
Παναγιώτης Τόκος NULL
Ακίνδυνος Γκίκας Μπάμπης
Βασίλης Λεβέντης NULL
Τάκης Γκώνιας Βασίλης
Ανίτα Πάνια Τάκης

Δεύτερο Παράδειγμα
 Να εμφανίσεται το ονοματεπώνυμο των ατόμων που
έχουν για πατέρα κάποιον Μπάμπη.

SELECT
child.name AS name,
child.lastname AS lastname, name lastname
FROM Νάταλι Θάνου
person AS child Ακίνδυνος Γκίκας
INNER JOIN person AS father
ON child.fatherid = father.personid
WHERE
father.name = ‘Παναγιώτης’;
Τρίτο Παράδειγμα
 Να εμφανίσεται το ονοματεπώνυμο των ατόμων που
ξέρουμε το όνομα του πατέρα τους.

SELECT
child.name AS name, name lastname
child.lastname AS lastname, Νάταλι Θάνου

FROM Ακίνδυνος Γκίκας


Τάκης Γκώνιας
person AS child
Ανίτα Πάνια
INNER JOIN person AS father
ON child.fatherid = father.personid
WHERE
father.name IS NOT NULL;

ΓΙΟΥΠΙ!!!!

1. Ψευδώνυμα Πινάκων

2. Ένωση Πίνακα με τον εαυτό του

3. Ομαδοποίηση
Ομαδοποίηση
 Στην SQL μας δίνεται η δυνατότητα να ομοδοποιούμε τα
αποτελέσματά μας.

 Η ομαδοποίηση γίνεται βάσει κάποιου κοινού χαρακτηριστικού


 Τιμή μιας στήλης ή παράστασης.
 Ένα ολόκληρο πεδίο.

 Σύνταξη
 GROUP BY πεδίο

 Εμφανίζεται μετά τον όρο WHERE και πριν τον ORDER.


Select πεδία FROM πίνακας WHERE συνθήκη
GROUP BY πεδίο ORDER BY πεδιο;

Παράδειγμα Λάθος Χρήσης


name lastname GROUP BY name name lastname
Μπάμπης Στόκας Μπάμπης ???
Μπάμπης Τόκος Βασίλης ???
Βασίλης Καήλας Τάκης Τόκος
Βασίλης Λεβέντης
Τάκης Τόκος

name lastname
name lastname
Μπάμπης Στόκας GROUP BY lastname
Μπάμπης Στόκας
Μπάμπης Τόκος
???? Τόκος
Βασίλης Καήλας
Βασίλης Καήλας
Βασίλης Λεβέντης
Βασίλης Λεβέντης
Τάκης Τόκος
Που είναι ρε μόρτη το λάθος???
 Όταν χρησιμοποιείς την εντολή GROUP BY για
ομαδοποίηση, τότε τα πεδία που κάνεις SELECT
πρέπει οπωσδήποτε
 Είτε να είναι το πεδίο σύμφωνα με το οποίο κάνεις
ομαδοποίηση.
 Είτε να περιέχεται σε μια Aggregated Function
(Συνάρτηση Σύνοψης).

Παράδειγμά Σωστής Χρήσης


 Να βρεθούν όλα τα διαφορετικά μικρά ονόματα
των ατόμων της βάσης.

SELECT
name
name
Μπάμπης
FROM Βασίλης
people Τάκης

GROUP BY
name;
Τελεστής DISTINCT
 Την ίδια ακριβώς δουλειά με το προηγούμενο
παράδειγμα μπορούμε να την κάνουμε χωρίς χρήση
ομαδοποίησης αλλά με τον τελεστή DISTINCT.

 Παράδειγμα
SELECT name
Μπάμπης
DISTINCT name Βασίλης
FROM Τάκης

people

ΠΑΜΕ ΝΑ ΤΑ ΑΓΟΡΑΣΟΥΜΕ ΟΛΑΑΑΑ!!!

1. Ψευδώνυμα Πινάκων

2. Ένωση Πίνακα με τον εαυτό του

3. Ομαδοποίηση

4. Aggregated Functions (Συναρτήσεις Σύνοψης)


Aggregated Functions (Συνάρτηση Σύνοψης)

 Χρησιμοποιούνται αποκλειστικά σε ερωτήματα που υπάρχει


ομαδοποίηση.

 Δίνουν διάφορες πληροφορίες για τις ομαδοποιημένες γραμμές.

 COUNT(*): πλήθος ομαδοποιημένων γραμμών.


 MIN(πεδίο): ελάχιστη τιμή των ομαδοποιημένων τιμών ενός πεδίου.
 MAX(πεδίο): μέγιστη τιμή των ομαδοποιημένων τιμών ενός πεδίου.
 AVG(πεδίο): μέσος όρος των ομαδοποιημένων τιμών ενός πεδίου.

 Για την εμφάνιση τους στον πίνακα αποτελέσματος,


χρησιμοποιούμε ψευδώνυμα για κάθε μια από τις συναρτήσεις
που χρησιμοποιούμε.

Παράδειγμα

name lastname grade semester


Στέλιος Μοσχογλου 9 3
Αντώνης Χρυσόπουλος 2 3
Θεοδόσης Σουργκούνης 3 5
Δημήτρης Μανώλας 7 3
Θάνος Κιντσάκης 10 5
Χριστίνα Αυδίκου 5 5
Κυριακή Καζά 10 5
Παράδειγμα (2)
 Ποια είναι η μέγιστη, η ελάχιστη και ο μέσος όρος βαθμολογίας
κάθε εξαμήνου?

SELECT
semester,
MIN(grade) AS mingrade,
MAX(grade) AS maxgrade,
AVG(grade) AS avggrade
FROM
people
GROUP BY
semester;

Αποτέλεσμα Παραδείγματος

semester mingrade maxgrade avggrade


3 2 9 6
5 3 10 7
ΣΕ ΕΠΙΛΕΓΜΕΝΑ ΠΕΡΙΠΤΕΡΑ ΚΑΙ ΣΟΥΠΕΡ ΜΑΡΚΕΤ!

1. Ψευδώνυμα Πινάκων

2. Ένωση Πίνακα με τον εαυτό του

3. Ομαδοποίηση

4. Aggregated Functions (Συναρτήσεις Σύνοψης)

5. Υποερωτήματα

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

 Εμείς θα δούμε το πιο απλό παράδειγμα, πως


μπορούμε να φιλτράρουμε δεδομένα με χρήση
υποερωτημάτων.
Παράδειγμα
SELECT
Album.name AS title, year, Studio.name AS
recording_studio
FROM
Album
WHERE
studioid ΙΝ
(SELECT
studioid
FROM
Studio
WHERE location = ‘Greece’);
Τι είναι η PHP??? Τι είναι ο άνθρωπος???

 Server side, scripting language.

Ώπα ώπα…Server-side?
 Server-side: τα προγράμματα τρέχουν στον web
server που βρίσκεται εγκατεστημένο το site.

 Client-side: τα προγράμματα τρέχουν στον


υπολογιστή που βρίσκεται ο browser του χρήστη.
Scripting Language Vs. Programming Language

 Scripting language: τρέχει σε απάντηση σε κάποιο


γεγονός (event). Παραδείγματα τέτοιων γλωσσών
είναι οι PHP, Javascript.

 Programming Language: μπορεί να τρέξει ακόμα


και αν δεν υπάρχουν γεγονότα ή ακόμα και να
δημιουργήσει η ίδια γεγονότα. Παραδείγματα
τέτοιων γλωσσών είναι οι Java, C++ και πολλές
άλλες.

Τι είναι η PHP??? Τι είναι ο άνθρωπος???

 Server side, scripting language

 Χρειάζεται οπωσδήποτε Web Server  Run-As-Is


Run-As-Is??? WTF???
Source Code Compiler Program

Run-As-Is??? WTF??? (2)


Source Code Compiler Program
Τι είναι η PHP??? Τι είναι ο άνθρωπος???

 Server side, scripting language

 Χρειάζεται οπωσδήποτε Web Server  Run-As-Is

 Δουλεύει σε συνεργασία με την HTML

PHP + HTML = L.F.E.

 Τα PHP αρχεία έχουν κατάληξη .php


 Οι εντολές της php βρίσκονται ανάμεσα σε <? php
και ?>
 Οι εντολές της php τελειώνουν με semicolon (;)
ΠΑΝΤΑ!!!

 Ο υπόλοιπος κώδικάς είναι γραμμένος σε HTML


Παράδειγμα --- Hello World

Τι είναι η PHP??? Τι είναι ο άνθρωπος???

 Server side, scripting language

 Χρειάζεται οπωσδήποτε Web Server  Run-As-Is

 Δουλεύει σε συνεργασία με την HTML

 Δίνει περισσότερη λειτουργικότητα από την HTML


(προφανώς…)
Πρόσθετη Λειτουργικότητα
 HTML Pages
 Στατικές
από την φύση τους
 Χρησιμοποιούνται για να ενημερώνουν το ευρύ κοινό

 PHP Pages
 Δυναμικές σελίδες
 Δίνουν την δυνατότητα interaction με τον χρήστη για
να του δώσουν τις πληροφορίες που επιθυμεί

Τι είναι η PHP??? Τι είναι ο άνθρωπος???

 Server side, scripting language

 Χρειάζεται οπωσδήποτε Web Server  Run-As-Is

 Δουλεύει σε συνεργασία με την HTML

 Δίνει περισσότερη λειτουργικότητα από την HTML


(προφανώς…)

 Παρόμοια Σύνταξη με Java, C++, Perl και κυρίως ASP.


Τι έχει το μενού σήμερα???
1. Τι είναι η PHP???

2. Ιστορικά Στοιχεία

Ιστορία μου, Αμαρτία μου…


 Version 1 (1994)
 Rasmus “You’re Da Man” Lerdorf

 Συντήρηση του Website του με


χρήση Perl.

 Ανάπτυξη εργαλείου για να κάνει


την ζωή του πιο εύκολη.
Τι έχει το μενού σήμερα???
1. Τι είναι η PHP???

2. Ιστορικά Στοιχεία

3. Και γιατί όχι...???

Επειδή έτσι μας αρέσει...


A. Open Source / Free Software
B. Cross Platform / Interoperability
C. Powerful, Robust, Scalable
D. Web Development Specific
E. Object Oriented (ειδικά η έκδοση 5)
F. Well Documented
A. www.php.net/docs.php
G. Large active community
A. 20 εκατομύρια websites
B. Wordpress, Joomla, MediaWiki
Τι έχει το μενού σήμερα???
1. Τι είναι η PHP???

2. Ιστορικά Στοιχεία

3. Και γιατί όχι...???

4. Δυνατότητες PHP

Μπαμπά μπαμπά, τι κάνεις με την


PHP???
 Δυναμικές σελίδες
 Διαχείριση χρηστών
 Μόνιμη αποθήκευση δεδομένων (server-side)
 Διαχείριση προσωπικού περιεχομένου
 Προσωπικά μηνύματα
 Φωτογραφίες που μπορούν να δουν μόνο «οι φίλοι μου»

 Ανέβασμα αρχείων
 Σύνδεση με βάση δεδομένων
 Πολλά, πολλά άλλα
Τι έχει το μενού σήμερα???
1. Τι είναι η PHP???

2. Ιστορικά Στοιχεία

3. Και γιατί όχι...???

4. Δυνατότητες PHP

5. Στήσου μόνος σου... ΜΠΟΡΕΙΣ!!!!


Στήστο μόνος σου...ΜΠΟΡΕΙΣ!!!!

Τι χρειαζόμαστε?
 Web Server

 PHP

 Database

 Text Editor

 Web Browser
‘Ολα αυτά σε ένα???
 WAMP (Windows Apache MySQL PHP)

 LAMP (Linux Apache MySQL PHP)

 MAMP (Macintosh Apache MySQL PHP)

 XAMPP (X Apache MySQL PHP Perl)

My First PHP File


Παρακαλώ τι θα πάρετε?
1. Βασικές Οδηγίες
2. Μεταβλητές
3. Αλφαριθμητικά - Αριθμοί
4. Τελεστές
5. Συγκρίσεις
6. Βρόχοι επανάληψης
7. Συναρτήσεις
8. Χειρισμός φορμών

Τι έχετε φρέσκο?
1. Βασικές Οδηγίες
PHP Basics

 Τα PHP αρχεία έχουν κατάληξη .php


 Ο χρήστης δεν έχει άμεση πρόσβαση στα αρχεία αυτά
καθώς βρίσκονται στον server!

 Ο κώδικας php παρεμβάλλεται στον κώδικα της


σελίδας μας.
 Οι εντολές της php βρίσκονται ανάμεσα σε <?php και ?>
 Οι εντολές της php τελειώνουν με semicolon (;) ΠΑΝΤΑ!!!
 Ο κώδικας εκτελείται σειριακά, η μία εντολή μετά την
άλλη
 Space Insensitive

Παράδειγμα --- Hello World


Διαδρομή Λειτουργιών

Apache Server

Καλεί την hello.php

Find Page hello.php


Browser

Return Process Database


HTML PHP Access

Echo - Print
 Η εντολή echo μας δίνει την δυνατότητα να
εκτυπώσουμε ένα αλφαριθμητικό στην σελίδα μας.
Αυτό μπορεί να είναι από ένα απλό String έως μια
μεταβλητή.

echo “Echo το κινητό σου, θα σι κανονίσω”;

Echo το κινητό σου, θα σι κανονίσω!


Echo – Print (2)
Παραδείγματα:

print “Hello World!”; Hello World!

echo “Hello” . “ World!”; Hello World!

echo 5+7; 12

Σχολιασμός: Μανώλης Μαυρομάτης


 Σχόλια για μόνη γραμμή
// This is a single line comment
# or this…

 Σχόλια για πολλές γραμμές


/* This is a multi-line comment
And is the second line
*/

 Τα σχόλια χρησιμοποιούνται για να βοηθήσουν αυτούς


που διαβάζουν τον κώδικά μας (και εμάς τους ίδιους).
Ναι, κάτι άλλο?
1. Βασικές Οδηγίες
2. Μεταβλητές

Μεταβλητές
 Μεταβλητή είναι η συμβολική ονομασία μιας τιμής, η
οποία μπορεί να αλλάξει κατά το πέρασμα του
χρόνου.

 Μεταβλητές στην PHP


 Ξεκινούν με $.
 Ακολουθεί γράμμα ή underscore (_).
 Μπορεί να περιέχει γράμματα, αριθμούς, underscores (_)
ή dashes ( \ , / ).
 Δεν μπορεί να περιέχει κενά.
 Είναι case sensitive ($AntePAOKARA <> $antepaokara).
Nasty Names
 $My-name

 $___MyBooks

 $_Ahahouha

Μεταβλητές (2)
 Η τιμή αποδίδεται σε μια μεταβλητή με χρήση του
τελεστή = (ίσον).
 Παράδειγμα: $var1 = 10;
 Δίνω στην μεταβλητή $var1 την τιμή 10.

 Στις μεταβλητές δεν ορίζουμε τύπους.


Ο τύπος μιας μεταβλητής εξαρτάται από την τιμή της.
 Εφόσον οι μεταβλητές μπορούν να αλλάξουν τιμή με
το πέρας του χρόνου, αυτό σημαίνει ότι μπορούν να
αλλάξουν δυναμικά και τύπο.
Βασικοί Τύποι Μεταβλητών
1. int: 11 , 256, -32, 0

2. float: 3.14, 5.55, 0.22

3. String: “Κούλα είναι κωλόπαιδο ο Κυριάκος”,


“Σκίστεεεεεε!!!”

4. boolean: true, false

Παραδείγματος Χάρη (Κλυνν)


<?php
$var1 = “Hello “;
$var2 = “World!”;
echo $var1;
echo $var2;
?>

Hello World!
Παραδείγματος Χάριν (2)
<?php
$var1 = “Hello “;
echo $var1;
$var1 = 5;
echo $var1; int
?>

Hello 5

Δυναμικό Σύστημα Τύπων


 Μεταβλητές παίρνουν τύπο τιμής
 Διευκόλυνση στη συγγραφή κώδικα
 Σφάλματα χρόνου εκτέλεσης αντί συντακτικά
 Πιο δύσκολα στον εντοπισμό
 Οι μετατροπές τύπων γίνονται αυτόματα
<?php
$var1 = “3“;
7
$var2 = 4;
echo $var1 + $var2;
?>

Μετατροπή σε ακέραιο για να ολοκληρωθεί η πράξη


Αυτό μας τελείωσε, κάτι άλλο?
1. Βασικές Οδηγίες
2. Μεταβλητές
3. Αλφαριθμητικά - Αριθμοί

String Variables (Αλφαριθμητικά)


 Κάθε μεταβλητή είναι ένα κείμενο
 Το μήκος μπορεί να αλλάζει
 Δεν υπάρχει περιορισμός μήκους
 Δεν πρόκειται για πίνακες από χαρακτήρες
 Δεν υπάρχει διαφορετικός τύπος χαρακτήρα και
αλφαριθμητικού
Συνένωση Αλφαριθμητικών
 Αυτό γίνεται πάρα πολύ εύκολα με την τελεία (.)
<?php
echo “Κάποιος σ’αγαπάει,” . “ είμαι εγώ”
?>

Κάποιος σ’αγαπάει, είμαι εγώ

 Μπορεί να γίνει και με κείμενο και μεταβλητή


<?php
$var1 = “ είμαι εγώ”
echo “Κάποιος σε ζητάει,” . $var1
?>
Κάποιος σε ζητάει, είμαι εγώ

Συνένωση Αλφαριθμητικών (2)


 Είτε με δύο μεταβλητές
<?php
$var1 = “καποιος ξενυχτάει και σε περιμένει,”;
$var2 = “ λεπτό προς λεπτό”;
echo $var1 . $var2;
?>

Κάποιος ξενυχτάει και σε περιμένει, λεπτό προς


λεπτό
Διπλά Αυτάκια Vs. Μονά Αυτάκια
 Διπλά εισαγωγικά: Προκαλούν αντικαταστάσεις
<?php
$a = “Pikatsu”;
echo “Καλώ εσένα, $a!”; Καλώ εσένα, Pikatsu
// ακόμα καλύτερα “Καλώ εσένα, {$a}!”
?>
 Μονά εισαγωγικά: ΔΕΝ Προκαλούν αντικαταστάσεις

<?php
$a = “Pikatsu”;
echo ‘Καλώ εσένα, $a!’; Καλώ εσένα, $a!
?>

Χρήσιμες Συναρτήσεις Αλφαριθμητικών

1. strlen(): Υπολογίζει μήκος αλφαριθμητικού


2. trim(): «Κόβει» τα κενά από την αρχή και το τέλος
3. strstr(): Εντοπίζει ένα αλφαριθμητικό μέσα σε άλλο
4. strreplace(): Αντικαθιστά ένα αλφαριθμητικό με ένα
άλλο
5. strtolower(): Μετατρέπει από κεφαλαία σε πεζά
6. strtoupper(): Μετατρέπει από πεζά σε κεφαλαία

Μπορείτε να βρείτε και πολλά άλλα από τα docs.


Μερικές Χρήσιμες Συναρτήσεις Δεκαδικών

1. round(): Στρογγυλοποιεί δεκαδικά


2. ceil(): Βρίσκει το ceiling ενός αριθμού
3. floor(): Βρίσκει το floor ενός αριθμού
4. abs(): Βρίσκει την απόλυτη τιμή
5. pow(): Υψώνει σε δύναμη
6. sqrt(): Βρίσκει την τετραγωνική ρίζα
7. rand(): Δημιουργεί τυχαίους αριθμούς
8. fmod(): Βρίσκει το υπόλοιπο διαίρεσης

Ειδικοί Χαρακτήρες
 Δουλεύουν μόνο σε “διπλά εισαγωγικά”

 Παρόμοιοι με C, C++, Java, …


 \n  Αλλαγή γραμμής
 \t  Tab
Να βάλω και μια ποικιλία για τη μέση?

1. Βασικές Οδηγίες
2. Μεταβλητές
3. Αλφαριθμητικά - Αριθμοί
4. Τελεστές

Τελεστές

Τελεστές Λειτουργία
+, -, *, /, % Αριθμητικές πράξεις
||, &&, ! Λογικές πράξεις: ή, και, όχι
==, !=, <, >, <=, >=, ===, !== Σύγκριση
++, -- Αύξηση, μείωση
. Ένωση αλφαριθμητικών
=, +=, -=, *=, /=, %=, .= Ανάθεση τιμής
Τελεστές (2)
Κώδικας Αποτέλεσμα
3+5 8
2-9 -7
1/2 0.5
5*7 35
102 % 5 2
true || false true
!true false
true && true true
3<5 true
3 != 3 false
“Hello “ . ‘, world!’ Hello, world!

Παραδείγματα Τελεστών
echo “1” / “2”; 0.5
echo 1 . 2; 12
$a = 5; echo “$a”; 5
$b = 5; echo “$b” - $b; 0
$c = 5; echo ‘$c’ . $c; $c5
$a = 3; echo ++$a; 4
$a = 3; echo $a--; 3
$b = “Hello”; $b .= “there!!”; echo $b;
Hello there!!
Τελεστές Ισότητας
 Χρησιμοποιούνται τα ==, !=, ===, !==
 Οι τύποι των μεταβλητών μετατρέπονται για να
γίνει σωστά η σύγκριση στην περίπτωση των δύο
πρώτων.
 1 == 1 True
 1 == 2 False
 0 != “hello” True
 “1” == 1 True
 “1” === 1 False

Να φέρω μια ή δύο να φτάσουν για όλους?

1. Βασικές Οδηγίες
2. Μεταβλητές
3. Αλφαριθμητικά - Αριθμοί
4. Τελεστές
5. Συγκρίσεις
Εντολή if
if ( συνθήκη 1) { Αν ισχύει η συνθήκη 1
// εντολές εκτελείται αυτό το σώμα
}
else if (συνθήκη 2) { Αν ισχύει η συνθήκη 2
// εντολές εκτελείται αυτό το σώμα

}
… …
else { Αν δεν ισχύει καμία συνθήκη
// εντολές εκτελείται το τελευταίο σώμα
}

Παραδείγματα
<?php
if ( $a == 5) {
echo “Five of a kind!”;
}
else {
echo “Can say if stupid or just trolling!”;
}
?>
Παραδείγματα (2)
<?php
$a = “Justin Bieber”
if ( $a == “Justin Bieber”) {
echo “That’s my girl!”;
}
else {
echo “Bitch please!”;
}
?>

Εντολή switch
switch ( παράσταση ) {
case τιμή1: Αν ισχύει η συνθήκη 1
σώμα 1; εκτελείται το σώμα1
break;
case τιμή2: Αν ισχύει η συνθήκη 2
σώμα 2; εκτελείται το σώμα2
break;
...
default: Αν δεν ισχύει καμία συνθήκη
default σώμα εκτελείται το τελευταίο σώμα
}
Παράδειγμα
<?php
switch ( $day ){
case “Δευτέρα”:
echo “Κάτι έχω”;
break;
case “Τρίτη”:
echo “Δεν αντέχω”;
break;
case “Τετάρτη”:
echo “Πως βαριέμαι”;
break;

}

Παράδειγμα (2)
<?php
$day = “Δευτέρα”; ΠΡΟΣΟΧΗ!!!
switch ( $day){
case “Δευτέρα”:
Αν δεν βάλουμε το
echo “Ξέχασες το Break!”; break μετά από κάθε
case “Τρίτη”: σώμα θα συνεχιστεί η
echo “Σε σένα μιλάω!”;
case “Τετάρτη”:
εκτέλεση των εντολών
echo “Είσαι βλακάκος?”; μέχρι το επόμενο
default: break.
echo “Ό,τι να ’ναι είσαι…”;
}

Ξέχασες το Break! Σε σένα μιλάω! Είσαι βλακάκος? Ό,τι να ’ναι είσαι…


Από βρόχους τι θα πάρετε?
1. Βασικές Οδηγίες
2. Μεταβλητές
3. Αλφαριθμητικά - Αριθμοί
4. Τελεστές
5. Συγκρίσεις
6. Βρόχοι επανάληψης

Εντολή for
for ( αρχική συνθήκη; συνθήκη τερματισμού; Βήμα)
{
// σώμα εντολών
}
1. Αρχικοποιούμε μια μεταβλητή.
2. Εκτελείται το σώμα εντολών του βρόχου.
3. Αλλάζουμε την τιμή της μεταβλητής σύμφωνα με το
βήμα που έχουμε.
4. Ελέγχουμε αν ισχύει η συνθήκη τερματισμού
 Αν ισχύει σταματάμε τις επαναλήψεις.
 Αν όχι τότε συνεχίζουμε τις επαναλήψεις.
Παράδειγμα
<?php
for ($i = 1; $i < 6; $i++){
echo “High-$i!”;
}

High-1!High-2!High-3!High-4!High-5!

Εντολή while
while (συνθήκη) {
// σώμα εντολών
}
1. Αρχικά ελέγχεται η συνθήκη.
 Αν ισχύει τότε εκτελείται το σώμα εντολών του βρόχου.
 Σε αντίθετη περίπτωση σταματάει η εκτέλεση του βρόχου
2. Ελέγχεται εκ νέου η συνθήκη τερματισμού κτλ
 Υπάρχει περίπτωση το σώμα του βρόχου να μην
εκτελεστεί ούτε μια φορά.
Παράδειγμα
<?php
$i = 1;
while ($i < 6) {
echo “High-$i!”;
$i++;
}

High-1!High-2!High-3!High-4!High-5!

Εντολή do…while
do {
// σώμα εντολών
} while (συνθήκη)

1. Ακριβώς ίδια με την while.


2. Το σώμα του βρόχου θα εκτελεστεί οπωσδήποτε
μια φορά, είτε είναι λανθασμένη η συνθήκη είτε
όχι, γιατί ο έλεγχος γίνεται κατόπιν (εορτής).
Παράδειγμα
<?php
$i = 5;
do {
echo “Hi-$i!”;
} while ($i > 6)

Hi-5!

Εντολές break - continue


 break
 Εμφανίζεται μέσα σε βρόχους επανάληψης (for, while etc)
ή σώμα συγκρίσεων (switch).
 Διακόπτει την ροή που βρισκόμαστε και συνεχίζει με την
επόμενη αμέσως εντολή.
 Δεν γίνονται άλλες επαναλήψεις.
 continue
 Εμφανίζεται μέσα σε ροή επανάληψης (do…while etc).
 Διακόπτει την ροή των εντολών πηγαίνοντας στον έλεγχο
της συνθήκης τερματισμού.
 Μπορεί να γίνουν και άλλες επαναλήψεις μετά από το
continue.
Αυτά, κάτι άλλο?
1. Βασικές Οδηγίες
2. Μεταβλητές
3. Αλφαριθμητικά - Αριθμοί
4. Τελεστές
5. Συγκρίσεις
6. Βρόχοι επανάληψης
7. Συναρτήσεις

Συναρτήσεις
 Οι συναρτήσεις είναι υπό-ρουτίνες που φέρουν σε
πέρας μια συγκεκριμένη εργασία.
 Ορίζονται με την λέξη-κλειδί function στην αρχή της
γραμμής.
 Στην συνέχεια ακολουθεί το όνομα της συνάρτησης
και μέσα σε παρένθεση τα ορίσματα που παίρνει
αυτή, χωρισμένα με κόμμα (,).

function όνομα-συνάρτησης ( ορίσματα ){


// σώμα εντολών
}
Ορίσματα Συναρτήσεων
 Δίνουν πληροφορίες σε μία συνάρτηση
 Ακολουθούν ίδια ονοματολογία με μεταβλητές
 Αρχίζουν με $, ακολουθεί το όνομα
 Το όνομα...
 Αρχίζειμε γράμμα ή _
 Περιέχει γράμματα, αριθμούς, _

 Έχει ευαισθησία σε πεζά-κεφαλαία

Εντολή επιστροφής (return)


 Η εντολή return επιστρέφει πίσω στο κυρίως
πρόγραμμα μια τιμή που έχει προκύψει κατά την ροή
της συνάρτησης.
 Η τιμή αυτή λαμβάνεται στο σημείο που έγινε η
κλήση της συνάρτησης.
 Η return πρέπει να είναι η τελευταία εντολή στο σώμα
εντολών γιατί μετά σταματάει η εκτέλεση της
συνάρτησης.
 Δεν ορίζεται τύπος επιστροφής, όπως στις άλλες
γλώσσες προγραμματισμού.
 Δεν είναι υποχρεωτική.
Κλήση Συνάρτησης
 Για να καλέσουμε μια συνάρτηση χρησιμοποιούμε το
όνομα της.
 Στην συνέχεια, ορίζουμε μέσα σε παρένθεση τις τιμές που
θα πάρουν τα ορίσματα της.
 Έχει σημασία η σειρά των ορισμάτων
 Πρώτο όρισμα  πρώτη τιμή
 Δεύτερο όρισμα  δεύτερη τιμή…

Κλήση χωρίς επιστροφή


όνομα-συνάρτησης ( ορίσματα )
Κλήση με επιστροφή
$a = όνομα-συνάρτησης ( ορίσματα )

Ορισμός Συναρτήσεων
function multiply( $a , $b ){
$c = $a * $b; ορισμός συνάρτησης
return $c; Όνομα συνάρτησης

echo “Multiplying 1 and 2 gives” . multiply( 1 , 2 );

Κλήση συνάρτησης
Ορισμός Συναρτήσεων (2)
function multiply( $a , $b ){ Ορίσματα

$c = $a * $b;
return $c;
} Πρώτο όρισμα Δεύτερο όρισμα

echo “Multiplying 1 and 2 gives” . multiply( 1 , 2 );

τιμή πρώτου ορίσματος Τιμή δεύτερου ορίσματος

Ορισμός Συναρτήσεων (3)


function multiply( $a , $b ){
$c = $a * $b;
return $c;
}
Επιστροφή

echo “Multiplying 1 and 2 gives” . multiply( 1 , 2 );

μπαίνει στην θέση του

Multiplying 1 and 2 gives 2


Παράδειγμα
function average( $a, $b ) {
$c = $a + $b;
return $c / 2;
}

echo ‘The average of 3, 5: ‘ . average( 3, 5 );


echo “\n”;
echo ‘The average of 1, 9: ‘ . average( 1, 9 );

Παραδείγμα (2)
function choose($a){
if ($a == “1”){
return “Pikachu”;
}
else {
return “Καμπαμαρού”;
}
}

echo choose(3);
Προαιρετικά Ορίσματα
 Μπορούμε αν θέλουμε κάποια από τα ορίσματα
μιας συνάρτησης να τα θέσουμε κατά τον ορισμό
της.
 Τα προαιρετικά ορίσματα πρέπει να είναι τα
τελευταία σε σειρά.
 Μπορούν να είναι όσα θέλουμε σε αριθμό.

 Πρέπει να ορίσουμε με ίσον (=) την τιμή που θα έχουν


ως προεπιλεγμένη.

Παράδειγμα
function play( $title , $band = “Mazoo and the Zoo”){
$str = “I am playing “;
$str .= $title . “ by ” . $band;
return $str;
} Προαιρετικό όρισμα

echo play(“H Aρκούδα”);

Αν είχαμε όμως
function play( $title = “Η Αρκούδα” , $band )
στον ορισμό θα ήταν λάθος.
Παράδειγμα
function play
( $title = “Careless Whisper”, $band = “George Michael”){
$str = “I am playing “;
$str .= $title . “ by ” . $band;
return $str; Όλα είναι προαιρετικά ορίσματα
}

echo play();

Θα πιείτε κάτι?
1. Βασικές Οδηγίες
2. Μεταβλητές
3. Αλφαριθμητικά - Αριθμοί
4. Τελεστές
5. Συγκρίσεις
6. Βρόχοι επανάληψης
7. Συναρτήσεις
8. Χειρισμός Φορμών
Χειρισμός Δεδομένων Φόρμας
 Για να πάρουμε δεδομένα χρησιμοποιούμε δύο
μεθόδους:
 HTTP GET
Μεταβλητή $_GET
$_GET[ όνομα παραμέτρου ]

 HTTP POST
Μεταβλητή $_POST
$_POST[ όνομα παραμέτρου ]

 Οι μεταβλητές αυτές ορίζονται αυτόματα από την PHP

Παράδειγμα
test.html

<form action=“test.php” method=“post”>


<input type=“text” name=“foo” />
<input type=“submit” value=“Πάρε” />
</form>
Παράδειγμα
test.php
<p>
Δώσε
<?php
echo $_POST[ ‘foo’ ];
?>!
</p>

Εφημερίδες! Έκτακτο Παράρτημα!


1. Booleans – Null (κενό)
2. Πίνακες
3. Εντολή foreach
4. Διαχωρισμός σε αρχεία
5. Εμβέλεια Μεταβλητών
6. Συναρτήσεις Αρχείων
7. Διαχείριση Αρχείων
8. Headers (Κεφαλίδες)
Πρώτη Είδηση!
1. Booleans – Null (κενό)

Booleans
 Οι μεταβλητές τύπου boolean παίρνουν δύο τιμές:
1. true (1)
2. false (0)

 Στην εκτύπωση των τιμών αυτών από την PHP


αυτό που βλέπουμε στην οθόνη ειναι τα
αριθμητικά τους ισοδύναμα
...ή μήπως όχι???
Παράδειγμα
<?php
$var1 = true;
$var2 = false;
echo “var1: “ . $var1;
echo “var2: “ . $var2;
?>

var1: 1
var2: (???????)

Τι μαγικό ήταν αυτό???


 Στην περίπτωση που εχουμε false, δεν
εμφανίζεται τίποτα στην οθόνη, ούτε false ούτε 0.

 Οπότε δεν τρομάζουμε όταν συμβαίνει αυτό, είναι


φυσιολογικό.
NULL (Κενό)
 Η λέξη NULL υποδηλώνει μια μεταβλητή που δεν
περιέχει μέσα της καμία τιμή ούτε είναι κάποιου
συγκεκριμένου τύπου, είναι απλά ορισμένη ως
όνομα.

 Οταν εκτυπώνουμε μεταβλητές που έχουν τιμή


NULL αυτές επιστρέφουν κένο, όπως ακριβώς και
οι μεταβλητές boolean με τιμή false.

Χρήσιμες Συναρτήσεις Μεταβλητών Boolean

 isset( όνομα μεταβλητής )


 Συνάρτηση που δείχνει αν μια μεταβλητή υπάρχει.
 Επιστρέφει true/false.

<?php
$lyke = 1;
echo “Λύκε, Λύκε είσαι εδώ? ” . isset($lyke);
?>

Λύκε, Λύκε είσαι εδώ? 1


Χρήσιμες Συναρτήσεις Μεταβλητών Boolean (2)

 unset( όνομα μεταβλητής )


 Συνάρτηση που διαγράφει τα περιεχόμενα μιας μεταβλητής.
 Κάνει την τιμή της μεταβλητής ίση με NULL.

<?php
$me = “ΕΓΩ!!!!!”;
unset ($me);
echo “Ποιος είναι ο καλύτερος στην PHP??” . $me;
?>

Ποιος είναι ο καλύτερος στην PHP??

Χρήσιμες Συναρτήσεις Μεταβλητών Boolean (3)

 empty( όνομα μεταβλητής )


 Ελέγχει αν μια μεταβλητή είναι άδεια.
 Επιστρέφει true/false.

 Ως άδεια νοείται μια μεταβλητή


 με τιμή NULL ή false.
 με τιμή 0.
 με τιμή “” ή “0”.
 πίνακας χωρίς περιεχόμενα.
 μεταβλητή ορισμένη χωρίς τιμή ($var1).
Και μετά, και μετά??
1. Booleans – Null (κενό)
2. Πίνακες

Πίνακες
 Ο πίνακας είναι τύπος δεδομένων που μπορεί να
αποθηκεύσει περισσότερες από μια τιμές.

 Οι τιμές που παίρνει κάθε θέση του πίνακα μπορεί


να είναι οτιδήποτε εμείς θέλουμε.
 Αριθμός.

 Αλφαριθμητικό.

 Boolean.

 ακόμα και άλλος πίνακας.


Κλειδιά - Αγκύλες
 Οι θέσεις ενός πίνακα ορίζονται με κλειδιά, τα
οποία μπορεί να είναι
1. Ακέραιοι αριθμοί όπως στους πίνακες του
αντικειμενοστρεφούς προγραμματισμού.
2. Labels (ετικέτες) που ορίζουμε εμείς.

 Με τις αγκύλες ορίζουμε την θέση του πίνακα που


θέλουμε να πάρουμε ή να ορίσουμε την τιμή του
 $array1[0]= 10; $array2[“Coyote”] = “HELP!!!”
 echo $array1[0] . $array2 [“Coyote”]

Ορισμός Πίνακα
 Ένας πίνακας ορίζεται με την εντολή array() και τις
τιμές χωρισμένες με κόμμα (,)
 Σε αυτή τη περίπτωση έχουμε δείκτες-κλειδιά
ακέραιους (0, 1, 2 κτλ).
<?php
$array1 = array(2, “ good to be ”, true);
echo $array1[0] . $array1[1] . $array1[2];
echo $array1;
?>
2 good to be 1
array
Ορισμός Πίνακα (2)
 Στην περίπτωση των labels έχουμε
<?php
$array1 = array(“Babis” => “2 be” ,
“Soulara” =>“ or not 2 be”);
echo $array1[“Babis”] . $array1[“Soulara”];
?>

2 be or not 2 be

Ορισμός Πολυδιάστατου Πίνακα


 Στην PHP αυτό επιτυγχάνεται βάζοντας πίνακα
μέσα σε πίνακα
<?php
$array1 = array(array(9,10,11), array(4,5,6));
echo $array1[0][0] . “ to “ . $array1[1][1];
?>

9 to 5
Διαγραφή από Πίνακα
 Η διαγραφή ενός στοιχείου πίνακα γίνεται με την
εντολή unset.
 unset $array1[0];

 ΠΡΟΣΟΧΗ!!!! Μετά την διαγραφή του στοιχείου,


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

Παράδειγμα
<?php
$array1 = array(“I”, “am”, “bad”, “ass”)
echo “$array1[0] $array1[1] $array1[2] $array1[3] \n”;
unset $array1[2];
echo “$array1[0] $array1[1] $array1[2] $array1[3]”;
?>

I am bad ass
I am ass
Συναρτήσεις Πινάκων
 print_r(): εμφανίζει τα περιεχόμενα ενός πίνακα.
 Παίρνει σαν όρισμα την μεταβλητή – πίνακα.
 Συνδυάζεται με πολύ καλά με την <pre></pre>.

<?php
$array1 = array(1,2,3); Array([0] => 1 , [1]=>2 , [2]=>3)
print_r($array1)
?> Array
<pre> (
<?php print_r($array1) [0] => 1 ,
[1] => 2 ,
?>
[2] => 3
</pre>
)

Συναρτήσεις Πινάκων (2)


 count(): επιστρέφει τον αριθμό των στοιχείων
 max(): επιστρέφει το μέγιστο στοιχείο
 min(): επιστρέφει το ελάχιστο στοιχείο
 sort(): ταξινομεί τα στοιχεία του πίνακα κατά
αύξουσα σειρά
 r_sort(): ταξινομεί τα στοιχεία του πίνακα κατά
φθίνουσα σειρά
 in_array(): βρίσκει αν μια τιμή υπάρχει στον
πίνακα. Επιστρέφει true/false.
Συναρτήσεις Πινάκων (3)
 implode(): μετατρέπει έναν πίνακα σε string
$array1 = array(“Damn” , “you” , “vile” , “woman!”);
echo $string = implode(“ ” , $array1);

Damn you vile woman!

 explode(): μετατρέπει ένα string σε πίνακα

$string = “Victory is mine”; Array(


$array1 = explode(“ ” , $string); [0] => “Victory” ,
<pre><?php print_r($array1)?> [1] => “is” ,
</pre>
[2] => ”mine”
Και πολλές άλλες!
)

Συνέχεια στην σελίδα 3...


1. Booleans – Null (κενό)
2. Πίνακες
3. Εντολή foreach
Εντολή foreach
 Η εντολή foreach χρησιμοποιείται πάντα με κάποιον πίνακα.

 Με χρήση αυτής, μπορούμε να προσπελάσουμε όλες τις θέσεις


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

 Σύνταξη
foreach ( $array as $value) {
// σώμα εντολών
}
όπου η μεταβλητή $value περιέχει τις τιμές του πίνακα.

Εντολή foreach (2)


 Εναλλακτική σύνταξη
foreach ( $array as $key => $value) {
// σώμα εντολών
}
 $key έχει τα κλειδί του τρέχοντος στοιχείου.
 $value περιέχει τις τιμή του.

 Αν αλλάξει η τιμή του $value μέσα στο σώμα, δεν αλλάζουν


οι τιμές που έχει ο πίνακας.
Παράδειγμα
$heroes = array(
“Batman” => “AWESOME” ,
“Robin” => “gay”
);
foreach ( $heroes as $hero => $power ) {
echo “ $hero is $power!! \n”;
}

Batman is AWESOME!!
Robin is gay!!

foreach Πολυδιάστατων Πινάκων


$matrix = array(
array( 1, 2, 3 ),
array( 4, 5, 6 ),
array( 7, 8, 9 ),
);
foreach ( $matrix as $row ) {
foreach ( $row as $element ) {
echo “$element “;
}
echo “\n”;
}
Πολιτική
1. Booleans – Null (κενό)
2. Πίνακες
3. Εντολή foreach
4. Διαχωρισμός σε Αρχεία

Διαχωρισμός σε Αρχεία
 Η PHP μας δίνει την πολύ χρήσιμη δυνατότητα να
φορτώσουμε τον κώδικά ενός αρχείου σε ένα άλλο αρχείο.

 Με αυτόν τον τρόπο καταφέρνουμε να


 Έχουμε καλύτερα οργανωμένο τον κώδικά μας
 Επαναχρησιμοποιούμε κώδικα κατά βούληση

 Συνήθως χρησιμοποιείται για να


 φορτώσουμε βιβλιοθήκες συναρτήσεων
 φορτώσουμε header (κεφαλίδα) και footer (υποσέλιδο)
στην σελίδα μας
Εντολή include
 Με την εντολή include φορτώνουμε εξωτερικά αρχεία στον
κώδικά μας.
 include ‘library.php’

 Με αυτόν τον τρόπο τρέχουμε τον κώδικα του library.php


 Ειναι το ίδιο με το να κάναμε copy/paste τον κώδικα που
περιλαμβάνει το αρχείο που κάναμε include.

 Αν το αρχείο δεν βρεθεί τότε παράγει ένα warning και


συνεχίζει.

Εντολή require
 Η εντολή require είναι παρόμοια σε χρησιμότητα με
την include. Συντάσσεται ακρίβως το ίδιο.
 require ‘library.php’

 Η διαφορά των δύο εντολών έγκειται στο ότι με το


require σε περίπτωση που δεν βρεθεί το αρχείο
έχουμε error και όχι warning, καθώς και διακοπή της
φόρτωσης της σελίδας.
include_once – require_once
 Σύνταξη
 include_once library.php;
 require_once library.php;

 Οι εντόλές αυτές κάνουν το ίδιο πράγμα με τις


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

 Πολύ χρήσιμο σε περίπτωση που έχουμε πολλά


αρχεία που μπορεί το ένα να κάνει include το άλλο.

Μικρές Αγγελίες
1. Booleans – Null (κενό)
2. Πίνακες
3. Εντολή foreach
4. Διαχωρισμός σε Αρχεία
5. Συναρτήσεις Αρχείων
Συνάρτηση opendir()
 Συνάρτηση opendir( όνομα φακέλου )
 Σαν όρισμα βάζουμε απλά το όνομα του φακέλου αν
είναι μέσα στο ίδιο φάκελο με το αρχείο μας
 Αλλίως βάζουμε το path (σχετικό ή απόλυτο)

 Το αποτέλεσμα
 Επιστρέφει ένα αντικείμενο τύπου φάκελος αρχείων
 Επιστρέφει false αν δεν υπάρχει ο φάκελος
 Χρησιμοποιείται από άλλες συναρτήσεις, που θα
δούμε παρακάτω

Συνάρτηση readdir()
 Συνάρτηση readdir()
 Δέχεταισαν όρισμα το αντικείμενο που επιστρέφει η
opendir().

 Το αποτέλεσμα
 Επιστρέφει το επόμενο αρχείο μέσα στον φάκελο που
επιλέξαμε.
 Επιστρέφει false αν αποτύχει να επιστρέψει αρχείο.
Συνάρτηση closedir()
 Συνάρτηση closedir()
 Δέχεται σαν όρισμα το αντικείμενο που επιστρέφει η
opendir().

 Το αποτέλεσμα
 Κλείνειτον φάκελο που επιλέξαμε με την opendir()
όταν τελειώσουμε τις εργασίες μας με αυτόν.
 Επιστρέφει false αν αποτύχει να κλείσει τον φάκελο.

Συναρτήσεις Αρχείων
 Συνάρτηση file_get_contents()
 Δέχεται σαν όρισμα ένα αντικείμενο τύπου αρχείο που
επιστρέφει η readdir() ή ένα link σε αρχείο (απόλυτο ή σχετικό).
 Επιστρέφει τα περιεχόμενα του αρχείου
 Επιστρέφει false αν αποτύχει να διαβάσει το αρχείο.

 Συνάρτηση file_put_contents()
 Δέχεται σαν όρισμα ένα αντικείμενο τύπου αρχείο που
επιστρέφει η readdir() και τα περιεχόμενα που θέλουμε να του
δώσουμε.
 Αποθηκεύει τα περιεχόμενα στο αρχείο και σβήνει τα
προηγούμενα.
 Επιστρέφει false αν αποτύχει να διαβάσει το αρχείο.
Συναρτήσεις Αρχείων (2)
 Άλλες χρήσιμες συναρτήσεις
 fopen()

 fclose()

 fwrite()

 fget()

και άλλες πολλές.

http://gr.php.net/manual/en/ref.filesystem.php

Αναγγελίες Γάμων
1. Booleans – Null (κενό)
2. Πίνακες
3. Εντολή foreach
4. Διαχωρισμός σε Αρχεία
5. Συναρτήσεις Αρχείων
6.
Διαχείρηση Αρχείων
Ανέβασμα Αρχείων
 Τα αρχεία στέλνονται στον server με αίτημα POST.
 Αποθηκεύονται προσωρινά στην μνήμη όσο τρέχει το
πρόγραμμά μας.
 Πρέπει να τα αποθηκεύσουμε αλλιώς χάνονται με το
πέρας της εκτέλεσης.

<form enctype="multipart/form-data" method=“post”>


Send this file:
<input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

Μεταβλητή $_FILES
 Η μεταβλητή $_FILES περιέχει όλα τα αρχεία που
ανέβασε ο χρήστης.

 $_FILES[ ‘userfile’ ][ ‘name’ ]


 Περιέχει το πραγματικό όνομα κάθε αρχείου.
 $_FILES[ ‘userfile’ ][ ‘tmp_name’ ]
 Περιέχει το προσωρινό όνομα κάθε αρχείου.
 $_FILES[ ‘userfile’ ][ ‘size’ ]
 Περιέχει το μέγεθος κάθε αρχείου σε bytes.
Αποθήκευση Αρχείων
 Συνάρτηση αποθήκευσης uploaded αρχείων
 move_uploaded_files($filename, $destination)
 γίνεται έλεγχος πριν την αποθήκευση ότι το αρχείο προέρχεται
από ανέβασμα.
 η μεταβλητή $filename είναι το αρχείο που ανέβηκε.
 η μεταβλητή $destination είναι εκεί που θα αποθηκευτεί.

<?php
$destination = ‘C:\Uploads\’
if( !empty( $_FILES ) ) {
$destination .= $_FILES[ ‘foo’ ][ ‘name’ ];
$filename = $_FILES[ ‘foo’ ][ ‘tmp_name’ ];
move_uploaded_file( $filename, $destination );
}
?>

Επικήδειοι
1. Booleans – Null (κενό)
2. Πίνακες
3. Εντολή foreach
4. Διαχωρισμός σε Αρχεία
5. Συναρτήσεις Αρχείων
6.
Διαχείρηση Αρχείων
7.
Headers (Κεφαλίδες)
Συνάρτηση header()
 H συνάρτηση header() παίρνει ως όρισμα ένα String
και το στέλνει στην κεφαλίδα της απάντησης.
 Πρέπει να τρέξει πριν από oποιοδήποτε output
 Είτε είναι html.
 Είτε space, tab ή enter.

<html>
<?php
header( 'Location: http://www.apisti.com/‘ );
?>

Χρήσιμα Headers
 header( 'Location: http://www.apisti.com/‘ )
 Κάνει redirect σε μια διεύθυνση.
 Η διεύθυνση πρέπει να είναι απόλυτη.

 header('Content-type: text/html; charset=utf-8‘ )


 Είναι εντολή ισοδύναμη με τον κώδικα

<meta
http-equiv=“Content-type”
content=“text/html; charset=utf-8”
/>

You might also like