Εισαγωγή στη γλώσσα PHP (Μάθημα 2ο)

Οι συζητήσεις που βρίσκονται εδώ είναι αρχειοθετημένες. Παρακαλούμε, μεταβείτε στην κοινότητα-forum του tempo.gr.
Post Reply
User avatar
alex
Administrator
Administrator
Posts: 112
Joined: 05 Aug 2011, 12:56

Εισαγωγή στη γλώσσα PHP (Μάθημα 2ο)

Post by alex »

Ενσωμάτωση ώρας και ημερομηνίας σε ιστοσελίδες με PHP

Παράδειγμα 1

Στο πρώτο παράδειγμα θα δούμε πως μπορούμε να φτιάξουμε με χρήση της PHP μια δυναμική ιστοσελίδα η οποία παρουσιάζει την τρέχουσα ώρα και ημερομηνία του εξυπηρετητή. Ας θεωρήσουμε κατ’ αρχήν μια απλή HTML σελίδα, η οποία φαίνεται στον browser ως εξής:
time_date.jpg
time_date.jpg (60.28 KiB) Viewed 4122 times
Ο HTML κώδικας της σελίδας έχει ως εξής:

Code: Select all

<HTML>

<HEAD><TITLE>System time page</TITLE></HEAD>

<BODY>
<H1>Welcome to the page!</H1>

<h2> Today it is </h2>

<h2> The time is </h2>
</BODY>

</HTML>
Η έναρξη μιας HTML σελίδας ορίζεται από το <HTML> το οποίο ονομάζεται HTML tag ανοίγματος, ενώ το τέλος μιας HTML σελίδας από το </HTML> που ονομάζεται HTML tag κλεισίματος. Ο τίτλος μιας σελίδας περιλαμβάνεται στο εσωτερικό ενός TITLE tag (<TITLE> … </TITLE>) όπως φαίνεται παραπάνω. Το τμήμα της σελίδας που απεικονίζεται από τον browser περιλαμβάνεται στο εσωτερικό του BODY tag. Οτιδήποτε κείμενο παρεμβάλλουμε στο εσωτερικό του BODY tag φαίνεται στον browser κατά το άνοιγμα της σελίδας. Το κείμενο “Welcome to the page!” το τοποθετούμε στο εσωτερικό ενός H1 tag προκειμένου να γίνεται η εμφάνισή του με γραμματοσειρά που αντιστοιχεί σε επικεφαλίδα μεγέθους 1 (σε αντιστοιχία με το Heading 1 του MS Word). Ομοίως το κείμενο που βρίσκεται στο εσωτερικό των H2 tags εμφανίζεται με γραμματοσειρά που αντιστοιχεί σε επικεφαλίδα μεγέθους 2 κ.ο.κ. Σε αναλογία με τα tags που χρησιμοποιούνται στην HTML, ο συμβολισμός <?php και ?> για το άνοιγμα και κλείσιμο ενός PHP script ονομάζεται PHP tag. Η ονομασία αυτή θα χρησιμοποιηθεί και παρακάτω ως εναλλακτική του PHP script.
time_date2.jpg
time_date2.jpg (62.22 KiB) Viewed 4122 times
Στόχος μας είναι η μετατροπή της παραπάνω σελίδας, έτσι ώστε κατά το άνοιγμά της, στο σημείο 1 να εμφανίζεται η τρέχουσα ημερομηνία και στο σημείο 2 η τρέχουσα ώρα. Η ανανέωση των παραπάνω στοιχείων θα γίνεται δυναμικά. Παρακάτω φαίνεται το επιθυμητό αποτέλεσμα:
time_date3.jpg
time_date3.jpg (59.5 KiB) Viewed 4122 times
Η λήψη και εκτύπωση της ώρας και ημερομηνίας του συστήματος θα γίνει με χρήση της PHP λόγω του ότι η HTML δεν είναι εκτελέσιμη γλώσσα αλλά μια γλώσσα περιγραφής της εμφάνισης HTML σελίδων. Έτσι τοποθετούμε δυο PHP tags στα σημεία 1 και 2 του HTML κώδικα της σελίδας:
time_date4.jpg
time_date4.jpg (41.7 KiB) Viewed 4122 times
Ο κώδικας της σελίδας, με την ενσωμάτωση των PHP tags γίνεται:

Code: Select all

<HTML>

<HEAD><TITLE>System time page</TITLE></HEAD>

<BODY>
<H1>Welcome to the page!</H1>

<h2> Today it is
<?php // Comment: PHP tag1
echo date('l, d F Y');

// ισοδύναμη σύνταξη είναι η
// echo( date(‘l, d F Y’);

?>
</h2>

<h2> The time is
<?php // PHP tag2
echo date('H:i:s');

?>
</h2>
</BODY>
</HTML>
Στη σελίδα έχουμε ενσωματώσει δυο PHP tags τα οποία περιλαμβάνουν τον κώδικα που παράγει την ημερομηνία και ώρα του συστήματος αντίστοιχα. Στο εσωτερικό κάθε tag υπάρχουν μία ή περισσότερες εντολές της PHP οι οποίες:

- χωρίζονται με ; όπως συμβαίνει και σε άλλες γλώσσες
- ακολουθούν σε μεγάλο βαθμό τη σύνταξη της C/C++ όσον αφορά δομές ροής ελέγχου και επανάληψης (π.χ. if /else, for, while, do … while, switch κτλ.), αριθμητικούς τελεστές και τελεστές σύγκρισης (π.χ. +, -, /, %, * και ==, <=, >=, !=), ενώ ο τελεστής ανάθεσης τιμών σε μεταβλητές είναι =.
- σχολιάζονται με χρήση των σχολίων της C/C++ δηλαδή το // για σχολιασμό μιας γραμμής και τα /* … */ για σχόλια περισσότερων γραμμών.

Η προκαθορισμένη έξοδος στην PHP δεν είναι η κονσόλα όπως σε άλλα προγράμματα. Οτιδήποτε τυπώνουμε στην PHP ενσωματώνεται στην HTML σελίδα και τελικά απεικονίζεται στον browser του χρήστη. Η συνάρτηση που χρησιμοποιείται για την εκτύπωση κειμένου είναι η echo. H echo παίρνει ως παράμετρο ένα string, το οποίο τυπώνει και ενσωματώνει στη σελίδα. Η έξοδος της echo προστίθεται στην HTML σελίδα στο σημείο όπου αρχίζει το PHP tag από το οποίο καλείται.
Έτσι μπορούμε να τυπώσουμε το “Hello World” σε μια HTML σελίδα γράφοντας στο εσωτερικό ενός PHP tag:
echo(‘Hello World’);
Τα απλά quotes ‘’ ορίζουν στην PHP ένα string. Εναλλακτική σύνταξη της echo, η οποία είναι και η πιο διαδεδομένη είναι η ακόλουθη:
echo ‘Hello World’;
από την οποία παραλείπονται οι παρενθέσεις. Η σύνταξη αυτή θα χρησιμοποιηθεί και στα επόμενα παραδείγματα.
Η συνάρτηση date επιστρέφει σε μορφή string την ημερομηνία και ώρα του συστήματος καθώς και άλλες σχετικές πληροφορίες (π.χ. μέρες του τρέχοντος μήνας, αν το έτος είναι δίσεκτο ή μη κτλ.). Η σύνταξή της είναι:
date(‘string μορφοποίησης’, unix_date)
όπου:
- string μορφοποίησης είναι ένα string που δίνει οδηγίες στο πως η date θα εμφανίσει την ημερομηνία που δίνεται ως δεύτερη παράμετρος
- unix_date είναι ένα έγκυρο unix timestamp που αναπαριστά την ημερομηνία προς μορφοποίηση. Το unix timestamp αποτελεί τον βασικό τρόπο αναπαράστασης ημερομηνιών στο λειτουργικό σύστημα unix και κωδικοποιεί μια ημερομηνία ως αριθμό δευτερολέπτων που έχουν περάσει από την 1-1-1970. Αν η παράμετρος παραλειφθεί η date λαμβάνει ως ημερομηνία προς μορφοποίηση την τρέχουσα ημερομηνία του συστήματος.
Στο PHP tag 1, η date τυπώνει την τρέχουσα ημερομηνία στη μορφή «Τετάρτη, 14 Δεκεμβρίου 2005». Κάθε τμήμα της ημερομηνίας που θέλουμε να εμφανιστεί δηλώνεται με κατάλληλα γράμματα στο string μορφοποίησης (το οποίο είναι ‘l, d F Y’) και συγκεκριμένα:

- l --> όνομα ημέρας
- d --> αριθμός ημέρας στα πλαίσια ενός μήνα (1.. 28 ή 30 ή 31)
- F --> όνομα του μήνα ολογράφως
- Υ --> έτος με 4 ψηφία

Προσοχή το ‘,’ στο εσωτερικό του string μορφοποίησης αποτελεί απλώς μέρος του κειμένου της ημερομηνίας το οποίο δεν λαμβάνεται υπόψιν από την date.
Στο PHP tag 2, η date τυπώνει την ώρα του συστήματος στη μορφή «23:59:59» χρησιμοποιώντας το string μορφοποίησης ‘H:i:s’ όπου
- Η --> είναι η ώρα σε 24ωρη βάση
- I --> είναι τα λεπτά της ώρας και
- s --> είναι τα δευτερόλεπτα.

Παράδειγμα 2

Στο δεύτερο παράδειγμα δημιουργούμε τρεις PHP μεταβλητές, που αντιστοιχούν στην ημέρα, μήνα και χρόνο γέννησης και τις εμφανίζουμε σε κατάλληλες θέσεις μιας HTML σελίδας. Η αρχική μορφή της σελίδας φαίνεται στην παρακάτω εικόνα. Επιπλέον, βάσει των μεταβλητών αυτών υπολογίζουμε την ηλικία σε έτη και την εμφανίζουμε στη σελίδα σαν μια επιπλέον γραμμή κειμένου.
time_date5.jpg
time_date5.jpg (51.87 KiB) Viewed 4122 times
Τα σημεία της σελίδας στα οποία θα προστεθεί δυναμικά HTML κώδικας φαίνονται στην εικόνα που ακολουθεί. Τέλος στην Εικόνα 4 φαίνεται η τελική μορφή της σελίδας.
time_date6.jpg
time_date6.jpg (56.77 KiB) Viewed 4122 times
time_date7.jpg
time_date7.jpg (55.51 KiB) Viewed 4122 times
Ο HTML κώδικας της αρχικής σελίδας φαίνεται παρακάτω μαζί με τα σημεία στα οποία θα γίνει η παρέμβαση με προσθήκη PHP tags:
time_date8.jpg
time_date8.jpg (27 KiB) Viewed 4122 times
Ακολουθεί ο κώδικας της σελίδας με ενσωματωμένα τα PHP tags που θα παράγουν δυναμικά τμήματά της κατά την επεξεργασία της σελίδας από τον PHP Preprocessor.

Code: Select all

<HTML>
<BODY>
<?php // PHP tag 1
$day = 1;
$month=7;
$year=1978; ?>
<h2>Day of birth: <?php // PHP tag 2
echo $day; ?>
</h2>
<h2>Month of birth: <?php // PHP tag3
echo $month; ?>
</h2>
<h2>Year of birth: <?php // PHP tag 4
echo $year; ?>
</h2>
<?php // PHP tag 5
$birthdate_unix = mktime(0, 0, 0, $month, $day, $year);
$now_unix = time();
$age_secs = $now_unix - $birthdate_unix;
$age_years = floor($age_secs/(365*24*60*60));
echo "<H2>Your age is $age_years</H2>"; ?>
</BODY>
</HTML>
Στο PHP tag 1 γίνεται η δήλωση των τριών μεταβλητών και η αρχικοποίησή τους. Η PHP διαφοροποιείται σημαντικά όσον αφορά τις μεταβλητές σε σχέση με την C/C++ και συγκεκριμένα ισχύουν τα εξής:
- το όνομα κάθε μεταβλητής στην PHP ξεκινά με $. Το τμήμα του ονόματος μετά το $ ακολουθεί τους γνωστούς κανόνες που ισχύουν για τα ονόματα μεταβλητών,
- η PHP κάνει διάκριση μεταξύ πεζών και κεφαλαίων στα ονόματα μεταβλητών, όχι όμως στα ονόματα των συναρτήσεων,
- οι μεταβλητές στην PHP δεν έχουν συγκεκριμένο τύπο και μάλιστα δεν χρειάζονται δήλωση,
- η δήλωσή τους γίνεται αυτόματα κατά την πρώτη χρήση και αρχικοποίησή τους,
- ο τύπος μιας μεταβλητής εξαρτάται από την τρέχουσα τιμή της. Έτσι μια μεταβλητή με ακέραια τιμή έχει τύπο integer, μια μεταβλητή με τιμή ένα αλφαριθμητικό έχει τιμή string κ.ο.κ.
- η PHP υποστηρίζει όλους τους βασικούς τύπους μεταβλητών δηλαδή integer, float, string, boolean.
- η ανάθεση σε μια μεταβλητή μιας τιμής διαφορετικής από τον τρέχοντα τύπο της δεν προκαλεί κάποιο σφάλμα εκτέλεσης. Αντίθετα η νέα τιμή καθορίζει και τον νέο τύπο της μεταβλητής,
- η χρήση μιας μη αρχικοποιημένης και συνεπώς μη δηλωμένης μεταβλητής στην PHP δεν προκαλεί σφάλμα εκτέλεσης. Η τιμή μιας μη αρχικοποιημένης μεταβλητής είναι NULL το οποίο αντιστοιχεί σε:
* 0 αν η μεταβλητή χρησιμοποιηθεί σε αριθμητική παράσταση,
* ‘’ (κενό string) αν η μεταβλητή χρησιμοποιηθεί ως string
* FALSE αν η μεταβλητή χρησιμοποιηθεί σε λογική έκφραση.
- μπορούμε να ελέγξουμε αν μια μεταβλητή είναι αρχικοποιημένη χρησιμοποιώντας τη συνάρτηση της PHP isset(), η οποία επιστρέφει TRUE για αρχικοποιημένη μεταβλητή και FALSE στην αντίθετη περίπτωση. Για παράδειγμα το isset($day) στο PHP tag 2 επιστρέφει TRUE ενώ το isset($age_years) στο PHP tag 1 επιστρέφει FALSE.
Έτσι λοιπόν με την εντολή $day = 1; γίνονται τρεις ενέργειες:

1. δήλωση της μεταβλητής $day,
2. αρχικοποίηση της τιμής της σε 1,
3. αυτόματος ορισμός του τύπου της σε integer.

To PHP tag 2 τυπώνει σε κατάλληλο σημείο της HTML σελίδας την τιμή της μεταβλητής $day. H εκτύπωση γίνεται με χρήση της echo. Ομοίως τα PHP tags 3 και 4 τυπώνουν τις τιμές των μεταβλητών $month και $year στις αντίστοιχες θέσεις της σελίδας.
Ο υπολογισμός της ηλικίας σε έτη γίνεται στο PHP tag 5. Στο συγκεκριμένο script θα παρατηρήσουμε τις ομοιότητες του PHP κώδικα σε σχέση με την C, ενώ θα χρησιμοποιήσουμε δυο νέες συναρτήσεις ημερομηνίας.
Η μεταβλητή $birthdate_unix αρχικοποιείται με την ημερομηνία γέννησης σε μορφή unix timestamp. Αυτό γίνεται με χρήση της συνάρτησης της PHP mktime η οποία επιστρέφει ημερομηνία σε μορφή unix timestamp και λαμβάνει 6 παραμέτρους τύπου ακεραίου:
mktime(ώρα, λεπτά, δ/λεπτα, μήνας, ημέρα, έτος).

Η συνάρτηση time() επιστρέφει την ημερομηνία του συστήματος ως unix timestamp και η τιμή αυτή ανατίθεται στη μεταβλητή $now_unix. Έτσι λοιπόν η ηλικία σε δ/λεπτα προκύπτει από τη διαφορά των $now_unix και $birthdate_unix, η οποία ανατίθεται στη μεταβλητή $age_secs.
H μετατροπή του αποτελέσματος σε έτη γίνεται διαιρώντας τη μεταβλητή $age_secs με τα δ/λεπτα ενός έτους, δηλαδή 365 μέρες * 24 ώρες ανά μέρα * 60 λεπτά ανά ώρα * 60 δλεπτα ανά λεπτό. Η στρογγυλοποίηση προς τα κάτω του αποτελέσματος γίνεται με τη συνάρτηση floor της PHP.
Έτσι λοιπόν στη μεταβλητή $age_years έχουμε την ηλικία σε έτη. H μεταβλητή τυπώνεται ως τμήμα ενός string με χρήση της echo. Παρατηρήστε ότι το string αυτή τη φορά περικλείεται από διπλά quotes “ ”. Ο λόγος είναι διότι στο εσωτερικό των “ ” μπορούμε να τοποθετήσουμε μεταβλητές οι οποίες αντικαθίστανται από τις τιμές τους πριν την εκτύπωση του string ή την ανάθεσή του σε μια άλλη μεταβλητή.

Έτσι ένα string που περικλείεται από διπλά quotes περνάει πάντα από δυο στάδια επεξεργασίας πριν τη χρήση του:

1.ανάγνωση του string από τη μηχανή εκτέλεσης της PHP και εντοπισμός ονομάτων μεταβλητών (αναζήτηση δηλαδή $ που ακολουθούνται από έγκυρους χαρακτήρες ονόματος μεταβλητής)

Προσοχή!!! Η τοποθέτηση του ονόματος μιας μεταβλητής στο εσωτερικό ενός string που περικλείεται από απλά quotes ‘’ δεν προκαλεί την αντικατάστασή της από την τιμή της. Στην περίπτωση αυτή τυπώνεται το όνομα της μεταβλητής και όχι η τιμή της. Αυτή είναι και η βασική διαφορά μεταξύ string που περικλείονται με απλά και διπλά quotes.

2. αντικατάσταση των ονομάτων μεταβλητών με τις τρέχουσες τιμές τους.

Σημειώστε τα εξής όσον αφορά την τοποθέτηση μεταβλητών στο εσωτερικό “” strings:

- το όνομα της μεταβλητής δεν πρέπει να ακολουθείται αμέσως από έγκυρο χαρακτήρα μεταβλητής δηλαδη από ‘_’, γράμμα ή αριθμό. Στην περίπτωση αυτή οι χαρακτήρες αυτοί θα προστεθούν στο όνομα της μεταβλητής και το σύστημα θα αναγνωρίσει λάθος μεταβλητή, η οποία είναι μη αρχικοποιημένη και τυπώνεται ως κενό string. π.χ. αν θέλω να εμφανίσω το κείμενο:
<H2>Your age is 27years old</H2>

η παρακάτω εντολή είναι λάθος:
echo “<H2>Your age is $age_yearsyears old</H2>”;
γιατί το σύστημα αναγνωρίζει ως μεταβλητή την $age_yearsyears. Προκειμένου να διαχωρίσω το όνομα της μεταβλητής από το υπόλοιπο κείμενο μπορώ να χρησιμοποιήσω τα { }. Έτσι ο παραπάνω κώδικας γράφεται ως εξής:
echo “<H2>Your age is {$age_years}years old</H2>”;

Προσοχή!!! Στην περίπτωση που το όνομα μιας μεταβλητής στο εσωτερικό ενός string περικλείεται από {} θα πρέπει να προσέξετε τα εξής:
- ακριβώς μετά το { ακολουθεί το $ του ονόματος της μεταβλητής χωρίς τη μεσολάβηση κενού ή άλλου χαρακτήρα. Στην αντίθετη περίπτωση τα {} ερμηνεύονται ως μέρους του κειμένου του string.
- στο εσωτερικό των {} μπορώ να τοποθετήσω ακριβώς μια μεταβλητή. Δεν μπορώ να χρησιμοποιήσω την σύνταξη αυτή για την αποτίμηση δύο ή περισσοτέρων ταυτόχρονα μεταβλητών.


Η μεταχείριση των $, {, }, “” σαν απλό κείμενο γίνεται όπως και στη C με χρήση του \, οπότε ο διερμηνευτής τους θεωρεί τους ειδικούς χαρακτήρες σαν μέρος του string. Έτσι αν θέλω να τυπώσω το $ στο εσωτερικό ενός string με διπλά quotes χρησιμοποιώ τη σύνταξη \$.
Give a man a fish, and you feed him for a day..
Show him how to catch fish, and you feed him for a lifetime!
Post Reply