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

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

Φόρμα υποβολής HTML

Η φόρμα στη σελίδα σχηματίζεται από ετικέτες

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

* Για την HTML5, είναι επίσης δυνατό να τοποθετήσετε ετικέτες πεδίων φόρμας όχι μέσα σε ετικέτες φόρμας, αλλά οπουδήποτε στη σελίδα. Ταυτόχρονα, για κάθε τέτοιο πεδίο, πρέπει να καθοριστεί το χαρακτηριστικό "form" προκειμένου να καθοριστεί με ποια μορφή υποβολής θα πρέπει να αλληλεπιδράσει.

Έτσι, η απλούστερη υποβολή φόρμας μπορεί να περιέχει τον ακόλουθο κώδικα:


Μια αξία:
Τιμή B:

Στοιχεία φόρμας και οι παράμετροί τους:

action="myform.php"– το χαρακτηριστικό "action" καθορίζει ποιο αρχείο php θα επεξεργαστεί τα αποσταλμένα δεδομένα. Σε αυτό το παράδειγμα, τα δεδομένα θα σταλούν στο αρχείο "myform.php" που βρίσκεται στον ίδιο κατάλογο με τη σελίδα της φόρμας. Εάν αυτό το χαρακτηριστικό δεν προσδιορίζεται ρητά, τα δεδομένα της φόρμας θα σταλούν στη διεύθυνση σελίδας της ίδιας της φόρμας.

μέθοδος = "ανάρτηση"– η παράμετρος μεθόδου ορίζει τη μέθοδο μεταφοράς δεδομένων POST ή GET. Περισσότερα για αυτό στο άρθρο "Διαφορές μεταξύ μεθόδων POST και GET" . Εάν δεν προσδιορίσετε ρητά το χαρακτηριστικό, η μέθοδος GET θα χρησιμοποιηθεί από προεπιλογή.

Κείμενο "Τιμή Α:"Και "Τιμή Β:"προστίθεται μόνο για σκοπούς σχεδιασμού και κατανοητότητας της φόρμας για τον χρήστη. Δεν είναι απαραίτητο να το προσθέσετε για μεταφορά δεδομένων, αλλά για να καταλάβει ο χρήστης τι πρέπει να εισάγει, αξίζει να το διευκρινίσετε.

ετικέτες χρησιμοποιούνται για να σχηματίσουν διάφορα στοιχεία ελέγχου φορμών.

type = "κείμενο"– το χαρακτηριστικό "type" καθορίζει τον τύπο του πεδίου. Ανάλογα με τον τύπο που καθορίζεται, το εμφάνισηστοιχείο και ο σκοπός του. Η τιμή του χαρακτηριστικού "text" καθορίζει ότι το στοιχείο θα εμφανίζεται στο πρόγραμμα περιήγησης ως πεδίο κειμένου μιας γραμμής όπου ο χρήστης μπορεί να εισαγάγει τη συμβολοσειρά του.

όνομα = "δεδομένα 1"– το χαρακτηριστικό "όνομα" υποδεικνύει το όνομα, ή μάλλον το ευρετήριο των δεδομένων στον πίνακα που λαμβάνει ο διακομιστής. Αυτή είναι μια απαιτούμενη παράμετρος, μέσω της οποίας στον χειριστή php θα είναι δυνατή η πρόσβαση στη μεταβιβασμένη τιμή. Το όνομα μπορεί να επιλεγεί αυθαίρετα, ωστόσο, είναι πιο βολικό όταν αυτή η τιμή έχει κάποιο σαφές νόημα.

πληκτρολογήστε "υποβολή"- ετικέτα με αυτήν την τιμή της παραμέτρου "τύπος" θα εμφανίζεται στη σελίδα ως κουμπί. Στην πραγματικότητα, μπορείτε να κάνετε χωρίς κουμπί στη φόρμα. Αν, για παράδειγμα, υπάρχουν πεδία κειμένου στη φόρμα, τότε η αποστολή μπορεί να γίνει πατώντας απλά το «Enter» στο πληκτρολόγιο. Αλλά η ύπαρξη ενός κουμπιού κάνει τη φόρμα πιο ξεκάθαρη.

value="Υποβολή" !}– σε αυτήν την περίπτωση (για type="submit") ορίζει μόνο τη λεζάντα στο κουμπί. Για παράδειγμα, για type="text", αυτό θα είναι το κείμενο που θα εμφανίζεται στο πεδίο κειμένου.

Ως αποτέλεσμα, στη σελίδα αυτός ο κώδικας θα μοιάζει κάπως έτσι:

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

Επεξεργασία δεδομένων φόρμας HTML που υποβλήθηκαν σε PHP

Τα δεδομένα που αποστέλλονται με τον τρόπο που περιγράφεται τοποθετούνται στους υπερσφαιρικούς πίνακες $_POST, $_GET και $_REQUEST. Το $_POST ή το $_GET θα περιέχει δεδομένα ανάλογα με τη μέθοδο που στάλθηκε. Το $_REQUEST περιέχει δεδομένα που υποβλήθηκαν με οποιαδήποτε από τις καθορισμένες μεθόδους.

Οι $_POST, οι $_GET και οι $_REQUEST είναι συσχετιστικοί πίνακες των οποίων τα πεδία ευρετηρίου ταιριάζουν με τα χαρακτηριστικά "όνομα" των ετικετών . Αντίστοιχα, για να εργαστείτε με δεδομένα στο αρχείο myform.php, μπορείτε να αντιστοιχίσετε τις τιμές των στοιχείων ενός τέτοιου πίνακα σε μεταβλητές, καθορίζοντας το όνομα του πεδίου ως ευρετήριο:

// για τη μέθοδο GET
$a = $_GET[ "data1" ];
$b = $_GET[ "data2"];

// για τη μέθοδο POST
$a = $_POST[ "data1" ];
$b = $_POST[ "data2"];

// με οποιαδήποτε μέθοδο
$a = $_ΑΙΤΗΣΗ[ "data1" ];
$b = $_ΑΙΤΗΣΗ[ "data2"];

Έλεγχος συμπλήρωσης πεδίων φόρμας

Μερικές φορές, κατά τη λήψη δεδομένων, πρέπει να ελέγξετε εάν ο χρήστης έχει υποβάλει μια κενή φόρμα. Μπορείτε να χρησιμοποιήσετε τη συνάρτηση κενού για αυτό.

εάν (κενό ($_REQUEST["data1" ])) (
ηχώ "Το πεδίο δεν έχει συμπληρωθεί";
} αλλού(
ηχώ "Το χωράφι γέμισε";
$a = $_ΑΙΤΗΣΗ[ "data1" ];
}

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

if (isset ($_REQUEST["data1" ])) (
ηχώ "Το χωράφι γέμισε";
$a = $_ΑΙΤΗΣΗ[ "data1" ];
} αλλού(
ηχώ "Το πεδίο δεν έχει συμπληρωθεί";
}

Ένα από τα πιο κοινά καθήκοντα στην πράξη είναι η εφαρμογή μιας φόρμας ανατροφοδότησης. Tobish γράφοντας τον κώδικα HTML του, διαμορφώνοντάς τον σε CSS, Δημιουργία PHPένα σενάριο που θα επεξεργαζόταν τα δεδομένα που έλαβε ο χρήστης και θα τα έστελνε στην αλληλογραφία μας, γράφοντας ένα σενάριο JS που θα έλεγχε τη φόρμα για την επάρκεια των δεδομένων εισόδου, προστατεύοντας τους απογόνους μας από ανεπιθύμητα μηνύματα ώστε το γραμματοκιβώτιό μας να μην καταρρεύσει από επιθέσεις bot .

Όλα τα παραπάνω σημεία θα ληφθούν υπόψη στην κριτική μας και θα σχολιαστούν λεπτομερώς.

Λοιπόν, ας αρχίσουμε να δημιουργούμε μια φόρμα σχολίων:

HTML

Πρώτα από όλα γράφουμε κώδικα HTML, ορίζει τα πεδία που θα συμπληρώσει ο χρήστης. Θα αναπτυχθούν στο μέλλον. Ο κωδικός της φόρμας μοιάζει με αυτό:

< form method= "post" action= "mail.php" > < div class = "left" > < label for = "name" >Ονομα: < input maxlength= "30" type= "text" name= "name" /> < label for = "phone" >Τηλέφωνο: < input maxlength= "30" type= "text" name= "phone" /> < label for = "mail" >ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ: < input maxlength= "30" type= "text" name= "mail" /> < div class = "right" > < label for = "message" >Μήνυμα: < textarea rows= "7" cols= "50" name= "message" > < input type= "submit" value= "Στείλετε" />

Και οπτικά μοιάζει με αυτό τώρα:

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

Εξετάστε τον παραπάνω κώδικα αναλυτικά:

  • < form method= "post" action= "mail.php" > …


    Για να δημιουργήσετε μια φόρμα, πρέπει να χρησιμοποιήσετε την ετικέτα φόρμας. Είναι αυτός που καθορίζει την αρχή και το τέλος της φόρμας για τον διερμηνέα κώδικα. Όπως κάθε ετικέτα, έχει ένα ολόκληρο σύνολο χαρακτηριστικών, αλλά απαιτούνται μόνο δύο για να λειτουργήσει η φόρμα, αυτές είναι η μέθοδος (η μέθοδος αποστολής αιτήματος στον διακομιστή, η ανάρτηση χρησιμοποιείται τυπικά για φόρμες) και η ενέργεια (υποδεικνύει η διαδρομή προς το αρχείο χειριστή φόρμας, δηλαδή σε αυτό το αρχείο θα περιέχει ένα σενάριο PHP, το οποίο στη συνέχεια θα μας στείλει τις τιμές που εισάγει ο χρήστης σε εμάς μέσω ταχυδρομείου, στην περίπτωσή μας βλέπουμε ότι αυτό το αρχείο ονομάζεται mail.php και βρίσκεται στον ίδιο κατάλογο ιστότοπου με τη σελίδα που εξετάζουμε).
  • < input maxlength= "30" type= "text" name= "name" />


    Στη συνέχεια έχουμε εισόδους. Αυτά είναι στην πραγματικότητα τα ίδια τα πεδία φόρμας στα οποία οι χρήστες θα εισάγουν τις πληροφορίες που χρειαζόμαστε (τύπος = "κείμενο" υποδηλώνει ότι θα είναι κείμενο). Το χαρακτηριστικό maxlength καθορίζει πόσους χαρακτήρες μπορεί να εισαγάγει ο χρήστης στο δεδομένο πεδίο φόρμας. Το πιο σημαντικό χαρακτηριστικό είναι το όνομα - καθορίζει το όνομα ενός συγκεκριμένου πεδίου. Είναι με αυτά τα ονόματα που το σενάριο PHP θα επεξεργαστεί περαιτέρω τις πληροφορίες που έρχονται σε αυτό. Εάν θέλετε, μπορείτε επίσης να ορίσετε το χαρακτηριστικό κράτησης θέσης, το οποίο εμφανίζει κείμενο μέσα στο πεδίο που εξαφανίζεται όταν τοποθετηθεί ο δρομέας μέσα σε αυτό. Ένα πρόβλημα με το σύμβολο κράτησης θέσης είναι ότι δεν υποστηρίζεται από ορισμένα παλαιότερα προγράμματα περιήγησης.
  • < label for = "name" >Ονομα:


    Χρησιμοποιείται εάν έχουμε εγκαταλείψει placeholders. Η συνηθισμένη ετικέτα πεδίου, το χαρακτηριστικό for λέει σε ποιο πεδίο αναφέρεται η συγκεκριμένη ετικέτα. Η τιμή υποδεικνύει το όνομα του πεδίου που μας ενδιαφέρει.
  • < textarea rows= "7" cols= "50" name= "message" >


    Ακριβώς όπως η είσοδος, προορίζεται για τον χρήστη να εισάγει πληροφορίες, μόνο που αυτή τη φορά το πεδίο οξύνεται για μεγάλα μηνύματα. Το Rows καθορίζει το μέγεθος του πεδίου σε γραμμές, τις αρχικές σε χαρακτήρες. Γενικά ορίζουν το ύψος και το πλάτος του γηπέδου μας.
  • < input type= "submit" value= "Στείλετε" />


    Το Type="submit" μας λέει ότι αυτό είναι ένα κουμπί για την υποβολή της φόρμας και η τιμή καθορίζει το κείμενο που θα βρίσκεται μέσα σε αυτό το κουμπί.
  • < div class = "right" >


    χρησιμοποιείται μόνο για περαιτέρω οπτικό σχεδιασμό της φόρμας.

css

Για να είναι εμφανίσιμη η φόρμα σχολίων μας, πρέπει να σχεδιαστεί. Για να έχετε το εξής αποτέλεσμα:

Χρησιμοποιήσαμε αυτόν τον κωδικό:

φόρμα ( φόντο: #f4f5f7; padding: 20px; ) φόρμα . αριστερά, μορφή. δεξιά ( οθόνη: ενσωματωμένο μπλοκ, κατακόρυφη στοίχιση: επάνω, πλάτος: 458 εικονοστοιχεία; ) φόρμα . δεξιά ( συμπλήρωση- αριστερά: 20 εικονοστοιχεία; ) ετικέτα ( οθόνη: μπλοκ; μέγεθος γραμματοσειράς: 18 εικονοστοιχεία; στοίχιση κειμένου: κέντρο; περιθώριο: 10 εικονοστοιχεία 0 εικονοστοιχεία 0 εικονοστοιχεία 0 εικονοστοιχεία; ) είσοδος, περιοχή κειμένου ( περίγραμμα: 1 εικονοστοιχεία συμπαγές #82858D; padding: 10 px; μέγεθος γραμματοσειράς: 16 εικονοστοιχεία; πλάτος: 436 εικονοστοιχεία; ) περιοχή κειμένου (ύψος: 98 εικονοστοιχεία; περιθώριο- κάτω: 32 εικονοστοιχεία; ) είσοδος[ type= "submit" ] (πλάτος: 200 px; float: δεξιά; περίγραμμα: κανένα; φόντο: #595B5F; χρώμα: #fff; μετατροπή κειμένου: κεφαλαία; )

Δεν βλέπω το νόημα να περιγράψω λεπτομερώς το CSS, θα επιστήσω την προσοχή σας μόνο στα βασικά σημεία:

  1. Δεν είναι απαραίτητο να γράψετε ένα σχέδιο για κάθε ετικέτα στη φόρμα. Προσπαθήστε να δημιουργήσετε τους επιλογείς σας με τέτοιο τρόπο ώστε να μπορείτε να διαμορφώσετε όλα τα στοιχεία που χρειάζεστε σε μερικές γραμμές κώδικα.
  2. Μην χρησιμοποιείτε επιπλέον ετικέτες ανά τύπο για να σπάσετε γραμμές και να δημιουργήσετε εσοχές < br>, < p> και ούτω καθεξής, αυτές οι εργασίες αντιμετωπίζονται τέλεια από το CSS με την εμφάνιση ιδιοτήτων: μπλοκ και περιθώριο με padding. Περισσότερα για το γιατί δεν πρέπει να χρησιμοποιείτε < br> στη διάταξη, γενικά, μπορείτε να διαβάσετε την ετικέτα br στο άρθρο, αλλά χρειάζεται πραγματικά; .
  3. Μην χρησιμοποιείτε διάταξη πίνακα για φόρμες. Αυτό έρχεται σε αντίθεση με τη σημασιολογία αυτής της ετικέτας και οι μηχανές αναζήτησης λατρεύουν τον σημασιολογικό κώδικα. Για να διαμορφώσουμε την οπτική δομή του εγγράφου, μας αρκούν οι ετικέτες div και η εμφάνιση: ιδιότητες inline-block που ορίζονται σε CSS (τακτοποιεί τα μπλοκ σε μια σειρά) και κάθετη στοίχιση: επάνω (αποτρέπει την εξάπλωσή τους στην οθόνη ), τους ρυθμίζουμε το απαιτούμενο ύψος και voila, τίποτα το περιττό και όλα τακτοποιούνται όπως τα χρειαζόμαστε.

Για όσους θέλουν να εξοικονομήσουν χρόνο στη σχεδίαση τοποθεσιών, μπορώ να σας συμβουλεύσω να χρησιμοποιείτε πλαίσια CSS κατά τη δημιουργία ιστότοπων, ειδικά αυτογραφούμενων. Η επιλογή μου από αυτή την άποψη είναι το Twitter Bootstrap. Μπορείτε να δείτε ένα μάθημα σχετικά με το σχεδιασμό φορμών με τη χρήση του.

PHP

Λοιπόν, ήρθε η ώρα να κάνουμε τη φόρμα μας λειτουργική.

Πηγαίνουμε στον ριζικό μας κατάλογο του ιστότοπου και δημιουργούμε εκεί το αρχείο mail.php, στο οποίο προηγουμένως καθορίσαμε τη διαδρομή στο χαρακτηριστικό action της ετικέτας φόρμας.

Τελικά, ο κώδικας του θα μοιάζει με αυτό:

Το μήνυμά σας έχει σταλεί με επιτυχία \" javascript: history.back()\" >Επιστροφή

" ; αν (! κενό ($_POST [ "όνομα" ] ) και ! κενό ($_POST [ "τηλέφωνο" ] ) και ! κενό ($_POST [ "ταχυδρομείο" ] ) και ! κενό ($_POST [ "μήνυμα" ] ) ) ( $name = περικοπή (strip_tags ($_POST [ "όνομα" ] ) ) ) ; $phone = περικοπή (strip_tags ($_POST [ "τηλέφωνο" ] ) ) ; $mail = περικοπή (strip_tags ($_POST [ "mail" ] ) ) ; $message = περικοπή (strip_tags ($_POST [ "μήνυμα" ] ) ) ; mail (, , "Στάλθηκε σε εσάς: " . $name . "
Ο αριθμός του: " . $phone ."
Η αλληλογραφία του: " . $mail . "
Το μήνυμά του: "
. $message , ); ηχώ "Το μήνυμά σας έχει σταλεί με επιτυχία!
Θα λάβετε απάντηση σύντομα
$πίσω"
; έξοδος; ) else ( echo ; exit ; ) ?>

Μπορείτε να παραλείψετε τη συζήτηση των τμημάτων HTML και CSS αυτού του εγγράφου. Στον πυρήνα της, αυτή είναι μια κανονική σελίδα του ιστότοπου, την οποία μπορείτε να σχεδιάσετε όπως θέλετε και χρειάζεστε. Ας εξετάσουμε το πιο σημαντικό μέρος του - το σενάριο PHP για την επεξεργασία της φόρμας:

$back = "

\" javascript: history.back()\" >Επιστροφή

" ;

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

αν (! κενό ($_POST [ "όνομα" ] ) και ! κενό ($_POST [ "τηλέφωνο" ] ) και ! κενό ($_POST [ "ταχυδρομείο" ] ) και ! κενό ($_POST [ "μήνυμα" ] ) ) ( // εσωτερικό μέρος του χειριστή) άλλο (ηχώ "Παρακαλώ συμπληρώστε όλα τα πεδία για να στείλετε ένα μήνυμα! $back "; έξοδος; )

Εδώ στερεώνουμε τον έλεγχο φόρμας για την πληρότητα των πεδίων. Όπως μαντέψατε, στο τμήμα $_POST["name"], γράφουμε την τιμή του χαρακτηριστικού name των εισαγωγών μας σε εισαγωγικά.

Εάν συμπληρωθούν όλα τα πεδία, τότε το σενάριο θα αρχίσει να επεξεργάζεται τα δεδομένα στο εσωτερικό του τμήμα, αλλά αν δεν έχει συμπληρωθεί τουλάχιστον ένα πεδίο, τότε θα εμφανιστεί ένα μήνυμα στην οθόνη του χρήστη με αίτημα να συμπληρωθούν όλα τα πεδία της φόρμας echo "Για να στείλετε ένα μήνυμα, συμπληρώστε όλα τα πεδία! $back" και έναν σύνδεσμο για να επιστρέψετε στην προηγούμενη σελίδα που δημιουργήσαμε με την πρώτη γραμμή.

Στη συνέχεια, επικολλήστε το στο εσωτερικό του προγράμματος χειρισμού φόρμας:

$name = περικοπή (strip_tags ($_POST [ "όνομα" ] ) ; $phone = περικοπή (strip_tags ($_POST [ "τηλέφωνο" ] ) ; $mail = περικοπή (strip_tags ($_POST [ "mail" ] ) ; $message = περικοπή (strip_tags ($_POST [ "μήνυμα" ] ) ;

Έτσι, καθαρίσαμε την είσοδο του χρήστη από ετικέτες html και επιπλέον κενά. Αυτό μας επιτρέπει να προστατευτούμε από τη λήψη κακόβουλου κώδικα σε μηνύματα που μας αποστέλλονται.

Οι έλεγχοι μπορεί να είναι περίπλοκοι, αλλά εξαρτάται από εσάς. Έχουμε ήδη ορίσει την ελάχιστη προστασία από την πλευρά του διακομιστή. Θα κάνουμε τα υπόλοιπα στην πλευρά του πελάτη χρησιμοποιώντας JS.

Δεν συνιστώ να εγκαταλείψετε εντελώς την προστασία φόρμας από την πλευρά του διακομιστή υπέρ του JS, επειδή, αν και είναι εξαιρετικά σπάνιο, υπάρχουν μοναδικά άτομα με απενεργοποιημένη JS στο πρόγραμμα περιήγησης.

Αφού καθαρίσετε τις ετικέτες, προσθέστε το μήνυμα αποστολής:

ταχυδρομείο ( "[email protected]", "Email from your_site_address", "Σας έγραψε: " . $name . "
Ο αριθμός του: " . $phone ."
Η αλληλογραφία του: " . $mail . "
Το μήνυμά του: "
. $μήνυμα, "Content-type:text/html;charset=windows-1251") ;

Αυτή η γραμμή είναι που ασχολείται με τη διαμόρφωση και την αποστολή ενός μηνύματος προς εμάς. Συμπληρώνεται ως εξής:

  1. "[email protected]" - εισάγετε την αλληλογραφία σας μεταξύ εισαγωγικών εδώ
  2. "Email from your_site_address" είναι το θέμα του μηνύματος που θα σταλεί στο mail. Μπορείτε να γράψετε οτιδήποτε εδώ.
  3. "Σας έγραψε: ".$name." < br /> Ο αριθμός του είναι: ".$phone." < br /> Η αλληλογραφία του: ".$mail." < br /> Το μήνυμά του: ".$message - σχηματίζουμε το ίδιο το κείμενο του μηνύματος. $name - εισάγουμε τις πληροφορίες που συμπλήρωσε ο χρήστης μέσω της πρόσβασης στα πεδία από το προηγούμενο βήμα, σε εισαγωγικά περιγράφουμε τι σημαίνει αυτό το πεδίο, με την ετικέτα < br /> κάνουμε μια αλλαγή γραμμής ώστε το μήνυμα στο σύνολό του να είναι ευανάγνωστο.
  4. Content-type:text/html;charset=windows-1251 - στο τέλος υπάρχει ρητή ένδειξη του τύπου δεδομένων που μεταδίδεται στο μήνυμα και της κωδικοποίησής του.

ΣΠΟΥΔΑΙΟΣ!

Η κωδικοποίηση που καθορίζεται στην "κεφαλή" του εγγράφου ( < meta http- equiv= "Content-Type" content= "text/html; charset=windows-1251" /> ), η κωδικοποίηση από το μήνυμα Content-type:text/html;charset=windows-1251 και γενικά η κωδικοποίηση του αρχείου PHP πρέπει να ταιριάζει, διαφορετικά στα μηνύματα που λαμβάνονται ταχυδρομικά, αντί για ρωσικά ή αγγλικά γράμματα, «τρελές λέξεις " θα εμφανιστεί.

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

Έλεγχος της φόρμας για την επάρκεια των δεδομένων εισαγωγής

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

Αυτό μπορεί να γίνει τόσο σε PHP στην πλευρά του διακομιστή όσο και σε JS στην πλευρά του πελάτη. Χρησιμοποιώ τη δεύτερη επιλογή, γιατί με αυτόν τον τρόπο ένα άτομο μπορεί να ανακαλύψει αμέσως τι έκανε λάθος και να διορθώσει το λάθος χωρίς να κάνει επιπλέον μεταβάσεις σελίδων.

Ο κώδικας σεναρίου εισάγεται στο ίδιο αρχείο όπου έχουμε το τμήμα HTML της φόρμας. Για την περίπτωσή μας, θα μοιάζει με αυτό:

< script>συνάρτηση checkForm(form) ( var name = μορφή. όνομα. τιμή; var n = όνομα. match(/ ^[ A- Za- zA- Za-z] * [ A- Za- zA- Za-z] + $/ ) ; αν (! n) ( ειδοποίηση( "Το όνομα εισήχθη λανθασμένα, διορθώστε το σφάλμα") ; επιστροφή ψευδής ; ) var phone = έντυπο. τηλέφωνο. αξία; var p = τηλέφωνο. match(/ ^[ 0 - 9 + ] [ 0 - 9 - ] * [ 0 - 9 - ] + $/ ); αν (! p) (ειδοποίηση( "Το τηλέφωνο εισήχθη λάθος") ; επιστροφή ψευδής ; ) var mail = έντυπο. ταχυδρομείο. αξία; var m = αλληλογραφία . match(/ ^[ A- Za- z0- 9 ] [ A- Za- z0- 9 \. _- ] * [ A- Za- z0- 9 _] *@ ([ A- Za- z0- 9 ] + ([ A- Za- z0- 9 - ] * [ A- Za- z0- 9 ] + ) * \. ) + [ A- Za- z] + $/ ) ; αν (! m) ( ειδοποίηση( "Το email που πληκτρολογήσατε είναι λάθος, διορθώστε το σφάλμα") ; επιστροφή ψευδής ; ) επιστροφή true ; )

Λοιπόν, τώρα η συνηθισμένη ανάλυση:

Γι'αυτό, ώστε όταν κάνετε κλικ στο κουμπί υποβολής της φόρμας, να το έχουμε επικυρώσεικρεμάμε την έναρξη του σεναρίου μας στην ετικέτα φόρμας:

< form method= "post" action= "mail.php" onSubmit= "return checkForm(this)" >

Τώρα, σημείο προς σημείο, παίρνουμε τη σύνθεση του ελέγχου:


Όπως μπορείτε να δείτε, μια τέτοια μίνι επιταγή γράφεται για κάθε πεδίο μας. Τόνισα τον έλεγχο για ένα πεδίο στο στιγμιότυπο οθόνης με ένα κόκκινο τετράγωνο, για άλλα πεδία έχει παρόμοια δομή και αν χρειάζεται να προσθέσετε ένα πεδίο ή να το αφαιρέσετε, μπορείτε πλέον να το κάνετε εύκολα.

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

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

Κατά τη δημιουργία μιας φόρμας, εμπλέκονται δύο σημαντικά χαρακτηριστικά: δράσηΚαι μέθοδος.

δράσηΧρησιμοποιείται για την εισαγωγή της διεύθυνσης URL όπου υποβάλλεται η φόρμα. Αυτό μπορεί να είναι ένα αρχείο PHP που χειρίζεται την εισαγωγή. μέθοδοςΜπορεί να είναι "post" ή "get", που είναι διαφορετικές μέθοδοι μετάδοσης δεδομένων. Προς το παρόν, δεν χρειάζεται να εμβαθύνετε στις διαφορές μεταξύ αυτών των μεθόδων. η μέθοδος "get" στέλνει τα δεδομένα μέσω URL και η μέθοδος "post" τα στέλνει ως μπλοκ δεδομένων μέσω της τυπικής υπηρεσίας εισαγωγής (STDIN). Στο τελευταίο σεμινάριο που παρακολουθήσαμε, είδαμε πώς ανακτώνται δεδομένα μέσω μιας διεύθυνσης URL χρησιμοποιώντας το $_GET . Σε αυτό το σεμινάριο, θα δούμε πώς λαμβάνονται τα δεδομένα που αποστέλλονται μέσω της μεθόδου "ανάρτηση".

Σελίδα HTML με φόρμα

Η σελίδα φόρμας δεν χρειάζεται να είναι αρχείο PHP (αλλά μπορεί να είναι). Δεν χρειάζεται καν να βρίσκεται στον ίδιο ιστότοπο με το αρχείο που λαμβάνει τα δεδομένα.

Στο πρώτο μας παράδειγμα, θα δούμε μια πολύ απλή φόρμα με ένα μόνο πεδίο κειμένου:

Μορφή

Εισάγετε το όνομά σας

Η ακόλουθη φόρμα θα εμφανιστεί στο πρόγραμμα περιήγησης:

Τώρα έρχεται το διασκεδαστικό μέρος: λήψη και επεξεργασία δεδομένων με PHP.

Αίτημα δεδομένων φόρμας με PHP

Εάν πρέπει να ζητήσετε δεδομένα που υποβάλλονται μέσω μιας φόρμας (χρησιμοποιώντας το Θέση), χρησιμοποιείτε $_POST :

$_POST["όνομα πεδίου"];

που θα επιστρέψει την τιμή του πεδίου φόρμας. Ας το δοκιμάσουμε με ένα παράδειγμα.

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

).

Το αρχείο "handler.php" θα περιέχει:

Μορφή ηχώ "

"; ?>

Εισαγωγή χρήστη και συνθήκες

Στο παρακάτω παράδειγμα, θα προσπαθήσουμε να χρησιμοποιήσουμε την είσοδο χρήστη για να δημιουργήσουμε συνθήκες. Πρώτα χρειαζόμαστε μια φόρμα:

Μορφή

Πως σε λένε:

Το αγαπημένο σου χρώμα: το κόκκινο Πράσινος Μπλε

Στο πρόγραμμα περιήγησης θα μοιάζει με αυτό:

Τώρα χρησιμοποιούμε αυτές τις εισόδους για να δημιουργήσουμε μια σελίδα που αλλάζει αυτόματα το χρώμα του φόντου με βάση την είσοδο του χρήστη. Αυτό γίνεται με τη δημιουργία μιας συνθήκης (βλ. Μάθημα ) που χρησιμοποιεί τα δεδομένα που έχει καταχωρίσει ο χρήστης στη φόρμα.

$strHeading = "

Γεια σας, " . $_POST["όνομα χρήστη"] ."

"; διακόπτης ($_POST["favoritecolor"]) (περίπτωση "r": σπάσιμο; περίπτωση "ζ"? Διακοπή; περίπτωση "β": διάλειμμα; προεπιλογή: break; ) ?> Μορφή

Το φόντο θα είναι λευκό, εκτός εάν ο χρήστης καθορίσει ένα προτιμώμενο χρώμα στη φόρμα. Αυτό επιτυγχάνεται με τη ρύθμιση της τιμής Προκαθορισμένο(προεπιλογή), η οποία εφαρμόζεται εάν δεν πληρούται καμία από τις προϋποθέσεις.

Τι συμβαίνει όμως εάν ο χρήστης δεν δώσει το όνομά του; Τότε ο τίτλος θα είναι μόνο "Γεια,". Ας δημιουργήσουμε μια πρόσθετη συνθήκη για να αλλάξετε αυτήν την επιλογή.

$strUsername = $_POST["όνομα χρήστη"]; if ($strUsername != "") ( $strHeading = "

Γεια σας, " . $_POST["όνομα χρήστη"] ."

"; ) άλλο ( $strHeading = "

Γεια σου ξένε!

";
} διακόπτης ($_POST["αγαπημένο χρώμα"]) (περίπτωση "r": $strBackgroundColor = "rgb(255,0,0)";Διακοπή; περίπτωση "ζ"? $strBackgroundColor = "rgb(0,255,0)";Διακοπή; περίπτωση «β»: $strBackgroundColor = "rgb(0,0,255)";Διακοπή; Προκαθορισμένο: $strBackgroundColor = "rgb(255,255,255)";Διακοπή; ) ?> Μορφή

Στο παραπάνω παράδειγμα, χρησιμοποιούμε τις προϋποθέσεις για επιταγέςπληροφορίες από τον χρήστη. Σε αυτήν την περίπτωση, δεν είναι τόσο σημαντικό εάν ο χρήστης δεν καθορίσει ένα όνομα. Αλλά καθώς ο κώδικάς σας γίνεται όλο και πιο περίπλοκος, είναι ζωτικής σημασίας να λάβετε υπόψη την επιλογή να μην συμπληρώνει καθόλου φόρμες ο χρήστης.

Παράδειγμα: Φόρμα Επικοινωνίας

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

Ταχυδρομείο (όπου, θέμα, μήνυμα)

Αρχικά, ας δημιουργήσουμε μια απλή φόρμα HTML:

Φόρμα Επικοινωνίας

Φόρμα Επικοινωνίας

Θέμα:

Μήνυμα:

Στη συνέχεια, χρειάζεστε ένα σενάριο PHP για να στείλετε τα δεδομένα χρήστη:

Λειτουργίες // Παραλήπτης (αλλαγή στη διεύθυνση ηλεκτρονικού ταχυδρομείου σας) $strEmail = " [email προστατευμένο]"; // Λήψη εισροών χρήστη $strSubject = $_POST["θέμα"]; $strMessage = $_POST["μήνυμα"]; mail($strEmail,$strSubject,$strMessage); echo "Αποστολή αλληλογραφίας."; ?>

Σημειώστε ότι το παράδειγμα λειτουργεί μόνο εάν έχετε πρόσβαση στον διακομιστή αλληλογραφίας. Αυτό δεν συμβαίνει από προεπιλογή στο XAMPP και στους περισσότερους δωρεάν κεντρικούς υπολογιστές. Έτσι, ορισμένοι κεντρικοί υπολογιστές μπορεί να απαιτούν μια κεφαλίδα φόρμας, η οποία γίνεται με μια πρόσθετη παράμετρο:

Ταχυδρομείο ("[email protected]", "Test", "This is a test message", "From: [email protected]");

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

Beispiel #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, ελαχιστοποιείτε τον κίνδυνο εισαγωγής κώδικα (ADs) από τους χρήστες σας στην επισκεψιμότητά σας που δεν έχετε τοποθετήσει εκεί.

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

Υποβολή φόρμας

Πεδίο εισαγωγής. Τα πιο κοινά στοιχεία φόρμας είναι διάφορα πεδία εισαγωγής. Δημιουργούνται χρησιμοποιώντας την ετικέτα πολλά είδη και ετικέτα

επιλέγω. Από ετικέτα , και για στοιχεία λίστας, δηλαδή για ετικέτες

Κουμπί ραδιοφώνου. Όλα τα κουμπιά επιλογής από την ίδια ομάδα πρέπει να έχουν το ίδιο χαρακτηριστικό όνομα. Αυτή η τιμή όχι μόνο ορίζει το όνομα της παραμέτρου, αλλά επίσης ομαδοποιεί τα κουμπιά επιλογής σε μια ομάδα από την οποία μπορεί να επιλεγεί μόνο ένα κουμπί επιλογής. Το χαρακτηριστικό value ορίζεται διαφορετικά. Ας προσθέσουμε κουμπιά επιλογής στη φόρμα:

Πλαίσιο ελέγχου. Σε αντίθεση με τα κουμπιά επιλογής, κάθε πλαίσιο ελέγχου είναι ένα ξεχωριστό στοιχείο φόρμας. Όλα τα πλαίσια ελέγχου είναι ανεξάρτητα το ένα από το άλλο και το καθένα στέλνει τα δεδομένα του στον διακομιστή. Το χαρακτηριστικό name όλων των πλαισίων ελέγχου πρέπει να είναι διαφορετικό και το χαρακτηριστικό value μπορεί να είναι είτε το ίδιο είτε διαφορετικό. Ωστόσο, το πλαίσιο ελέγχου δεν έχει συγκεκριμένα δεδομένα. Μπορεί είτε να επιλεγεί είτε όχι. Επομένως, δεν έχει νόημα να το ορίσετε σε μεγάλη τιμή. Μπορεί να οριστεί σε μια τιμή ενός χαρακτήρα, για παράδειγμα, 1. Στο διακομιστή, η σημασία αυτής της τιμής θα είναι η εξής: εάν υπάρχει μια τιμή, τότε επιλέχθηκε το πλαίσιο ελέγχου και εάν δεν υπάρχει τιμή, τότε δεν επιλέγεται. Ας προσθέσουμε πλαίσια ελέγχου στη φόρμα και ας δημιουργήσουμε ένα κουμπί υποβολής φόρμας:

Επεξεργασία δεδομένων από φόρμες

Στο προτεινόμενο παράδειγμα, δημιουργείται μια φόρμα που στέλνει δεδομένα σε ένα σενάριο που ονομάζεται takeform.php. Επομένως, πρέπει να δημιουργήσετε αυτό το σενάριο. Δεν θα είναι απλώς ένα πρόγραμμα, αλλά μια σελίδα που θα σχηματίζεται ανάλογα με τα δεδομένα που λαμβάνονται από τη φόρμα. Η φόρμα υποβάλλεται με τη μέθοδο POST. Το σενάριο παίρνει αυτά τα δεδομένα από τον υπερσφαιρικό πίνακα $_POST. Τα στοιχεία του πίνακα μπορούν απλά να χρησιμοποιηθούν στο σενάριο, αλλά αν χρειάζεται να εργαστείτε πολύ με αυτά, τότε δεν είναι βολικό να γράφετε το όνομα του στοιχείου κάθε φορά. Είναι πιο εύκολο να γράψετε μια τιμή σε μια μεταβλητή και να αποκτήσετε πρόσβαση σε αυτήν. Ας δημιουργήσουμε ένα αρχείο takeform.php και γράψουμε τις τιμές από τα δύο πρώτα στοιχεία φόρμας σε μεταβλητές:

takeform.php:

Για επισήμανση