Φόρμες HTML. Μέθοδοι αποστολής δεδομένων στον διακομιστή με χρήση φόρμας. Η απλούστερη μορφή αποστολής δεδομένων μέσω email με χρήση HTML και PHP
Μία από τις πιο δημοφιλείς λειτουργίες στον ιστότοπο είναι η αίτηση ή η φόρμα παραγγελίας, τα δεδομένα από την οποία αποστέλλονται μέσω email στον ιδιοκτήτη του ιστότοπου. Κατά κανόνα, τέτοιες φόρμες είναι απλές και αποτελούνται από δύο ή τρία πεδία για την εισαγωγή δεδομένων. Πώς να δημιουργήσετε μια τέτοια φόρμα παραγγελίας; Αυτό απαιτεί τη χρήση γλώσσας σήμανσης HTML και γλώσσας προγραμματισμού PHP.
Η ίδια η γλώσσα σήμανσης HTML είναι απλή, απλά πρέπει να καταλάβετε πώς και πού να τοποθετήσετε ορισμένες ετικέτες. Με τη γλώσσα προγραμματισμού PHP, τα πράγματα είναι λίγο πιο περίπλοκα.
Για έναν προγραμματιστή, η δημιουργία μιας τέτοιας φόρμας δεν είναι δύσκολη, αλλά για έναν σχεδιαστή διάταξης HTML, ορισμένες ενέργειες μπορεί να φαίνονται δύσκολες.
Δημιουργήστε μια φόρμα υποβολής δεδομένων σε html
Η πρώτη γραμμή θα είναι η εξής
Τώρα ας τα βάλουμε όλα μαζί.
Τώρα ας κάνουμε τα πεδία στη μορφή υποχρεωτικά. Έχουμε τον παρακάτω κωδικό:
Δημιουργήστε ένα αρχείο που δέχεται δεδομένα από τη φόρμα HTML
Αυτό θα είναι ένα αρχείο που ονομάζεται send.php
Στο αρχείο, στο πρώτο στάδιο, πρέπει να αποδεχτείτε δεδομένα από τον πίνακα αναρτήσεων. Για να γίνει αυτό, δημιουργούμε δύο μεταβλητές:
$fio = $_POST["fio"];
$email = $_POST["email"];
Τα ονόματα των μεταβλητών στην PHP προηγούνται από ένα σύμβολο $ και ένα ερωτηματικό τοποθετείται στο τέλος κάθε γραμμής. Το $_POST είναι ένας πίνακας στον οποίο αποστέλλονται δεδομένα από τη φόρμα. Στη φόρμα html, η μέθοδος αποστολής καθορίζεται ως μέθοδος = "post". Έτσι, δύο μεταβλητές από τη φόρμα html γίνονται δεκτές. Για να προστατεύσετε τον ιστότοπό σας, πρέπει να περάσετε αυτές τις μεταβλητές μέσα από πολλά φίλτρα - συναρτήσεις php.
Η πρώτη συνάρτηση θα μετατρέψει όλους τους χαρακτήρες που ο χρήστης θα προσπαθήσει να προσθέσει στη φόρμα:
Σε αυτή την περίπτωση, δεν δημιουργούνται νέες μεταβλητές στην php, αλλά χρησιμοποιούνται οι υπάρχουσες. Αυτό που θα κάνει το φίλτρο είναι να μεταμορφώσει τον χαρακτήρα "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Η δεύτερη συνάρτηση αποκωδικοποιεί τη διεύθυνση URL εάν ο χρήστης προσπαθήσει να την προσθέσει στη φόρμα.
$fio = urldcode($fio);
$email = urldcode($email);
Με την τρίτη συνάρτηση θα αφαιρέσουμε κενά από την αρχή και το τέλος της γραμμής, εάν υπάρχουν:
$fio = trim($fio);
$email = trim($email);
Υπάρχουν και άλλες λειτουργίες που σας επιτρέπουν να φιλτράρετε μεταβλητές php. Η χρήση τους εξαρτάται από το πόσο ανησυχείτε ότι ένας εισβολέας θα προσπαθήσει να προσθέσει κώδικα προγράμματος σε αυτήν τη φόρμα υποβολής email html.
Επικύρωση δεδομένων που μεταφέρονται από φόρμα HTML σε αρχείο PHP
Για να ελέγξετε εάν αυτός ο κωδικός λειτουργεί και εάν μεταφέρονται δεδομένα, μπορείτε απλώς να τον εμφανίσετε στην οθόνη χρησιμοποιώντας τη λειτουργία echo:
ηχώ $fio;
ηχώ "
";
ηχώ $fio;
Η δεύτερη γραμμή εδώ χρειάζεται για να διαχωρίσει την έξοδο των μεταβλητών php σε διαφορετικές γραμμές.
Αποστολή ληφθέντων δεδομένων από μια φόρμα HTML σε email με χρήση PHP
Για να στείλετε δεδομένα μέσω email, πρέπει να χρησιμοποιήσετε τη λειτουργία αλληλογραφίας στην PHP.
mail("σε ποια διεύθυνση να σταλεί", "θέμα της επιστολής", "Μήνυμα (σώμα της επιστολής)", "Από: από ποιο email αποστέλλεται η επιστολή \r\n");
Για παράδειγμα, πρέπει να στείλετε δεδομένα στο email του κατόχου ή του διαχειριστή του ιστότοπου [email προστατευμένο].
Το θέμα της επιστολής πρέπει να είναι σαφές και το μήνυμα της επιστολής πρέπει να περιέχει αυτό που ο χρήστης καθόρισε στη φόρμα HTML.
ταχυδρομείο(" [email προστατευμένο]", "Application from the site", "Full name:".$fio.". E-mail: ".$email ,"From: [email προστατευμένο]\r\n");
Είναι απαραίτητο να προσθέσετε μια συνθήκη που θα ελέγχει εάν η φόρμα στάλθηκε με χρήση PHP στην καθορισμένη διεύθυνση email.
αν (ταχυδρομείο(" [email προστατευμένο]", "Παραγγελία από τον ιστότοπο", "Ονοματεπώνυμο:".$fio.". E-mail: ".$email ,"From: [email προστατευμένο]\r\n"))
{
echo "το μήνυμα εστάλη με επιτυχία"?
) άλλο (
}
Έτσι, ο κώδικας προγράμματος του αρχείου send.php, που θα στέλνει δεδομένα φόρμας HTML στο email, θα μοιάζει με αυτό:
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldcode($fio);
$email = urldcode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
//ηχώ "
";
//echo $email;
αν (ταχυδρομείο(" [email προστατευμένο]", "Application from the site", "Full name:".$fio.". E-mail: ".$email ,"From: [email προστατευμένο]\r\n"))
( echo "το μήνυμα εστάλη με επιτυχία"?
) άλλο (
echo "Παρουσιάστηκαν σφάλματα κατά την αποστολή του μηνύματος"
}?>
Τρεις γραμμές για να ελέγξετε εάν τα δεδομένα μεταφέρονται στο αρχείο σχολιάζονται. Εάν είναι απαραίτητο, μπορούν να αφαιρεθούν, καθώς χρειάζονταν μόνο για τον εντοπισμό σφαλμάτων.
Τοποθετούμε τον κώδικα HTML και PHP για την υποβολή της φόρμας σε ένα αρχείο
Στα σχόλια αυτού του άρθρου, πολλοί άνθρωποι ρωτούν πώς να βεβαιωθείτε ότι τόσο η φόρμα HTML όσο και ο κώδικας PHP για την αποστολή δεδομένων σε email βρίσκονται σε ένα αρχείο και όχι σε δύο.
Για να υλοποιήσετε αυτήν την εργασία, πρέπει να τοποθετήσετε τον κώδικα HTML της φόρμας στο αρχείο send.php και να προσθέσετε μια συνθήκη που θα ελέγχει την παρουσία μεταβλητών στον πίνακα POST (αυτός ο πίνακας αποστέλλεται από τη φόρμα). Δηλαδή, εάν οι μεταβλητές στον πίνακα δεν υπάρχουν, τότε πρέπει να δείξετε στον χρήστη τη φόρμα. Διαφορετικά, θα πρέπει να λάβετε δεδομένα από τη συστοιχία και να τα στείλετε στον παραλήπτη.
Ας δούμε πώς να αλλάξετε τον κώδικα PHP στο αρχείο send.php:
//ελέγξτε εάν υπάρχουν μεταβλητές στον πίνακα POST
if(!isset($_POST["fio"]) και !isset($_POST["email"]))(
?> ) άλλο (
//εμφάνιση της φόρμας
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldcode($fio);
$email = urldcode($email);
$fio = trim($fio);
$email = περικοπή ($email);
αν (ταχυδρομείο(" [email προστατευμένο]", "Application from the site", "Full name:".$fio.". E-mail: ".$email ,"From: [email προστατευμένο]\r\n"))(
echo "Το μήνυμα εστάλη με επιτυχία"
) άλλο (
echo "Παρουσιάστηκαν σφάλματα κατά την αποστολή του μηνύματος"
}
}
?>
Ελέγχουμε την ύπαρξη μεταβλητής στον πίνακα POST με τη συνάρτηση isset() PHP. Ένα θαυμαστικό πριν από αυτή τη συνάρτηση σε μια συνθήκη σημαίνει άρνηση. Δηλαδή, αν η μεταβλητή δεν υπάρχει, τότε πρέπει να δείξουμε τη μορφή μας. Αν δεν είχα βάλει το θαυμαστικό, η συνθήκη θα σήμαινε κυριολεκτικά «αν υπάρχει, τότε δείξε τη φόρμα». Και αυτό είναι λάθος στην περίπτωσή μας. Φυσικά, μπορείτε να το μετονομάσετε σε index.php. Εάν μετονομάσετε το αρχείο, μην ξεχάσετε να μετονομάσετε το όνομα του αρχείου στη γραμμή
Αποθηκεύοντας αυτόν τον κώδικα σε ένα αρχείο HTML και προβάλλοντάς τον χρησιμοποιώντας το αγαπημένο σας πρόγραμμα περιήγησης, θα δείτε μια γνωστή φόρμα HTML:
Ετικέτα
- ενέργεια - καθορίζει τη διεύθυνση URL (πλήρη ή σχετική) στην οποία θα σταλεί η φόρμα. Εάν αυτό το χαρακτηριστικό δεν έχει καθοριστεί, τα περισσότερα προγράμματα περιήγησης (ακριβέστερα, όλα τα προγράμματα περιήγησης που είναι γνωστά σε εμένα) στέλνουν τη φόρμα στο τρέχον έγγραφο, δηλαδή "στο ίδιο". Αυτή είναι μια βολική συντομογραφία, αλλά σύμφωνα με το πρότυπο HTML, απαιτείται το χαρακτηριστικό action.
- μέθοδος - τρόπος υποβολής της φόρμας. Υπάρχουν δύο από αυτούς.
- GET - αποστολή δεδομένων φόρμας στη γραμμή διευθύνσεων.
Μπορεί να έχετε παρατηρήσει σε διάφορους ιστότοπους την παρουσία ενός "?" στο τέλος της διεύθυνσης URL. και τα ακόλουθα δεδομένα στην παράμετρο μορφής=τιμή. Εδώ η "παράμετρος" αντιστοιχεί στην τιμή του χαρακτηριστικού name των στοιχείων της φόρμας (δείτε παρακάτω σχετικά με την ετικέτα ), και το "value" είναι το περιεχόμενο του χαρακτηριστικού value (για παράδειγμα, περιέχει την εισαγωγή του χρήστη στο πεδίο κειμένου της ίδιας ετικέτας ).
Για παράδειγμα, δοκιμάστε να αναζητήσετε κάτι στο Yandex και δώστε προσοχή στη γραμμή διευθύνσεων του προγράμματος περιήγησης. Αυτή είναι η μέθοδος GET. - POST - τα δεδομένα της φόρμας αποστέλλονται στο σώμα της αίτησης. Εάν δεν είναι απολύτως σαφές (ή εντελώς ασαφές) τι είναι αυτό, μην ανησυχείτε, θα επιστρέψουμε σε αυτό το ζήτημα σύντομα.
- GET - αποστολή δεδομένων φόρμας στη γραμμή διευθύνσεων.
Ετικέτα - καθορίζει ένα στοιχείο φόρμας που ορίζεται από το χαρακτηριστικό type:
- Η τιμή "text" καθορίζει ένα πεδίο εισαγωγής κειμένου μιας γραμμής
- Η τιμή "υποβολή" καθορίζει ένα κουμπί που, όταν πατηθεί, στέλνει τη φόρμα στον διακομιστή
Είναι δυνατές και άλλες τιμές (και - δεν είναι η μόνη ετικέτα που καθορίζει ένα στοιχείο φόρμας).
Τι συμβαίνει λοιπόν όταν κάνουμε κλικ στο "OK";
- Το πρόγραμμα περιήγησης εξετάζει τα στοιχεία που περιλαμβάνονται στη φόρμα και κατασκευάζει δεδομένα φόρμας από τα χαρακτηριστικά ονόματος και τιμής τους. Ας πούμε ότι έχει εισαχθεί το όνομα Vasya. Σε αυτήν την περίπτωση, τα δεδομένα της φόρμας είναι name=Vasya&okbutton=OK
- Το πρόγραμμα περιήγησης δημιουργεί μια σύνδεση με τον διακομιστή, στέλνει στον διακομιστή ένα αίτημα για το έγγραφο που καθορίζεται στο χαρακτηριστικό action της ετικέτας
, χρησιμοποιώντας τη μέθοδο αποστολής δεδομένων που καθορίζεται στο χαρακτηριστικό μέθοδος (σε αυτήν την περίπτωση - GET), μεταβιβάζοντας τα δεδομένα φόρμας στο αίτημα. - Ο διακομιστής αναλύει το αίτημα που έλαβε, δημιουργεί μια απάντηση, τη στέλνει στο πρόγραμμα περιήγησης και κλείνει τη σύνδεση
- Το πρόγραμμα περιήγησης εμφανίζει το έγγραφο που ελήφθη από τον διακομιστή
Η μη αυτόματη αποστολή του ίδιου αιτήματος (με χρήση telnet) μοιάζει με αυτό (υποθέτοντας ότι το όνομα τομέα του ιστότοπου είναι www.example.com):
Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n Κεντρικός υπολογιστής: www.example.com\r\n \r\n
Όπως πιθανότατα έχετε ήδη μαντέψει, κάνοντας κλικ στο κουμπί υποβολή σε μια φόρμα με μέθοδο υποβολής "GET" είναι το ίδιο με την πληκτρολόγηση της αντίστοιχης διεύθυνσης URL (με ερωτηματικό και δεδομένα φόρμας στο τέλος) στη γραμμή διευθύνσεων του προγράμματος περιήγησης:
Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK
Στην πραγματικότητα, η μέθοδος GET χρησιμοποιείται κάθε φορά που ζητάτε ένα έγγραφο από τον διακομιστή εισάγοντας απλώς τη διεύθυνση URL του ή κάνοντας κλικ σε έναν σύνδεσμο. Χρησιμοποιώντας
Ίσως όλες αυτές οι τεχνικές λεπτομέρειες και οι ασκήσεις με το telnet να σας φαίνονται απίστευτα βαρετές και ακόμη και περιττές ("τι σχέση έχει η PHP με αυτό;"). Αλλά μάταια. :) Αυτά είναι τα βασικά στοιχεία της εργασίας με το πρωτόκολλο HTTP, τα οποία κάθε προγραμματιστής Ιστού πρέπει να γνωρίζει από κοντά, και αυτό δεν είναι θεωρητική γνώση - όλα αυτά θα είναι χρήσιμα στην πράξη.
Τώρα ας αντικαταστήσουμε την πρώτη γραμμή της φόρμας μας με την εξής:
Καθορίσαμε τη μέθοδο αποστολής ως "POST". Σε αυτήν την περίπτωση, τα δεδομένα αποστέλλονται στον διακομιστή με ελαφρώς διαφορετικό τρόπο:
Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n Κεντρικός υπολογιστής: www.example.com\r\n Τύπος περιεχομένου: εφαρμογή/x-www-form-urlencoded\r\ n Μήκος περιεχομένου: 41263\r\n \r\n όνομα=Vasya&okbutton=OK
Όταν χρησιμοποιείτε τη μέθοδο POST, τα δεδομένα της φόρμας αποστέλλονται μετά από "δύο Εισαγωγές" - στο σώμα της αίτησης. Όλα τα παραπάνω είναι στην πραγματικότητα η κεφαλίδα αιτήματος (και όταν χρησιμοποιήσαμε τη μέθοδο GET, τα δεδομένα της φόρμας στάλθηκαν στην κεφαλίδα). Για να γνωρίζει ο διακομιστής σε ποιο byte θα σταματήσει να διαβάζει το σώμα του αιτήματος, η κεφαλίδα περιέχει τη γραμμή Content-Length. ότι τα δεδομένα της φόρμας θα μεταδοθούν με τη μορφή parameter1=value1¶meter2=value2... , και οι τιμές μεταδίδονται με τη μορφή urlencode - δηλαδή ακριβώς το ίδιο με τη μέθοδο GET, αλλά στο σώμα του αίτημα - η κεφαλίδα περιεχομένου ενημερώνει τον διακομιστή -Τύπος: application/x-www-form-urlencoded .
Το πλεονέκτημα της μεθόδου POST είναι ότι δεν υπάρχει όριο στο μήκος της γραμμής δεδομένων φόρμας.
Όταν χρησιμοποιείτε τη μέθοδο POST, δεν είναι δυνατή η υποβολή της φόρμας απλώς "ακολουθώντας έναν σύνδεσμο", όπως συνέβη με το GET .
Όταν χρησιμοποιείτε μια φόρμα POST, στο χαρακτηριστικό της δράσης μπορείτε να καθορίσετε μετά το ερωτηματικό τις παραμέτρους της φόρμας GET. Έτσι, η μέθοδος POST περιλαμβάνει τη μέθοδο GET.
Πίνακες $_GET και $_POST
Έτσι, οι φόρμες είναι ο κύριος τρόπος ανταλλαγής δεδομένων μεταξύ ενός διακομιστή ιστού και ενός προγράμματος περιήγησης, δηλαδή παρέχουν αλληλεπίδραση με τον χρήστη - στην πραγματικότητα, τι είναι ο προγραμματισμός Ιστού.
Ας δούμε ένα απλό παράδειγμα:
if ($_SERVER [ "REQUEST_METHOD" ] == "POST" ) (
ηχώ "
Γειά σου, " . $_POST [ "όνομα" ] ."
!" ;}
?>
Εισάγετε το όνομά σας:
Η φόρμα που εμφανίζεται στις γραμμές 8-12 περιέχει δύο στοιχεία: όνομα και κουμπί ok. Το χαρακτηριστικό μέθοδος καθορίζει τη μέθοδο υποβολής φόρμας POST, ενώ το χαρακτηριστικό action καθορίζει τη διεύθυνση URL στην οποία αποστέλλεται η φόρμα και συμπληρώνεται με την τιμή της μεταβλητής διακομιστή PHP_SELF - τη διεύθυνση του σεναρίου που εκτελείται αυτήν τη στιγμή.
=$_SERVER["PHP_SELF"]?>- συντομευμένη φόρμα για echo $_SERVER["PHP_SELF"]; ?> .
Ας υποθέσουμε ότι πληκτρολογήσαμε την τιμή Vasya στο πεδίο ονόματος και κάνουμε κλικ στο κουμπί OK. Σε αυτήν την περίπτωση, το πρόγραμμα περιήγησης στέλνει ένα αίτημα POST στον διακομιστή. Σώμα αιτήματος: name=Vasya&okbutton=OK . Η PHP συμπληρώνει αυτόματα τον πίνακα $_POST:
$_POST ["name" ] = "Vasya"
$_POST ["okbutton" ] = "OK"
Στην πραγματικότητα, η τιμή "Vasya" αποστέλλεται από το πρόγραμμα περιήγησης σε μορφή urlencode. για την κωδικοποίηση των Windows-1251, αυτή η τιμή μοιάζει με %C2%E0%F1%FF . Όμως, δεδομένου ότι η PHP χειρίζεται αυτόματα την απαραίτητη αποκωδικοποίηση, μπορούμε να "ξεχάσουμε" αυτήν τη δυνατότητα - μέχρι να αντιμετωπίσουμε τα αιτήματα HTTP χειροκίνητα.
Δεδομένου ότι το σώμα του αιτήματος καθορίζει μόνο ονόματα και τιμές, αλλά όχι τύπους στοιχείων φόρμας, η PHP δεν έχει ιδέα εάν το $_POST["όνομα"] ταιριάζει με μια συμβολοσειρά εισόδου, ένα κουμπί ή ένα πλαίσιο λίστας. Αλλά εμείς, γενικά, δεν χρειαζόμαστε καθόλου αυτές τις πληροφορίες. :)
Επειδή δεν χρειάζεται να γνωρίζουμε τι λέει το κουμπί υποβολής, μπορούμε να αφαιρέσουμε το χαρακτηριστικό name στη γραμμή 11, συντομεύοντας την περιγραφή του κουμπιού σε . Σε αυτήν την περίπτωση, το πρόγραμμα περιήγησης θα στείλει ένα αίτημα POST name=Vasya.
Και τώρα το ίδιο πράγμα, αλλά για τη φόρμα GET:
if (isset($_GET [ "όνομα" ])) (
ηχώ "
Γειά σου, " . $_GET [ "όνομα" ] ."
!" ;}
?>
Εισάγετε το όνομά σας:
Στη γραμμή 8 θα μπορούσε κανείς να γράψει το ίδιο εύκολα
Η PHP κάνει το ίδιο με τις φόρμες GET όπως και με το POST, με τη διαφορά ότι ο πίνακας $_GET είναι συμπληρωμένος.
Η βασική διαφορά βρίσκεται στη γραμμή 4. Εφόσον η απλή εισαγωγή της διεύθυνσης στη γραμμή του προγράμματος περιήγησης είναι αίτημα GET, ο έλεγχος εάν ($_SERVER["REQUEST_METHOD"] == "GET") δεν έχει νόημα. Επομένως, καταφεύγουμε στην κατασκευή isset(), η οποία επιστρέφει true εάν η μεταβλητή έχει οριστεί (δηλαδή, της έχει εκχωρηθεί μια τιμή) και false εάν η μεταβλητή δεν έχει οριστεί. Εάν η φόρμα έχει συμπληρωθεί - όπως ήδη καταλάβατε, η PHP εκχωρεί αυτόματα στο $_GET["name"] την κατάλληλη τιμή.
Η μέθοδος επαλήθευσης που χρησιμοποιεί isset() είναι καθολική και θα μπορούσε επίσης να χρησιμοποιηθεί για μια φόρμα POST. Επιπλέον, είναι προτιμότερο γιατί σας επιτρέπει να μάθετε ποια πεδία φόρμας συμπληρώνονται.
Ένα λίγο πιο σύνθετο παράδειγμα.
echo "Παρακαλώ εισάγετε ένα όνομα!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
ηχώ
" ;
) άλλο (
" ;
ηχώ "Σε σένα". $ηλικία. "χρόνια
" ;
}
ηχώ "
" ;
}
?>
Εισάγετε το όνομά σας:
Εισαγάγετε το έτος γέννησής σας:
Δεν χρησιμοποιούνται νέες τεχνικές εδώ. Ανακαλύψτε το, εκτελέστε τον κώδικα, δοκιμάστε να τροποποιήσετε...
Ας αλλάξουμε το τελευταίο παράδειγμα, ώστε ο χρήστης να μην χρειάζεται να συμπληρώσει ξανά τα πεδία. Για να το κάνετε αυτό, συμπληρώστε τα χαρακτηριστικά τιμής των στοιχείων της φόρμας με τις τιμές που μόλις εισαγάγαμε.
$name = isset($_POST [ "όνομα" ]) ? $_POST [ "όνομα" ] : "" ;
$year = isset($_POST [ "έτος" ]) ? $_POST [ "έτος" ] : "" ;
Εάν (isset($_POST [ "όνομα" ], $_POST [ "έτος" ])) (
if ($_POST [ "όνομα" ] == "" ) (
echo "Παρακαλώ εισάγετε ένα όνομα!
"
;
) αλλιώς εάν ($_POST [ "έτος" ]<
1900
||
$_POST
[
"year"
] >
2004
) {
ηχώ "Παρακαλώ προσδιορίστε το έτος γέννησης! Έγκυρο εύρος τιμών: 1900..2004
"
;
) άλλο (
ηχώ "Γεια σου", . $_POST [ "όνομα" ] . "!
"
;
$age = 2004 - $_POST [ "έτος" ];
ηχώ "Σε σένα". $ηλικία. "χρόνια
"
;
}
ηχώ "
" ;
}
?>
Εισάγετε το όνομά σας:
Εισαγάγετε το έτος γέννησής σας:
Οι γραμμές 4 και 5 μπορεί να είναι κάπως μπερδεμένες: Όλα είναι πολύ απλά: η γραμμή 4 θα μπορούσε να γραφτεί ως εξής:
if (isset($_POST [ "όνομα" ]))
$name = $_POST ["όνομα" ];
αλλού
$name = " " ;
Μπορεί να προκύψει το ερώτημα - γιατί να μην πετάξετε τις γραμμές 4-5 και να γράψετε:
Εισάγετε το όνομά σας:
">
Εισαγάγετε το έτος γέννησής σας:
">
Το θέμα είναι ότι εάν αυτές οι μεταβλητές POST δεν έχουν καθοριστεί - και αυτό θα συμβεί αν η φόρμα δεν έχει ακόμη συμπληρωθεί - η PHP θα εκδώσει προειδοποιήσεις σχετικά με τη χρήση μη αρχικοποιημένων μεταβλητών (και, πολύ λογικά: ένα τέτοιο μήνυμα σας επιτρέπει να βρείτε γρήγορα δυσεύρετα τυπογραφικά λάθη σε ονόματα μεταβλητών και επίσης προειδοποιεί για πιθανές «τρύπες» στον ιστότοπο). Μπορείτε, φυσικά, να βάλετε τον κωδικό isset απευθείας στη φόρμα, αλλά θα είναι πολύ περίπλοκο.
Το έπιασα; Τώρα προσπαθήστε να βρείτε το σφάλμα στον συγκεκριμένο κώδικα. Λοιπόν, όχι ακριβώς ένα λάθος, αλλά ένα ελάττωμα.
htmlspecialchars()
Δεν το βρήκατε; Θα σου δώσω μια υπόδειξη. Εισαγάγετε, για παράδειγμα, στο πεδίο "όνομα" ένα διπλό εισαγωγικό και λίγο κείμενο, για παράδειγμα, "Va" Στείλτε τη φόρμα και ρίξτε μια ματιά στον πηγαίο κώδικα της σελίδας που προκύπτει Η τέταρτη γραμμή θα έχει κάτι σαν:
Εισάγετε το όνομά σας:
Δηλαδή τίποτα καλό. Τι θα γινόταν αν ένας πονηρός χρήστης εισήγαγε κώδικα JavaScript;
Για να λύσετε αυτό το πρόβλημα, πρέπει να χρησιμοποιήσετε τη συνάρτηση htmlspecialchars(), η οποία θα αντικαταστήσει τους ειδικούς χαρακτήρες με την αναπαράστασή τους HTML (για παράδειγμα, ένα εισαγωγικό με "):
$name = isset($_POST [ "όνομα" ]) ? htmlspecialchars ($_POST [ "όνομα" ]) : "" ;
$year = isset($_POST [ "έτος" ]) ? htmlspecialchars ($_POST [ "έτος" ]) : "" ;
Εάν (isset($_POST [ "όνομα" ], $_POST [ "έτος" ])) (
if ($_POST [ "όνομα" ] == "" ) (
echo "Παρακαλώ εισάγετε ένα όνομα!
"
;
) αλλιώς εάν ($_POST [ "έτος" ]<
1900
||
$_POST
[
"year"
] >
2004
) {
ηχώ "Παρακαλώ προσδιορίστε το έτος γέννησης! Έγκυρο εύρος τιμών: 1900..2004
"
;
) άλλο (
ηχώ "Γεια σου", . $όνομα . "!
"
;
$age = 2004 - $_POST [ "έτος" ];
ηχώ "Σε σένα". $ηλικία. "χρόνια
"
;
}
ηχώ "
" ;
}
?>
Εισάγετε το όνομά σας:
Εισαγάγετε το έτος γέννησής σας:
Επαναλάβετε το πείραμα και βεβαιωθείτε ότι ο κώδικας HTML είναι πλέον σωστός.
Θυμηθείτε - η συνάρτηση htmlspecialchars() πρέπει να χρησιμοποιείται κάθε φορά που εμφανίζει τα περιεχόμενα μιας μεταβλητής που μπορεί να περιέχει ειδικούς χαρακτήρες HTML.
phpinfo()
Η συνάρτηση phpinfo() είναι μια από τις πιο σημαντικές στην PHP. Εμφανίζει πληροφορίες σχετικά με τις ρυθμίσεις PHP, τις τιμές των διαφόρων μεταβλητών διαμόρφωσης...
Γιατί το αναφέρω σε ένα άρθρο για τα έντυπα; Το phpinfo() είναι ένα βολικό εργαλείο εντοπισμού σφαλμάτων. Η phpinfo(), μεταξύ άλλων, εκτυπώνει τις τιμές όλων των μεταβλητών $_GET, $_POST και $_SERVER. Έτσι, εάν μια μεταβλητή φόρμας χαθεί, ο ευκολότερος τρόπος για να μάθετε τι φταίει είναι να χρησιμοποιήσετε τη συνάρτηση phpinfo(). Για να διασφαλίσετε ότι η συνάρτηση εμφανίζει μόνο τις τιμές των μεταβλητών (και χωρίς να χρειάζεται να κάνετε κύλιση σε δεκάδες σελίδες), θα πρέπει να καλείται ως εξής: phpinfo(INFO_VARIABLES); , ή - που είναι απολύτως το ίδιο πράγμα - phpinfo(32) ;.
Εισάγετε το όνομά σας:
phpinfo(32);
?>
Ή, για παράδειγμα, αυτή η κατάσταση: θέλετε να μάθετε τη διεύθυνση IP ενός επισκέπτη. Θυμάστε ότι η αντίστοιχη μεταβλητή είναι αποθηκευμένη στον πίνακα $_SERVER, αλλά - κακή τύχη - ξεχάσατε πώς ακριβώς ονομάζεται η μεταβλητή. Και πάλι, καλέστε το phpinfo(32); , αναζητήστε τη διεύθυνση IP σας στο σύμβολο και βρείτε τη στη γραμμή $_SERVER["REMOTE_ADDR"] .
/php/php5ru.png HTTP/1.0
: www.php5.ru
Αυτό που θα βλέπατε αν το προβάλλατε θα αναβοσβήνει στην οθόνη png-αρχείο σε πρόγραμμα επεξεργασίας κειμένου.
Φόρμες HTML. Μέθοδοι αποστολής δεδομένων στον διακομιστή με χρήση φόρμας
Μία από τις πιο κοινές εφαρμογές οποιασδήποτε γλώσσας προγραμματισμού διακομιστή είναι η επεξεργασία HTML- έντυπα. Ο προγραμματισμός Ιστού περιλαμβάνει ως επί το πλείστον την επεξεργασία διαφόρων εισροών χρηστών.
RNRδιευκολύνει το έργο της επεξεργασίας και της ανάλυσης φορμών που λαμβάνονται από το πρόγραμμα περιήγησης, καθώς όλες οι απαραίτητες δυνατότητες είναι ενσωματωμένες στη γλώσσα στο χαμηλότερο επίπεδο. Επομένως, ο προγραμματιστής δεν χρειάζεται καν να σκεφτεί τις δυνατότητες του πρωτοκόλλου HTTPκαι αναρωτιέμαι πώς γίνεται η αποστολή και η λήψη
ΜΕ HTML-φόρμες που έχετε ήδη συναντήσει όταν μελετάτε τη γλώσσα σήμανσης HTML.
Ας δούμε ένα παράδειγμα αποστολής μηνύματος από μια φόρμα μέσω email.
Καταχώρηση e_mail.html.Αποστολή μηνύματος από φόρμα μέσω email
Κάντε κλικ στο Reset και συμπληρώστε την παραγγελία.