Το προφίλ μας στο Google Plus
6

PHP & MySQL Tutorial – Οι Δύο Πύργοι

Στο προηγούμενο μέρος μάθατε να διαχειρίζεστε βάσεις δεδομένων σε περιβάλλον MySQL. Αυτόν το μήνα θα έρθετε ένα βήμα πιο κοντά στο να δημιουργήσετε τις πρώτες σας δυναμικές ιστοσελίδες, μαθαίνοντας να γράφετε κώδικα PHP και να τον συνδυάζετε με τα βασικά συστατικά του κώδικα HTML που ήδη γνωρίζατε.

Κυρίες και κύριοι, «σηκώστε» τους servers σας, ανοίξτε τον editor σας, παραμερίστε το ποντίκι και πάρτε θέση μπροστά στο πληκτρολόγιο – we ‘re in for some serious coding… :-)

Όχι, δεν κάνουμε πλάκα. Σηκώστε τον Apache web server μέσω του XAMPP Control Panel και ανοίξτε τον editor της επιλογής σας (υποθέτουμε ότι ακολουθήσατε τις συμβουλές μας του 1ου μέρους και έχετε εγκαταστήσει το XAMPP και κάποιον από τους editors που σας προτείναμε). Στον editor πληκτρολογήστε τις παρακάτω γραμμές και σώστε το αρχείο στον υποφάκελο htdocs του φακέλου εγκατάστασης του XAMPP (κανονικά c:\xampp\htdocs – από δω και πέρα θα αναφερόμαστε στον φάκελο αυτό απλά ως htdocs) ως hw.php (όλα τα παραδείγματα κώδικα περιέχουν αριθμό γραμμής για να αναφερόμαστε με ευκολία σε συγκεκριμένα κομμάτια κώδικα. Αγνοήστε τους αριθμούς αυτούς όταν αντιγράφετε κώδικα. Επίσης, για δική σας ευκολία ρυθμίστε τον editor σας ώστε να παρουσιάζει τον αριθμό γραμμής του κώδικα που γράφετε. Η αρίθμηση των γραμμών θα σας βοηθήσει στο debugging.):

<?php
  echo "Hello World";
?>

Ανοίξτε τον browser σας και εισάγετε την διεύθυνση http://localhost/hw.php (γενικά για όλη τη διάρκεια του tutorial πρέπει να γνωρίζετε ότι όταν σώζετε μια σελίδα ως [ΌνομαΣελίδας].php στον φάκελο htdocs, τότε μπορείτε να δοκιμάζετε την σελίδα στον browser σας πληκτρολογώντας την διεύθυνση http://localhost/[ΌνομαΣελίδας].php). Θαυμάστε το πρώτο σας PHP script σε δράση. Αλλά παρά το γεγονός ότι η σελίδα που βλέπετε αυτή τη στιγμή να σας χαιρετά στον browser σας είναι βασισμένη σε PHP, δεν είναι τίποτα άλλο παρά μια στατική σελίδα, μια σελίδα που θα μπορούσατε να δημιουργήσετε ούτως ή άλλως σε HTML. Για να το αλλάξετε αυτό, προσθέστε μια νέα γραμμή στο ίδιο script ώστε το hw.php να γίνει:

<?php
  echo "Hello World.";
  echo " The current time is " . date("H:i:s");
?>

Αφού σώσετε τις αλλαγές, πατήστε reload/refresh στον browser για να δείτε τα αποτελέσματα. Συνεχίστε να πατάτε reload στον browser και παρατηρήστε την αλλαγή στην ένδειξη της ώρας. Πλέον η σελίδα σας είναι διαφορετική κάθε φορά που την ζητάτε είναι δυναμική και αυτό είναι αδύνατο να το επιτύχετε με απλή HTML.
Η ώρα που αναγράφεται στην σελίδα είναι η τοπική ώρα που έχετε ρυθμίσει στον υπολογιστή σας. Αυτό όμως συμβαίνει επειδή στο περιβάλλον ανάπτυξης που έχετε στήσει ο υπολογιστής σας παίζει διπλό ρόλο: είναι και server για να στήνετε προσωρινά τις σελίδες που δημιουργείτε, είναι και client για να τις δοκιμάζετε στον browser σας. Τι θα γίνει όμως όταν θα ανεβάσετε την σελίδα σας σε κάποιο web host ώστε να την βλέπει όλος ο κόσμος; Η ώρα που θα παρουσιάζεται στην σελίδα θα είναι η τοπική ώρα του κάθε επισκέπτη (θα εξάγεται από τον υπολογιστή του client) ή μήπως θα είναι η ώρα που είναι ρυθμισμένη στον server που φιλοξενεί την σελίδα σας; Για να απαντήσετε σε αυτό το ερώτημα χρειάζεται να γνωρίζετε πρώτα κάτι ακόμα πιο σημαντικό: σε ποιόν υπολογιστή εκτελείται ο κώδικας PHP, στον server ή στον client;
Ουσιαστικά, επιλέξαμε αυτόν τον ομολογουμένως απότομο πρόλογο για να καταλήξουμε σε αυτήν ακριβώς την ερώτηση η οποία θα μας δώσει την ευκαιρία να πούμε μερικά θεωρητικά πράγματα για την PHP.

Was ist PHP;

Πρώτα απ’ όλα η PHP είναι γλώσσα προγραμματισμού. Πιο συγκεκριμένα είναι σκριπτογλώσσα προγραμματισμού αφού για να εκτελεστεί χρειάζεται μεταφραστή (interpreter) και όχι compiler. Κάποιος μπορεί να χρησιμοποιήσει την PHP για να δημιουργήσει τοπικές εφαρμογές στον υπολογιστή του αν και για τον σκοπό αυτό οι προγραμματιστές προτιμούν κυρίως γλώσσες με compiler, όπως την C, τη Delphi, την Basic κ.α. λόγω της υψηλής ταχύτητας εκτέλεσης. Εκεί που η PHP πραγματικά λάμπει είναι οι εφαρμογές web. Ενώ πολύ σπάνια θα βρείτε κάποια τοπική εφαρμογή γραμμένη σε PHP, όπως διαβάσατε και στο πρώτο μέρος του tutorial, εκατομμύρια website είναι βασισμένα σε αυτήν.
Μια άλλη σκριπτογλώσσα που χρησιμοποιείται σε εφαρμογές web είναι η HTML και πολύ σωστά αναρωτιέστε γιατί χρειάζεται να μάθετε PHP αφού ήδη γνωρίζετε να γράφετε κώδικα HTML. Μάλιστα μπορεί να γνωρίζετε ήδη και τον χειρισμό της JavaScript η οποία επεκτείνει ακόμα περισσότερο την δύναμη της HTML. Συγκεκριμένα με χρήση JavaScript θα μπορούσατε το ίδιο άνετα να δημιουργήσετε μια δυναμική σελίδα που εμφανίζει την ώρα, ίδια με αυτή που φτιάξατε παραπάνω με PHP (ή τουλάχιστον περίπου ίδια όπως θα διευκρινιστεί στην επόμενη παράγραφο). Γιατί, λοιπόν, PHP;
Διαδικασία ανάκτησης απλής HTML σελίδας. Ο επισκέπτης γράφει την διεύθυνση της σελίδας που επιθυμεί να επισκεφτεί (1). Στο παράδειγμα ο browser θα ζητήσει την σελίδα page1.html από τον server www.samplehost.com. O web server στην διεύθυνση www.samplehost.com λαμβάνει την αίτηση (2) και ανακτά την σελίδα page1.html από τον σκληρό δίσκο (3). Στην συνέχεια στέλνει το αρχείο της σελίδας αυτούσιο πίσω στον browser του επισκέπτη (4). Ο browser μεταγλωττίζει τον κώδικα HTML και παρουσιάζει την σελίδα στον επισκέπτη (5). Σε αυτό το σενάριο όπως βλέπετε ο web server λειτουργεί ως απλός κομιστής αρχείων.Σε αντίθεση με την HTML ή τον συνδυασμό HTML/JavaScript η PHP μεταφράζεται (εκτελείται) στον web server, ενώ οι HTML και JavaScript μεταφράζονται στον υπολογιστή του επισκέπτη της σελίδας (client) από τον browser. Έτσι οι σκριπτογλώσσες web εφαρμογών χωρίζονται δύο κατηγορίες, server-side και client-side. Σε αντίθεση με δύο γλώσσες της ίδιας κατηγορίας, όπως η PHP και η ASP, δύο γλώσσες από διαφορετικές κατηγορίες δεν είναι συγκρίσιμες αφού καθεμία μπορεί να προσφέρει δυνατότητες που για την άλλη είναι αδύνατες ή τουλάχιστον δύσκολες στην υλοποίηση. Για παράδειγμα, και για να απαντήσουμε επιτέλους στο αρχικό μας ερώτημα, με χρήση PHP είναι δύσκολο μια σελίδα να εμφανίζει την τοπική ώρα του επισκέπτη, ενώ η τρέχουσα ώρα στην τοποθεσία του server μπορεί να εμφανιστεί άμεσα (το είδατε ήδη λίγες παραγράφους πιο πάνω). Με χρήση JavaScript ισχύει ακριβώς το αντίθετο. Έτσι, οι σχεδιαστές σελίδων χρησιμοποιούν πολλές φορές (σε συνδυασμό πάντα με την HTML που είναι αναγκαία) και JavaScript και PHP για να έχουν το καλύτερο δυνατό αποτέλεσμα.
Διαδικασία ανάκτησης σελίδας HTML που περιέχει κώδικα PHP. Τα βήματα (1) και (2) είναι όμοια με την διαδικασία ανάκτησης απλής HTML σελίδας. O browser «σπάει» την διεύθυνση σελίδας που έγραψε ο επισκέπτης σε διεύθυνση server και όνομα σελίδας (1). Έτσι, στο παράδειγμα, ζητά την σελίδα page1.php από τον server στην διεύθυνση www.samplehost.com. Ο web server λαμβάνει την αίτηση (2) και ζητά το αρχείο της σελίδας από τον σκληρό δίσκο (3). Εφόσον το αρχείο αυτό έχει την κατάληξη php ο web server υποθέτει ότι ανάμεσα σε κώδικα HTML το αρχείο page1.php περιέχει και τμήματα κώδικα PHP και έτσι στέλνει το αρχείο στον PHP interpreter (4). O PHP interpreter εντοπίζει τα κομμάτια κώδικα PHP ανάμεσα στον υπόλοιπο κώδικα και τα εκτελεί. Στο τέλος, επιστρέφει στον web server το αρχείο page1.php αλλαγμένο (5). Το νέο αρχείο δεν περιέχει κώδικα PHP πλέον, αλλά κάθε κομμάτι τέτοιου κώδικα έχει αντικατασταθεί με τα αποτελέσματα των εντολών echo που περιέχονταν στο κομμάτι. Ο web server στέλνει το νέο αρχείο που περιέχει μόνο HTML κώδικα στον browser του επισκέπτη (6). Ο browser μεταγλωττίζει τον κώδικα αυτό και παρουσιάζει την σελίδα (7).Πριν κλείσει αυτό το θεωρητικό κομμάτι αξίζει να αναφερθεί ένα (μάλλον αναμενόμενο) χαρακτηριστικό των server-side γλωσσών και κατ’ επέκταση της PHP. Ενώ μπορείτε να δείτε πολύ εύκολα τον κώδικα HTML ή και JavaScript μιας σελίδας, ζητώντας από τον browser σας να σας τον εμφανίσει, είναι αδύνατο να δείτε τον κώδικα PHP που δημιούργησε την σελίδα. Δοκιμάστε να ζητήσετε από τον browser σας τον κώδικα της σελίδας που δημιουργήσατε παραπάνω. Θα δείτε ότι αντί να σας επιστραφούν οι τέσσερις γραμμές κώδικα που γράψατε στο hw.php, θα σας επιστραφούν τα αποτελέσματα της εκτέλεσης του κώδικα. Συνεπώς, ενώ είναι εύκολο να σώσετε τοπικά μια στατική ιστοσελίδα για να την δείτε αργότερα offline, είναι αδύνατο να σώσετε μια δυναμική ιστοσελίδα με κώδικα PHP. Αυτό που θα σώσετε θα είναι απλά μια στατική σελίδα που θα δείχνει τις ίδιες πληροφορίες κάθε φορά που την ζητάτε (στο παράδειγμά μας η ώρα δεν θα αλλάζει). Το γεγονός αυτό καθιστά αδύνατη και την αντιγραφή ενός site βασισμένου σε PHP. Αν θέλατε να φτιάξετε το δικό σας FaceΒook αντιγράφοντας τον κώδικα του γνήσιου, ξεχάστε το! :-) Για να γίνουν καλύτερα κατανοητά όλα αυτά δείτε την σχετική εικόνα που δείχνει βήμα-βήμα πως «σερβίρεται» μια απλή HTML σελίδα και μια HTML/PHP σελίδα.

Εισαγωγή κώδικα PHP σε σελίδες HTML

Παρατηρήσατε στο hw.php την χρήση των tags, για να σημάνουμε την αρχή και το τέλος του κώδικα (για να σημάνετε την αρχή κώδικα PHP αντί του tag , κλπ). Για να δοκιμάσετε αυτό το χαρακτηριστικό δημιουργήστε το hw2.php με τον παρακάτω κώδικα:

<html>
  <head>
    <title>My first dynamic content page</title>
  </head>
  <body>
    Hello World.
    <?php
      echo " The current time is " . date("H:i:s");
    ?>
  </body>
</html>

Αφού σώσετε, δοκιμάστε την νέα σελίδα στον browser. Θα δείτε ότι η νέα σελίδα και η παλιά hw.php έχουν την ίδια εμφάνιση στον browser. Η δομή HTML της νέας σελίδας όμως σας επιτρέπει να εκμεταλλευτείτε π.χ. το τμήμα για να προσθέσετε τίτλο στην σελίδα, όπως και κάνατε. Επίσης, εφόσον η φράση “Hello World.” εμφανίζεται σε κάθε κλήση της σελίδας, δηλαδή δεν είναι δυναμικό περιεχόμενο, δεν υπάρχει λόγος να γίνεται κλήση PHP για να εμφανιστεί, όπως κάνατε στην γραμμή 2 του παλιού hw.php. Έτσι στην νέα σελίδα, η συγκεκριμένη φράση είναι γραμμένη σε απλή HTML στην γραμμή 6. Η μόνη γραμμή κώδικα PHP είναι πλέον η εντολή echo στην γραμμή 8, γεγονός το οποίο δηλώνεται από τα tags στις γραμμές 7 και 9. Η εντολή echo καλεί την συνάρτηση date ώστε να εμφανίσει την τρέχουσα ώρα στην σελίδα. Περισσότερα για εντολές και συναρτήσεις θα δείτε παρακάτω. Προς το παρόν παρατηρήστε τον χαρακτήρα ; στο τέλος της εντολής. Ο χαρακτήρας αυτός παίζει τον ίδιο ρόλο στην PHP με αυτόν που μάθατε για την MySQL, δηλαδή «τερματίζει» εντολές και είναι υποχρεωτικό να εισάγεται στο τέλος κάθε εντολής ώστε ο PHP interpreter να καταλαβαίνει που τελειώνει μια εντολή και που αρχίζει η επόμενη.

PHP και μεταβλητές

Η PHP είναι «χαλαρή» γλώσσα και δεν θα σας παιδέψει με δηλώσεις μεταβλητών. Μπορείτε δηλαδή να δίνετε οτιδήποτε τιμές θέλετε (ακέραιο ή δεκαδικό αριθμό, αλφαριθμητικό, Boolean κλπ) σε μεταβλητές χωρίς πρώτα να έχετε δηλώσει τύπο δεδομένων μεταβλητής. Για να γίνει αυτό άμεσα κατανοητό, αντιγράψτε το παρακάτω παράδειγμα, σώστε το ως vardemo.php στον φάκελο htdocs και δοκιμάστε το στον browser:

<html>
  <head>
    <title>PHP Variables Demo</title>
  </head>
  <body>
    <?php
      $Number1 = 3;
      $Number2 = 35 / 7;
      $Number3 = 1.625;
      $String1 = "total";
      $String2 = 'XakeR';
      $String3 = "Issue:";
      $Space = " ";
      $NewLine = "<br>";
      $Logic = False;
      $IssueNum = ($Number1 + $Number2) * $Number3;
      $OutputLine1 = $String1 . $Space . $String2;
      $OutputLine2 = $String3 . $Space . $IssueNum . "th";
      echo $OutputLine1 . $NewLine . $OutputLine2 . $NewLine;
      echo $outputline1 . $newline . $outputline2 . $newline;
    ?>
  </body>
</html>

Όπως βλέπετε, πριν γράψετε το όνομα μιας μεταβλητής πρέπει πάντα να βάζετε το πρόθεμα $. Επίσης όταν δίνετε ένα αλφαριθμητικό ως τιμή σε μια μεταβλητή, αυτό πρέπει να περιβάλλεται από quotes (‘) ή double quotes (“) όπως μάθατε και για την MySQL (γραμμές 10-14). Στην γραμμή 15 η τιμή False δεν βρίσκεται μέσα σε quotes οπότε αποθηκεύεται στην μεταβλητή ως Boolean αντί αλφαριθμητικό.
Όπως και στις υπόλοιπες γλώσσες προγραμματισμού, έτσι και στην PHP, μπορούν να γίνουν πράξεις μεταξύ αριθμών ή μεταξύ αριθμητικών μεταβλητών και το αποτέλεσμα να ανατεθεί σε μια μεταβλητή όπως βλέπετε στις γραμμές 8 και 16. Όμοια, με την χρήση της τελείας, επιτυγχάνεται η σύνδεση αλφαριθμητικών και ανάθεση του αποτελέσματος σε άλλη μεταβλητή στις γραμμές 17 και 18.
Τέλος, σημειώστε ότι η PHP κάνει διάκριση μεταξύ κεφαλαίων και πεζών χαρακτήρων στα ονόματα μεταβλητών και έτσι ενώ η εντολή echo στην γραμμή 19 θα εμφανίσει πληροφορίες στην σελίδα, η γραμμή 20 δεν θα έχει κανένα αποτέλεσμα αφού οι μεταβλητές σε αυτήν έχουν πληκτρολογηθεί αποκλειστικά με πεζούς χαρακτήρες.

Μερικές βασικές εντολές και συναρτήσεις

Το online εγχειρίδιο της PHP είναι τόσο χρήσιμο για τον αρχάριο προγραμματιστή που αξίζει να το κάνετε όχι μόνο bookmark αλλά και homepage. Μεγάλο τμήμα του υπάρχει μεταφρασμένο και στην ελληνική γλώσσα. Στην εικόνα βλέπετε την σελίδα του εγχειριδίου για την συνάρτηση date στα ελληνικά.Η PHP έχει ένα πολύ πλούσιο σετ εντολών, ωστόσο εσείς δεν θα χρειαστείτε παρά μόνο μερικές από αυτές. Στον παρακάτω πίνακα θα βρείτε όλες τις απαραίτητες εντολές και συναρτήσεις για αυτό το tutorial μαζί με την σύνταξη και την περιγραφή τους. Στον πίνακα περιγράφονται μόνο συνοπτικά οι κύριες μορφές σύνταξης των εντολών. Για περισσότερες πληροφορίες, δεν έχετε παρά να επισκεφτείτε το επίσημο site της PHP που περιέχει ένα από τα πιο εύχρηστα συστήματα online documentation που έχουμε δει -ever!

Όνομα Σύνταξη Περιγραφή

echo

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

Η χρήση της echo έχει γίνει μάλλον ήδη κατανοητή από τα παραδείγματα. Μια σελίδα χωρίς εντολές echo είναι μια σελίδα που δεν εμφανίζει πληροφορίες.

for

for (αρχ;υπόθ;αλλ)
{
   κώδικας
   βρόγχου
}

Όπως στις περισσότερες γλώσσες προγραμματισμού έτσι και στην PHP υπάρχει η for για επαναλαμβανόμενη εκτέλεση τμήματος κώδικα (βρόγχου). Στην PHP η for συντάσσεται όπως και στην C. Στο αρχ ορίζεται αρχική τιμή σε μια μεταβλητή. Πριν από κάθε επανάληψη του κώδικα βρόγχου ελέγχεται η ισχύς της υπόθεσης υποθ. Μετά από κάθε επανάληψη εκτελείται ο κώδικας αλλ ο οποίος αναθέτει νέα τιμή στην μεταβλητή που επηρεάζει την ισχύ της υπόθεσης.

if

if (υπόθ1)
{
   ΤμήμαΚώδικα1
}
[elseif (υπόθ2)
{
   ΤμήμαΚώδικα2
}]

Ομοίως με την for, η if στην PHP συντάσσεται όμοια με την C και εκτελεί κώδικα υπό συνθήκες. Εάν η υπόθεση υπόθ1 ισχύει τότε εκτελείται το ΤμήμαΚώδικα1. Εάν δεν ισχύει και δεν έχει γίνει χρήση των προαιρετικών elseif και else, τότε συνεχίζει η φυσιολογική ροή του προγράμματος μετά την if. Αν όμως χρησιμοποιήθηκε η elseif γίνεται επιπλέον έλεγχος της υπόθεσης υπόθ2 και αν είναι αληθής εκτελείται το ΤμήμαΚώδικα2. Αν επιπλέον έγινε χρήση και της else και οι υποθέσεις των if και elseif είναι ψευδείς τότε εκτελείται μόνο το ΤμήμαΚώδικα3. Η σύνταξη και χρήση της if, όπως και της for θα γίνουν καλύτερα κατανοητές μέσα από τα παραδείγματα.

include και require

include ΌνομαΑρχείου
ή
require ΌνομαΑρχείου

Η include καλεί προς εκτέλεση ένα PHP script μέσα σε ένα άλλο. Αν π.χ. όλες σας οι σελίδες έχουν ένα κοινό header, μπορείτε να δημιουργήσετε την σελίδα του header σε ξεχωριστό αρχείο και να την καλείτε στην αρχή κάθε άλλης σας σελίδας με μια include. Η require έχει ακριβώς το ίδιο αποτέλεσμα, αλλά σε αντίθεση με την include, η require διακόπτει την εκτέλεση του κώδικα αν δεν βρεθεί το αρχείο που καλείται.

exit

exit([Αλφαριθμητικό])

Σταματά την εκτέλεση του κώδικα. Αν δοθεί η προαιρετική παράμετρος τότε η exit εμφανίζει το συγκεκριμένο αλφαριθμητικό πριν διακόψει την εκτέλεση.

time

time()

Επιστρέφει έναν ακέραιο αριθμό που αντιπροσωπεύει τα δευτερόλεπτα που έχουν περάσει από την 1η Ιανουαρίου του 1970, ώρα 00:00GMT μέχρι την στιγμή που εκτελείται η time.

date

date(Μορφή[,Στιγμή])

Επιστρέφει ως αλφαριθμητικό την ημερομηνία ή την ώρα ή και τα δύο ή μέρος αυτών σε φιλική προς τον αναγνώστη μορφή. Η παράμετρος Μορφή καθορίζει την μορφή του αποτελέσματος, δίνεται σαν αλφαριθμητικό και είναι υποχρεωτική. Η σύνταξη αυτής της παραμέτρου μπορεί να γίνει αρκετά περίπλοκη όπως ήδη θα παρατηρήσατε στα παραδείγματα του περιοδικού. Στην ανάλογη σελίδα στο εγχειρίδιο της PHP μπορείτε να δείτε την πλήρη δομή της παραμέτρου. Η παράμετρος Στιγμή καθορίζει την χρονική στιγμή για την οποία θα δημιουργηθεί το αποτέλεσμα της date και δίνεται σαν ακέραιος όπως ορίστηκε το αποτέλεσμα της time. Αν παραληφθεί, τότε η PHP χρησιμοποιεί την τρέχουσα ημερομηνία και ώρα σε μορφή ακεραίου όπως είδατε στο hw.php.

strlen

strlen(Αλφαριθμητικό)

Επιστρέφει έναν ακέραιο αριθμό που αντιπροσωπεύει το πλήθος χαρακτήρων του αλφαριθμητικού που δόθηκε ως παράμετρος.

nl2br

nl2br(Αλφαριθμητικό)

Επιστρέφει ένα αλφαριθμητικό το οποίο είναι ίδιο με το αλφαριθμητικό που δόθηκε ως παράμετρος με την διαφορά ότι οι χαρακτήρες NewLine του αρχικού αλφαριθμητικού μετατρέπονται σε HTML
tags. Η χρησιμότητα αυτής της συνάρτησης θα γίνει εμφανής στο 3ο μέρος αυτού του tutorial.

pow

pow(Βάση, Εκθέτης)

Επιστρέφει το αποτέλεσμα της πράξης xy όταν τα x και y δοθούν σαν Βάση και Εκθέτης αντίστοιχα.

Η σύνταξη των παραπάνω εντολών και συναρτήσεων γίνεται καλύτερα κατανοητή στα παραδείγματα. Ήδη έχετε συναντήσει κάποιες σε προηγούμενα παραδείγματα, κάποιες θα τις συναντήσετε παρακάτω ενώ για μερικές θα πρέπει να περιμένετε (ξέρουμε :-) εναγωνίως) το τρίτο μέρος του tutorial. Όσον αφορά την σύνταξη υποθέσεων για τις εντολές for και if και τους επιτρεπόμενους τελεστές δείτε το παράρτημα που ακολουθεί.

Σύνταξη υποθέσεων για if και for

Η σύνταξη μιας υπόθεσης είναι: Α τελεστής Β
Τα Α και Β στην παραπάνω σύνταξη μπορούν να είναι αριθμητικές ή αλφαριθμητικές τιμές/μεταβλητές ή ακόμα και προτάσεις. Η PHP επιτρέπει την χρήση όλων των κοινών τελεστών, ανάλογα με τον τύπο των Α και Β.
Οι τελεστές == και != χρησιμοποιούνται όταν τα Α και Β είναι αριθμητικά ή αλφαριθμητικά και αντιπροσωπεύουν την υπόθεση (Α ίσο με Β) και (Α διάφορο του Β) αντίστοιχα.
Οι τελεστές <,<=,> και >= χρησιμοποιούνται μόνο όταν τα Α και Β είναι αριθμητικά και αντιπροσωπεύουν την (Α μικρότερο του Β), (Α μικρότερο ή ίσο του Β), (Α μεγαλύτερο του Β) και (Α μεγαλύτερο ή ίσο του Β) αντίστοιχα.
Ο τελεστής % χρησιμοποιείται μόνο όταν τα Α και Β είναι αριθμητικά και αντιπροσωπεύει την (Α πολλαπλάσιο του Β). π.χ. η υπόθεση $i % 2 είναι αληθής αν η μεταβλητή $i περιέχει άρτια τιμή.
Οι τελεστές and και or χρησιμοποιούνται όταν τα Α και Β είναι προτάσεις και αντιπροσωπεύουν την (Α αληθής και Β αληθής) και (Α αληθής ή Β αληθής) αντίστοιχα.

Πέρασμα δεδομένων από σελίδα σε σελίδα

Στις εφαρμογές web ένα σημαντικό ζήτημα είναι η ανταλλαγή δεδομένων μεταξύ των σελίδων. Τέτοιες ανταλλαγές συμβαίνουν πολύ συχνά όταν επισκέπτεστε σελίδες στο internet, χωρίς ίσως αυτό να γίνεται αντιληπτό από εσάς. Ανοίξτε για παράδειγμα ένα browser και πηγαίνετε στην διεύθυνση www.google.gr, την κεντρική σελίδα του Google. Γράψτε π.χ. “macgyver” και πατήστε Enter να ξεκινήσει η έρευνα. Προσέξτε ότι, στην σελίδα των αποτελεσμάτων της έρευνας, το περιεχόμενο της μπάρας διεύθυνσης του browser άλλαξε σε κάτι σαν αυτό: http://www.google.gr/search?hl=en&q=macgyver&btnG=Google+Search.
Ουσιαστικά όταν γράφετε την λέξη “macgyver” συμπληρώνετε μια φόρμα την οποία υποβάλετε πατώντας Enter. Τότε η κεντρική σελίδα του Google σας κατευθύνει στην σελίδα http://www.google.gr/search η οποία αναλαμβάνει να κάνει την έρευνα και να εμφανίσει τα αποτελέσματα. Το υπόλοιπο κομμάτι της διεύθυνσης, που ξεκινά με τον χαρακτήρα ? ως πρόθεμα, χρησιμοποιείται από την κεντρική σελίδα του Google για να περάσει πληροφορίες στην σελίδα search που κάνει την έρευνα. Οι πληροφορίες αυτές «πασάρονται» από σελίδα σε σελίδα ως παράμετροι χωριζόμενες μεταξύ τους από τον χαρακτήρα &. Στο παράδειγμά μας η κεντρική σελίδα «κάνει πάσα» στην σελίδα search τις περαμέτρους hl, q και btnG με τιμές en, macgyver και Google+Search αντίστοιχα. Αυτές χρησιμοποιούνται από το script που εκτελείται μέσα στην σελίδα search. Παραλείποντας για παράδειγμα την παράμετρο q, η search δεν θα «γνώριζε» τι έρευνα να εκτελέσει, αφού η συγκεκριμένη παράμετρος χρησιμοποιείται ώστε η κεντρική σελίδα να περάσει στην search τo keyword της έρευνας (την λέξη “macgyver”). Μπορείτε λοιπόν κάλλιστα να κάνετε έρευνες στο Google παρακάμπτοντας την κεντρική του σελίδα, πληκτρολογώντας στην μπάρα διεύθυνσης http://www.google.gr/search?q=[ToΔικόΣαςKeyword].
Η PHP χρησιμοποιεί την ίδια μέθοδο, την μέθοδο GET, για να περνά δεδομένα σε μια σελίδα. Αφού μελετήσετε λίγη ώρα τον σχετικό πίνακα με μερικές βασικές εντολές και συναρτήσεις της PHP, σώστε το παρακάτω παράδειγμα ως calc.php στον φάκελο htdocs:

<html>
  <head>
    <title>Calculator</title>
  </head>
  <body>
    <?php
      $var1 = $_GET["a"];
      $var2 = $_GET["b"];
      $operator = $_GET["oper"];
      $lenvar1 = strlen($var1);
      $lenvar2 = strlen($var2);
      $lenoper = strlen($operator);
      if ($lenvar1 > 0 and $lenvar2 > 0 and $lenoper >0)
      {
        echo "a=" . $var1 . " and b=" . $var2 . "<BR>";
        if ($operator == "sum")
        {
          $sum = $var1 + $var2;
          echo "a+b=" . $sum;
        }
        elseif ($operator == "mult")
        {
          $mult = $var1 * $var2;
          echo "a*b=" . $mult;
        }
        elseif ($operator == "power")
        {
          $power = 1;
          for ($i=0;$i<$var2;$i=$i+1)
          {
            $power = $power * $var1;
          }
          echo "a^b=" . $power;
        }
        else
        {
          echo "Invalid operator";
        }
      }
      else
      {
        echo "One or more parameters missing";
      }
    ?>
  </body>
</html>

Το calc.php στο PSPad. Παρατηρήστε πόσο εύκολα ξεχωρίζει ο κώδικας PHP από τον κώδικα HTML με χρήση χρωματικής σήμανσης. Επίσης στις γραμμές 33-35 μπορείτε να δείτε τον τρόπο εισαγωγής σχολίου στην PHP με χρήση των //.Καλέστε την σελίδα στον browser πληκτρολογώντας στην μπάρα διεύθυνσης αρχικά http://localhost/calc.php. Η σελίδα διαμαρτύρεται ότι της λείπουν δεδομένα. Περάστε δεδομένα στη σελίδα προσθέτοντας τα ?a=7&b=3&oper=power στην διεύθυνση, ακριβώς μετά το calc.php. Η σελίδα θα υπολογίσει και θα εμφανίσει το αποτέλεσμα της πράξης 73 (δοκιμάστε την λειτουργία της σελίδας δίνοντας διαφορετικές τιμές στα a,b και oper). Η σελίδα «παίρνει» τις τιμές που εισάγετε στην γραμμή διεύθυνσης μέσω της συνάρτησης $_GET, της οποίας η σύνταξη είναι αρκετά straightforward και φαίνεται καθαρά στις γραμμές 7-9 της σελίδας. Μέσω της $_GET αναθέτονται οι τιμές των παραμέτρων που δόθηκαν σε μεταβλητές. Τα μήκη των μεταβλητών υπολογίζονται στις γραμμές 10-12 και ο έλεγχος if στην γραμμή 13 τσεκάρει αν ο χρήστης όντως έδωσε τιμές στις αναγκαίες παραμέτρους, συγκρίνοντας το μήκος των μεταβλητών με το 0. Στις γραμμές 15-38 υπολογίζονται και εμφανίζονται τα αποτελέσματα ανάλογα με την πράξη που δόθηκε στην παράμετρο oper στην γραμμή διεύθυνσης (Οι γραμμές 28-32 υπολογίζουν την δύναμη ab με χρήση της εντολής for. Έγινε χρήση της for απλά και μόνο για να δοθεί ένα παράδειγμα σύνταξης της εντολής. Οι 5 γραμμές κώδικα θα μπορούσαν να αντικατασταθούν με μια μόνο γραμμή που κάνει χρήση της συνάρτησης pow).
Μπορείτε τώρα να δημιουργήσετε μια ακόμα σελίδα ώστε να εισάγει ο επισκέπτης εύκολα τις παραμέτρους χωρίς να πειράζει την γραμμή διεύθυνσης του browser, μια σελίδα δηλαδή που θα εξυπηρετεί τον ίδιο σκοπό με την κεντρική σελίδα του Google αλλά για το δικό σας calc.php. Για τον σκοπό αυτό θα πρέπει να εισάγετε μια φόρμα HTML (στο tutorial αυτό έχουμε υποθέσει ότι γνωρίζετε τα βασικά του κώδικα HTML και συνεπώς ότι μπορείτε να σχεδιάσετε μια απλή φόρμα όπως αυτή του παραδείγματος. Αν πάλι δεν ισχύει αυτό δεν έχετε παρά να διαβάσετε μερικές πληροφορίες για τις φόρμες HTML. Αντιγράψτε για άλλη μια φορά τον παρακάτω κώδικα και σώστε τον ως calcgui.php:

<html>
  <head>
    <title>Calculator GUI</title>
  </head>
  <body>
    <form action="calc.php" method="GET">
      <center>
      a=<input type="text" name="a">
      b=<input type="text" name="b"><br><br>
      a+b=?<input type="radio" name="oper" value="sum"><br>
      a*b=?<input type="radio" name="oper" value="mult"><br>
      a^b=?<input type="radio" name="oper" value="power"><br><br>
      <input type="submit" value="Calculate!">
      </center>
    </form>
  </body>
</html>

Αφού δοκιμάστε την σελίδα στον browser παρατηρήστε ότι η σελίδα αυτή παρότι σώθηκε ως αρχείο .php, δεν περιέχει καθόλου κώδικα PHP και έτσι θα μπορούσατε να την είχατε σώσει και με κατάληξη .html.
Στις γραμμές 6-15 σχεδιάζεται η φόρμα που εμφανίζεται στην σελίδα. Προσέξτε την σύνταξη του tag

στην γραμμή 6. Εκεί με τo action=”calc.php” δηλώνεται η σελίδα την οποία θα καλέσει η φόρμα όταν υποβληθεί ενώ με το method=”GET” η μέθοδος με την οποία θα περάσουν οι παράμετροι σε αυτή. Στις γραμμές 8-12 ορίζεται ανά γραμμή το κάθε στοιχείο της φόρμας και εφόσον το calc.php δέχεται σαν παραμέτρους τις a,b και oper, δίνονται τα ανάλογα ονόματα σε κάθε στοιχείο. Τέλος, στην γραμμή 13, δηλώνεται το κουμπί υποβολής της φόρμας.
Μια άλλη μέθοδος υποβολής των παραμέτρων από μια φόρμα είναι η μέθοδος POST. Η διαφορά της με την GET είναι ότι η POST δεν εμφανίζει τις παραμέτρους στην μπάρα διευθύνσεων. Αυτό είναι χρήσιμο όταν λόγου χάρη θέλετε να περάσετε κάποια απόρρητα στοιχεία από μια σελίδα σε μια άλλη (όπως τα στοιχεία λογαριασμού χρήστη κατά την διαδικασία login).
Όσον αφορά την υλοποίηση της μεθόδου POST, αυτή δεν διαφέρει καθόλου από αυτήν της GET. Αρκεί να δηλωθεί το method=”POST” στο

tag της φόρμας, και να χρησιμοποιηθεί η συνάρτηση $_POST αντί της $_GET στην σελίδα την οποία καλεί η φόρμα. Εσείς αρκεί να αλλάξετε τις γραμμές 7-9 στο calc.php σε:

      $var1 = $_POST["a"];
      $var2 = $_POST["b"];
      $operator = $_POST["oper"];

και την γραμμή 6 στο calcgui.php σε:

    <form action="calc.php" method="POST">

Υποβολή φόρμας με τις μεθόδους GET και POST. Η μόνη εμφανής διαφορά εντοπίζεται στο περιεχόμενο της μπάρας διεύθυνσης του browser.Αφού σώσετε τις αλλαγές ελέγξτε την λειτουργία των δύο σελίδων. Αν δοκιμάσετε να περάσετε άμεσα παραμέτρους στην νέα calc.php από την μπάρα διεύθυνσης θα παρατηρήστε ότι η διαδικασία αυτή δεν λειτουργεί πλέον, γεγονός αναμενόμενο αφού η σελίδα ρυθμίστηκε να δέχεται παραμέτρους αποκλειστικά με την μέθοδο POST και έτσι αγνοεί παραμέτρους που δίνονται με την μέθοδο GET. Η σελίδα calc.php είναι λειτουργική πλέον μόνο όταν καλείται από την calcgui.php (μια σελίδα μπορεί να δέχεται παραμέτρους και με τις δύο μεθόδους χρησιμοποιώντας ταυτόχρονα στο ίδιο script τις συναρτήσεις &_GET και &_POST. Αν επιθυμείτε, για εξάσκηση, κάντε τις κατάλληλες αλλαγές στο script της calc.php ώστε να δουλεύει καλούμενη από την calcgui.php με την μέθοδο POST αλλά και με πέρασμα παραμέτρων από την γραμμή διευθύνσεων.).

Επίλογος

Με την μέθοδο POST, τελειώνει αυτό το σύντομο πέρασμα ανάμεσα στους δύο πύργους, την PHP και την HTML, και πλέον μπορείτε να δημιουργήσετε τις δικές σας, μικρές, web εφαρμογές. Ίσως βέβαια να σχηματίσατε την εντύπωση ότι η PHP δεν σας δίνει την δυνατότητα να δημιουργήσετε «σοβαρές» εφαρμογές. Ομολογουμένως, οι εφαρμογές που δημιουργήσατε ακολουθώντας τις συμβουλές αυτού του tutorial δεν ήταν ιδιαίτερα εντυπωσιακές. Για αυτό όμως ευθύνεται το γεγονός ότι χωρίς την βοήθεια της MySQL, η PHP δεν μπορεί να δείξει την αληθινή της αξία. Την MySQL την αφήσαμε πίσω στο 1ο μέρος του tutorial, αλλά μην ανησυχείτε… στο 3ο μέρος ο βασιλιάς θα επιστρέψει. ;)

6 Responses to “PHP & MySQL Tutorial – Οι Δύο Πύργοι”

  1. ariskos | 23/08/2011 at 22:03

    χμμ δοκίμασα επίσης να το κανώ με το POST και δεν έβγαζε πρόβλημα αν όμως μετά προσπαθούσα να βάλω τα arguments στο λινκ έβγαζε error.. Γενικώς αυτό που κατάλαβα είναι POST=Hidden link arguments και δεν έχει παρενέργειες απο το λινκ kai GET=Visible link arguments και μπορείς να κάνεις edit της μεταβλητές απο το λινκ :p

  2. MortisGR | 16/09/2011 at 00:04

    Απρόσκλητα HTML entities έχουν κάνει πάλι την εμφανισή τους και εδώ, και έχουν καταστήσει τις γραμμές κώδικα τουλάχιστον δυσανάγνωστες.

  3. MortisGR | 16/09/2011 at 14:45

    Άμεση διόρθωση! Μπράβο! Πάνω που έλεγα αν δεν προλαβαίνατε να το διόρθωνα και να το έστελνα με μέηλ. Ευχαριστώ και γω! :)

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων