Forms

Μία απλή HTML φόρμα ορίζεται όπως το παρακάτω παράδειγμα με το tag <form>.

Όνομα αρχείου: form_get.php

<html>
<body>

<form action="welcome_get.php" method="GET">
    Name: <input type="text" name="name"><br>
    E-mail: <input type="text" name="email"><br>
    <input type="submit">
</form>

</body>
</html> 

Μέσα στην <form> χρησιμοποιώντας το tag <input> ορίζουμε την εισαγωγή δεδομένων στην φόρμα μας. Στην <input> δηλώνουμε ορισμένες παραμέτρους. Κάθε <input> έχει διαφορετικό τύπο ο οποίος ορίζεται στην παράμετρο type. Στην type επιλέγουμε τον τύπο της εισαγωγής δεδομένων π.χ. αν θα είναι ένα απλό πεδίο, checkbox, radio button, submit button κλπ.

Στο συγκεκριμένο παράδειγμα έχουμε τρεις input. Η πρώτη input είναι τύπου text, δηλαδή είναι ένα πεδίο στο οποίο μπορούμε να πληκτρολογήσουμε τιμές. Επίσης, η πρώτη input έχει την παράμετρο name. Στη name δίνουμε ένα όνομα στο πεδίο μας για να μπορούμε να αναφερόμαστε μελλοντικά σε αυτό. Στην δεύτερη input κάνουμε κάτι αντίστοιχο με την πρώτη.

Στην 3η input έχουμε δηλώσει οτι η type θα είναι ένα κουμπί submit το οποίο όταν το κλικάρουμε θα ενεργοποιηθεί η φόρμα μας. Όταν ενεργοποιηθεί η φόρμα μας θα πρέπει να έχουμε ορίσει πού θα σταλούν τα δεδομένα μας και με ποιόν τρόπο. Για αυτό στο tag <form> δηλώνουμε δύο παραμέτρους, την action και την method. Στην action γράφουμε την σελίδα που θα στείλουμε τα δεδομένα της φόρμα μας, ενώ στην method με ποιόν τρόπο θα τα στείλουμε. Στην HTML δύο methods έχουμε, την GET και την POST. Θα δούμε παρακάτω τις διαφορές τους.

Στο παρακάτω παράδειγμα θα δούμε πώς λαμβάνει η σελίδα welcome.php τα δεδομένα που στέλνονται από την παραπάνω φόρμα με την μέθοδο GET.

Όνομα αρχείου: welcome_get.php

<?php

$name = $_GET['name'];
$email = $_GET['email'];

echo 'Your name is : ' . $name . '<br>';
echo 'Your email is: ' . $email;

?>

Θα είχαμε το ίδιο αποτέλεσμα με το παραπάνω παράδειγμα και με την μέθοδο POST.

Όνομα αρχείου: form_post.php

<html>
<body>

<form action="welcome_post.php" method="POST">
    Name: <input type="text" name="name"><br>
    E-mail: <input type="text" name="email"><br>
    <input type="submit">
</form>

</body>
</html> 

Όνομα αρχείου: welcome_post.php

<?php

$name = $_POST['name'];
$email = $_POST['email'];

echo 'Your name is : ' . $name . '<br>';
echo 'Your email is: ' . $email;

?>

GET vs POST

Οι GET και POST δημιουργούν έναν πίνανα (array) (π.χ. array(key1=>value1, key2=>value2, key3=>value3, ...)). Αυτός ο πίνακας διατηρεί τα ζεύγη key/value όπου key είναι τα ονόματα των πεδίων της φόρμας μας και τα value είναι οι τιμές που έχει δηλώσει ο χρήστης στα πεδία της φόρμας μας.

Στην PHP οι GET & POST χρησιμοποιούνται ως $_GET & $_POST. Πρόκειται για superglobal πίνακες οι οποίοι είναι προσβάσημοι από οποιοδήποτε σημείο του κώδικά μας είτε είναι function είτε class.

$_GET είναι ένας πίνακας (array) στον οποίο στέλνονται οι τιμές από την φόρμα μέσω παραμέτρων την URL. Για αυτόν τον λόγο όταν στέλνετε δεδομένα από την φόρμα στην welcome.php, θα δείτε στην url να έχουν τεθεί οι παράμετροι των δεδομένων που θα σταλλούν στην welcome.php μέσω της URL του web browser.

$_POST είναι ένας πίνακας (array) στον οποίο στέλνονται οι τιμές από την φόρμα μέσω του HTTP POST method. Αυτό σημαίνει οτι με αυτή την μέθοδο δεν θα εμφανιστούν οι παράμετροι των τιμών στην URL, αλλά θα σταλλούν τα δεδομένα στην welcome.php μέσω του HTTP απευθείας στον server.

Πότε χρησιμοποιούμε την GET

Όταν στέλνουμε δεδομένα από την φόρμα μας με την μέθοδο GET, τότε τα δεδομένα είναι ορατά στον καθένα (όλα τα keys/values εμφανίζονται στην URL του web browser). Η GET έχει όριο στον όγκο των δεδομένων που μπορεί να στείλει. Το όριο είναι στους 2000 χαρακτήρες. Εξαιτίας όμως του γεγονότος της ορατότητας των δεδομένων στην URL, υπάρχει η δυνατότητα να αποθηκευθούν οι ιστοσελίδες στα bookmarks του web browser.

Χρησιμοποιοήμε την GET για την αποστολή δεδομένων που δεν είναι ευαίσθητα. Για παράδειγμα σε καμία περίπτωση δεν θα στέλναμε τον κωδικό του χρήστη με την GET ή οποιοδήποτε άλλο ευαίσθητο δεδομένο.

Πότε χρησιμοποιούμε την POST

Τα δεδομένα που στέλνονται με την POST δεν είναι ορατά (όλα τα keys/values ενσωματώνονται στο σώμα του αιτήματος στο HTTP) και δεν έχει κάποιο όριο στον όγκο των δεδομένων που στέλνονται στον server.

Επίσης, η POST επειδή στέλνει τα δεδομένα με το HTTP, δεν εμφανίζονται πουθενά συνεπώς δεν είναι δυνατή η αποθήκευση της εκάστοτε ιστοσελίδας στα bookmarks του web browser.

REQUEST

H $_REQUEST είναι μια super global μεταβλητή της php η οποία λαμβάνει τα δεδομένα που στέλνονται από την φόρμα HTML είτε με POST είτε με GET. Επιπλέον περιέχει και τα δεδομένα που έχουν οριστεί στην $_COOKIE.

Όνομα αρχείου: request.php

<?php
if( $_REQUEST["name"] || $_REQUEST["age"] ) 
{
    echo "Welcome ". $_REQUEST['name']. "<br />";
    echo "You are ". $_REQUEST['age']. " years old.";
    exit();
}
?>

<html>
<body>

<form action = "<?php $_PHP_SELF ?>" method = "POST">
    Name: <input type = "text" name = "name" />
    Age: <input type = "text" name = "age" />
    <input type = "submit" />
</form>

</body>
</html>

Η $_PHP_SELF είναι μια ειδική μεταβλητή της php που περιέχει το όνομα του αρχείου. Ο συγκεκριμένος κώδικας με την βοήθεια της $_PHP_SELF σε οποιοδήπουτε αρχείο php εκτελεσθεί, αυτόματα θα περαστεί το όνομα του αρχείου στην μεταβλητή $_PHP_SELF. Από περιέργεια μη διστάσετε να πειραματιστείτε με μια echo να δείτε την τιμή που επιστρέφει η $_PHP_SELF.

Συνεπώς, ο παραπάνω κώδικας θα εμφανίσει μια φόρμα με τα πεδία Name και Age. Όταν ο χρήστης συμπληρώσει τα συγκεκριμένα πεδία και κάνει submit, τότε τα δεδομένα θα σταλλούν μέσω της action στο ίδιο αρχείο php δηλ. στο request.php (επειδή θα λάβει το όνομα του αρχείου αυτόματα η php από την $_PHP_SELF).