Κεφάλαιο 10: Ανάπτυξη εφαρμογών Ιστού 311 Αποστολή ηλεκτρονικού ταχυδρομείου Συναρτήσεις ημερομηνίας και ώρας

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

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

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

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

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

Άσκηση 5 -Δηµιουργία ιστοσελίδων µε HTML µέρος 5 ο

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

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

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

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

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

Συλλογή και Επεξεργασία Δεδομένων με Φόρμες

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

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ. Κεφάλαιο 5. Αλληλεπιδραστικές ιστοσελίδες (χρήση ετικέτας <FORM> και η τεχνική CGI)

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

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

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

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

Εργαστήριο 8. Προγραμματιστικές Εφαρμογές στο Διαδίκτυο

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Λίγα λόγια από το συγγραφέα Κεφάλαιο 1: Βάσεις δεδομένων και Microsoft Access Κεφάλαιο 2: Microsoft Access

Περιεχόμενα. Περιεχόμενα...v

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

Προγραμματισμός Διαδικτύου ΕΡΓΑΣΤΗΡΙΟ. Τμ. ΔΕ- Χειμ

Κεφάλαιο 10: Ανάπτυξη εφαρμογών Ιστού 311 Αποστολή ηλεκτρονικού ταχυδρομείου Συναρτήσεις ημερομηνίας και ώρας

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

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

Περιεχόμενα. Πρόλογος... xiii

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

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

Διαδικασιακός Προγραμματισμός

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

Περιεχόμενα. Μέρος 1: Βασικές έννοιες της πληροφορικής Πρόλογος... 11

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Επεξεργασία κειμένου: Word 2003

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Περιεχόμενα. Πρόλογος...11

Φόρμες. Γενικοί κανόνες. Η ετικέτα <form>

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

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


Γνωρίστε το Excel 2007

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

Microsoft Excel Κεφάλαιο 1. Εισαγωγή. Βιβλίο εργασίας

Λίγα λόγια από το συγγραφέα Κεφάλαιο 1: Microsoft Excel Κεφάλαιο 2: Η δομή ενός φύλλου εργασίας... 26

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

Παρουσίαση PHP. Μιχάλης Ζήσης GreekLUG

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στο Outlook Κεφάλαιο 2 Βασικές εργασίες με μηνύματα 33

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Βάσεις Δεδομένων Ι 6. Ιδιότητες πεδίων. Τμήμα Διοίκησης Επιχειρήσεων (Μεσολόγγι) ΤΕΙ Δυτικής Ελλάδας

Τα προγράμματα σε ASP που χρησιμοποιήθηκαν για την υλοποίηση της διαχείρισης των μαθημάτων.

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

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στο Outlook Κεφάλαιο 2 Βασικές εργασίες με μηνύματα 31

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

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

Εισαγωγή στην PHP. ΕΣΔ 232 Διαχείριση Δεδομένων στη Κοινωνία της Πληροφορίας. Περιεχόμενα. Περιεχόμενα

Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python

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

Πρόλογος... xiii ΜΕΡΟΣ 1 1 Εισαγωγή στο Excel Βασικές λειτουργίες του Excel... 21

Οδηγός γρήγορης εκκίνησης

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

Kεφάλαιο 11 Λίστες και Ανάλυση Δεδομένων Kεφάλαιο 12 Εργαλεία ανάλυσης πιθανοτήτων Kεφάλαιο 13 Ανάλυση δεδομένων...

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

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

ιαχείριση Πληροφοριών στο ιαδίκτυο

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

Άσκηση 6 Επαναληπτική Άσκηση HTML

Λίγα λόγια από το συγγραφέα Microsoft Word Δημιουργία νέου εγγράφου Το σύστημα Βοήθειας του Word...

Προγραμματιστικές Εφαρμογές στο Διαδίκτυο Εργαστήριο 5

Το σύστημα Βοήθειας του Internet Explorer

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

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

Περιεχόμενα ΜΕΡΟΣ 1. Πρόλογος... xiii. 1 Εισαγωγή στο Excel Βασικές λειτουργίες του Excel... 23

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Επικοινωνία. Ηλεκτρονικό ταχυδρομείο. Δημιουργία λογαριασμού. Λήψη ηλεκτρονικού μηνύματος. Αποστολή ηλεκτρονικού μηνύματος. Απάντηση και προώθηση

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

Περιεχόμενα. 1 Tο βιβλίο "με μια ματιά" Εισαγωγή στη Microsoft Access Γνωριμία με τις βάσεις δεδομένων της Access...

6 Το μικρό βιβλίο για το ελληνικό Word 2010

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

Διάλεξη 3η HTML intermediate

App Inventor 3ο Μάθημα (Ζάρια - επέκταση)

LASERJET ENTERPRISE FLOW MFP. Συνοπτικές οδηγίες χρήσης M525

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

Περιεχόμενα. Λίγα λόγια από τον συγγραφέα Microsoft Excel Η δομή ενός φύλλου εργασίας... 21

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

Περιεχόμενα. Λίγα λόγια από το συγγραφέα Microsoft Word ημιουργία νέου εγγράφου Το σύστημα Βοήθειας του Office...

ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet.

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

Τεχνολογίες Διαδικτύου. Server Side Scripting I PHP

3. Γράψτε μία εντολή που να εμφανίζει π.χ. «Πόσα είναι τα κορίτσια του;» και μία που να εμφανίζει: «Τα κορίτσια του Τζειμς Μποντ είναι 4»

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

Περιεχόμενα. Αντί προλόγου Πώς να χρησιμοποιήσετε το βιβλίο Κεφάλαιο 1: Πώς δημιουργώ το Προφίλ μου στο Facebook;...

Transcript:

ΠΕΡΙΕΧΟΜΕΝΑ Εισαγωγή: 9 Τι είναι οι δυναμικές τοποθεσίες;... 10 Τι θα χρειαστείτε... 16 Σχετικά με το βιβλίο... 17 Η συνοδευτική τοποθεσία Ιστού... 19 Κεφάλαιο 1: Eισαγωγή στην PHP 21 Βασική σύνταξη... 22 Αποστολή δεδομένων στο φυλλομετρητή Ιστού... 26 Γραφή σχολίων... 30 Τι είναι οι μεταβλητές;... 34 Εισαγωγή στις συμβολοσειρές... 38 Συνένωση συμβολοσειρών... 41 Εισαγωγή στους αριθμούς... 43 Εισαγωγή στις σταθερές... 47 Απλά και διπλά εισαγωγικά... 50 Κεφάλαιο 2: Προγραμματισμός με την PHP 53 Δημιουργία φόρμας HTML... 54 Χειρισμός φόρμας HTML... 58 Συνθήκες και τελεστές... 62 Επικύρωση δεδομένων φόρμας... 66 Εισαγωγή στους πίνακες... 72 Βρόχοι for και while... 90 Κεφάλαιο 3: Δημιουργία δυναμικών τοποθεσιών Ιστού 93 Συμπερίληψη πολλών αρχείων... 94 Και πάλι ο χειρισμός φορμών HTML... 104 Παραμένουσες φόρμες... 109 Δημιουργία των δικών σας συναρτήσεων... 112 Κεφάλαιο 4: Εισαγωγή στη MySQL 127 Ονομασία στοιχείων βάσης δεδομένων... 128 Επιλογή τύπων στηλών... 130 Άλλες ιδιότητες στηλών... 134 Προσπέλαση της MySQL... 136 Κεφάλαιο 5: Εισαγωγή στην SQL 143 Δημιουργία βάσεων δεδομένων και πινάκων... 144 5

Περιεχόμενα Προσθήκη εγγραφών... 147 Επιλογή δεδομένων... 151 Χρήση συνθηκών... 153 Χρήση των όρων LIKE και NOT LIKE... 156 Ταξινόμηση των αποτελεσμάτων ερωτήματος... 158 Περιορισμός των αποτελεσμάτων ερωτήματος... 160 Ενημέρωση δεδομένων... 162 Διαγραφή δεδομένων... 164 Χρήση συναρτήσεων... 166 Κεφάλαιο 6: Προχωρημένη SQL και MySQL 177 Σχεδίαση βάσεων δεδομένων... 178 Ενώσεις... 193 Ομαδοποίηση επιλεγμένων αποτελεσμάτων... 198 Δημιουργία ευρετηρίων... 200 Χρήση διαφορετικών τύπων πινάκων... 205 Αναζητήσεις πλήρους κειμένου... 208 Συναλλαγές... 214 Κεφάλαιο 7: Χειρισμός σφαλμάτων και αποσφαλμάτωση 219 Τύποι σφαλμάτων και βασική αποσφαλμάτωση... 220 Εμφάνιση σφαλμάτων της PHP... 226 Ρύθμιση της αναφοράς σφαλμάτων στην PHP... 228 Δημιουργία προσαρμοσμένων χειριστών σφαλμάτων... 231 Τεχνικές αποσφαλμάτωσης της PHP... 236 Τεχνικές αποσφαλμάτωσης SQL και MySQL... 240 Κεφάλαιο 8: Συνεργασία PHP και MySQL 243 Τροποποίηση του προτύπου... 244 Σύνδεση στη MySQL... 246 Εκτέλεση απλών ερωτημάτων... 250 Ανάκτηση αποτελεσμάτων ερωτήματος... 259 Ασφαλής χρήση της SQL... 263 Καταμέτρηση των επιστρεφόμενων εγγραφών... 269 Ενημέρωση εγγραφών με PHP... 271 Κεφάλαιο 9: Συνήθεις τεχνικές προγραμματισμού 279 Αποστολή τιμών σε σενάριο... 280 Χρήση κρυφών εισόδων φόρμας... 284 Επεξεργασία εγγραφών... 290 Σελιδοποίηση των αποτελεσμάτων ερωτήματος... 297 Ταξινόμηση των αποτελεσμάτων... 305 Κεφάλαιο 10: Ανάπτυξη εφαρμογών Ιστού 311 Αποστολή ηλεκτρονικού ταχυδρομείου... 312 Συναρτήσεις ημερομηνίας και ώρας... 318 6

Περιεχόμενα "Ανέβασμα" αρχείων... 322 PHP και JavaScript... 335 Τι είναι οι κεφαλίδες της HTTP... 342 Κεφάλαιο 11: "Μπισκότα" και περίοδοι εργασίας 347 Δημιουργία σελίδας σύνδεσης... 348 Δημιουργία των συναρτήσεων σύνδεσης... 351 Χρήση μπισκότων... 356 Χρήση περιόδων εργασίας... 369 Βελτίωση της ασφάλειας της περιόδου εργασίας... 378 Κεφάλαιο 12: Τεχνικές ασφαλείας 381 Αποκλεισμός ανεπιθύμητης αλληλογραφίας... 382 Επικύρωση δεδομένων κατά τύπο... 389 Αποφυγή επιθέσεων XSS... 394 Αποφυγή επιθέσεων με "ενέσεις" SQL... 397 Κρυπτογράφηση βάσης δεδομένων... 403 Κεφάλαιο 13: Κανονικές παραστάσεις συμβατές με Perl 409 Δημιουργία δοκιμαστικού σεναρίου... 410 Ορισμός απλών μοτίβων... 414 Χρήση ποσοδεικτών... 417 Χρήση κλάσεων χαρακτήρων... 420 Εύρεση όλων των ταυτίσεων... 423 Χρήση τροποποιητών... 427 Ταύτιση και αντικατάσταση μοτίβων... 429 Κεφάλαιο 14: Δημιουργία διεθνών τοποθεσιών 433 Σύνολα χαρακτήρων και κωδικοποίηση... 434 Δημιουργία πολύγλωσσων ιστοσελίδων... 436 Το πρότυπο Unicode στην PHP... 440 Ταξινόμηση στην PHP... 444 Μεταγραφή στην PHP... 447 Γλώσσες και MySQL... 450 Ζώνες ώρας και MySQL... 454 Χρήση τοπικών ρυθμίσεων... 457 Κεφάλαιο 15: Παράδειγμα πίνακας ανακοινώσεων 461 Δημιουργία της βάσης δεδομένων... 462 Δημιουργία των προτύπων... 471 Δημιουργία της αρχικής σελίδας... 480 Δημιουργία της σελίδας του φόρουμ... 481 Δημιουργία της σελίδας του νήματος... 486 Δημοσίευση μηνυμάτων... 491 7

Περιεχόμενα Κεφάλαιο 16: Παράδειγμα εγγραφή χρηστών 503 Δημιουργία των προτύπων... 504 Τα σενάρια διευθέτησης... 510 Δημιουργία της αρχικής σελίδας... 518 Εγγραφή... 520 Ενεργοποίηση λογαριασμού... 529 Σύνδεση και αποσύνδεση χρήστη... 533 Διαχείριση κωδικών πρόσβασης... 539 Κεφάλαιο 17: Παράδειγμα ηλεκτρονικό εμπόριο 549 Δημιουργία της βάσης δεδομένων... 550 Η πλευρά της διαχείρισης... 556 Δημιουργία του δημόσιου προτύπου... 573 Ο κατάλογος προϊόντων... 577 Το καλάθι αγορών... 589 Καταγραφή των παραγγελιών... 599 Παράρτημα Α: Εγκατάσταση 607 Εγκατάσταση στα Windows... 608 Εγκατάσταση στο Mac OS X... 611 Οι άδειες της MySQL... 614 Δοκιμή της εγκατάστασης... 618 Διευθέτηση της PHP... 621 Ευρετήριο 623 8

PHP PHP, -.,,,. HTML, PHP., ( 1 " PHP",, ),, ( ),,. 53

Κεφάλαιο 2 Δημιουργία φόρμας HTML Ο χειρισμός μιας φόρμας HTML με την PHP είναι ίσως η πιο σημαντική διεργασία σε μια δυναμική τοποθεσία Ιστού. Αποτελείται από δύο βήματα: πρώτα δημιουργείτε την ίδια τη φόρμα HTML, και στη συνέχεια το σενάριο PHP που θα δέχεται και θα επεξεργάζεται τα δεδομένα της φόρμας. Η αναλυτική περιγραφή των φορμών HTML είναι έξω από το θέμα του βιβλίου, αλλά θα σας παρουσιάσω ένα σύντομο παράδειγμα που μπορείτε να χρησιμοποιήσετε σε ολόκληρο το κεφάλαιο. Αν δεν είστε εξοικειωμένοι με τα βασικά των φορμών HTML, μεταξύ των οποίων και τα διάφορα στοιχεία τους, συμβουλευθείτε μια σχετική πηγή για περισσότερες πληροφορίες. Μια φόρμα HTML δημιουργείται με τη χρήση ετικετών form και διαφόρων στοιχείων τα οποία δέχονται είσοδο. Οι ετικέτες form έχουν την εξής σύνταξη: <form action="script.php" method="post"> </form> Το πιο σημαντικό χαρακτηριστικό της ετικέτας form όσο αφορά την PHP είναι το action (ενέργεια), που υπαγορεύει σε ποια σελίδα θα σταλούν τα δεδομένα της φόρμας. Το δεύτερο χαρακτηριστικό το method έχει τα δικά του προβλήματα (δείτε το ειδικό πλαίσιο "Επιλογή μεθόδου"), αλλά συνήθως θα του δίνετε την τιμή post. Οι διάφορες είσοδοι πλαίσια κειμένου (text boxes), ραδιοπλήκτρα (radio buttons), μενού επιλογών, πλαίσια ελέγχου (check boxes), κλπ. τοποθετούνται ανάμεσα στις ετικέτες αρχής και τέλους της form. Όπως θα δείτε στην επόμενη ενότητα, το είδος των εισόδων της φόρμας δεν έχει μεγάλη σημασία για το χειρισμό της από το σενάριο PHP. Πρέπει όμως να είστε προσεκτικοί με τα ονόματα που δίνετε στις εισόδους της φόρμας, επειδή έχουν ουσιαστική σημασία για τον κώδικα PHP. Επιλογή μεθόδου Το χαρακτηριστικό method μιας φόρμας καθορίζει τον τρόπο αποστολής των δεδομένων στη σελίδα που θα τα χειριστεί. Οι δύο επιλογές get και post αναφέρονται στη μέθοδο HTTP (Hypertext Transfer Protocol Πρωτόκολλο Μεταφοράς Υπερκειμένου) που θα χρησιμοποιηθεί. Η μέθοδος get στέλνει τα υποβαλλόμενα δεδομένα στη σελίδα-αποδέκτη ως μια σειρά ζευγών όνομα-τιμή προσαρτημένα στη διεύθυνση URL. Για παράδειγμα, http://www.example.com/script.php? name=homer&gender=m&age=35 Το πλεονέκτημα της χρήσης της μεθόδου get είναι ότι στο φυλλομετρητή Ιστού μπορείτε να προσθέσετε ένα σελιδοδείκτη προς τη σελίδα που θα εμφανιστεί (μια και πρόκειται για διεύθυνση URL). Για το σκοπό αυτόν, μπορείτε να πατήσετε στο κουμπί Back (Πίσω) του φυλλομετρητή για να επιστρέψετε σε μια ιστοσελίδα get, ή να τη φορτώσετε ξανά χωρίς κανένα πρόβλημα (δεν μπορείτε να κάνετε τίποτε από τα δύο με τη μέθοδο post). Όμως, το πλήθος των δεδομένων που μπορείτε να στείλετε με τη μέθοδο get είναι περιορισμένο, και η μέθοδος αυτή είναι λιγότερο ασφαλής (επειδή τα δεδομένα είναι ορατά). Γενικά, η μέθοδος get χρησιμοποιείται για τη ζήτηση πληροφοριών, όπως μια συγκεκριμένη εγγραφή βάσης δεδομένων ή τα αποτελέσματα μιας αναζήτησης (στις αναζητήσεις σχεδόν πάντα χρησιμοποιείται η get). Η μέθοδος post χρησιμοποιείται όταν απαιτείται κάποια ενέργεια, όπως όταν πρέπει να ενημερωθεί μια εγγραφή βάσης δεδομένων ή να σταλεί ένα μήνυμα ηλεκτρονικού ταχυδρομείου. Για τους παραπάνω λόγους, στο βιβλίο χρησιμοποιούμε κυρίως την post, εκτός μερικών εξαιρέσεων που ε- πισημαίνονται. 54

Προγραμματισμός με την PHP Σενάριο 2.1 Αυτή η απλή φόρμα HTML θα χρησιμοποιηθεί σε πολλά παραδείγματα του κεφαλαίου. 1 <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/ TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 3 <head> 4 <meta http-equiv="content-type" content=" text/html; charset=iso-8859-1" /> 5 <title>simple HTML Form</title> 6 </head> 7 <body> 8 <!-- Script 2.1 - form.html --> 9 10 <form action="handle_form.php" method="post"> 11 12 <fieldset><legend>enter your information in the form below:</legend> 13 14 <p><b>name:</b> <input type="text" name="name" size="20" maxlength="40" /></p> 15 16 <p><b>email Address:</b> <input type="text" name="email" size="40" maxlength="60" /></p> 17 18 <p><b>gender:</b> <input type="radio" name="gender" value="m" /> Male <input type="radio" name="gender" value="f" /> Female</p> 19 20 <p><b>age:</b> 21 <select name="age"> 22 <option value="0-29">under 30</option> 23 <option value="30-60">between 30 and 60</option> (το σενάριο συνεχίζεται στην επόμενη σελίδα) Δημιουργήστε μια φόρμα HTML: 1. Ξεκινήστε ένα νέο έγγραφο PHP στο διορθωτή κειμένου σας (Σενάριο 2.1). <!DOCTYPE html PUBLIC -//W3C// DTD XHTML 1.0 Transitional//EN" http://www.w3.org/tr/xhtml1/dtd/ xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/ xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=iso- 8859-1" /> <title>simple HTML Form</title> </head> <body> <!-- Script 2.1 - form.html --> Δεν υπάρχει τίποτα καινούργιο εδώ. Το έγγραφο χρησιμοποιεί και πάλι την ίδια βασική σύνταξη μιας ιστοσελίδας HTML, όπως και στο προηγούμενο κεφάλαιο. Ένα σχόλιο HTML δηλώνει το όνομα και τον αύξοντα αριθμό του αρχείου. 2. Προσθέστε την αρχική ετικέτα form. <form action="handle_form.php" method="post"> Αφού το χαρακτηριστικό action καθορίζει σε ποιο σενάριο θα σταλούν τα δεδομένα της φόρμας, πρέπει να του δώσετε ένα κατάλληλο όνομα (handle_form χειρισμός φόρμας για να ταιριάζει με το σενάριο αυτό: form.html), και την προέκταση.php (αφού τα δεδομένα της φόρμας αυτής θα τα χειρίζεται μια σελίδα PHP). 3. Ξεκινήστε τη φόρμα HTML. <fieldset><legend>enter your information in the form below:</legend> συνεχίζεται στην επόμενη σελίδα 55

Κεφάλαιο 2 Χρησιμοποιώ τις ετικέτες fieldset και legend της HTML επειδή μου αρέσει η όψη που δίνουν στη φόρμα της HTML (προσθέτουν ένα πλαίσιο γύρω από τη φόρμα και έναν τίτλο στην κορυφή της). Δεν έχουν όμως σχέση με τη λειτουργία της φόρμας. 4. Προσθέστε δύο πλαίσια κειμένου εισόδου. <p><b>name:</b> <input type="text" name="name" size="20" maxlength= "40" /></p> <p><b>email Address:</b> <input type="text" name="email" size="40" maxlength="60" /></p> Πρόκειται μόνο για απλά πλαίσια κειμένου που επιτρέπουν στο χρήση να καταχωρίσει το όνομα και τη διεύθυνση ηλεκτρονικού ταχυδρομείου του (Εικόνα 2.1). Σε περίπτωση που αναρωτιέστε, το επιπλέον κενό διάστημα και η κάθετος στο τέλος κάθε ετικέτας input είναι απαραίτητα για την έγκυρη XHTML. Στη βασική HTML οι ετικέτες αυτές θα τερματίζονταν, για παράδειγμα, με maxlength ="40" ή maxlength="60". Σενάριο 2.1 συνέχεια 24 <option value="60+">over 60</option> 25 </select></p> 26 27 <p><b>comments:</b> <textarea name="comments" rows="3" cols="40"></textarea></p> 28 29 </fieldset> 30 31 <div align="center"><input type= "submit" name="submit" value= "Submit My Information" /></div> 32 33 </form> 34 35 </body> 36 </html> Εικόνα 2.1 Δύο πλαίσια κειμένου εισόδου. 5. Προσθέστε δύο ραδιοπλήκτρα. <p><b>gender:</b> <input type= "radio" name="gender" value= "M" /> Male <input type= "radio" name="gender" value= "F" /> Female</p> Εικόνα 2.2 Αν περισσότερα από ένα ραδιοπλήκτρα έχουν το ίδιο όνομα, ο χρήστης μπορεί να επιλέξει μόνον ένα. Τα ραδιοπλήκτρα (Εικόνα 2.2) έχουν το ίδιο όνομα, πράγμα που σημαίνει ότι μπορεί να επιλεγεί μόνον ένα από τα δύο. Έχουν όμως διαφορετικές τιμές. 6. Προσθέστε ένα πτυσσόμενο μενού. <p><b>age:</b> <select name="age"> <option value="0-29">under 30</ option> <option value="30-60">between 30 and 60</option> <option value="60+">over 60</ option> </select></p> 56

Προγραμματισμός με την PHP Εικόνα 2.3 Το πτυσσόμενο μενού παρέχει τρεις επιλογές, από τις οποίες μπορεί να επιλεγεί μόνο μία (σε αυτό το παράδειγμα). Εικόνα 2.4 Το στοιχείο φόρμας textarea (περιοχή κειμένου) επιτρέπει την καταχώριση μεγάλης ποσότητας κειμένου. Εικόνα 2.5 Η ολοκληρωμένη φόρμα, στην οποία ο χρήστης καταχωρίζει βασικές πληροφορίες. Το πτυσσόμενο μενού ξεκινάει με την ετικέτα select, και μετά κάθε ετικέτα option δημιουργεί μία ακόμη γραμμή στη λίστα των επιλογών (Εικόνα 2.3). 7. Προσθέστε μια περιοχή κειμένου για σχόλια. <p><b>comments:</b> <textarea name= "comments" rows="3" cols="40"></ textarea></p> Μια περιοχή κειμένου (textarea) διαφέρει από το πλαίσιο κειμένου (text) παρουσιάζεται ως πλαίσιο (Εικόνα 2.4) και όχι ως μία γραμμή. Σας επιτρέπουν να πληκτρολογήσετε πολύ περισσότερες πληροφορίες και είναι χρήσιμες για σχόλια του χρήστη. 8. Ολοκληρώστε τη φόρμα. </fieldset> <div align="center"><input type= "submit" name="submit" value= "Submit My Information" /></div> </form> Η πρώτη γραμμή κλείνει την ετικέτα fieldset που ανοίγει στο Βήμα 3. Στη συνέχεια, δημιουργείται ένα κουμπί υποβολής (submit) στοιχισμένο στο κέντρο με τη χρήση της ετικέτας <div>. Τέλος, η ετικέτα form κλείνει. 9. Ολοκληρώστε τη σελίδα της HTML. </body> </html> 10. Αποθηκεύστε το αρχείο, με το όνομα form. html στον κατάλογο της τοποθεσίας σας στο διακομιστή, και ανοίξτε το στο φυλλομετρητή Ιστού σας (Εικόνα 2.5). Συμβουλή Επειδή η σελίδα αυτή περιέχει μόνον HTML, έχει προέκταση.html. Θα μπορούσε να έχει και προέκταση.php χωρίς πρόβλημα (αφού ο φυλλομετρητής χειρίζεται κώδικα έξω από τις ετικέτες της PHP σαν κώδικα HTML). 57

Κεφάλαιο 2 Χειρισμός φόρμας HTML Τώρα που δημιουργήσαμε τη φόρμα της HTML, είναι ώρα να γράψουμε ένα στοιχειώδες σενάριο PHP για το χειρισμό της. Όταν λέμε ότι αυτό το σενάριο PHP θα χειρίζεται τη φόρμα, εννοούμε ότι η σελίδα της ΡΗΡ θα κάνει κάτι με τα δεδομένα που δέχεται (αυτά που καταχωρίζει στη φόρμα ο χρήστης). Σε αυτό το κεφάλαιο, τα σενάρια που θα γράψουμε απλώς θα εμφανίζουν τα δεδομένα ξανά στο φυλλομετρητή. Σε επόμενα παραδείγματα, τα δεδομένα της φόρμας θα αποθηκεύονται σε μια βάση δεδομένων MySQL, θα συγκρίνονται με παλαιότερες τιμές, θα στέλνονται μέσω μηνυμάτων ηλεκτρονικού ταχυδρομείου, και άλλα. Το ωραίο με την PHP και αυτό που την κάνει τόσο εύληπτη και εύχρηστη είναι η άμεση αλληλεπίδρασή της με φόρμες HTML. Τα σενάρια PHP αποθηκεύουν τις πληροφορίες που λαμβάνουν σε ειδικές μεταβλητές. Για παράδειγμα, ας υποθέσουμε ότι έχουμε μια φόρμα με την παρακάτω είσοδο: <input type="text" name="city" /> Ό,τι πληκτρολογεί ο χρήστης σε αυτό το στοιχείο θα είναι προσπελάσιμο μέσω μιας μεταβλητής της ΡΗΡ με το όνομα $_REQUEST['city']. Είναι πολύ σημαντικό η ορθογραφία και η γραφή με κεφαλαία και πεζά να ταιριάζουν απόλυτα! Η ΡΗΡ κάνει διάκριση πεζών και κεφαλαίων στα ονόματα των μεταβλητών οπότε, για παράδειγμα, το $_REQUEST['city'] θα δουλέψει, ενώ τα $_Request['city'] και $_REQUEST ['City'] δε θα περιέχουν τιμή. Σενάριο 2.2 Αυτό το σενάριο δέχεται και τυπώνει τις πληροφορίες που καταχωρίζονται σε μια φόρμα HTML (Σενάριο 2.1) 1 <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/ TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 3 <head> 4 <meta http-equiv="content-type" content=" text/html; charset=iso-8859-1" /> 5 <title>form Feedback</title> 6 </head> 7 <body> 8 <?php # Script 2.2 - handle_form.php 9 10 // Δημιουργία μεταβλητών με σύντομα ονόματα για τα δεδομένα της φόρμας: 11 $name = $_REQUEST['name']; 12 $email = $_REQUEST['email']; 13 $comments = $_REQUEST['comments']; 14 /* Δε χρησιμοποιούνται: 15 $_REQUEST['age'] 16 $_REQUEST['gender'] 17 $_REQUEST['submit'] 18 */ 19 20 // Εκτύπωση των υποβαλλόμενων πληροφοριών: 21 echo <p>thank you, <b>$name</b>, for the following comments:<br /> 22 <tt>$comments</tt></p> 23 <p>we will reply to you at <i>$email</i>.</p>\n"; 24 25?> 26 </body> 27 </html> Το επόμενο παράδειγμα είναι ένα σενάριο PHP το οποίο χειρίζεται την υπάρχουσα φόρμα (Σενάριο 2.1). Τα δεδομένα της φόρμας αποθηκεύονται σε νέες μεταβλητές (με συντομευμένα ο- νόματα, όπως στο Σενάριο 1.5, predefined.php). Το σενάριο εμφανίζει μετά τις τιμές που δέχεται. Χειριστείτε μια φόρμα HTML: 1. Στο διορθωτή κειμένου σας ή το IDE, δημιουργήστε ένα νέο έγγραφο PHP ξεκινώντας με HTML (Σενάριο 2.2). 58

Προγραμματισμός με την PHP Πίνακας 2.1 Τα στοιχεία της φόρμας HTML και οι αντίστοιχες μεταβλητές της PHP. Στοιχεία φόρμας και μεταβλητές της PHP ΟΝΟΜΑ ΣΤΟΙΧΕΙΟΥ name mail comments age gender submit ΟΝΟΜΑ ΜΕΤΑΒΛΗΤΗΣ $REQUEST['name'] $REQUEST['email'] $REQUEST['comments'] $REQUEST['age'] $REQUEST['gender'] $REQUEST['submit'] <!DOCTYPE html PUBLIC -//W3C// DTD XHTML 1.0 Transitional//EN" http://www.w3.org/tr/xhtml1/dtd/ xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/ xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=iso- 8859-1" /> <title>form Feedback</title> </head> <body> 2. Προσθέστε την ετικέτα ανοίγματος της PHP και δημιουργήστε σύντομα ονόματα για τις μεταβλητές της φόρμας δεδομένων. <?php # Script 2.2 - handle_form.php $name = $_REQUEST['name']; $email = $_REQUEST['email']; $comments = $_REQUEST['comments']; Σύμφωνα με τους παραπάνω κανόνες, τα δεδομένα που καταχωρίζονται ως πρώτη είσοδος της φόρμας, στο πλαίσιο κειμένου name, θα είναι προσπελάσιμα μέσω της μεταβλητής $_REQUEST['name'] (Πίνακας 2.1). Τα δεδομένα που καταχωρίζονται ως διεύθυνση ηλεκτρονικού ταχυδρομείου, στο πλαίσιο κειμένου που έχει τιμή name ίση με email, θα είναι προσπελάσιμα μέσω της $_REQUEST['email']. Το ίδιο ισχύει και για τα σχόλια. Και πάλι, η ορθογραφία και η γραφή με κεφαλαία και πεζά των μεταβλητών πρέπει να ταιριάζουν ακριβώς με τις αντίστοιχες τιμές του χαρακτηριστικού name στη φόρμα HTML. 3. Τυπώστε τις τιμές ονόματος, διεύθυνσης η- λεκτρονικού ταχυδρομείου, και σχολίων. echo <p>thank you, <b>$name</b>, for the following comments:<br /> <tt>$comments</tt></p> <p>we will reply to you at <i> $email</i>.</p>\n"; συνεχίζεται στην επόμενη σελίδα 59

Κεφάλαιο 2 Οι υποβαλλόμενες τιμές τυπώνονται απλώς με τη χρήση της εντολής echo(), διπλών εισαγωγικών, και λίγης μορφοποίησης HTML. 4. Ολοκληρώστε την σελίδα της HTML.?> </body> </html> 5. Αποθηκεύστε το αρχείο με όνομα handle_ form.php, στον ίδιο κατάλογο Ιστού με το αρχείο form.html. 6. Ελέγξτε και τα δύο έγγραφα στο φυλλομετρητή σας, φορτώνοντας το αρχείο form.html μέσω της κατάλληλης διεύθυνσης URL, συμπληρώνοντας τη φόρμα, και υποβάλλοντάς την (Εικόνες 2.6 και 2.7). Επειδή το σενάριο της PHP πρέπει να εκτελεστεί μέσω ενός URL (δείτε το Κεφάλαιο 1), η φόρμα πρέπει επίσης να εκτελεστεί μέσω ενός URL. Διαφορετικά, όταν την υποβάλετε θα δείτε κώδικα PHP (Εικόνα 2.8) αντί για το σωστό αποτέλεσμα (Εικόνα 2.7). Συμβουλές Η μεταβλητή $_REQUEST είναι ένας ειδικός τύπος μεταβλητής που ονομάζεται υπερκαθολική (super global). Αποθηκεύει όλα τα δεδομένα που στέλνονται σε μια σελίδα PHP με τις μεθόδους GET ή POST, καθώς και δεδομένα προσπελάσιμα σε "μπισκότα" (cookies). Θα μιλήσουμε για τις υπερκαθολικές μεταβλητές αργότερα σε αυτό το κεφάλαιο. Αν έχετε κάποιο πρόβλημα με το σενάριο αυτό, εφαρμόστε τις τεχνικές αποσφαλμάτωσης του Κεφαλαίου 1. Αν το πρόβλημα επιμένει, ανατρέξτε στο Κεφάλαιο 7, "Χειρισμός σφαλμάτων και αποσφαλμάτωση". Αν δε βρείτε και πάλι λύση, απευθυνθείτε για βοήθεια στο υποστηρικτικό φόρουμ του βιβλίου (www. DMCInsights.com/phorum/). Εικόνα 2.6 Για να δοκιμάσετε το σενάριο handle_form.php πρέπει να φορτώσετε τη φόρμα μέσω URL, και μετά να τη συμπληρώσετε και να την υποβάλετε. Εικόνα 2.7 Το σενάριό σας πρέπει να εμφανίζει παρόμοια αποτελέσματα. Εικόνα 2.8 Αν μετά από την υποβολή της φόρμας δείτε κώδικα PHP, το πρόβλημα είναι μάλλον ότι δε φορτώσατε τη φόρμα μέσω URL. 60

Προγραμματισμός με την PHP Εικόνα 2.9 Οι τιμές των μεταβλητών gender και age αντιστοιχούν σε αυτές που ορίστηκαν στον κώδικα HTML της φόρμας. Αν το σενάριο PHP εμφανίζει κενά διαστήματα στη θέση της τιμής μιας μεταβλητής, σημαίνει ότι η μεταβλητή δεν έχει τιμή. Οι δύο πιο πιθανές αιτίες είναι: δεν καταχωρίσατε τιμή στη φόρμα, ή πληκτρολογήσατε το όνομα της μεταβλητής λάθος ή με λάθος συνδυασμό πεζών-κεφαλαίων. Αν δείτε σφάλματα του τύπου Undefined variable: όνομα_μεταβλητής (μη ορισμένη μεταβλητή), αυτό συμβαίνει επειδή οι μεταβλητές στις οποίες αναφέρεστε δεν έχουν τιμή και η PHP έχει ρυθμιστεί στο υψηλότερο επίπεδο αναφοράς σφαλμάτων. Η προηγούμενη συμβουλή αναφέρει τους πιθανούς λόγους που μια μεταβλητή μπορεί να μην έχει τιμή. Το Κεφάλαιο 7 αναλύει διεξοδικά το θέμα της αναφοράς σφαλμάτων. Για να δείτε πώς η PHP χειρίζεται τα διάφορα είδη εισόδων μιας φόρμας, τυπώστε τις τιμές των $_REQUEST['age'] και $_REQUEST ['gender'] (Εικόνα 2.9). Μαγικά εισαγωγικά Σε παλαιότερες εκδόσεις της PHP υπήρχαν τα Μαγικά εισαγωγικά (magic quotes), που αφαιρέθηκαν στην έκδοση 6 της PHP. Τα Μαγικά εισαγωγικά όταν είναι ενεργοποιημένα προσθέτουν αυτόματα το χαρακτήρα διαφυγής πριν από τα απλά και τα διπλά εισαγωγικά που υπάρχουν σε υ- ποβαλλόμενα δεδομένα μιας φόρμας (στην πραγματικότητα, υπήρχαν τρία διαφορετικά είδη Μαγικών εισαγωγικών αλλά αυτό είναι το πιο σημαντικό εδώ). Έτσι, η συμβολοσειρά απ' όλα τα καλά θα μετατρεπόταν σε απ\' όλα τα καλά. Η χρήση χαρακτήρων διαφυγής σε πιθανόν προβληματικούς χαρακτήρες εξυπηρετεί και, μερικές φορές, επιβάλλεται. Αν όμως τα Μαγικά εισαγωγικά είναι ενεργοποιημένα στη δική σας εγκατάσταση της PHP (που σημαίνει ότι χρησιμοποιείτε μια έκδοση παλαιότερη από την 6), κατά την ε- κτύπωση των δεδομένων της φόρμας από το σενάριο της ΡΗΡ θα εμφανίζονται οι ανάποδες κάθετοι. Για να το αποφύγετε, μπορείτε να χρησιμοποιήσετε τη συνάρτηση stripslashes(): $var = stripslashes($var); Η συνάρτηση αυτή αφαιρεί τις ανάποδες καθέτους από τη μεταβλητή $var. Έτσι μια συμβολοσειρά που υποβλήθηκε με χαρακτήρες διαφυγής, θα επανέλθει στην αρχική της μορφή, χωρίς αυτούς. Για παράδειγμα, στο αρχείο handle_form.php (Σενάριο 2.2) θα μπορούσαμε να γράψουμε: $name = stripslashes($_request['name']); Αν χρησιμοποιείτε την PHP 6 ή κάποια μεταγενέστερη έκδοση, δε χρειάζεται να ανησυχείτε για τα Μαγικά εισαγωγικά επειδή έχουν αφαιρεθεί (για διάφορους λόγους). 61

Κεφάλαιο 2 Συνθήκες και τελεστές Οι τρεις κυριότερες εντολές για τη δημιουργία συνθηκών στην PHP είναι οι if, else, και elseif (που μπορεί να γραφεί και με δύο λέξεις, ως else if). Κάθε συνθήκη ξεκινάει με τον όρο if: if (συνθήκη) { // Κάνε κάτι! } Η εντολή if μπορεί να έχει και έναν όρο else: if (συνθήκη) { // Κάνε κάτι! } else { // Κάνε κάτι άλλο! } Ο όρος elseif σάς επιτρέπει να προσθέσετε και άλλες συνθήκες: if (συνθήκη1) { // Κάνε κάτι! } elseif (συνθήκη2) { // Κάνε κάτι άλλο! } else { // Κάνε κάτι διαφορετικό! } Αν μια συνθήκη αληθεύει, εκτελείται ο κώδικας μέσα στα άγκιστρα ({}) που ακολουθούν. Αν όχι, συνεχίζεται η εκτέλεση του κώδικα της PHP. Αν υπάρχει και δεύτερη συνθήκη (μετά από μια elseif), ελέγχεται αν είναι αληθής. Η διαδικασία συνεχίζεται μπορείτε να χρησιμοποιήσετε όσους όρους elseif θέλετε μέχρι η PHP να συναντήσει έναν όρο else, που θα εκτελεστεί αυτόματα σε εκείνο το σημείο, ή μέχρι η συνθήκη να ολοκληρωθεί χωρίς else. Γι' αυτόν το λόγο, ο όρος else είναι σημαντικό να τοποθετείται στο τέλος και να υφίσταται χειρισμό ως προεπιλεγμένη ενέργεια, εκτός αν πληρούνται συγκεκριμένα κριτήρια (οι συνθήκες). Μια συνθήκη στην PHP μπορεί να είναι αληθής για διάφορους λόγους. Καταρχήν, οι παρακάτω συνθήκες είναι αληθείς: $var, αν η $var έχει τιμή διαφορετική από 0, κενή συμβολοσειρά, FALSE, ή NULL. isset($var), αν η $var έχει οποιαδήποτε τιμή εκτός από NULL, μεταξύ των οποίων και οι 0, FALSE, ή κενή συμβολοσειρά. TRUE, true, True, κλπ. Στο δεύτερο παράδειγμα θα δούμε μια νέα συνάρτηση, την isset(). Η συνάρτηση αυτή ελέγχει αν μια συνάρτηση έχει τιμή ορισμένη, δηλαδή διαφορετική από NULL (θυμηθείτε ότι στην PHP η NULL είναι ένας ειδικός τύπος για τον ο- ποίο δεν έχει οριστεί τιμή). Για να δημιουργήσετε πιο σύνθετες παραστάσεις, μπορείτε να χρησιμοποιήσετε τους τελεστές σύγκρισης και τους λογικούς τελεστές του Πίνακα 2.2, σε συνδυασμό με παρενθέσεις. Πίνακας 2.2 Αυτοί οι τελεστές χρησιμοποιούνται συχνά στις συνθήκες. Τελεστές σύγκρισης και λογικοί τελεστές ΣΥΜΒΟ- ΛΟ ΣΗΜΑΣΙΑ ΕΙΔΟΣ ΠΑΡΑ- ΔΕΙΓΜΑ == ίσο με σύγκρισης $x == $y!= διάφορο από < μικρότερο από > μεγαλύτερο από <= μικρότερο ή ίσο >= μεγαλύτερο ή ίσο σύγκρισης $x!= $y σύγκρισης $x < $y σύγκρισης $x > $y σύγκρισης $x <= $y σύγκρισης $x >= $y! όχι λογικός!$x && και λογικός $x && $y ή λογικός $x $y XOR και όχι λογικός $x XOR $y 62

Προγραμματισμός με την PHP Σενάριο 2.3 Οι συνθήκες επιτρέπουν σε ένα σενάριο να αλλάζει συμπεριφορά ανάλογα με συγκεκριμένα κριτήρια. Σε αυτή την αναθεωρημένη έκδοση του σεναρίου handle_form.php, χρησιμοποιήθηκαν δύο συνθήκες που ελέγχουν αν έχει πατηθεί το ραδιοπλήκτρο για το φύλο. 1 <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN" 2 http://www.w3.org/tr/xhtml1/dtd/ xhtml1-transitional.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 4 <head> 5 <meta http-equiv="content-type" content= "text/html; charset=iso-8859-1" /> 6 <title>form Feedback</title> 7 </head> 8 <body> 9 <?php # Script 2.3 - handle_form.php #2 10 11 // Δημιουργία συντόμευσης για τα δεδομένα της φόρμας: 12 $name = $_REQUEST['name']; 13 $email = $_REQUEST['email']; 14 $comments = $_REQUEST['comments']; 15 16 // Δημιουργία της μεταβλητής $gender: 17 if (isset($_request['gender'])) { 18 $gender = $_REQUEST['gender']; 19 } else { 20 $gender = NULL; 21 } 22 23 // Εκτύπωση των υποβαλλόμενων πληροφοριών: 24 echo <p>thank you, <b>$name</b>, for the following comments:<br /> 25 <tt>$comments</tt></p> 26 <p>we will reply to you at <i>$email</i>. </p>\n"; Χρησιμοποιήστε συνθήκες: 1. Ανοίξτε το αρχείο handle_form.php (δείτε το Σενάριο 2.2) στο διορθωτή κειμένου σας ή στο IDE που χρησιμοποιείτε: 2. Πριν από την εντολή echo() προσθέστε μια συνθήκη που δημιουργεί τη μεταβλητή $gender (Σενάριο 2.3). if (isset($_request['gender'])) { $gender = $_REQUEST['gender']; } else { $gender = NULL; } Αυτός είναι ένας απλός και αποτελεσματικός τρόπος να επικυρώσετε ένα στοιχείο εισόδου φόρμας (ειδικά ένα ραδιοπλήκτρο, πλαίσιο ελέγχου, ή μενού επιλογών). Αν ο χρήστης πατήσει σε κάποιο ραδιοπλήκτρο φύλου (gender), η μεταβλητή $_REQUEST ['gender'] θα έχει τιμή, οπότε η συνθήκη isset($_ RE- QUEST['gender']) θα είναι αληθής. Σε αυτή την περίπτωση, στη συντομευμένη έκδοση της μεταβλητής $gender ανατίθεται η τιμή της $_REQUEST['gender'], όπως έγινε και με τις μεταβλητές $name, $email, και $comments. Αν ο χρήστης δεν επιλέξει κάποιο από τα ραδιοπλήκτρα, τότε η συνθήκη αυτή δεν είναι αληθής και στη μεταβλητή $gender ανατίθεται η τιμή NULL, που σημαίνει ότι δεν έχει τιμή. Παρατηρήστε ότι η τιμή NULL δεν περικλείεται σε εισαγωγικά. συνεχίζεται στην επόμενη σελίδα (το σενάριο συνεχίζεται στην επόμενη σελίδα) 63

Κεφάλαιο 2 3. Μετά από την εντολή echo(), προσθέστε α- κόμα μία συνθήκη που τυπώνει ένα μήνυμα ανάλογα με την τιμή της μεταβλητής $gender. if ($gender == 'M') { echo '<p><b>good day, Sir!</b> </p>'; } elseif ($gender == 'F') { echo '<p><b>good day, Madam!</b> </p>'; } else { echo '<p><b>you forgot to enter your gender!</b></p>'; } Αυτή η συνθήκη if-else-elseif εξετάζει την τιμή της μεταβλητής $gender και τυπώνει ένα διαφορετικό μήνυμα για κάθε περίπτωση. Είναι σημαντικό να θυμάστε ότι το απλό σύμβολο ίσον (=) είναι ο τελεστής ανάθεσης τιμής, ενώ το διπλό ίσον (==) είναι ο τελεστής ισότητας. Η διάκριση είναι σημαντική επειδή η συνθήκη $gender = = 'M' μπορεί να είναι ή να μην είναι αληθής, αλλά η $gender = 'Μ' είναι πάντα αληθής. Επίσης, οι τιμές που χρησιμοποιούνται εδώ Μ και F πρέπει να είναι ακριβώς ίδιες με αυτές στη φόρμα HTML (τις τιμές κάθε ραδιοπλήκτρου). Στη σύγκριση συμβολοσειρών γίνεται διάκριση πεζών και κεφαλαίων, οπότε το m δεν είναι ίδιο με το M. 4. Αποθηκεύστε το αρχείο στον κατάλογο της τοποθεσίας Ιστού σας και δοκιμάστε το στο φυλλομετρητή σας. (Εικόνες 2.10, 2.11, και 2.12). Σενάριο 2.3 συνέχεια 27 28 // Εκτύπωση μηνύματος ανάλογα με την τιμή της $gender: 29 if ($gender == 'M') { 30 echo '<p><b>good day, Sir!</b></p>'; 31 } elseif ($gender == 'F') { 32 echo '<p><b>good day, Madam!</b></p>'; 33 } else { // No gender selected. 34 echo '<p><b>you forgot to enter your gender!</b></p>'; 35 } 36 37?> 38 </body> 39 </html> Εικόνα 2.10 Η συνθήκη που ελέγχει την τιμή του φύλου τυπώνει ένα διαφορετικό μήνυμα για κάθε περίπτωση. Εικόνα 2.11 Το ίδιο σενάριο εμφανίζει διαφορετικούς χαιρετισμούς (συγκρίνετε με την Εικόνα 2.10) όταν αλλάζει το φύλο. 64

Προγραμματισμός με την PHP Εικόνα 2.12 Αν δεν επιλεγεί φύλο, τυπώνεται ένα σχετικό μήνυμα που ενημερώνει το χρήστη για την παράλειψη. Συνθήκη switch Η PHP διαθέτει ένα ακόμα τύπο συνθήκης, τη switch, που ταιριάζει καλύτερα στη θέση μιας μεγάλης συνθήκης if-then-else. Η σύνταξη της switch είναι η εξής: switch ($variable) { case 'value1': // Κάνε αυτό. break; case 'value2': Συμβουλές Αν και η PHP δεν έχει αυστηρούς κανόνες μορφοποίησης, αποτελεί τυπική διαδικασία και καλή προγραμματιστική τακτική να αποσαφηνίζετε πότε ένα μπλοκ κώδικα είναι υ- ποσύνολο μιας συνθήκης. Ο κανόνας είναι να τοποθετείτε το συγκεκριμένο μπλοκ κώδικα σε εσοχή. Μπορείτε και θα το κάνετε συχνά να χρησιμοποιείτε ένθετες συνθήκες (μια συνθήκη μέσα σε άλλη). Η πρώτη συνθήκη αυτού του σεναρίου (η δομή isset()) αποτελεί ένα τέλειο παράδειγμα χρήσης προεπιλεγμένης τιμής. Γίνεται η παραδοχή ότι η μεταβλητή $gender έχει τιμή NULL (όρος else), εκτός αν ικανοποιείται η συνθήκη ότι η μεταβλητή $_REQUEST ['gender'] έχει τιμή. Τα άγκιστρα που δηλώνουν την αρχή και το τέλος μιας συνθήκης δεν είναι απαραίτητα αν εκτελείτε μόνο μία εντολή. Για λόγους σαφήνειας όμως, σας συνιστώ να τα χρησιμοποιείτε πάντα. // Κάνε αυτό. break; default: } // Τότε κάνε αυτό. break; Η συνθήκη switch συγκρίνει την τιμή της $variable με τις τιμές των case. Όταν βρει μια ταύτιση, εκτελείται ο κώδικας που ακολουθεί μέχρι τον όρο break. Αν δε βρεθεί καμία ταύτιση, εκτελείται ο κώδικας default (προεπιλογή), αν υπάρχει (είναι προαιρετικός). Η συνθήκη switch μπορεί να ε- λέγξει μόνον αν η τιμή μιας μεταβλητής είναι ίση με κάποιες άλλες συγκεκριμένες τιμές πιο σύνθετες συνθήκες δεν μπορούν να ελεγχθούν εύκολα. 65