Βάσεις Δεδομένων Κωδικός Μαθήματος: MK741 Είδος Μαθήματος: Επιλογής-Εργαστηριακό Εξάμηνο: 7o Διδάσκων: Κοντογιάννης Σωτήριος Email: skontog@gmail.com, skontog@cc.uoi.gr
HTML Φόρμες και PHP Μέρος Δεύτερο Εισαγωγή στις συναρτήσεις HTML Φόρμες Μέθοδοι Εισόδου GET/POST
Συναρτήσεις Οι συναρτήσεις (functions) της PHP, δηλ. αυτές που υπάρχουν ενσωματωμένες μέσα στην PHP αλλά και αυτές που δημιουργούμε μόνοι μας, διευκολύνουν πολύ το γράψιμο του κώδικα καθώς μας δίνουν τη δυνατότητα να επαναχρησιμοποιήσουμε τον κώδικα που έχουν γράψει κάποιοι άλλοι χρήστες και μπορούμε ακόμη να κάνουμε τα δικά μας scripts να έχουν μικρό μέγεθος και να είναι έτσι πιο εύκολα στη διαχείρισή τους. Οι συναρτήσεις έχουν είσοδο μία ή περισσότερες μεταβλητές, scalar, array, ειδικού τύπου και μία έξοδο. Συντάσσονται ώς [τ.δ] function onoma_sinartisis([τ.δ] $val1, [τ.δ] $val2, [τ.δ.] $val3) { return $value; }
Τύπου συναρτήσεων (1) Συνάρτηση υποπρόγραμμα. Η συνάρτηση που δεν επιστρέφει καμία τιμή Σύνταξη: function my_name(int $val1, float $val2, string $val3) Παράδειγμα: <?php function test(int $val1, float $val2, string $val3, bool $val4) { echo "$val1-$val2-$val3-$val4\n"; return ; } test(3,2.3,"Hello",true); Π1: Καλό είναι στις συναρτήσεις να ορίζουμε τ.δ. εισόδου Π2: Δεν χρησιμοποιούμε const [τ.δ] τύπους (const int) Π3: Στην έξοδο δεν ορίζουμε τ.δ. Τον καθορίζει αποκλειστικά ο τ.δ. της επιστρεφόμενης μεταβλητής.
Τύποι συναρτήσεων (2) Συνάρτηση υποπρόγραμμα με πολλές εξόδους. Η συνάρτηση που επιστρέφει τιμή-τιμές από την είσοδο με αναφορά Σύνταξη: function my_name(int $val1, float &$val2, string &$val3) Παράδειγμα: <?php function test(int $val1, float &$val2, string &$val3, bool $val4) { echo "$val1-$val2-$val3-$val4\n"; # return ; } $val2=2.3;$val3="Hello"; test(3,$val2,$val3,true); $val2++; ?> test(3,2.3,"Hello",true); Π1: Μόνο οι μεταβλητές μπαίνουν σαν είσοδο στην κλήση με αναφορά.
Τύποι συναρτήσεων (3) Συνάρτηση με μή απαραίτητες εισόδους Σύνταξη: function my_name(int $val1, float &$val2=null, string $val3=“”) Παράδειγμα: <?php function test(int $val1, float &$val2, string $val3=””, bool &$val4=null) { echo "$val1-$val2-$val3-$val4\n"; return ; } $val2=2.3; test(3,$val2); $val2++; ?> test(3,2.3); Π1: Μόνο οι μεταβλητές μπαίνουν σαν είσοδο στην κλήση με αναφορά.
Τύποι συναρτήσεων (4) Συνάρτηση με είσοδο πίνακα Το πέρασμα μπορεί να γίνει τόσο με τιμή όσο και με αναφορά: function my_name(int &$val1=..) Παράδειγμα: <?php $val1=array(1,2,3,4); function test(array &$val1) { $val1[0]=3; return ; } test($val1); echo $val1[0]."\n"; ?> Π1: Εδώ έχω κλήση με αναφορά. Εάν θέλω με τιμή, βγάζω το & από το val1
Τύποι συναρτήσεων (5) Συνάρτηση με έξοδο πίνακα Παράδειγμα: <?php function test() { $val1=array(1,2,3,4); return $val1 ; } $val2=test(); echo $val2[0]."\n"; ?> Π1: Επιστροφή μόνο με τιμή ποτέ με αναφορά (το return δεν την υποστηρίζει)
Τύποι συναρτήσεων (6) Συνάρτηση με είσοδο και έξοδο πίνακα Για λόγους ταχύτητας και περιορισμού χρήσης μνήμης όταν χρησιμοποιούμε πίνακες συνίσταται η χρήση της αναφοράς σε πίνακα Παράδειγμα: <?php $val1=array(1,2,3,4); function test(int &$val) { $ref=&$val; return $ref ; } $val2=test(&$val1); echo $val2[0]."\n"; ?> Π1: Προσοχή! Στους πίνακες στις συναρτήσεις δεν ορίζουμε τύπο δεδομένων. Οι πίνακες δεν έχουν τύπο δεδομένων!!!!
Variable Scope – Global Variables Οι μεταβλητές των συναρτήσεων έχουν τοπική εφαρμογή (local scope). Οι μεταβλητές που ορίζονται εκτός συναρτήσεων και δεν είναι σταθερές έχουν καθολική εφαρμογή (global scope). Όταν μια συναρτηση θέλει να χρησιμοποιήσει μία καθολική όμως μεταβλητή οφείλει να μεταβάλει το namespace της δηλώνοντας ότι θα χρησιμοποιήσει μία global scope μεταβλητη ώς εξής: global $variable; Παράδειγμα: $t=23; function test() { $t=50; //Αυτή είναι τοπική μεταβλητή } function test2() { global $t; $t=50; // Αυτή είναι η καθολική $t μεταβλητή
Συλλογή δεδομένων με Φόρμες Οι φόρμες αποτελούν το πιο δημοφιλή τρόπο για τη συλλογή δεδομένων μέσω του World Wide Web (WWW) Επιτρέπουν στους χρήστες να επικοινωνούν με τη βοήθεια του κειμένου και των γραφικών της οθόνης αλληλεπιδραστικά Οι φόρμες επιτρέπουν τη δημιουργία πεδίων στα οποία ο χρήστης εισάγει πληροφορίες ή επιλέγει μεταξύ κάποιων προ-επιλογών. Όταν αποσταλούν αυτές οι πληροφορίες, συλλέγονται από ένα πρόγραμμα (script) στο διακομιστή (server) για περαιτέρω επεξεργασία.
Ορίζοντας μια φόρμα θα πρέπει να καθορίσουμε το περιεχόμενο, τη διεύθυνση και τον τρόπο με τον οποίο θα σταλεί Η ετικέτα <FORM> δείχνει την αρχή μιας φόρμας Η ετικέτα </FORM> δείχνει το τέλος μιας φόρμας Μπορούμε να τοποθετήσουμε ανάμεσα στο <FORM> και το </FORM> όποιους και όσους τύπους δημιουργίας πεδίων εισαγωγής δεδομένων μιας φόρμας θέλουμε.
Υπάρχουν 3 τύποι για τη δημιουργία πεδίων : <TEXTAREA> <SELECT> <INPUT> Με την ετικέτα <TEXTAREA>, μπορούμε να ορίσουμε ένα πεδίο εισαγωγής κειμένου πολλών γραμμών. Αυτόματα εμφανίζεται ένα παράθυρο χωρητικότητας 40 χαρακτήρων Με τη βοήθεια των ROWS και COLS μπορούμε να ορίσουμε περισσότερες γραμμές και στήλες
Παράδειγμα δημιουργίας μιας φόρμας – Ετικέτα textarea <HTML> <HEAD> <TITLE>TEXTAREA.HTML</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-7"> </HEAD> <BODY> <FORM> <TEXTAREA NAME="comments" ROWS=4 COLS=40> Κείμενο ... 2η σειρά 3η σειρά 4η σειρά </TEXTAREA> </FORM> </BODY> </HTML>
Παράδειγμα δημιουργίας μιας φόρμας – Ετικέτα select Με την ετικέτα <SELECT> μπορούμε να εμφανίζουμε στην οθόνη μια λίστα προ-επιλογών, η οποία είναι γνωστή με την εκφραση pull down menu, όπου ο χρήσης μπορεί να επιλέξει μία ή περισσότερες από τις διαθέσιμες επιλογές χωρίς να χρειαστεί να πληκτρολογήσει οτιδήποτε άλλο (Combobox Widget). Πρέπει να ορίσουμε υποχρεωτικά και ένα διακεκριμένο όνομα για κάθε μια φόρμα και μπορούμε να ορίσουμε όσες επιλογές επιθυμούμε. Οι δυνατότητες της εντολής είναι :
Ετικέτα select - Ιδιότητες Ιδιότητα Περιγραφή NAME Ορίζεται το όνομα των δεδομένων του combo SIZE Καθορίζεται ο αριθμός των επιλογών δηλαδή, πόσες γραμμές της οθόνης θα εμφανιστούν. Αν δεν οριστεί είναι 1 MULTIPLE Επιτρέπει να ορίσουμε περισσότερες από μία επιλογές. Δεν είναι όμως, λειτουργική και πρέπει να αποφεύγεται DISABLED Επιτρέπει να ορίσουμε μια επιλογή μη ενεργή δηλαδή, να εμφανίζεται σε απόχρωση του γκρί και να μην επιδέχεται τροποποίηση
Παράδειγμα δημιουργίας μιας φόρμας με τη <SELECT> <HTML> <HEAD> <TITLE> SELECT </TITLE> </HEAD> <BODY> <FORM> <P>Επιλέξτε την πόλη σας: <SELECT NAME="CITY"> <OPTION>ΑΘΗΝΑ <OPTION>ΘΕΣΣΑΛΟΝΙΚΗ <OPTION>ΛΑΡΙΣΑ <OPTION>ΠΑΤΡΑ <OPTION>ΞΑΝΘΗ <OPTION>ΚΑΒΑΛΑ </FORM> </BODY> </HTML>
Παράδειγμα δημιουργίας μιας φόρμας με τη <SELECT>
Το στοιχείο INPUT Το στοιχείο <INPUT> επιτρέπει να συλλέξουμε πληροφορίες. Οι ιδιότητες του <INPUT> είναι: NAME Ορίζει το όνομα των δεδομένων και είναι υποχρεωτικό SIZE Ορίζει το μέγεθος του πεδίου σε χαρακτήρες MAXLENGTH Ορίζει το μέγιστο μέγεθος των χαρακτήρων (σε πεδία τύπου text ή password) VALUE Εμφανίζει το εξ ορισμού κείμενο CHECKED Δείχνει αναμμένο ένα check box ή radio button TYPE Είναι η πιο χαρακτηριστική ιδιότητα του στοιχείου <INPUT> και μπορεί να πάρει τις ακόλουθες τιμές:
Το στοιχείο INPUT (1) Η εξ ορισμού τιμή της TYPE είναι TEXT και επιτρέπει να ορίσουμε τη φύση του κειμένου που θα εμφανιστεί με την <INPUT>. Αν οριστεί PASSWORD, εμφανίζει αστεράκια στην οθόνη αντί για τους χαρακτήρες που πληκτρολογούνται έτσι ώστε να μην είναι αναγνώσιμο το συνθηματικό που πληκτρολογείται Αν οριστεί CHECKBOX, εμφανίζει ένα απλό ορθογώνιο (check box) π.χ. για να ορίσουμε μια απάντηση της μορφής ΝΑΙ ή ΟΧΙ Αν οριστεί RADIO τότε αποτελεί μια πιο σύνθετη μορφή ενός CHECKBOX επιτρέποντας όμως μια μόνο επιλογή από το σύνολο των δυνατών επιλογών
Το στοιχείο INPUT (2) Αν οριστεί RESET εμφανίζει ένα ορθογώνιο (push button) που όταν ενεργοποιηθεί (πατηθεί) θα καθαρίσει (θα αδειάσει) το περιεχόμενο όλων των φορμών, τοποθετώντας ταυτόχρονα τις αρχικές τιμές σε κάθε μια φόρμα Αν οριστεί SUBMIT εμφανίζει ένα ορθογώνιο (push button) το οποίο όταν ενεργοποιηθεί αποστέλλει τα δεδομένα στο διακομιστή Αν οριστεί HIDDEN δεν εμφανίζει τίποτε στην οθόνη και επιτρέπει να κρύψουμε ένα πεδίο INPUT στην οθόνη
Το στοιχείο FORM - Ιδιοτητες Οι δύο ιδιότητες με τις οποίες ορίζουμε τη διεύθυνση και τον τρόπο αποστολής των στοιχείων μιας συμπληρωμένης φόρμας προς το διακομιστή είναι οι ACTION και η METHOD για τις οποίες και έχουμε: ACTION Ορίζει τη διεύθυνση (URL) του διακομιστή η οποία θα δεχτεί το περιεχόμενο της φόρμας Αν δεν οριστεί καμία διεύθυνση, τότε επιστρέφει το περιεχόμενο της φόρμας στη διεύθυνση από όπου προέρχεται η σελίδα. METHOD Ορίζει τον τρόπο αποστολής των πληροφοριών. Οι τιμές της METHOD είναι POST και GET
Παράδειγμα μιας φόρμας <FORM METHOD=POST ACTION=“http://www.test.gr/cgi-bin/order”> <INPUT NAME="Name1" SIZE="15"> <INPUT NAME=" Name2" SIZE="25"> Όνομα, Επίθετο<P> <INPUT NAME="Adress" SIZE="42"> Οδός<P> <INPUT NAME="Zip" SIZE="10"> <INPUT NAME="Town" SIZE="30"> ΤΚ, Πόλη<P> <INPUT NAME="TEL" SIZE="42"> Τηλέφωνο <H4>Επιθυμώ να παραγγείλω :</H4> <TEXTAREA NAME="Order" COLS="40" ROWS="3"> </TEXTAREA><P> <H4> Τρόπος πληρωμής :</H4> <INPUT NAME ="TypeP1" TYPE="radio" VALUE="REMB">Μετρητής<P> <INPUT NAME="TypeP2" TYPE="radio" VALUE="CARTE">Πιστωτική Κάρτα<P> <INPUT TYPE="submit" VALUE="Αποστολή παραγγελίας"> <INPUT TYPE="reset" VALUE="Ακύρωση παραγγελίας"> <HR> </BODY> </HTML>
Παράδειγμα στοιχείο input text (LineEdit) Ιδιότητες: Size= Το μέγεθος σε χαρακτήρες του lineEdit Maxlength= Η μέγιστη εισαγωγή χαρακτήρων του LineEdit Name = Όνομα της μεταβλητής GET/POST Value = Εξ’ ορισμού τιμή στο LineEdit. To value συνήθως αντικαθίσταται από την ιδιότητα Placeholder που διαγράφει την εξ’ ορισμού τιμή κατά την εισαγωγή Παράδειγμα: <form name="form1" method="post" action="example1.php"> Όνομα: <input type="text" name="onoma" placeholder="Πληκτρολογήστε το όνομα σας εδώ" size="35" maxlength="31"> <br /> <input type="submit" name="Submit" value="Αποστολή"> </form>
Παράδειγμα στοιχείο input text password (LineEdit) Ιδιότητες: Size= Το μέγεθος σε χαρακτήρες του lineEdit Maxlength= Η μέγιστη εισαγωγή χαρακτήρων του LineEdit Name = Όνομα της μεταβλητής GET/POST Παράδειγμα: <b>Password: </b><input type="password" name="kodikos" size="20" maxlength="20" /> Όταν γράφουμε μέσα στην περιοχή κειμένου του Password εμφανίζονται ή αστεράκια ή βουλίτσες, ανάλογα τον browser που χρησιμοποιούμε.
Παράδειγμα στοιχείο radio (1) Ιδιότητες: Η διότητα value ορίζει την τιμή που θα στείλει η φόρμα στον Server αφού πατήσουμε το κουμπί αποστολής. Σύμφωνα με τον κώδικα HTML που βρίσκεται πιο πάνω, εάν ο επισκέπτης επιλέξει την επιλογή Άνδρας τότε στον Server θα σταλεί η τιμή "male" , ενώ αν επιλέξει Γυναίκα θα σταλεί η τιμή "female". Η ιδιότητα name εκτός από το να δίνει ένα όνομα στα κουμπιά επιλογής, εδώ παίζει και τον ρόλο της ομαδοποίησης. Δηλαδή ομαδοποιεί τα κουμπιά επιλογής (ορίζοντας στην ιδιότητα name την ίδια τιμή) έτσι ώστε μόνο ένα από αυτά να μπορεί να επιλέγεται από τον χρήστη και μια μόνο τιμή να αποστέλλεται στο αρχείο .php. Στο παράδειγμα της φόρμας συμπλήρωσης στοιχείων, αν στο Φύλο επιλέξουμε Γυναίκα τότε παύει να είναι επιλεγμένο το κουμπί που αναφέρετε στην επιλογή Άνδρας. Αν τα δύο αυτά κουμπιά επιλογής είχαν διαφορετική τιμή στην ιδιότητα name τότε η Φόρμα θα μας επέτρεπε να είχαμε και τις δύο επιλογές επιλεγμένες (Άνδρας, Γυναίκα).
Παράδειγμα στοιχείο radio (2) Ιδιότητες: Η ιδιότητα checked της ετικέτας <input> χρησιμοποιείται για να ορίσουμε ποια από τα ομαδοποιημένα κουμπιά θα είναι εξορισμού επιλεγμένο όταν φορτώνεται η σελίδα. Η ιδιότητα αυτή δεν παίρνει τιμή. Παράδειγμα: <b>Φύλο</b>: <input type="radio" name="sex" value="male" checked> Ανδρας <input type="radio" name="sex" value="female"> Γυναίκα <br> <b>Αγαπημένο χρώμα</b>:<br> <input type="radio" name="color" value="blue" checked> μπλέ <br><input type="radio" name="color" value="green">πράσινο <br><input type="radio" name="color" value="yellow">κίτρινο
Παράδειγμα στοιχείο πολλαπλών επιλογών (checkbox) Ιδιότητες: Name= Το όνομα κάθε checkbox (διαφορετικό για κάτε κουτί)!!! H ιδιότητα checked του CheckBox Οι ιδιότητες read-only και disabled CSS Μορφοποίηση: input[type="checkbox"]{ width: 30px; /*Desired width*/ height: 30px; /*Desired height*/ } Παράδειγμα: <form action="demo_form.php"> <input type="checkbox" name="vehicle" value="Bike"> I have a bike<br> <input type="checkbox" name="vehicle" value="Car" checked> I have a car<br> <input type="submit" value="Submit"> </form>
Παράδειγμα Λίστα επιλογών (ComboBox) (1) Ιδιότητες: Για να εισάγουμε Λίστα Επιλογών στην Φόρμα μας χρησιμοποιούμε την ετικέτα <select>. Η ετικέτα <option> τοποθετείται μέσα στις ετικέτες <select> και </select> και αντιστοιχεί σε μια επιλογή της λίστας. Όσες επιλογές επιθυμούμε να περιλαμβάνει η Λίστα Επιλογών τόσες ετικέτες <option> πρέπει να προσθέσουμε. Μεταξύ των ετικετών <option> και </option> γράφουμε το κείμενο που θέλουμε να εμφανίζεται στην λίστα. Η χρήση της ιδιότητας size της ετικέτας <select> ορίζει πόσες επιλογές θα είναι ορατές στη λίστα. Από προεπιλογή είναι μόνο 1 και με το κάθετο βελάκι αναπτύσουμε την υπόλοιπη λίστα.
Παράδειγμα Λίστα επιλογών (ComboBox) (2) Σε ορισμένες περιπτώσεις επιθυμούμε ο επισκέπτης να έχει την δυνατότητα να επιλέξει παραπάνω από μια επιλογή. Για παράδειγμα έχοντας πατημένο το κουμπί Ctrl (Control) του πληκτρολογίου μας μπορούμε να επιλέξουμε με τον δείκτη του ποντικιού μας περισσότερες από μια επιλογές. Για να έχουμε το παραπάνω πλαίσιο πολλαπλών επιλογών απλά προσθέτουμε την ιδιότητα multiple στην ετικέτα <select>. Η ιδιότητα multiple δεν παίρνει τιμές. <select name="countries" size="8" multiple>
Παράδειγμα Λίστα επιλογών (ComboBox) (3) Παράδειγμα: <form name="form1" method="post" action="example5.php"> <select name="countries" size="3" > <option value="GR" selected >Ελλάδα</option> <option value="FR">Γαλλία</option> <option value="ES">Ισπανία</option> <option value="GE">Γερμανία</option> <option value="IT">Ιταλία</option> <option value="NE">Ολλανδία</option> <option value="PO">Πορτογαλλία</option> <option value="UK">Αγγλία</option> </select> </form>
Εισαγωγή e-mail – HTML 5 Ιδιότητες: Για να εισάγουμε κουτί εισαγωγής email χρησιμοποιούμε την ετικέτα <input> ορίζοντας την τιμή email στην ιδιότητα type. Κατά την υποβολή της φόρμας, αν δεν έχει μπει το @ με πριεχόμενο πριν και μετά, μας δίνει ειδοποίηση να εισάγουμε email address Παράδειγμα: <form action="action_page.php"> E-mail: <input type="email" name="email"> <input type="submit"> </form> Ομοίως υπάρχει και το στοιχείο εισαγωγής τηλεφώνου: <form> Telephone: <input type="tel" name="usrtel">
Εισαγωγή Ημερομηνίας/ Ώρας – HTML 5 To στοιχείο εισαγωγής ημερομηνίας χρησιμεύει στο να εισάγουμε ημερομηνίες Ιδιότητες: min=“1980-12-31”:Ελάχιστη ημερομηνία εισαγωγής max=“2020-12-31”:Μέγιστη ημερομηνία εισαγωγής name=..:Όνομα στοιχείου Παράδειγμα: <form> Enter a date before 1980-01-01: <input type="date" name="bday" max="1979-12-31"><br> Enter a date after 2000-01-01: <input type="date" name="bday" min="2000-01-02"><br> </form> Παράδειγμα εισαγωγής ώρας: Select a time: <input type="time" name="usr_time">
Τα κουμπιά της φόρμας (1) Κουμπί υποβολής της φόρμας: Το πάτημα του Κουμπιού Υποβολής της Φόρμας στέλνει στον Server τα δεδομένα που πληκτρολόγησε ο χρήστης. Για να εισάγουμε στην Φόρμα μας Κουμπί Υποβολής χρησιμοποιούμε την ετικέτα <input> ορίζοντας την τιμή submit στην ιδιότητα type. Η ιδιότητα value ορίζει το κείμενο στο κουμπί υποβολής. Κουμπί καθαρισμού της φόρμας: Το πάτημα του Κουμπιού Καθαρισμού της Φόρμας καθαρίζει όλα τα πεδία της Φόρμας από τα δεδομένα που πληκτρολόγησε ή επέλεξε ο επισκέπτης. Για να εισάγουμε στην Φόρμα μας Κουμπί Υποβολής χρησιμοποιούμε την ετικέτα <input> ορίζοντας την τιμή reset στην ιδιότητα type. Κουμπιά Γενικής εισαγωγής: Μπορούμε να εισάγουμε κουμπιά γενικής χρήσης με σύνδεση όμως μέσω της JavaScript σε λειτουργίες ώς εξής: <input type="button" onclick="alert('Hello World!')" value="Click Me!">
Τα κουμπιά της φόρμας (2) Παράδειγμα: <form name="form1" method="post" action="example.php"> <input type="email"/><br> <input type="text"/><br> <input type="submit" name="apostoli" value="Αποστολή" /><br><br> <input type="reset" name="Reset" value="Καθαρισμός Φόρμας" /> </form>
Ιδιότητες της HTML5 - Spinbox To SpinBox είναι ένας επιλογέας εξ’ορισμού τιμών και έχει ιδιότητες: type=“number”, είναι συνήθως ακέραια αριθμητικά disabled:είναι απενεργοποιημένο readonly: είναι μόνο ανάγνωσης value=n: Έχει εξ’ορισμού τιμή min=k: Έχει ελάχιστη τιμή max=l:Έχει μέγιστη τιμή step=t:Έχει βήμα μετακίνησης size=30: Έχει μέγεθος σε πλήθος χαρακτήρων Παράδειγμα: Το παρακάτω παράδειγμα δείχνει ένα spinbox με τιμές στο [0,100], βήμα 10 και εξ’ορισμού 30 <form> Quantity: <input type="number" name="points" min="0" max="100" step="10" value="30"> </form>
Ιδιότητες της HTML5 - Slider To Slider είναι ένας κυλιώμενος επιλογέας οριζόντια ή κάθετα εξ’ορισμού τιμών και έχει ιδιότητες: type=“range”, είναι συνήθως ακέραια αριθμητικά horizontal ή vertical : Η τοποθέτηση του slider, εξ’ορισμού οριζόντια disabled:είναι απενεργοποιημένο readonly: είναι μόνο ανάγνωσης value=n: Έχει εξ’ορισμού τιμή min=k: Έχει ελάχιστη τιμή max=l:Έχει μέγιστη τιμή step=t:Έχει βήμα μετακίνησης size=30: Έχει μέγεθος σε πλήθος χαρακτήρων Παράδειγμα: Το παρακάτω παράδειγμα δείχνει ένα slider με τιμές στο [0,10], βήμα 1 και εξ’ορισμού 0 <form> <input type="range" name="points" min="0" max="10"> </form>
Ιδιότητες της HTML5 – Color picker O τύπος color χρησιμοποιείται για την επιλογή ενός χρώματος και επιστροφή της rgb τιμής του Ιδιότητες: name=..: Το όνομα της μεταβλητής value=…: Την εξ’ ορισμού τιμή type=color Παράδειγμα: <form action="action_page.php"> Select your favorite color: <input type="color" name="favcolor" value="#ff0000"> <input type="submit"> </form>
Ιδιότητες της HTML – Aποστολή αρχείου <form action="upload.php" method="post" enctype="multipart/form-data"> <!--Αλάζουμε τον enctype από application/x-www-form-urlencoded σε multipart/form-data και χρησιμοποιούμε ένα απλό input με τύπο: file --> Select file to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File" name="submit"> </form> Η κωδικοποίηση multipart/form-data χρησιμοποιεί base64 κωδικοποίηση για την αποστολή binary δεδομένων. Αποτελεί ένα MIME-type του εξυπηρετητή (Εσωκλείεται από multipart header) Οι κωδικοποιήσεις που υποστηρίζει η HTML: application/x-www-form-urlencoded - default multipart/form-data text/plain (Never user) application/json (To be set at HTML 6)
Ιδιότητες της HTML – Aποστολή αρχείου παράδειγμα <form action="echo.cgi" enctype="multipart/form-data" method="post"> <p> Type some text (if you like):<br> <input type="text" name="textline" size="30"> </p> Please specify a file, or a set of files:<br> <input type="file" name="datafile" size="40"> <div> <input type="submit" value="Send"> </div> </form>
Προγραμματισμός και CGI (1) Όταν κάποιος χρήστης βρίσκεται στο INTERNET και διατρέχει το WWW είναι ένας πελάτης του INTERNET. Kάθε φορά που κάνει click σε κάποιο link για να αναζητήσει ένα καινούργιο στοιχείο του Web, ουσιαστικά στέλνει ένα μήνυμα στο διακομιστή (server) που περιέχει (φιλοξενεί) αυτό το στοιχείο. Ο διακομιστήs δέχεται το μήνυμα, αναζητά το στοιχείο και το στέλνει πίσω στο φυλλομετρητή (browser) για να εμφανιστεί στην οθόνη του χρήστη.
Προγραμματισμός και CGI (2) Η σχέση πελάτη/εξυπηρέτη (client/server) που αποκαθίσταται μεταξύ του φυλλομετρητή (browser) και του διακομιστή διαδικτύου (Web server) δουλεύει πάρα πολύ καλά για αρχεία κειμένου και εικόνες που βρίσκονται στους καταλόγους του διακομιστή. Δυστυχώς, με αυτό τον τρόπο δεν μπορούμε να εκμεταλλευτούμε άλλες δυνατότητες επεξεργασίας των πληροφοριών όπως : επεξεργασία των βάσεων δεδομένων ή άλλων προγραμμάτων που απαιτούν κάτι περισσότερο από μια απλή μεταφορά αρχείων. Δ.Π.Θ.
Προγραμματισμός και CGI (3) Τη λύση στο πρόβλημα έδωσε ο σχεδιασμός ενός απλού τρόπου ενδοεπικοινωνίας με την ονομασία Common Gateway Interface, ή CGI. Η πύλη αυτή (Gateway) προβλέπει ένα κοινό περιβάλλον εργασίας και ένα σύνολο πρωτοκόλλων για τις εξωτερικές εφαρμογές που θέλουμε να χρησιμοποιήσουμε όταν επικοινωνούμε με κάποιον διακομιστή διαδικτύου (Web server)
Πως δουλεύει το CGI Bασικά χαρακτηριστικά: Η επεξεργασία – Μέθοδοι HTTP αποστολής δεδομένων Οι επικεφαλίδες (Header) και οι τύποι MIME Οι μεταβλητές περιβάλλοντος (Environment variables)
Επεξεργασία – Μέθοδοι Αποστολής Eνα πρόγραμμα (ή scripts) CGI λειτουργεί σαν σύνδεσμος μεταξύ της εφαρμογής και του διακομιστή Υπάρχουν δύο βασικές μέθοδοι για να αποσταλούν πληροφορίες σε κάποιο script GET POST Με τη μέθοδο GET, η πληροφορία που εισάγει ο χρήστης αποστέλλεται σε μια συγκεκριμένη μεταβλητή περιβάλλοντος με όνομα, QUERY_STRING Με τη POST, η εισαγόμενη πληροφορία από την τυπική μονάδα εισόδου του χρήστη (τη STDIN), μεταβιβάζεται στο διακομιστή διαδικτύου και στην τυπική είσοδό του (τη STDOUT) – Διαδικτυακή Σωλήνωση
Μέθοδος GET Στην περίπτωση που επιλέξουμε την μέθοδο GET τότε κάθε όνομα ενός στοιχείου συνοδεύεται με την τιμή που πληκτρολόγησε ή επέλεξε ο χρήστης στης σελίδας μας και όλο αυτό σαν σύνολο προστίθεται στο τέλος του URL που περιέχει η ιδιότητα action (σελίδα αποτελέσματος). Για παράδειγμα αν γράψουμε τον παρακάτω κώδικα: <form method="get" action="http://www.test.php"> <input type="text" name="onoma"/> <input type="submit" value="αποστολή"/> και ο χρήστης βάλει το όνομα Πέτρος στο πεδίο κειμένου με όνομα "onoma" και μετά πατήσει το κουμπί αποστολής τότε το URL που θα ανοίξει ο περιηγητής μας θα είναι: http://www.test.php?onoma=Πέτρος
Μέθοδος GET - Ιδιότητες GET requests μπορεί να αποθηκευτεί προσωρινά GET requests παραμένει στο ιστορικό του προγράμματος περιήγησης GET requests μπορεί να αποθηκευτεί στους σελιδοδείκτες (REST friendly) GET requests δεν πρέπει ποτέ να χρησιμοποιείται όταν αποστέλλονται ευαίσθητα δεδομένα GET requests έχει περιορισμό στο μήκος δεδομένων ( Μέχρι 2000 χαρακτήρες - Error 414 Request Too long) GET requests θα πρέπει να χρησιμοποιείται μόνο για την ανάκτηση δεδομένων
Μέθοδος POST Η μέθοδο post κάνει το ίδιο πράγμα με την μέθοδο get , με την διαφορά ότι στέλνει τα δεδομένα της φόρμας σε ξεχωριστή ροή δεδομένων (data stream) και όχι μαζί με το URL όπως με την μέθοδο GET. Ο Server δέχεται τα δεδομένα αυτά και τα αποθηκεύει σε ένα προσωρινό αρχείο και έπειτα τα περνάει μέσα στο script.php για να τα επεξεργαστεί. Iδιότητες: POST requests ποτέ δεν κάνει προσωρινή αποθήκευση POST requests δεν παραμένει στο ιστορικό του προγράμματος περιήγησης POST requests δεν μπορεί να αποθηκευτεί στους σελιδοδείκτες POST requests δεν έχει περιορισμό σχετικά με το μήκος των δεδομένων. Χρησιμοποιεί την επικεφαλίδα content-length Αν έχουμε στην Φόρμα μας πολλά στοιχεία τότε η καταλληλότερη μέθοδος για να χρησιμοποιήσουμε είναι η post , διότι με την μέθοδο get όλα τα δεδομένα αποθηκεύονται στην μεταβλητή περιβάλλοντος η οποία μπορεί σε μερικούς Servers να έχει όριο όσον αφορά στο μήκος δεδομένων.
HTTP Επικεφαλίδες Κάθε αίτηση που αποστέλλεται στο διακομιστή διαδικτύου πρέπει να περιέχει μια επικεφαλίδα που λέγεται output header Η χρήση των output headers στα CGI scripts διέπεται από ένα σύστημα πρωτοκόλλων που λέγεται MIME (Multipurpose Internet Mail Extensions) Κάθε αίτηση που αποστέλλεται στο διακομιστή διαδικτύου μέσω ενός CGI script πρέπει να περιέχει στην αρχή και τον τύπο του περιεχομένου (content-type) για να μπορεί να αρχίσει ο διακομιστής διαδικτύου την επεξεργασία του. π.χ. Content-type: text/html\n\n Tα πιο χαρακτηριστικά παραδείγματα MIME content-types με τις επεκτάσεις τους είναι : text/html html htm text/plain txt video/x-msvideo avi
Σύνταξη των CGI Scripts Ο υποκατάλογος σε συστήματα UNIX ή LINUX όπου συνήθως αποθηκεύονται τα CGI script είναι ο cgibin ή cgi-bin. Στον Internet Services Server της Micro$oft συνήθως είναι ο Scripts. Μπορούμε να γράψουμε ένα CGI script σε οποιαδήποτε γλώσσα προγραμματισμού θέλουμε. Οι Γλώσσες C, C++, PERL, Visual Basic και Pascal υποστηρίζονται από όλους σχεδόν τους διακομιστές διαδικτύου
Περισσότερα (1) Eνα απλό πρόγραμμα, π.χ. σε C, με κάποιες μικρές μετατροπές (προσθήκες) μπορεί να γίνει ένα cgi πρόγραμμα έτσι ώστε να μπορούμε να το εκτελέσουμε μέσω μιας σελίδας στο Web και να δούμε την έξοδό του πάλι με μορφή ιστοσελίδας Έστω το πρόγραμμα "Hello World" γραμμένο σε C: #include <stdio.h> main( ) { printf ("Hello World!\n"); } Αν αυτό το πρόγραμμα το κάνουμε compile και το τρέξουμε από τη γραμμή εντολών, θα πάρουμε στην οθόνη το μήνυμα: Hello World!
Περισσότερα (2) Αν προσπαθήσουμε να το τρέξουμε μέσω του ενός φυλλομετρητή, δίνοντας στη γραμμή εντολών του τη διεύθυνσή του προγράμματος, τότε θα εμφανιστεί στην οθόνη μας ένα μήνυμα λάθους Αυτό συμβαίνει γιατί ο browser δεν ξέρει πώς να χειριστεί αυτό το πρόγραμμα Η λύση στο πρόβλημα αυτό είναι μια 'δήλωση' που πρέπει να προσθέσουμε στο κώδικα του προγράμματός μας και η οποία δηλώνει οτι θέλουμε να εμφανιστεί η έξοδός του στο φυλλομετρητή. Αυτή είναι η "content-type" Τώρα το πρόγραμμα θα έχει τη μορφή: #include <stdio.h> main() { printf("Content-type:text/html\n\n"); printf("Hello World!\n"); } Αυτό είναι ένα cgi script !!!
Τα αναγκαία βήματα Αποθηκεύουμε το πρόγραμμα στον ορισμένο από το διαχειριστή του συστήματος κατάλογο (στην kalipso.math.uoi.gr, είναι ο κατάλογος /public_html/cgi-bin ) Το εκτελέσιμο πρέπει να έχει την κατάληξη .cgi To κάνουμε compile (Αν είναι το hello.c τότε γράφουμε: cc hello.c -o hello.cgi) Αν δεν υπάρχει λάθος, τότε δημιουργείται ένα εκτελέσιμο αρχείο με όνομα hello.cgi Αλλάζουμε τα permissions ώστε να μπορεί να εκτελείται και να διαβάζεται από οποιονδήποτε χρήστη: chmod 755 hello.cgi Αν ανοίξουμε ένα φυλλομετρητή και γράψουμε: http://kalipso.math.uoi.gr/~login_name/cgi-bin/hello.cgi Στην οθόνη θα τυπωθεί το μήνυμα Hello World!
Εισαγωγή δεδομένων με την μέθοδο GET #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> main() { char in[BUFSIZ]; printf("Content-type:text/html\n\n"); strcpy(in,getenv("QUERY_STRING")); printf("Στείλατε τα εξής δεδομένα: %s\n",in); }
Εισαγωγή δεδομένων με την μέθοδο POST #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> main() { int cgi_length; char *cgi_data; printf("Content-type:text/html\n\n"); cgi_length=atoi(getenv("CONTENT_LENGTH")); cgi_data=malloc(cgi_length+1); fread(cgi_data,1,cgi_length,stdin); printf(" Στείλατε τα εξής δεδομένα: %s\n",cgi_data); }
Ειδικές περιπτώσεις μετασχηματισμού χαρακτήρων Όλα τα δεδομένα που εισάγονται από τα διάφορα input tags περιέχονται στο ίδιο string Πολλοί από τους χαρακτήρες μετατρέπονται σε κάποια περίεργα σύμβολα: π.χ. κενό ==> + @ ==> %40 + ==> %2Β , ==> %2C / ==> %2F Όλοι οι ελληνικοί χαρακτήρες κωδικοποιούνται. Π.χ. α = %E1 η = %E7 ν = %ED τ = %F4 β = %E2 θ = %E8 ξ = %EE υ = %F5
Αν η φόρμα έχει τη μορφή: Παράδειγμα (1) Αν η φόρμα έχει τη μορφή: <FORM ACTION="http://kalipso.math.uoi.gr/~login/cgi-bin/test.cgi" METHOD=POST> Όνομα <INPUT TYPE=TEXT NAME="name1" SIZE="30"> <BR>Your mail:<BR> <INPUT TYPE=TEXT NAME="mail" SIZE="30"> <BR> <INPUT TYPE=SUBMIT VALUE="Submit"> <INPUT TYPE=RESET VALUE="reset"> </FORM> Και δώσουμε Όνομα = Νικος και E-mail = ma9988@uoi.gr τότε το κείμενο που θα μεταφερθεί θα έχει τη μορφή: name1= Νικος &mail=st5678%40uoi.gr
Παραδείγματα διαχωρισμού και αποθήκευσης (1) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> main() { int cgi_length, I, j; char *cgi_data, *new_args[BUFSIZ], *cp ; printf("Content-type:text/html\n\n"); cgi_length=atoi(getenv("CONTENT_LENGTH")); cgi_data=malloc(cgi_length+1); fread(cgi_data,1,cgi_length,stdin);
Παραδείγματα διαχωρισμού και αποθήκευσης (2) if (cgi_data != NULL) { cp=cgi_data; new_args[0]=strtok(cp,"&"); i=1; do { new_args[i] = strtok(NULL, "&"); i++; } while (new_args[i-1]!=NULL); } for(j=0;j<i-1;j++) printf("%s",new_args[j]); /* Εμφάνιση των δεδομένων*/ }
2ο Παράδειγμα (1) #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> main() { int cgi_length, i, j, k ; FILE *fp; char *cgi_data,*new_args[BUFSIZ],*cp; cgi_length=atoi(getenv("CONTENT_LENGTH")); cgi_data=malloc(cgi_length+1); fread(cgi_data,1,cgi_length,stdin); printf("Content-type:text/html\n\n"); /* Άνοιγμα αρχείου για την αποθήκευση των δεδομένων*/ if((fp=fopen("/home/karakos/public_html/files/data_base.txt", "a"))==NULL) { printf("Αδύνατη η εγγραφή στο αρχείο 'data_base.txt' ! "); exit(0); } συνεχίζεται…
2ο Παράδειγμα (2) /* Διαχωρισμός του string (cgi_data) στα επιμέρους δεδομένα του κάθε "INPUT tag" */ if (cgi_data != NULL) { cp=cgi_data; new_args[0]=strtok(cp,"&"); i=1; do { new_args[i] = strtok(NULL, "&"); i++; } while (new_args[i-1]!=NULL); } for(j=0;j<i-1;j++) printf("%s",new_args[j]); for(k=0;k<=i-1;k++) fprintf(fp,"%s\n",new_args[k]); fclose(fp); }
3ο Παράδειγμα (1) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> main() { int cgi_length, j; char *cgi_data, x; printf("Content-type:text/html\n\n"); cgi_length=atoi(getenv("CONTENT_LENGTH")); cgi_data=malloc(cgi_length+1); fread(cgi_data,1,cgi_length,stdin); { FILE *fp; if ((fp=fopen("/home/httpd/cgi-bin/data_base.txt","w"))==NULL) { printf(" Αδύνατη η εγγραφή στο αρχείο 'data_base.txt'!"); exit(0); } fprintf(fp,"%s\n\n",cgi_data); fclose(fp); }
3ο Παράδειγμα (2) { FILE *fp2; if ((fp2=fopen("/home/httpd/cgi-bin/data_base.txt","r"))==NULL) { printf(" Αδύνατη η ανάγνωση από το αρχείο 'data_base.txt'!"); exit(0); } for(j=0;j<strlen(cgi_data);j++) { fscanf(fp2,"%c",&x); if(x!='&') { printf(“%c”,x); } else { printf(“<BR><BR>”); } } fclose(fp2); } }
Υπερκαθολικοί πίνακες της PHP Οι υπερκαθολικοί πίνακες χρησιμοποιούνται από την PHP για αποστολή λήψη δεδομένων μεταξύ των εφαρμογών-PHP script
Φόρμες HTML και PHP Τα στοιχεία που συμπληρώνει ένας χρήστης σε μια φόρμα html αποστέλλονται στον διακομιστή όπου ένα αρχεία php τα διαβάζει και στη συνέχεια τα διαχειρίζεται αναλόγως. Τα στοιχεία για να αποσταλούν, θα πρέπει να κάνει ο χρήστης κλικ στο κουμπί submit το οποίο πρέπει να υπάρχει σε μία φόρμα. Επίσης, στην ετικέτα form θα πρέπει να έχουν εισαχθεί οι ιδιότητες action και method. Η τιμή της action πληροφορεί τον διακομιστή ποιο αρχείο php θα αναλάβει τα αποσταλμένα δεδομένα (πχ: action="hello.php") και η τιμή της method πληροφορεί τον διακομιστή για τον τρόπο ή μέθοδο με την οποία αποστέλλονται τα δεδομένα (πχ: method="post") ή (πχ: method="get"). Παράδειγμα HTML αρχείο: <form action="hello.php" method="post"> Όνομα: <input type="text" name="myname" /> Ηλικία: <input type="text" name="myage" /> <input type="submit" value ="Αποστολή" /> </form> Παράδειγμα PHP αρχείο: Καλωσόρισες <?php echo $_POST["myname"]; ?>. <br /> Είσαι <?php echo $_POST["myage"]; ?> ετών.
$_GET και $_POST $_GET και $_POST: Οι προκαθορισμένες μεταβλητές $_GET και $_POST χρησιμοποιούνται από την php για να διαβάσουν τα απεσταλμένα δεδομένα της φόρμας. Η μεταβλητή $_GET χρησιμοποιείται όταν τα δεδομένα αποστέλλονται με τη μέθοδο get και η $_POST όταν τα δεδομένα αποστέλλονται με τη μέθοδο post. Η μεταβλητή $_REQUEST: Μπορείτε να χρησιμοποιήσετε και τη μεταβλητή $_REQUEST για να διαβάσετε τα δεδομένα ανεξάρτητα με τη μέθοδο που έχουν αποσταλεί. Παράδειγμα: Καλωσόρισες <?php echo $_REQUEST["myname"]; ?>. <br /> Είσαι <?php echo $_REQUEST["myage"]; ?> ετών.
Οι μεταβλητές του πίνακα $_SERVER
Οι μεταβλητές του πίνακα $_SERVER
Οι μεταβλητές του πίνακα $_SERVER
Χρήση της $_SERVER
Χρήση της $_GET
Χρήση της $_POST
$_FILE και αποστολή αρχείων (1) H καθορισμένη μεταβλητή λήψης αρχείου στον εξυπηρετητή από φόρμα αποστολής αρχείου. <input type="file" name="fileToUpload" id="fileToUpload"> $_FILES["fileToUpload"]["name"] : Περιλαμβάνει το όνομα του αρχείου όπως ήλθε από την φόρμα $_FILES["fileToUpload"]["tmp_name"]: Περιλαμβάνει το πρωσορινό όνομα του αρχείου όπως αποθηκεύτηκε στον εξυπηρετητή move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file) $_FILES["fileToUpload"]["size"]: Περιλαμβάνει το μέγεθος του αρχείου σε bytes // Check file size if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; }
$_FILE και αποστολή αρχείων (2) $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); : Περιλαμβάνει τον τύπο επέκτασης του αρχείου για έλεγχο με βάση την επέκταση // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; }
Aποστολή αρχείων παράδειγμα (1) <?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; } else { echo "File is not an image."; $uploadOk = 0; } // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists.";
Aποστολή αρχείων παράδειγμα // Check file size if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; echo "Sorry, there was an error uploading your file."; }}?>
Σχετικά με τα Cookies Τί είναι τα Cookies: Με την PHP μπορείτε να αποθηκεύσετε και να ανακτήσετε cookies στα μηχανήματα των χρηστών-επισκεπτών στον ιστότοπό σας. Oι Cookie μεταβλητές μεταφέρονται από τις HTTP επικεφαλίδες σε αντίθεση με τις GET POST τιμές. Γι’ αυτό πρέπει να θέτονται πρίν από οποιοδήποτε HTML κώδικά ή στις επικεφαλίδες του HTML κώδικα (HEAD) Tα cookie ανατίθενται στην PHP με τη χρήση της συνάρτησης setcookie και έχουν χρόνο ζωής είτε ορισμένο στη setcookie είτε μέχρι να κλείσουν όλα τα παράθυρα του φυλλομετρητή.
Συνάρτηση setcookie (1) Για την δημιουργία ενός cookie στο μηχάνημα ενός χρήστη χρησιμοποιείτε την εντολή: setcookie() η οποία πρέπει να βρίσκεται πριν από την ετικέτα <html>. Η setcookie() παίρνει μέχρι 6 παραμέτρους: setcookie(name, value, expire, path, domain, secure); Επεξηγήσεις name: Αποθηκεύεται το όνομα του cookie. value: Αποθηκεύoνται τα δεδομένα του cookie. expire: Αποθηκεύεται η ημερομηνία λήξης του cookie. path: Αποθηκεύεται η διαδρομή για το οποίο το cookie είναι έγκυρο. Συνήθως αφήνεται κενό και η προκαθορισμένη τιμή είναι το path του εγγράφου που δημιούργησε το cookie. Για παράδειγμα (/login) ή αν είναι στο root (/). domain: Αποθηκεύεται το domain name για το οποίο το cookie είναι έγκυρο. Συνήθως αφήνεται κενό και η προκαθορισμένη τιμή είναι το domain name του εγγράφου που δημιούργησε το cookie. Για παράδειγμα (.google.com). secure: Αποθηκεύεται η τιμή TRUE ή FALSE για να υποδείξει ότι το cookie χρησιμοποιείται σε ασφαλείς συνδέσεις όπως SSL. Το προκαθορισμένο είναι FALSE.
Συνάρτηση setcookie (2) Παράδειγμα: <?php setcookie("visitor", "obama", time()+3600); ?> Στο παραπάνω παράδειγμα έχουμε: name="visitor", value="obama", expire=time()+3600. Δηλαδή το cookie θα ζήσει για 3600 δευτερόλεπτα από τη στιγμή που θα δημιουργηθεί. Πως να ανακτήσετε ένα cookie Για την ανάκτηση ενός cookie χρησιμοποιείτε την εντολή ή καλύτερα την μεταβλητή: $_COOKIE στην οποία αποθηκεύεται η τιμή του cookie. echo $_COOKIE["visitor"];
Συνάρτηση setcookie (3) Για να διαβάσετε όλα τα cookies από το μηχάνημα ενός χρήστη εκτελείτε το παρακάτω: <?php print_r($_COOKIE); ?> Είναι προτιμότερο να γίνεται ένας έλεγχος για το αν υπάρχει τo cookie πριν διαβαστεί. if (isset($_COOKIE["visitor"])) echo "Welcome " . $_COOKIE["visitor"]; else echo "Welcome guest!"; Διαγραφή ενός cookie Για να διαγράψετε ένα cookie πριν την ημερομηνία λήξης χρησιμοποιείτε πάλι την εντολή setcookie() αλλά με μία περασμένη ημερομηνία. Παράδειγμα: setcookie("visitor", "", time()-3600);
PHP και SESSIONS Τα sessions είναι ένας μηχανισμός με τον οποίο μπορείτε να ελέγξετε την ταυτότητα του επισκέπτη όταν αυτός περιηγείται στις σελίδες ενός ιστότοπου. Με την PHP μπορείτε να δημιουργείτε sessions για τους επισκέπτες και έτσι να ελέγχετε την ταυτότητά τους και κατά συνέπεια την πρόσβαση αυτών σε ευαίσθητες σελίδες. Τα session χρησιμοποιούν την τεχνολογία των cookies. Δηλαδή κάθε επισκέπτης δέχεται ένα cookie στο μηχάνημά του το οποίο περιέχει έναν αριθμό (id - SSID) το οποίο είναι και το αναγνωριστικό του. Ελέγχοντας εσείς το αναγνωριστικό του επισκέπτη μπορείτε να δείτε αν ο επισκέπτης είναι σε session ή όχι.
Πως να δημιουργήσετε ένα session (1) Για την δημιουργία ενός session στο μηχάνημα ενός χρήστη χρησιμοποιείτε την εντολή: session_start() η οποία πρέπει να βρίσκεται πριν από την ετικέτα <html>. Η session_start() δημιουργεί ένα cookie στο μηχάνημα του επισκέπτη με όνομα: PHPSESSID και μια τυχαία αλφαριθμητικά τιμή της μορφής: mhjr1dgss5itb12vqqi6j91gr3 Για να διαβάσετε την τιμή του αναγνωριστικού (δηλαδή του cookie με όνομα: PHPSESSID), χρησιμοποιείτε την εντολή: session_id() Εάν επομένως ξεκινάτε ως επισκέπτης από τη σελίδα first.php, εκεί δημιουργείται το αναγνωριστικό και με την session_id() μπορείτε να διαβάσετε την τιμή του και να την αποθηκεύσετε σε μια μεταβλητή. Εάν τώρα μεταφερθείτε σε μια άλλη σελίδα έστω second.php η μεταβλητή και η τιμή που περιέχει χάνεται και έτσι η second.php δεν γνωρίζει αν ο επισκέπτης είναι σε session ή όχι.
Πως να δημιουργήσετε ένα session (2) Για τον παρπάνω λόγο η PHP χρησιμοποιεί την global μεταβλητή $_SESSION στην οποία αποθηκεύεται η τιμή του αναγνωριστικού αλλά παράλληλα μπορείτε να αποθηκεύσετε και άλλα δεδομένα για τον επισκέπτη. Το αποθηκευμένο αναγνωριστκό διατηρείτε στην μεταβλητή $_SESSION και δεν χάνεται στη μεταφορά από μια σελίδα σε άλλη. Παράδειγμα Έστω η σελίδα first.php η οποία θα πρέπει να αρχίζει με τις δύο παρακάτω γραμμές. <?php session_start(); $_SESSION['visitor']=session_id(); ?>
Πως να δημιουργήσετε ένα session (3) Για να μπορείτε να ελέγχετε τον επισκέπτη στη σελίδα second.php θα πρέπει να υπάρχει ο παρακάτω κώδικας. <?php session_start(); if(isset($_SESSION['visitor']) && $_SESSION['visitor']===session_id()) { echo "welcome"; } else echo "sorry not in session"; ?>
Καταστροφή ενός session Για να καταστρέψετε ένα session χρησιμοποιείτε την εντολή unset();. Για παράδειγμα unset($_SESSION['visitor']);. Εναλλάκτικά μπορείτε να χρησιμοποιήσετε την εντολή session_destroy(); Παρατηρήσεις Όλα τα αρχεία που εμπλέκονται με sessions θα πρέπει να αρχίζουν με την session_start() Θα πρέπει το μηχάνημα του χρήστη να δέχεται cookies. Με την session_destroy(); θα διαγράψετε όλα τα αποθηκευμένα δεδομένα.
Αποστολή e-mail (1) Για την αποστολή e-mail χρησιμοποιείτε τη συνάρτηση mail(). Η συνάρτηση mail() δέχεται πέντε παραμέτρους από τις οποίες οι τρεις πρώτες ειναι υποχρεωτικές ενώ οι υπόλοιπες προαιρετικές. Ξεκινώντας από την απλή της μορφή η εντολή mail() γράφεται ως εξής: <?php mail($to, $subject, $message); ?> Όπου $to είναι η διεύθυνση αποστολής, $subject το θέμα του μηνύματος και $message το σώμα του μηνύματος. Έτσι σε μία πλήρη εκδοχή έχουμε: $to = "info_tutor.edu.gr"; $subject = "Πληροφορίες για το site"; $message = "Γειά σας. Θα ήθελα να μου στείλετε πληροφορίες σχετικά με το ...";
Αποστολή e-mail (2) Είναι καλή πρακτική να ελέγχετε αν το μήνυμα αποστάλθηκε ή όχι. Αυτό γίνεται γραφοντας: <?php $to = "info_tutor.edu.gr"; $subject = "Πληροφορίες για το site"; $message = "Γειά σας. Θα ήθελα να μου στείλετε πληροφορίες σχετικά με το ..."; $sent = mail($to, $subject, $message); if($sent == true ) { echo "Το μήνυμα εστάλη."; } else { echo "Το μήνυμα δεν εστάλη διότι προέκυψε λάθος."; ?>
Αποστολή e-mail (3) Εκτός από τις πρώτες τρεις παραμέτρους που είδαμε παραπάνω, μπορείτε να προσθέσετε και την τέταρτη παράμετρο έστω $header και έτσι έχουμε: <?php $to = “ma1234@kalipso.math.uoi.gr"; $subject = "Πληροφορίες για το site"; $message = "Γειά σας. Θα ήθελα να μου στείλετε πληροφορίες σχετικά με το ..."; $header = "From:ma123@kalipso.math.uoi.gr \r\n"; $header .= "Cc:ma234@kalipso.math.uoi.gr\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-type: text/html\r\n"; $sent = mail($to, $subject, $message, $header); if($sent == true ) { echo "Το μήνυμα εστάλη."; } else { echo "Το μήνυμα δεν εστάλη διότι προέκυψε λάθος."; ?> Όπως παρατηρείτε στην $header μπορείτε να προσθέσετε μια σειρά από πληροφορίες όπως: Αποστολέα, cc, και ότι η μορφή του μηνύματος είναι σε html και όχι απλό κείμενο.