Ενας από κύρια πλεονεκτήματαΗ PHP είναι ο τρόπος που λειτουργεί με φόρμες HTML. Το κλειδί εδώ είναι ότι κάθε στοιχείο φόρμας διατίθεται αυτόματα στα προγράμματά σας PHP. Για λεπτομερείς πληροφορίεςδείτε την ενότητα σχετικά με τη χρήση φορμών στην PHP. Ακολουθεί ένα παράδειγμα φόρμας HTML:

Παράδειγμα #1 Το πιο απλό Φόρμα HTML

Το όνομα σου:

Η ηλικία σου:

Δεν υπάρχει τίποτα ιδιαίτερο σε αυτή τη φόρμα. Αυτή είναι μια κανονική φόρμα HTML χωρίς ειδικές ετικέτες. Όταν ο χρήστης συμπληρώσει τη φόρμα και κάνει κλικ στο κουμπί υποβολής, θα καλείται η σελίδα action.php. Αυτό το αρχείο μπορεί να περιέχει κάτι σαν:

Beispiel #2 Απόδοση δεδομένων φόρμας

Χαίρετε, .
Σε εσέναχρόνια.

Δείγμα εξόδου από αυτό το πρόγραμμα:

Γεια σου Σεργκέι. Είσαι 30 χρονών.

Εάν δεν λάβετε υπόψη κομμάτια κώδικα με htmlspecialchars()και (int), η αρχή λειτουργίας αυτού του κώδικα θα πρέπει να είναι απλή και σαφής. htmlspecialchars()διασφαλίζει ότι οι "ειδικοί" χαρακτήρες HTML είναι σωστά κωδικοποιημένοι, έτσι ώστε κακόβουλο HTML ή Javascript να μην εισάγεται στη σελίδα σας. Το πεδίο ηλικίας, το οποίο γνωρίζουμε ότι πρέπει να είναι αριθμός, μπορούμε απλά να το μετατρέψουμε ακέραιος αριθμός, το οποίο θα απαλλαγεί αυτόματα από τους ανεπιθύμητους χαρακτήρες. Η PHP μπορεί επίσης να το κάνει αυτόματα με την επέκταση φίλτρου. Οι μεταβλητές $_POST["name"] και $_POST["ηλικία"] ορίζονται αυτόματα για εσάς από την PHP. Παλαιότερα χρησιμοποιούσαμε το $_SERVER superglobal, αλλά εδώ χρησιμοποιούμε επίσης το $_POST superglobal, το οποίο περιέχει όλα τα δεδομένα POST. σημειώσε ότι μέθοδος αποστολής(μέθοδος) της φόρμας μας είναι POST. Αν χρησιμοποιούσαμε τη μέθοδο ΠΑΙΡΝΩ, τότε οι πληροφορίες της φόρμας μας θα βρίσκονται στο $_GET superglobal. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τη μεταβλητή $_REQUEST εάν η προέλευση δεδομένων δεν είναι σχετική. Αυτή η μεταβλητή περιέχει ένα μείγμα δεδομένων GET, POST, COOKIE.

15 χρόνια πριν

Σύμφωνα με την προδιαγραφή HTTP, θα πρέπει να χρησιμοποιείτε τη μέθοδο POST όταν χρησιμοποιείτε τη φόρμα για να αλλάξετε την κατάσταση κάποιου στοιχείου στο τέλος του διακομιστή. Για παράδειγμα, εάν μια σελίδα έχει μια φόρμα που επιτρέπει στους χρήστες να προσθέτουν τα δικά τους σχόλια, όπως αυτή σελίδα εδώ, η φόρμα θα πρέπει να χρησιμοποιεί POST. Γι' αυτό αυτές οι σελίδες δεν έχουν σελιδοδείκτη ή προσωρινή αποθήκευση.

Θα πρέπει να χρησιμοποιήσετε τη μέθοδο GET όταν η φόρμα σας βγάζει κάτι από τον διακομιστή και οχιαλλάζει ουσιαστικά οτιδήποτε. Για παράδειγμα, το φόρμα γιαμια μηχανή αναζήτησης θα πρέπει να χρησιμοποιεί το GET, καθώς η αναζήτηση μιας τοποθεσίας Web δεν πρέπει να αλλάζει τίποτα που μπορεί να ενδιαφέρει τον πελάτη, και η προσθήκη σελιδοδεικτών ή η αποθήκευση των αποτελεσμάτων ενός ερωτήματος μηχανής αναζήτησης είναι εξίσου χρήσιμη με τη δημιουργία σελιδοδεικτών ή την προσωρινή αποθήκευση μιας στατικής σελίδας HTML.

Πριν 2 χρόνια

Αξίζει να διευκρινιστεί:

Το POST δεν είναι πιο ασφαλές από το GET.

Οι λόγοι για την επιλογή GET vs POST περιλαμβάνουν διάφορους παράγοντες όπως η πρόθεση του αιτήματος («υποβάλλετε» πληροφορίες;), το μέγεθος του αιτήματος (υπάρχουν όρια στο πόσο μπορεί να είναι μια διεύθυνση URL και οι παράμετροι GET αποστέλλονται στο URL) και πόσο εύκολα θέλετε να είναι δυνατή η κοινή χρήση της Ενέργειας -- Παράδειγμα, οι Αναζητήσεις Google είναι GET επειδή διευκολύνουν την αντιγραφή και την κοινή χρήση του ερωτήματος αναζήτησης με κάποιον άλλο, απλώς κοινοποιώντας τη διεύθυνση URL.

Η ασφάλεια λαμβάνεται υπόψη μόνο εδώ, λόγω του γεγονότος ότι ένα GET είναι πιο εύκολο να μοιραστεί από ένα POST. Παράδειγμα: δεν θέλετε να σταλεί κωδικός πρόσβασης από το GET, επειδή ο χρήστης μπορεί να μοιραστεί τη διεύθυνση URL που προκύπτει και να αποκαλύψει ακούσια τον κωδικό πρόσβασής του.

Ωστόσο, ένα GET και ένα POST είναι εξίσου εύκολο να υποκλαπούν από ένα καλά τοποθετημένο κακόβουλο άτομο, εάν δεν αναπτύξετε το TLS/SSL για την προστασία της ίδιας της σύνδεσης δικτύου.

Όλες οι φόρμες που αποστέλλονται μέσω HTTP (συνήθως θύρα 80) είναι ανασφαλείς και σήμερα (2017), δεν υπάρχουν πολλοί καλοί λόγοι για έναν δημόσιο ιστότοπο να μην χρησιμοποιεί HTTPS (το οποίο είναι βασικά HTTP + Transport Layer Security).

Ως μπόνους, εάν χρησιμοποιείτε το TLS, ελαχιστοποιείτε τον κίνδυνο οι χρήστες σας να λάβουν κώδικα (AD) στην επισκεψιμότητά σας που δεν τοποθετήθηκε εκεί από εσάς.

Σε αυτό το μάθημα, θα μάθουμε για τη συνάρτηση ταχυδρομείο(), στο παράδειγμα της δημιουργίας μορφές ανατροφοδότησησε PHPμε την επακόλουθη αποστολή των ληφθέντων δεδομένων μέσω ταχυδρομείου.

Για να γίνει αυτό, θα δημιουργήσουμε δύο αρχεία - format.phpκαι mail.php. Το πρώτο αρχείο θα περιέχει μόνο μια φόρμα με πεδία για εισαγωγή χρήστη. Μέσα στην ετικέτα μορφή- κουμπί "Στείλετε"και χαρακτηριστικό δράση, που αναφέρεται στον χειριστή - mail.php, γίνεται πρόσβαση στα δεδομένα από τη φόρμα όταν πατηθεί το κουμπί "Στείλετε". Στο παράδειγμά μας, τα δεδομένα φόρμας αποστέλλονται σε μια ιστοσελίδα που ονομάζεται "/mail.php". Αυτή η σελίδα περιέχει ένα σενάριο για PHPπου χειρίζεται τα δεδομένα της φόρμας:


Τα δεδομένα της φόρμας αποστέλλονται με τη μέθοδο ΘΕΣΗ(επεξεργάζεται ως $_POST). $_POSTείναι ένας πίνακας μεταβλητών που μεταβιβάζονται στο τρέχον σενάριο μέσω της μεθόδου ΘΕΣΗ.

Παρακάτω μπορείτε να δείτε τα περιεχόμενα του αρχείου format.php, τα πεδία του οποίου συμπληρώνονται από τον ίδιο τον χρήστη σε κάποια ιστοσελίδα. Όλα τα πεδία εισαγωγής δεδομένων πρέπει να έχουν το χαρακτηριστικό όνομα, ορίζουμε μόνοι μας τις αξίες, με βάση τη λογική.




Φόρμα σχολίων σε PHP με αποστολή μέσω ταχυδρομείου


Φόρμα σχολίων σε PHP







Αφήστε ένα μήνυμα:
Το όνομα σου:



ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ:

Τηλεφωνικό νούμερο:

Μήνυμα:

Η περιοχή κειμένου μπορεί να περιέχει απεριόριστο αριθμό χαρακτήρων -->







Έτσι φαίνεται οπτικά η φόρμα στο πρόγραμμα περιήγησης.

Στη συνέχεια, γράψτε τον κώδικα για το αρχείο mail.php. Βρίσκουμε τα ονόματα για τις ίδιες τις μεταβλητές. ΣΤΟ PHPμεταβλητή ξεκινά με πρόσημο $ , ακολουθούμενο από το όνομα της μεταβλητής. Τιμή κειμένουη μεταβλητή περικλείεται σε εισαγωγικά. Με τη βοήθεια μεταβλητών, τα περιεχόμενα της φόρμας αποστέλλονται στο email του διαχειριστή, απλώς αντικαθιστώντας το όνομα του στοιχείου φόρμας - τιμή σε αγκύλες όνομα.

$to=" [email προστατευμένο]"; // email του παραλήπτη των δεδομένων από τη φόρμα
$tema = "Φόρμα Επικοινωνίας PHP"; // θέμα του ληφθέντος email
$message = "Το όνομά σας: ".$_POST["όνομα"]."
";//αντιστοιχίστε την τιμή που λαμβάνεται από τη φόρμα name=name στη μεταβλητή
$message .= "Email: ".$_POST["email"]."
"; //λήφθηκε από τη φόρμα name=email
$message .= "Αριθμός τηλεφώνου: ".$_POST["τηλέφωνο"]."
"; //λήφθηκε από τη φόρμα name=phone
$message .= "Μήνυμα: ".$_POST["μήνυμα"]."
"; //λήφθηκε από τη φόρμα name=message
$headers = "MIME-Έκδοση: 1.0" . "\r\n"; // Η κεφαλίδα ταιριάζει με τη μορφή συν τον χαρακτήρα νέας γραμμής
$headers .= "Content-type: text/html; charset=utf-8" . "\r\n"; // υποδεικνύει τον τύπο του περιεχομένου που αποστέλλεται
mail($to, $tema, $message, $headers); // στέλνει τις τιμές των μεταβλητών στο email του παραλήπτη
?>

Τα δεδομένα λοιπόν από τον πίνακα $_POSTθα μεταδοθεί στις αντίστοιχες μεταβλητές και θα σταλεί στο mail χρησιμοποιώντας τη συνάρτηση ταχυδρομείο. Ας συμπληρώσουμε τη φόρμα μας και πατάμε το κουμπί υποβολή. Μην ξεχάσετε να συμπεριλάβετε το email σας. Το γράμμα έφτασε αμέσως.

Η JavaScript είναι αποκλεισμένη στο πρόγραμμα περιήγησής σας. Επιτρέψτε την JavaScript για αυτόν τον ιστότοπο!

Εργασία με Φόρμες

Οι φόρμες HTML χρησιμοποιούνται για την αποστολή δεδομένων από τον χρήστη της ιστοσελίδας στον διακομιστή. Η PHP παρέχει μια σειρά από ειδικά εργαλεία για την εργασία με φόρμες.

Προκαθορισμένες μεταβλητές

Η PHP έχει μια σειρά από προκαθορισμένες μεταβλητές που δεν αλλάζουν όταν όλες οι εφαρμογές εκτελούνται σε ένα συγκεκριμένο περιβάλλον. Ονομάζονται επίσης μεταβλητές περιβάλλοντος ή μεταβλητές περιβάλλοντος. Αντικατοπτρίζουν τις ρυθμίσεις του περιβάλλοντος διακομιστή Web Apache, καθώς και πληροφορίες σχετικά με το αίτημα. αυτό το πρόγραμμα περιήγησης. Είναι δυνατό να λάβετε τις τιμές της διεύθυνσης URL, της συμβολοσειράς ερωτήματος και άλλων στοιχείων του αιτήματος HTTP.

Όλες οι προκαθορισμένες μεταβλητές περιέχονται στον συσχετιστικό πίνακα $GLOBALS. Εκτός από τις μεταβλητές περιβάλλοντος, αυτός ο πίνακας περιέχει επίσης καθολικές μεταβλητές που ορίζονται στο πρόγραμμα.

Παράδειγμα 1

Προβολή του πίνακα $GLOBALS $value) echo "\$GLOBALS[\"$key\"] == $value
"; ?>

Ως αποτέλεσμα, μια λίστα με όλες τις καθολικές μεταβλητές θα εμφανιστεί στην οθόνη, συμπεριλαμβανομένων μεταβλητές περιβάλλοντος. Τα πιο συχνά χρησιμοποιούμενα είναι:

ΜεταβλητόςΠεριγραφήΠεριεχόμενο
$_SERVER["HTTP_USER_AGENT"]Όνομα πελάτη και έκδοσηMozilla/5.0 (συμβατό; Googlebot/2.1; +http://www.google.com/bot.html)
$_SERVER["REMOTE_ADDR"]διεύθυνση IP144.76.78.3
getenv("HTTP_X_FORWARDED_FOR")Εσωτερική διεύθυνση IP πελάτη
$_SERVER["REQUEST_METHOD"]Μέθοδος αιτήματος (GET ή POST)ΠΑΙΡΝΩ
$_SERVER["QUERY_STRING"]Σε ένα αίτημα GET, τα κωδικοποιημένα δεδομένα διαβιβάστηκαν μαζί με τη διεύθυνση URL
$_SERVER["REQUEST_URL"]Πλήρης διεύθυνση πελάτη, συμπεριλαμβανομένης της συμβολοσειράς ερωτήματος
$_SERVER["HTTP_REFERER"]URL της σελίδας από την οποία υποβλήθηκε το αίτημα
$_SERVER["PHP_SELF"]Διαδρομή προς το εκτελέσιμο πρόγραμμα/index.php
$_SERVER["SERVER_NAME"]Τομέαδικτυακός τόπος
$_SERVER["REQUEST_URI"]Μονοπάτι/php/php_form.php

Χειρισμός εισόδου χρήστη

Ο χειριστής εισόδου PHP μπορεί να διαχωριστεί από το κείμενο HTML που περιέχει τις φόρμες εισαγωγής ή να τοποθετηθεί στην ίδια σελίδα.

Παράδειγμα 2

Παράδειγμα χειρισμού εισόδου

"method="post">

Αριθμός κάρτας:

Δεν υπάρχει κουμπί μεταφοράς δεδομένων εδώ, γιατί. μια φόρμα που αποτελείται από ένα πεδίο υποβάλλεται αυτόματα όταν πατηθεί ένα πλήκτρο .

Κατά την επεξεργασία ενός στοιχείου με επιλογή πολλών τιμών, πρέπει να προστεθούν ένα ζεύγος αγκύλων στο όνομα του στοιχείου για πρόσβαση σε όλες τις επιλεγμένες τιμές. Για να επιλέξετε πολλά στοιχεία, κρατήστε πατημένο το πλήκτρο Ctrl.

Παράδειγμα 3.1

Λίστα

ΠΑΡΑΔΕΙΓΜΑ 3.1 ΑΠΟΤΕΛΕΣΜΑ:

Παράδειγμα 3.2

Επεξεργασία λίστας από αρχείο ex1.htm

    "; foreach ($Item as $value) echo "
  • $value"; echo "
"; ?>

Παράδειγμα 4. Αποδοχή τιμών από πλαίσια ελέγχου

$v) ( if($v) echo "Ξέρεις γλώσσα προγραμματισμού $k!
"; else echo "Δεν γνωρίζετε τη γλώσσα προγραμματισμού $k.
"; } } ?>
"metod="post"> Ποιες γλώσσες προγραμματισμού γνωρίζετε;
PHP
Perl

ΠΑΡΑΔΕΙΓΜΑ 4 ΑΠΟΤΕΛΕΣΜΑ:

Παράδειγμα 5

"; ?>
"method="post">

Είναι δυνατή η επεξεργασία φορμών χωρίς να νοιάζεστε για τα πραγματικά ονόματα πεδίων.

Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε (ανάλογα με τη μέθοδο μεταφοράς) τον συσχετιστικό πίνακα $HTTP_GET_VARS ή $HTTP_POST_VARS . Αυτοί οι πίνακες περιέχουν ζεύγη ονόματος/τιμής για κάθε στοιχείο της υποβληθείσας φόρμας. Εάν δεν σας ενδιαφέρει, μπορείτε να χρησιμοποιήσετε τον συσχετιστικό πίνακα $_REQUEST.

Παράδειγμα 6

Χειρισμός αυθαίρετων εισροών Ανεξάρτητα από τη μέθοδο μεταφοράς $value) echo "$key == $value
"; ?>

Παράδειγμα 7. Χειρισμός ενός κλικ κουμπιού χρησιμοποιώντας τον τελεστή "@".

">

Χρησιμοποιώντας τη συνάρτηση header(), στέλνοντας στο πρόγραμμα περιήγησης την κεφαλίδα "Location", μπορείτε να ανακατευθύνετε τον χρήστη σε μια νέα σελίδα.

Για παράδειγμα:

Μεταφορά αρχείου στον διακομιστή. Ανέβασμα αρχείου. Upload

Η PHP σάς επιτρέπει να στέλνετε αρχεία στον διακομιστή. Η φόρμα HTML για την υποβολή αρχείου πρέπει να περιέχει το όρισμα enctype="multipart/form-data" .

Επιπλέον, η φόρμα πρέπει να έχει ένα κρυφό πεδίο με το όνομα max_file_size πριν από το πεδίο αντιγραφής αρχείου. Αυτό το κρυφό πεδίο πρέπει να περιέχει το μέγιστο μέγεθος του μεταφερόμενου αρχείου (συνήθως όχι περισσότερο από 2 MB).

Το ίδιο το πεδίο μεταφοράς αρχείου είναι ένα κανονικό στοιχείο INPUT με το όρισμα type="file" .

Για παράδειγμα:

"method="post">

Μετά τη μεταφόρτωση ενός αρχείου στον διακομιστή, του δίνεται ένα μοναδικό όνομα και αποθηκεύεται στον προσωρινό κατάλογο. Η πλήρης διαδρομή προς το αρχείο γράφεται σε μια καθολική μεταβλητή της οποίας το όνομα ταιριάζει με το όνομα του πεδίου για τη μεταφορά αυτού του αρχείου. Επιπλέον, η PHP αποθηκεύει ορισμένες πρόσθετες πληροφορίες σχετικά με το αρχείο που έχει περάσει σε άλλες καθολικές μεταβλητές:

Παράδειγμα 8

Επεξεργασία του μεταφερόμενου αρχείου "; echo "name: ".$_FILES["userfile"]["name"]."
"; echo "size: ".$_FILES["userfile"]["size"]."
"; echo "type: ".$_FILES["userfile"]["type"]."
"; } ?>
"method="post">

Παραδείγματα μεταφόρτωσης αρχείων στον διακομιστή

Εάν υπάρχουν προβλήματα με τη μετατροπή του μεταφορτωμένου αρχείου από τον διακομιστή, το σύμβολο με τον κωδικό 0x00αντικαταστάθηκε με ένα κενό (χαρακτήρας με κωδικό 0x20), προσθέστε στο αρχείο httpd.confαπό τον κατάλογο Apache (/usr/local/apache) οι ακόλουθες γραμμές.

CharsetRecodeMultipartForms Off