Μεταβλητές έξω από την PHP
Φόρμες της HTML (GET και POST)
Όταν μια φόρμα εισάγεται σε ένα PHP script, η πληροφορία από τη φόρμα γίνεται αυτόματα διαθέσιμη στο script. Υπάρχουν πολλοί τρόποι για να προσπελάσετε την πληροφορία, για παράδειγμα:
Example#1 Μια απλή φόρμα σε HTML
<form action="foo.php" method="POST"> Name: <input type="text" name="username"><br> Email: <input type="text" name="email"><br> <input type="submit" name="submit" value="Submit me!"> </form>
Ανάλογα με το ιδιαίτερο setup και τις προσωπικές προτιμήσεις, υπάρχουν πολλοί τρόποι για να προσπελάσετε τα δεδομένα από τις HTML φόρμες σας. Μερικά παραδείγματα είναι:
Example#2 Προσπελαύνοντας δεδομένα από μια απλή POST HTML φόρμα
<?php // Available since PHP 4.1.0 print $_POST['username']; print $_REQUEST['username']; import_request_variables('p', 'p_'); print $p_username; // Available since PHP 3. As of PHP 5.0.0, these long predefined // variables can be disabled with the register_long_arrays directive. print $HTTP_POST_VARS['username']; // Available if the PHP directive register_globals = on. As of // PHP 4.2.0 the default value of register_globals = off. // Using/relying on this method is not preferred. print $username; ?>
Η χρήση μιας GET φόρμας είναι παρόμοια εκτός από το ότι πρέπει να χρησιμοποιήσετε την κατάλληλη προκαθορισμένη μεταβλητή GET. Η GET επίσης χρησιμοποιείται στο QUERY_STRING (η πληροφορία μετά το '?' σε ένα URL). Συνεπώς, για παράδειγμα η https://www.example.com/test.php?id=3 περιέχει GET δεδομένα τα οποία είναι προσπελάσιμα με την $_GET['id']. Δείτε επίσης την $_REQUEST και την import_request_variables().
Note: Οι superglobal arrays, όπως ο $_POST και ο $_GET, έγιναν διαθέσιμοι στην PHP 4.1.0
Όπως δείξαμε, πριν την PHP 4.2.0 η προκαθορισμένη τιμή για τη register_globals ήταν on. Και στην PHP 3 ήταν πάντα on. Η κοινότητα της PHP ενθαρρύνει όλους να μην βασίζονται σ'αυτή την ντιρεκτίβα καθώς προτιμάται να υποθέτουμε ότι είναι off και να γράφουμε κώδικα σύμφωνα με αυτή την υπόθεση.
Note: Η magic_quotes_gpc configuration ντιρεκτίβα επηρεάζει τις τιμές της Get, της Post και της Cookie. Αν γίνει on, η τιμή (It's "PHP!") θα γίνει αυτόματα (It\'s \"PHP!\"). Χρειάζεται να γίνει escape για εισαγωγή εισαγωγικών. Δείτε επίσης τις addslashes(), stripslashes() και magic_quotes_sybase.
Η PHP επίσης καταλαβαίνει arrays σχετικά με το περιεχόμενο από τις μεταβλητές φορμών (δείτε το σχετικό faq). Ίσως, για παράδειγμα ομαδοποιήσετε σχετικές μεταβλητές μαζί, ή χρησιμοποιήσετε αυτό το χαρακτηριστικό για να πάρετε τιμές από ένα multiple select input. Για παράδειγμα, ας στείλουμε μια φόρμα στον εαυτό της και μετά την υποβολή εμφανιστούν τα δεδομένα:
Example#3 Περισσότερες σύνθετες μεταβλητές φορμών
<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
print '<pre>';
print_r($_POST);
print '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';
print '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbrδu</option>
</select><br>
<input type="hidden" name="action" value="submitted">
<input type="submit" name="submit" value="submit me!">
</form>
<?php
}
?>
Στην PHP 3, η χρήση της μεταβλητής array της φόρμας είναι περιορισμένη σε μονοδιάστατους arrays. Στην PHP 4, δεν εφαρμόζονται τέτοιοι περιορισμοί.
IMAGE SUBMIT ονόματα μεταβλητής
Όταν εισάγετε μια φόρμα, είναι δυνατό να χρησιμοποιήσετε μια εικόνα αντί για το καθιερωμένο κουμπί υποβολής με ένα tag σαν και αυτό:
<input type="image" src="image.gif" name="sub">
Όταν ο χρήστης κάνει κλίκ κάπου στην εικόνα, η ακόλουθη φόρμα θα μεταφερθεί στον server με δυο επιπρόσθετες μεταβλητές, την sub_x και την sub_y. Αυτές περιέχουν τις συντεταγμένες του σημείου που έκανε κλικ ο χρήστης μέσα στην εικόνα. Ο έμπειρος χρήστης ίσως παρατηρήσει ότι τα πραγματικά ονόματα μεταβλητών που στάλθηκαν από τον browser περιέχουν μια period παρά ένα underscore, αλλά η PHP μετατρέπει αυτή την period σε ένα underscore αυτόματα.
Τελείες σε εσωτερικά ονόματα μεταβλητών
Τυπικά, η PHP δεν αλλάζει τα ονόματα των μεταβλητών όταν αυτά περνιούνται σε ένα script. Πάντως, πρέπει να σημειωθεί ότι η τελεία dot (period, full stop) δεν είναι ένας έγκυρος χαρακτήρας στην PHP για ονόματα μεταβλητών. Γι'αυτό το λόγο, δείτε αυτό:
<?php
$varname.ext; /* invalid variable name */
?>
Γι'αυτό το λόγο, είναι σημαντικό να σημειώσουμε ότι η PHP θα αντικαταστήσει αυτόματα όλες τις τελείες σε εσωτερικά ονόματα μεταβλητών, με underscores.
Ορίζοντας τύπους μεταβλητών
Επειδή η PHP καθορίζει τους τύπους των μεταβλητών και τους μετατρέπει (γενικά) όπως χρειάζεται, δεν είναι πάντα προφανές τι τύπου είναι μια δεδομένη μεταβλητή οποιαδήποτε στιγμή. Η PHP περιέχει διάφορες συναρτήσεις οι οποίες βρίσκουν τι τύπο έχει κάθε μεταβλητή, όπως οι: gettype(), is_array(), is_float(), is_int(), is_object(), και η is_string(). Δείτε επίσης το κεφάλαιο σχετικά με τους Τύπους.