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

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

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

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

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

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

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

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

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

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

Java & Java EE 1o Μέρος: Servlets και Java Server Pages. Κακαρόντζας Γεώργιος

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην HTML. Άννα Κεφάλα Παναγιώτα Μιχόλια

11. Η γλώσσα HTML Πίνακες, Λίστες, Φόρμες

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

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

2. ΕΙΣΑΓΩΓΗ ΣΤΗΝ HTML ΓΙΩΡΓΟΣ ΓΙΑΝΝΑΚΑΚΗΣ, ΜΑΝΩΛΗΣ ΤΣΙΚΝΑΚΗΣ

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

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

Java & Java EE 3o Μέρος: Διασφάλιση ασφάλειας σε εφαρμογές Java Enterprise Edition. Κακαρόντζας Γεώργιος

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

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

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

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

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

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

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

Παιχνίδια σε Javascript

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

Open eclass Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης

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

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

Ετικέτες HTML. <!-->: Τα σχόλια χρησιμοποιούνται για να γράφουμε σημειώσεις μέσα στον

Mπαρμπούτι. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Τυχαιότητα

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

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

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

K9 Γονικός έλεγχος. Εισαγωγή

<HTML> <HEAD> <TITLE> <BODY>

Cascading Style Sheets Φόρμες (Forms)

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

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

1. Απαιτήσεις εργασίας

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

Οδηγίες Ανάκτησης Password λογαριασμού URegister

Οδηγίες Ενεργοποίησης Λογαριασμού URegister για Φοιτητές

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Python. 1η Ομάδα Ασκήσεων

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER

Αναλυτικά Φύλλα Μισθοδοσίας

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

XAMPP Apache MySQL PHP javascript xampp

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

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

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

Βάσεις δεδομένων (Access)

(CUT Portal). ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ - ΥΠΟΒΟΛΗ ΑΙΤΗΣΗΣ ΓΙΑ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ

Πλατφόρµα Ασύγχρονης Τηλεκπαίδευσης eclass 2.0. Οδηγίες Αναβάθµισης (Upgrade) Αθήνα, 1 Ιουνίου Εισαγωγή

Προγραμματιστικό Περιβάλλον

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Σχεδίαση Βάσεων Δεδομένων

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

Εθνική Σχολή Δημόσιας Υγείας Υγειονομική Σχολή Αθηνών Οδηγός Υποβολής. Ηλεκτρονική Υποβολή Αιτήσεων για τα Μεταπτυχιακά Προγράμματα Σπουδών

Η Απάντηση. Φύλλο Εργασίας. Μηνύματα

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

ΟΔΗΓΙΕΣ προς ΣΥΜΒΕΒΛΗΜΕΝΟΥΣ ΙΑΤΡΟΥΣ & ΑΣΦΑΛΙΣΜΕΝΟΥΣ για τις νέες ΗΛΕΚΤΡΟΝΙΚΕΣ ΥΠΗΡΕΣΙΕΣ του ΕΤΑΑ ΤΟΜΕΑ ΥΓΕΙΟΝΟΜΙΚΩΝ

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

NetBeans και σχετικά προγράμματα. Κακαρόντζας Γεώργιος Κέντρο Αριστείας Ανοιχτού Λογισμικού ΑΠΘ 1ο Θερινό Σχολείο Κώδικα

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ ΛΟΓΑΡΙΑΣΜΩΝ ΗΛΕΚΤΡΟΝΙΚΗΣ ΑΛΛΗΛΟΓΡΑΦΙΑΣ ( accounts)

Η Απάντηση. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Μηνύματα. 1. Πληκτρολογήστε την εντολή:

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ. Πρόγραμμα Διαχείρισης Α.Π.Δ.

Εργαστήριο 2 - Άσκηση - Ανάλυση

ΟΔΗΓΙΕΣ προς ΣΥΜΒΕΒΛΗΜΕΝΟΥΣ ΙΑΤΡΟΥΣ & ΑΣΦΑΛΙΣΜΕΝΟΥΣ για τις νέες ΗΛΕΚΤΡΟΝΙΚΕΣ ΥΠΗΡΕΣΙΕΣ του ΕΤΑΑ ΤΟΜΕΑ ΥΓΕΙΟΝΟΜΙΚΩΝ

Εθνική Σχολή Δημόσιας Υγείας Υγειονομική Σχολή Αθηνών Οδηγός Υποβολής. Ηλεκτρονική Υποβολή Αιτήσεων για τα Μεταπτυχιακά Προγράμματα Σπουδών

Βάσεις δεδομένων (Access)

Προγραμματισμός ΙI (Θ)

Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης eclass 1.7. Οδηγίες Αναβάθμισης (Upgrade) Αθήνα, 16 Μαρτίου Εισαγωγή

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

YourSMS User s Manual

Αν παρ όλα αυτά αντιμετωπίζετε πρόβλημα, επικοινωνήστε με το Κέντρο Δικτύου της ΑΣΠΑΙΤΕ Τηλ , , ,

sendsms.gr HTTP Service

Τυχαίοι αριθμοί ρίξε μια «ζαριά»

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

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

1. Πηγαίνετε στη σελίδα και κάντε κλικ στο «ΕΓΓΡΑΦΕΙΤΕ» ή «Γραφτείτε τώρα».

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

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

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

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ.

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

Τεχνολογίες Διαδικτύου - Εργαστήριο 1 ο

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Οδηγία Οδ4.1 Απόκτηση Ακαδημαϊκού Λογαριασμού (Για Συνεργάτες Έργων)

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

(CUT Portal). ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ - ΥΠΟΒΟΛΗ ΑΙΤΗΣΗΣ ΓΙΑ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ

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

Επαναληπτική Άσκηση ΕΤΙΚΕΤΕΣ HTML

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

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

ΡΥΘΜΙΣΕΙΣ ΓΙΑ ΔΥΝΑΜΙΚΟ IP

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

Transcript:

Εργαστήριο 8 Προγραμματιστικές Εφαρμογές στο Διαδίκτυο Στόχος Στόχος του εργαστηρίου είναι η εκμάθηση των βασικών προγραμματιστικών δομών της γλώσσας PHP και η δημιουργία φορμών για την επεξεργασία υποβαλλόμενων στοιχείων με έλεγχο εγκυρότητας. Προετοιμασία περιβάλλοντος εργασίας Ξεκινήστε τον Apache Server από το XAMPP. Θυμηθείτε: α) ότι θα σώζετε όλα τα αρχεία των ασκήσεων στον φάκελο C:\xampp\htdocs και β) ότι θα εμφανίζετε τις όλες τις σελίδες (και τις HTML και τις PHP) στον browser σας μέσω της διεύθυνσης http://localhost/<όνομα αρχείου> 1 Δρ.

Άσκηση 8a Δημιουργήστε το αρχείο page8a.html με το παρακάτω περιεχόμενο: <html> <head> <meta charset="utf-8" /> </head> <body> <h1> Εγγραφή νέου χρήστη </h1> <p> Εισάγετε τα στοιχεία σας για να εγγραφείτε: </p> <form action="page8a_register.php" method="post"> <table> <th>όνομα</th> <td> <input type="text" name="firstname" /> </td> <th>επώνυμο</th> <td> <input type="text" name="lastname" /> </td> <th>username</th> <td> <input type="text" name="username" /> </td> <th>password</th> <td> <input type="password" name="passwordfirst" /> </td> <th>retype Password</th> <td> <input type="password" name="passwordsecond" /> </td> <th>φύλο</th> <td> <input type="radio" name="gender" value="male" /> Άνδρας <br/> <input type="radio" name="gender" value="female" /> Γυναίκα <br/> </td> <th>όροι χρήσης</th> <td><input type="checkbox" name="agreeterms" value="1" /> Συμφωνώ με τους όρους χρήσης</td> <td><input type="reset" value="επαναφορά" /></td> <td><input type="submit" value="εγγραφή" /></td> </table> </form> </body> </html> Σε αυτή την σελίδα δημιουργούμε μία φόρμα εισαγωγής στοιχείων χρήστη για εγγραφή σε κάποια υπηρεσία. Έχουμε πεδία για Όνομα, Επώνυμο, Username, Password (2 φορές), Φύλο και ειδικό πεδίο για να συμφωνήσει ο χρήστης με τους όρους χρήσης. Το action της φόρμας δείχνει στο αρχείο page8a_register.php το οποίο θα φτιάξουμε αμέσως. 2 Δρ.

Δημιουργήστε το αρχείο page8a_register.php με το παρακάτω περιεχόμενο: $firstname = $_POST["firstname"]; $lastname = $_POST["lastname"]; $username = $_POST["username"]; $passwordfirst = $_POST["passwordfirst"]; $passwordsecond = $_POST["passwordsecond"]; $gender = $_POST["gender"]; $agreeterms = $_POST["agreeterms"]; <html> <head> <meta charset="utf-8" /> </head> <body> <h1> Ολοκλήρωση εγγραφής χρήστη </h1> <p> <a href="page8a.html">επιστροφή</a> </p> <p> Η εγγραφή σας ολοκληρώθηκε επιτυχώς! </p> <p> firstname = <?= $firstname <br/> lastname = <?= $lastname <br/> username = <?= $username <br/> passwordfirst = <?= $passwordfirst <br/> passwordsecond = <?= $passwordsecond <br/> gender = <?= $gender <br/> agreeterms = <?= $agreeterms <br/> </p> </body> </html> Αυτή η PHP σελίδα υποδέχεται τα στοιχεία που υπέβαλε ο χρήστης από την σελίδα page8a.html. Εμφανίστε στον browser σας (προσοχή, με http://localhost/ και όχι ανοίγοντας το αρχείο!) την σελίδα page8a.html, συμπληρώστε στοιχεία σε όλα τα πεδία και πατήστε το πλήκτρο [Εγγραφή]. Θα πρέπει να εμφανιστεί η σελίδα page8a_register.php η οποία απλώς τυπώνει όλα τα στοιχεία που εισάγατε. Προφανώς μία κανονική σελίδα εγγραφής θα έκανε επιπλέον ενέργειες, όπως εγγραφή του χρήση στη βάση δεδομένων κλπ, τα οποία θα τα δούμε στο επόμενο εργαστήριο. 3 Δρ.

Άσκηση 8a2 Η σελίδα page8a_register.php έχει ένα σοβαρό πρόβλημα: δεν διαχειρίζεται σωστά τη περίπτωση που δεν επιλέξετε Φύλο ή δεν τσεκάρετε την επιλογή Συμφωνώ με τους όρους χρήσης. Ξαναεμφανίσετε την σελίδα page8a.html και συμπληρώστε Όνομα, Επώνυμο, Username και 2 φορές το Password, αλλά μην επιλέξετε φύλο και μην τσεκάρετε την επιλογή Συμφωνώ με τους όρους χρήσης και πατήστε το πλήκτρο [Εγγραφή]. Θα δείτε ότι η PHP θα εμφανίσει 2 μηνύματα λάθους, ότι δεν βρέθηκαν οι τιμές gender και agreeterms. Αυτό συμβαίνει διότι το πρωτόκολλο HTML διαχειρίζεται με την εξής ιδιότροπη αντιμετώπιση τα inputs τύπου radio και checkbox: Αν δεν επιλέξει τιμή ο χρήστης, τότε δεν στέλνεται καθόλου αυτό το input κατά την υποβολή. Είναι δηλαδή σαν να μην υπάρχει καθόλου μέσα στην σελίδα αυτό το input. Για να εξακριβώσετε καλύτερα αυτή τη συμπεριφορά, είναι ευκαιρία να μάθουμε και την εντολή var_dump() της PHP. Η var_dump() εμφανίζει αναλυτικές πληροφορίες για μία μεταβλητή. Στη συγκεκριμένη περίπτωση μας ενδιαφέρει να εμφανίσουμε τα περιεχόμενα της μεταβλητής $_POST η οποία υποδέχεται τα δεδομένα που υπέβαλε ο χρήστης μέσω της φόρμας. Τροποποιείστε το αρχείο page8a_register.php και προσθέστε στο τέλος του body της σελίδας (δηλαδή ακριβώς πριν το tag </body>) τον παρακάτω κώδικα: <p> <pre> var_dump($_post); </pre> </p> και επαναλάβετε τη διαδικασία υποβολής για διάφορες περιπτώσεις, όπου άλλες φορές επιλέγετε Φύλο και άλλες όχι, και άλλες φορές τσεκάρετε την επιλογή Συμφωνώ με τους όρους χρήσης και άλλες όχι. Παρατηρήστε πότε εμφανίζονται και πότε όχι η τιμές για τα inputs gender και agreeterms. Η μεταβλητή $_POST θα εμφανιστεί στη σελίδα με την ακόλουθη μορφή: array(5) { ["firstname"]=> string(4) "John" ["lastname"]=> string(5) "Smith" ["username"]=> string(9) "johnsmith" ["passwordfirst"]=> string(8) "12345678" ["passwordsecond"]=> string(8) "12345678" 4 Δρ.

αν δεν έχετε δώσει τιμές στα radio και checkbox, και με την ακόλουθη μορφή: array(7) { ["firstname"]=> string(4) "John" ["lastname"]=> string(5) "Smith" ["username"]=> string(9) "johnsmith" ["passwordfirst"]=> string(8) "12345678" ["passwordsecond"]=> string(8) "12345678" ["gender"]=> string(4) "male" ["agreeterms"]=> string(1) "1" όταν δίνετε τιμές στα radio και checkbox. Επιβεβαιώνουμε έτσι ότι οι τιμές των radio και checkbox εμφανίζονται στην μεταβλητή $_POST μόνο έαν ο χρήστης έχει τσεκάρει κάποια επιλογή, αλλιώς δεν εμφανίζονται καθόλου. Για αυτό το λόγο, τις τιμές των radio και checkbox πρέπει να τις διαχειριζόμαστε με ειδικό τρόπο στην PHP. Πρέπει δηλαδή πριν επιχειρήσουμε να αντλήσουμε την τιμή τους από την μεταβλητή/πίνακα $_POST να ελέγξουμε ένα ο πίνακας περιέχει τιμή ή όχι. Αυτό γίνεται με την συνάρτηση key_exists η οποία συντάσσεται ως εξής: bool key_exists ($key, $array) που σημαίνει ότι παίρνει 2 παραμέτρους. Η πρώτη παράμετρος είναι το κλειδί, δηλαδή το όνομα (name) που δώσαμε στο αντίστοιχο input. Η δεύτερη παράμετρος είναι ο πίνακας στον οποίον θέλουμε να ελέγξουμε αν περιέχεται αυτό το κλειδί (στην περίπτωσή μας ο πίνακας $_POST). Στο τέλος αυτή η συνάρτηση μας επιστρέφει TRUE ή FALSE. 5 Δρ.

Άσκηση 8a3 Τροποποιήστε τη σελίδα page8a_register.php ως εξής: $firstname = $_POST["firstname"]; $lastname = $_POST["lastname"]; $username = $_POST["username"]; $passwordfirst = $_POST["passwordfirst"]; $passwordsecond = $_POST["passwordsecond"]; if (key_exists("gender", $_POST)){ $gender = $_POST["gender"]; else{ $gender = ""; if (key_exists("agreeterms", $_POST)){ $agreeterms = $_POST["agreeterms"]; else{ $agreeterms = ""; <html> <head> <meta charset="utf-8" /> </head> <body> <h1> Ολοκλήρωση εγγραφής χρήστη </h1> <p> <a href="page8a.html">επιστροφή</a> </p> <p> Η εγγραφή σας ολοκληρώθηκε επιτυχώς! </p> <p> firstname = <?= $firstname <br/> lastname = <?= $lastname <br/> username = <?= $username <br/> passwordfirst = <?= $passwordfirst <br/> passwordsecond = <?= $passwordsecond <br/> gender = <?= $gender <br/> agreeterms = <?= $agreeterms <br/> </p> </body> </html> Βλέπετε ότι έχουμε αντικαταστήσει τις δύο γραμμές που αντλούσαμε τις τιμές των gender και agreeterms απευθείας από τον πίνακα $_POST. Πλέον κάνουμε τον κατάλληλο έλεγχο με την key_exists(), και εφόσον είναι επιτυχής ο έλεγχος αντλούμε την τιμή από τον πίνακα $_POST, αλλιώς δίνουμε μία κενή τιμή στην αντίστοιχη μεταβλητή ($gender ή $agreeterms). Επαναλάβετε τώρα την διαδικασία υποβολής διάφορων τιμών από την φόρμα εγγραφής, άλλες φορές επιλέγοντας τιμές στα radio και checkbox και άλλες φορές όχι. Επιβεβαιώστε ότι πλέον η PHP δεν εμφανίζει μηνύματα σφάλματος σε καμία περίπτωση. 6 Δρ.

Άσκηση 8a4 Επειδή η διαδικασία ελέγχου της τιμής των radio και checkbox θα μας είναι απαραίτητη σε πολλές περιπτώσεις, μπορούμε να την υλοποιήσουμε σε μία νέα συνάρτηση η οποία θα κάνει όλους τους απαραίτητους ελέγχους. Τροποποιήστε τη σελίδα page8a_register.php ως εξής: function PostValue($key){ if (key_exists($key, $_POST)) { $value = $_POST[$key]; else { $value = ""; return $value; $firstname = PostValue("firstname"); $lastname = PostValue("lastname"); $username = PostValue("username"); $passwordfirst = PostValue("passwordfirst"); $passwordsecond = PostValue("passwordsecond"); $gender = PostValue("gender"); $agreeterms = PostValue("agreeterms"); <html> <head> <meta charset="utf-8" /> </head> <body> <h1> Ολοκλήρωση εγγραφής χρήστη </h1> <p> <a href="page8a.html">επιστροφή</a> </p> <p> Η εγγραφή σας ολοκληρώθηκε επιτυχώς! </p> <p> firstname = <?= $firstname <br/> lastname = <?= $lastname <br/> username = <?= $username <br/> passwordfirst = <?= $passwordfirst <br/> passwordsecond = <?= $passwordsecond <br/> gender = <?= $gender <br/> agreeterms = <?= $agreeterms <br/> </p> </body> </html> Έχουμε δημιουργήσει τη συνάρτηση PostValue η οποία παίρνει σαν παράμετρο το όνομα (κλειδί - $key) του input για το οποίο ζητάμε την τιμή. Ελέγχει εάν η μεταβλητή $_POST περιέχει αυτό το όνομα και αν ναι μας το επιστρέφει. Αλλίως, αν δεν υπάρχει αυτό το κλειδί στην $_POST μας επιστρέφει το κενό string "". Στη συνέχεια, χρησιμοποιούμε την PostValue για την άντληση των τιμών όλων των δεδομένων της φόρμας. Έτσι ο κώδικάς μας γίνεται πιο ασφαλής, πιο μικρός και πολύ πιο ευανάγνωστος. 7 Δρ.

Άσκηση 8a5 Πολλές φορές, κομμάτια κώδικα που θέλουμε να τα χρησιμοποιούμε συχνά τα τοποθετούμε σε ξεχωριστά αρχεία, με τη μορφή βιβλιοθήκης. Σε αυτό το βήμα θα δημιουργήσουμε μία βιβλιοθήκη, ένα ξεχωριστό δηλαδή αρχείο PHP στο οποίο θα βάλουμε συναρτήσεις που θα χρησιμοποιούμε συνεχώς. Για παράδειγμα, η συνάρτηση PostValue που δημιουργήσαμε πριν λίγο θα μπορούσε να μπει σε ξεχωριστό αρχείο διότι θα την χρειαζόμαστε σε όλες τις φόρμες που θα δημιουργούμε. Δημιουργήστε το αρχείο lab8_library.php με το ακόλουθο περιεχόμενο: function PostValue($key){ if (key_exists($key, $_POST)) { $value = $_POST[$key]; else { $value = ""; return $value; Είναι ένα αρχείο PHP που περιέχει μόνο την συνάρτηση PostValue που φτιάξαμε σε προηγούμενο βήμα. Για να χρησιμοποιήσουμε τη βιβλιοθήκη lab8_library.php που μόλις φτιάξαμε, αρκεί σε οποιοδήποτε αρχείο PHP να γράψουμε την εντολή: include_once 'lab8_library.php'; 8 Δρ.

Επομένως, θα πρέπει να τροποποιήσετε το περιεχόμενου του αρχείου page8a_register.php ως εξής: include_once 'lab8_library.php'; $firstname = PostValue("firstname"); $lastname = PostValue("lastname"); $username = PostValue("username"); $passwordfirst = PostValue("passwordfirst"); $passwordsecond = PostValue("passwordsecond"); $gender = PostValue("gender"); $agreeterms = PostValue("agreeterms"); <html> <head> <meta charset="utf-8" /> </head> <body> <h1> Ολοκλήρωση εγγραφής χρήστη </h1> <p> <a href="page8a.html">επιστροφή</a> </p> <p> Η εγγραφή σας ολοκληρώθηκε επιτυχώς! </p> <p> firstname = <?= $firstname <br/> lastname = <?= $lastname <br/> username = <?= $username <br/> passwordfirst = <?= $passwordfirst <br/> passwordsecond = <?= $passwordsecond <br/> gender = <?= $gender <br/> agreeterms = <?= $agreeterms <br/> </p> </body> </html> Αντί δηλαδή να βάλουμε την συνάρτηση PostValue μέσα στο αρχείο page8a_register.php, κάνοντας include το αρχείο lab8_library.php η σελίδα μας θα γνωρίζει την ύπαρξη αυτής της συνάρτησης. Επαναλάβετε την διαδικασία υποβολής της φόρμας από τη σελίδα page8a.html και επιβεβαιώστε ότι ο κώδικας λειτουργεί ορθά. 9 Δρ.

Άσκηση 8a6 Συνεχίζοντας το παράδειγμα της χρήσης της βιβλιοθήκης lab8_library.php, θα προσθέσουμε τώρα μία νέα συνάρτηση η οποία θα ονομάζεται ErrorExit(). Ανοίξτε το αρχείο lab8_library.php και προσθέστε την ακόλουθη συνάρτηση: function ErrorExit($message){ echo "<p>σφάλμα: {$message</p>\n"; exit; Προσοχή! Θα προσθέσετε τη νέα συνάρτηση στο αρχείο χωρίς να πειράξετε την υπάρχουσα συνάρτηση PostValue. Η νέα λοιπόν αυτή συνάρτηση ErrorExit παίρνει ως παράμετρο ένα μήνυμα (σφάλματος) και το τυπώνει κατάλληλα μέσα σε μία παράγραφο <p> και στη συνέχεια καλεί την exit η οποία τερματίζει άμεσα τον κώδικα PHP. Η συνάρτηση αυτή είναι χρήσιμη για τον έλεγχο της εγκυρότητας των στοιχείων που υποβάλλει ο χρήστης από την φόρμα ώστε να γίνει ο κώδικάς μας πολύ συμπαγής και ευανάγνωστος. 10 Δρ.

Αλλάξτε τον κώδικα στο page8a_register.php ως εξής: include_once 'lab8_library.php'; $firstname = PostValue("firstname"); $lastname = PostValue("lastname"); $username = PostValue("username"); $passwordfirst = PostValue("passwordfirst"); $passwordsecond = PostValue("passwordsecond"); $gender = PostValue("gender"); $agreeterms = PostValue("agreeterms"); if ($firstname == "") ErrorExit("δεν γράψατε όνομα!"); if ($lastname == "") ErrorExit("δεν γράψατε επίθετο!"); if ($username == "") ErrorExit("δεν γράψατε όνομα χρήστη!"); if ($passwordfirst == "") ErrorExit("δεν γράψατε password!"); if ($passwordfirst!= $passwordsecond) ErrorExit("δεν ξαναγράψατε σωστά το password!"); if ($gender == "") ErrorExit("δεν επιλέξατε φύλο!"); if ($agreeterms == "") ErrorExit("δεν συμφωνήσατε με τους όρους χρήσης!"); <html> <head> <meta charset="utf-8" /> </head> <body> <h1> Ολοκλήρωση εγγραφής χρήστη </h1> <p> <a href="page8a.html">επιστροφή</a> </p> <p> Η εγγραφή σας ολοκληρώθηκε επιτυχώς! </p> <p> firstname = <?= $firstname <br/> lastname = <?= $lastname <br/> username = <?= $username <br/> passwordfirst = <?= $passwordfirst <br/> passwordsecond = <?= $passwordsecond <br/> gender = <?= $gender <br/> agreeterms = <?= $agreeterms <br/> </p> </body> </html> Με την παραπάνω βελτίωση, ελέγχουμε τις τιμές που υπέβαλε ο χρήστης, και εάν δεν είναι έγκυρες καλούμε την συνάρτηση ErrorExit με παράμετρο το μήνυμα λάθους που θέλουμε να εμφανίσει. Επαναλάβετε τη διαδικασία υποβολής της φόρμα για διάφορες τιμές (ορθές και μη-έγκυρες) και ελέγξτε ότι ο κώδικας εμφανίζει τα σωστά μηνύματα. 11 Δρ.

Άσκηση 8b Το πρόβλημα του κώδικα που φτιάξαμε έως τώρα είναι το εξής: Αν ο έλεγχος της εγκυρότητας των δεδομένων αποτύχει, επιστρέφοντας στην φόρμα εισαγωγής έχουν χαθεί όλα τα στοιχεία που πληκτρολόγησε ο χρήστης. Έτσι, αν πχ ο χρήστης έκανε ένα σφάλμα σε ένα από τα στοιχεία της φόρμας, θα πρέπει να ξανασυμπληρώσει όλη την φόρμα από την αρχή. Για να λυθεί αυτό το πρόβλημα θα πρέπει να ενοποιηθούν τα 2 αρχεία που είχαμε έως τώρα (ένα HTML και ένα PHP) σε ένα και μοναδικό, το οποίο και θα εμφανίζει την φόρμα εισαγωγής αλλά και θα υποδέχεται τα δεδομένα που υποβλήθηκαν. Αρχικά θα χρειαστούμε μία επιπλέον συνάρτηση, την AddError την οποία θα τοποθετήσουμε στη βιβλιοθήκη μας. Ανοίξτε το αρχείο lab8_library.php και προσθέστε την ακόλουθη συνάρτηση: function AddError($message){ global $data_ok, $error_message; $error_message.= "{$message</br/>\n"; $data_ok = false; Η συνάρτηση AddError προσθέτει μηνύματα σφάλματος σε μία global μεταβλητή (την $error_message) ενώ θέτει και την global μεταβλητή $data_ok σε τιμή FALSE. Προσέξτε επίσης ότι δεν τερματίζουμε την εκτέλεση της PHP (δεν υπάρχει η εντολή exit), διότι: α) θέλουμε να εμφανίσουμε μηνύματα για όλα τα πεδία που πιθανόν να έχουμε πρόβλημα (και όχι απλά για το πρώτο που θα βρούμε), και β) διότι θέλουμε στην περίπτωση που υπάρχει πρόβλημα (το $data_ok δηλαδή έχει την τιμή false) να εμφανίσουμε ξανά την φόρμα εισαγωγής. Δημιουργήστε τώρα ένα καινούργιο αρχείο page8b.php με περιεχόμενο: 12 Δρ.

include_once 'lab8_library.php'; $data_ok = false; $error_message = ""; $method = $_SERVER['REQUEST_METHOD']; $firstname = PostValue("firstname"); $lastname = PostValue("lastname"); $username = PostValue("username"); $passwordfirst = PostValue("passwordfirst"); $passwordsecond = PostValue("passwordsecond"); $gender = PostValue("gender"); $agreeterms = PostValue("agreeterms"); if ($method == "POST") { //Ο χρήστης υπέβαλε την φόρμα $data_ok = true; if ($firstname == "") AddError("Δεν γράψατε όνομα!"); if ($lastname == "") AddError("Δεν γράψατε επίθετο!"); if ($username == "") AddError("Δεν γράψατε όνομα χρήστη!"); if ($passwordfirst == "") AddError("Δεν γράψατε password!"); if (strlen($passwordfirst) < 8) AddError("Το password πρέπει να έχει τουλάχιστον 8 χαρακτήρες!"); if ($passwordfirst!= $passwordsecond) AddError("Δεν ξαναγράψατε σωστά το password!"); if ($gender == "") AddError("Δεν επιλέξατε φύλο!"); if ($agreeterms == "") AddError("Δεν συμφωνήσατε με τους όρους χρήσης!"); <html> <head> <meta charset="utf-8" /> </head> <body> <h1>εγγραφή νέου χρήστη</h1> if ($data_ok) { //ΠΕΡΙΠΤΩΣΗ ΠΟΥ ΟΛΟΙ ΟΙ ΕΛΕΓΧΟΙ ΕΙΝΑΙ ΕΠΙΤΥΧΕΙΣ <p> Η εγγραφή σας ολοκληρώθηκε επιτυχώς! </p> else { // ΑΛΛΙΩΣ ΕΜΦΑΝΙΣΕ ΤΗΝ ΦΟΡΜΑ ΜΕ ΤΙΣ ΥΠΑΡΧΟΥΣΕΣ ΤΙΜΕΣ ΤΟΥ ΧΡΗΣΤΗ <p> Εισάγετε τα στοιχεία σας για να εγγραφείτε: </p> if ($error_message!= "") { <p> <font color="red"> Σφάλμα!<br/> <?=$error_message </font> </p> <form action="page8b.php" method="post"> <table> 13 Δρ.

<th>όνομα</th> <td> <input type="text" name="firstname" value="<?=$firstname" /> </td> <th>επώνυμο</th> <td> <input type="text" name="lastname" value="<?=$lastname" /> </td> <th>username</th> <td> <input type="text" name="username" value="<?=$username" /> </td> <th>password</th> <td> <input type="password" name="passwordfirst" value="<?=$passwordfirst" /> </td> <th>retype Password</th> <td> <input type="password" name="passwordsecond" value="<?=$passwordsecond" /> </td> <th>φύλο</th> <td> <input type="radio" name="gender" value="male" if ($gender == "male") echo "checked"; /> Άνδρας <br/> <input type="radio" name="gender" value="female" if ($gender == "female") echo "checked"; /> Γυναίκα <br/> </td> <th>όροι χρήσης</th> <td> <input type="checkbox" name="agreeterms" value="1" if ($agreeterms == "1") echo "checked"; /> Συμφωνώ με τους όρους χρήσης </td> <td> <a href="page8b.php">επαναφορά</a> </td> <td><input type="submit" value="εγγραφή" /></td> </table> </form> </body> </html> Η μεταβλητή $data_ok ξέρει εάν υπάρχει ή όχι κάποιο σφάλμα στα δεδομένα της φόρμας. Η μεταβλητή $error_message περιέχει όλα τα πιθανά σφάλματα που βρήκαμε στη φόρμα. Η μεταβλητή $method (που παίρνει την τιμή της από το $_SERVER['REQUEST_METHOD']) θα περιέχει είτε την τιμή GET είτε την τιμή POST. Η τιμή GET θα υπάρχει όταν ο χρήστης 14 Δρ.

πρωτοεπισκεφθεί την σελίδα page8b.php, χωρίς να έχει ακόμα πατήσει το πλήκτρο [Εγγραφή]. Οπότε με την γραμμή κώδικα: if ($method == "POST") { //Ο χρήστης υπέβαλε την φόρμα ελέγχουμε εάν ο χρήστης πάτησε το πλήκτρο [Εγγραφή]. Αρχικά η μεταβλητή $data_ok έχει τιμή false, διότι όταν πρωτοεπισκεπτόμαστε την σελίδα η φόρμα είναι κενή, άρα δεν είναι έγκυρη. Εάν όμως ο χρήστης πατήσει το πλήκτρο [Εγγραφή], δίνουμε αρχικά στην μεταβλητή $data_ok την τιμή true, και εάν ανιχνεύσουμε κάποιο σφάλμα στα δεδομένα η συνάρτηση AddError θα της δώσει τιμή false. Τελικά, εάν βρεθούν σφάλματα στα δεδομένα, τα μηνύματα λάθους που ορίσαμε θα αθροιστούν όλα μαζί (μόνο όσα χρειάζεται) στην μεταβλητή $error_message. Στη συνέχεια ξεκινάει η σελίδα HTML και μετά από τις επικεφαλίδες, κάνουμε τον έλεγχο: if ($data_ok) { //ΠΕΡΙΠΤΩΣΗ ΠΟΥ ΟΛΟΙ ΟΙ ΕΛΕΓΧΟΙ ΕΙΝΑΙ ΕΠΙΤΥΧΕΙΣ Εδώ γίνεται ο κεντρικός έλεγχος εάν έγινε επιτυχής υποβολή της φόρμας. Αν όντως η φόρμα υποβλήθηκε επιτυχώς τότε εμφανίζουμε απλά ένα μήνυμα Η εγγραφή σας ολοκληρώθηκε επιτυχώς! (σε επόμενο εργαστήριο θα εισάγουμε τα στοιχεία του χρήστη σε μία βάση δεδομένων). Εάν δεν είναι έγκυρα τα δεδομένα της φόρμας, ο έλεγχος πηγαίνει στο αμέσως επόμενο else της PHP, δηλαδή στο σημείο: else { // ΑΛΛΙΩΣ ΕΜΦΑΝΙΣΕ ΤΗΝ ΦΟΡΜΑ ΜΕ ΤΙΣ ΥΠΑΡΧΟΥΣΕΣ ΤΙΜΕΣ ΤΟΥ ΧΡΗΣΤΗ Σε αυτήν την περίπτωση εμφανίζουμε όλη την φόρμα, όπως και στις προηγούμενες ασκήσεις. Η μόνη διαφορά είναι ότι στα inputs της φόρμας, ορίζουμε και αρχικές τιμές για τα πεδία, ώστε να περιέχουν ό,τι τιμές έχει δώσει έως τότε ο χρήστης. Ας δούμε για παράδειγμα το input του Ονόματος: <input type="text" name="firstname" value="<?=$firstname" /> 15 Δρ.

Με το HTML attribute value ορίζουμε τι τιμή θα περιέχει το πεδίο text κατά την εμφάνισή του. Και εκεί μέσα, τοποθετούμε την τιμή της μεταβλητής $firstname μέσω της PHP. Έτσι, αρχικά, κατά την πρώτη εμφάνιση της σελίδας, η μεταβλητή $firstname θα είναι κενή. Οπότε και το πεδίο θα είναι κενό. Αν όμως ο χρήστης υποβάλει την φόρμα με κάποιο λάθος πχ στο password, η σελίδα θα εμφανίσει το σχετικό λάθος και θα ξαναεμφανίσει την φόρμα εισαγωγής. Αυτή τη φορά όμως η μεταβλητή $firstname θα περιέχει ο,τιδήποτε είχε γράψει ο χρήστης προηγουμένως, και αυτή η τιμή θα εισαχθεί στο attribute value μέσω της εντολής value="<?=$firstname". Με αυτό τον τρόπο ο χρήστης θα ξαναβρεί στο πεδίο που είχε γράψει το όνομά του την τιμή που είχε δώσει και δε θα χρειαστεί να το ξαναγράψει. Το ίδιο ακριβώς κάνουμε και για τα επόμενα inputs, για το Επίθετο, το Username και το Password. Για τα radio και checkbox πάλι απαιτείται ειδικός χειρισμός στην HTML για να τους ορίσεις αρχική τιμή, για να ορίσεις δηλαδή εάν θα είναι τσεκαρισμένα ή όχι. Αυτό γίνεται γράφοντας το attribute checked μέσα στο σώμα του σχετικού input. Το attribute checked το βάζουμε μέσω PHP αφού ελέγξουμε πότε και εάν είναι απαραίτητο να μπει, με τους ακόλουθους κώδικες. Για το radio Άνδρας : if ($gender == "male") echo "checked"; Για το radio Γυναίκα : if ($gender == "female") echo "checked"; Για το checkbox: if ($agreeterms == "1") echo "checked"; Εμφανίστε την σελίδα page8b.php στον browser σας και κάνετε διάφορες υποβολές, με έγκυρα και μη-έγκυρα στοιχεία, και επιβεβαιώστε ότι λειτουργεί όπως αναμένεται. Θα δείτε καλύτερα τη συμπεριφορά της φόρμας εάν συμπληρώνετε ένα πεδίο κάθε φορά και πατάτε αμέσως [Υποβολή], ώστε να ελέγξετε τα μηνύματα λάθους. 16 Δρ.

Άσκηση 8b2 Τροποποιήστε κατάλληλα τον κώδικα της σελίδας page8b.php ώστε να προσθέσετε και τα παρακάτω πεδία: Όνομα πατρός Όνομα μητέρας Είδος (radio) κινητού τηλεφώνου (επιλογή από iphone, Android ή Άλλο) Είδος (radio) ηλεκτρονικού υπολογιστή (επιλογή από Windows, Linux, Mac ή άλλο) Επιλογή (checkbox) Εγγραφή στο ενημερωτικό μας δελτίο μαζί με τους απαραίτητους ελέγχους εγκυρότητας. 17 Δρ.