Αποστολή δεδομένων από τη φόρμα σε μια διεύθυνση email. Φόρμες HTML. Μέθοδοι αποστολής δεδομένων στον διακομιστή με χρήση φόρμας

Ενημερώθηκε 12/12/2015

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

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

Τα πλεονεκτήματα της αποστολής μηνυμάτων με αυτόν τον τρόπο είναι προφανή:

1. Δεν χρειάζεται να «λάμπετε» τη διεύθυνση email σας στο Διαδίκτυο, πράγμα που σημαίνει ότι δεν θα φτάσει στους spammers.

2. Εάν ένας επισκέπτης θέλει να σας κάνει μια ερώτηση ή να του κάνει κάτι, δεν χρειάζεται να αντιγράψει τη διεύθυνση ηλεκτρονικού ταχυδρομείου, να ανοίξει το πρόγραμμα-πελάτη ηλεκτρονικού ταχυδρομείου του, να γράψει ένα μήνυμα κ.λπ. Ο επισκέπτης θα συμπληρώσει γρήγορα τα απαραίτητα στοιχεία στη φόρμα και θα σας στείλει ένα μήνυμα.

3. Με τέτοια οργάνωση σχολίων από επισκέπτες, η πιθανότητα να σας παραδοθεί το μήνυμα είναι σχεδόν 100%, ειδικά εάν η διεύθυνση email είναι συνδεδεμένη με τον τομέα σας. Εξάλλου, οι ενδιάμεσοι κόμβοι εξαιρούνται από μια μακρά αλυσίδα αλληλογραφίας. Αυτό σημαίνει ότι η αξιοπιστία της παράδοσης αλληλογραφίας αυξάνεται δραματικά.

Πώς να δημιουργήσετε μια φόρμα υποβολής μηνύματος;

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

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

Βάζουμε το πρώτο μέρος του σεναρίου σε ένα ξεχωριστό αρχείο και το ονομάζουμε: mail.php. Αυτό το αρχείο θα περιέχει τη φόρμα εισαγωγής δεδομένων. Ονομα αρχείου mail.phpΤο πήρα υπό όρους, μπορείτε να ονομάσετε αυτό το αρχείο όπως θέλετε. Αυτό το αρχείο μπορεί να έχει άλλη επέκταση, για παράδειγμα .html.

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

Λοιπόν, δημιουργήστε ένα νέο αρχείο, δώστε του ένα όνομα: mail.phpή mail.htmlκαι επικολλήστε τον κωδικό σε αυτό Λίστα 1.

Λίστα 1









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



Το όνομα σου:


Η διεύθυνση του ηλεκτρονικού σου ταχυδρομείου:


Το μήνυμά σου:




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

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

Το όνομα σου:

αλλά σε καθένα από αυτά αποδίδεται το δικό του όνομα, το οποίο αυτοαποκαλείται αναγνωριστικό: όνομα = "όνομα"Και όνομα = "email"αναλόγως.

Το τρίτο πεδίο για την εισαγωγή ενός μηνύματος περιγράφεται με ετικέτες:

Το μήνυμά σου:

Αυτό το πεδίο έχει ένα αναγνωριστικό: όνομα "μπέρδεμα".

Και φυσικά υπάρχουν δύο κουμπιά: στέλνω ένα μήνυμαΚαι Καθαρή μορφή.

Στα δεδομένα (πληροφορίες) που εισάγει ο επισκέπτης στη φόρμα εκχωρούνται τα κατάλληλα αναγνωριστικά: όνομα, ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗΚαι Ανω ΚΑΤΩ, θυμηθείτε - αυτό είναι σημαντικό!

Για ευκολία σχεδιασμού, ολόκληρη η φόρμα τοποθετείται σε έναν κανονικό πίνακα, η εμφάνιση του οποίου μπορεί να σχεδιαστεί χρησιμοποιώντας , για μένα αυτή είναι μια κατηγορία: class="td_border", δεν το παρουσιάζω εδώ· αν χρειαστεί, προσθέστε το μόνοι σας, σύμφωνα με το γούστο σας.

Διαχειριστής αρχείων.

Το δεύτερο μέρος του σεναρίου αποτελείται από ένα αρχείο χειριστή: mail2.php, στην οποία η μέθοδος ΘΕΣΗΌλα τα δεδομένα με τα αντίστοιχα αναγνωριστικά μεταδίδονται: όνομα, ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗΚαι Ανω ΚΑΤΩ. Εδώ αυτά τα δεδομένα τοποθετούνται σε μεταβλητές: $name, $email, $ακατάστατο.

Δημιουργήστε ένα αρχείο mail2.phpκαι γράψτε τον κωδικό σε αυτό Λίστα 2:

Λίστα 2

$name = $_POST["όνομα"];
$email = $_POST["email"];
$mess = $_POST["mess"];

$REMOTE_ADDR = $_POST["REMOTE_ADDR"];

if (isset ($name))
{
$name = substr($name,0,20); //Δεν μπορεί να είναι περισσότεροι από 20 χαρακτήρες
εάν (κενό ($name))
{
ηχώ "

Το όνομα δεν διευκρινίζεται!!!

";
ηχώ "";
έξοδος;
}
}
αλλού
{
$name = "δεν καθορίζεται";
}

if (isset ($email))
{
$email = substr($email,0,20); //Δεν μπορεί να είναι περισσότεροι από 20 χαρακτήρες
εάν (κενό ($email))
{
ηχώ "

Το email δεν καθορίζεται!!!

";
ηχώ " Επιστρέψτε και συμπληρώστε σωστά τη φόρμα.";
έξοδος;
}
}
αλλού
{
$email = "δεν καθορίζεται";
}

if (isset ($mess))
{
$mess = substr($mess,0,1000); //Δεν μπορεί να είναι περισσότεροι από 1000 χαρακτήρες
αν (κενό($mess))
{
ηχώ "

Το μήνυμα δεν γράφτηκε!!!

";
ηχώ " Επιστρέψτε και συμπληρώστε σωστά τη φόρμα.";
έξοδος;
}
}
αλλού
{
$mess = "δεν καθορίζεται";
}

$i = "δεν καθορίζεται";
αν ($name == $i ΚΑΙ $email == $i ΚΑΙ $mess == $i)
{
echo "Προσοχή! Παρουσιάστηκε σφάλμα! Δεν συμπληρώσατε τα πεδία μηνύματος!";
έξοδος;
}

$to = "admin@site";
$subject = " Μήνυμα από τον ιστότοπο του ιστότοπου";
$message = "Όνομα αποστολέα: $name .\nΔιεύθυνση ηλεκτρονικού ταχυδρομείου: $email\nΜήνυμα: $mess .\nΔιεύθυνση IP: $_SERVER";
mail ($to,$subject,$message,"Content-type:text/plain; charset = windows-1251 ") ή εκτυπώστε "Δεν μπορώ να στείλω γράμμα!!!";
ηχώ "

Σας ευχαριστούμε που στείλατε το μήνυμά σας.

Είναι πολύ σημαντικό για μένα!

Σίγουρα θα λάβετε μια απάντηση σύντομα."
έξοδος;
?>

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

Εάν τα πεδία παραμείνουν κενά ή συμπληρωθούν λανθασμένα, το σενάριο θα επιστρέψει ένα μήνυμα στον επισκέπτη που θα υποδεικνύει τη συγκεκριμένη αιτία.

Σημειώστε ότι το αρχείο: mail2.php πρέπει να έχει επέκταση .php , επειδή Η αποστολή μηνύματος πραγματοποιείται χρησιμοποιώντας τη λειτουργία mail PHP.

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

Σε κώδικα Λίστα 2Είναι απλό, διορθώστε όλες τις τιμές που επισημαίνονται με κόκκινο χρώμα για να ταιριάζουν στις απαιτήσεις σας, και συγκεκριμένα:

  • καταχωρήστε το δικό σας Διεύθυνση ηλεκτρονικού ταχυδρομείου, στην οποία θα αποστέλλονται μηνύματα (μεταβλητή $προς);
  • διορθώστε το θέμα του μηνύματος (μεταβλητή $θέμα);
  • προσέξτε την κωδικοποίηση ( charset=windows-1251). Εισαγάγετε την κωδικοποίηση που χρησιμοποιείται στον ιστότοπό σας. Στο ρωσόφωνο Διαδίκτυο, η κωδικοποίηση μπορεί να είναι: "utf-8"ή "Windows-1251". Εάν κάνετε λάθος με την κωδικοποίηση, το κείμενο στο γράμμα θα εμφανιστεί λανθασμένα (τρελό).

Αυτό είναι όλο, το μόνο που μένει τώρα είναι να ανεβάσετε τα αρχεία: mail.phpΚαι mail2.phpκαι μια βολική φόρμα για την αποστολή μηνυμάτων θα εμφανιστεί στον ιστότοπό σας.



Σχόλια σε αυτό το άρθρο (μάθημα):

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

Καλό μάθημα! Ευχαριστώ!

Ευχαριστώ Andrey, καλό μάθημα.

Ευχαριστώ, νομίζω ότι θα είναι χρήσιμο

Ο Savin Dmitry Aleksandrovich (SAVIN DMITRY ALEXANDROVICH) σας γράφει, θέλω να μάθω τα πάντα με περισσότερες λεπτομέρειες σχετικά με τις φόρμες στο CSS, γνωρίζω λίγα σχετικά με αυτό: λεπτομερέστερα για την ιδιότητα δράσης, όπως ξέρω η δράση είναι ένας σύνδεσμος προς το έγγραφο όπου αποστέλλεται το αίτημα δεδομένων ή τα ίδια τα δεδομένα από τη φόρμα, ή κάτι παρόμοιο.method="post" επεξεργάζεται δεδομένα σε μεγαλύτερα μεγέθη από το get, κ.λπ. Παρακαλώ, περισσότερα σχετικά με τις φόρμες, έχω σχεδόν χάσει μαζί τους.

Γεια σου Αντρέι! Με σεβασμό σε σένα, Ahmad. Θέλω λοιπόν επίσης να δημιουργήσω ένα "Προσθήκη σχολίου" στον ιστότοπο, ώστε οι επισκέπτες να μπορούν να αφήσουν τις Κριτικές τους. Τι κωδικό να γράψω; Ευχαριστώ, μου άρεσε. Ahmad

Ομορφος! πολύ χρήσιμες πληροφορίες!

Είναι χρήσιμο, είναι χρήσιμο, αλλά δεν λειτουργεί. Αφού συμπληρώσετε τη φόρμα, εμφανίζεται η καταχώριση mail2.php

Είναι χρήσιμο, είναι χρήσιμο, αλλά δεν τρέχει. Αφού συμπληρώσετε τη φόρμα, εμφανίζεται η καταχώριση mail2.php

Όλα λειτουργούν καλά, μόνο τα κουμπιά δεν είναι ογκώδη όπως του συγγραφέα. Μπορεί κάποιος να μου πει πώς να φτιάξω ογκώδη κουμπιά; Ευχαριστώ τον συγγραφέα!

αλλά δεν μου κάνει. Πιο συγκεκριμένα, λειτουργεί στο μισό. Το γράμμα στάλθηκε, αλλά κενό. Τα δεδομένα από το mail1 δεν πηγαίνουν στο mail2

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

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

Παρακαλώ βοηθήστε, έβαλα τη φόρμα και όλα φαίνονται εντάξει, αλλά το μήνυμα δεν φτάνει στη διεύθυνση email που υπέδειξα, αν και λέει μήνυμα εστάλη...

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

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

Andrey, πες μου, η φόρμα λειτουργεί άψογα στον Chrome, αλλά υπάρχει πρόβλημα με τον Explorer. Τα μηνύματα ηλεκτρονικού ταχυδρομείου δεν παραδίδονται και τα σφάλματα ή τα μηνύματα αποστολής δεν εμφανίζονται. Τι συμβαίνει? Ευχαριστώ εκ των προτέρων

Ωραίο μάθημα! Ευχαριστώ!

Ευχαριστώ. Όλα λειτουργούν υπέροχα)

Δεν υπάρχουν ετικέτες κλεισίματος /p στον κώδικα. Γιατί;

Warning: mail(): "sendmail_from" δεν έχει οριστεί στο php.ini ή η προσαρμοσμένη κεφαλίδα "From:" λείπει στο E:Roomsu362571transport-online.netwwwmail.php στη γραμμή 66 Δεν μπορώ να στείλω γράμμα!!! Ουάου - πώς γίνεται; Πώς να είσαι;;

Δεν μπορώ να καταλάβω την κωδικοποίηση. Εάν εισαγάγετε τα Windows-1251, το κείμενο του σεναρίου στο μήνυμα είναι κανονικό, αλλά το ίδιο το κείμενο του μηνύματος αποστέλλεται στο ταχυδρομείο σε κροκόδειλους. και αν βάλετε utf-8 - το κείμενο του σεναρίου στο μήνυμα στο ταχυδρομείο - ερωτηματικά και το κείμενο του μηνύματος από τη φόρμα - κανονικό. Πώς μπορώ να βεβαιωθώ ότι και τα δύο είναι φυσιολογικά;

Δεν λειτουργεί για μένα, αλλά ο ιστότοπος δεν φιλοξενείται ακόμη, πότε θα το δημοσιεύσω;

Όλα λειτουργούν, ευχαριστώ για το σενάριο! Πείτε μου πώς να βεβαιωθώ ότι όταν κάνετε κλικ στο κουμπί αποστολής, δεν ανοίγει μια νέα σελίδα με πρόγραμμα χειρισμού. Έτσι ώστε ο ιστότοπος να παραμείνει στη σελίδα όπου βρισκόταν πριν πατήσετε το κουμπί υποβολής;

πώς να κάνετε το πεδίο εισαγωγής email υψηλότερο;

Εάν χρειάζεται να στείλετε γράμματα σε πολλές διευθύνσεις, απλώς προσθέστε τις απαιτούμενες διευθύνσεις διαχωρισμένες με κόμμα ως εξής: $to = "admin@site, [email προστατευμένο], [email προστατευμένο]";

Πώς μπορώ να βεβαιωθώ ότι μετά την αποστολή ενός μηνύματος υπάρχει ανακατεύθυνση σε άλλη σελίδα;

υπάρχει $to = "admin@site"; Ερώτηση: αν χρειάζεται αποστολή σε 2 διευθύνσεις! μία από τις διευθύνσεις με τη μορφή $to = "$email"; Με άλλα λόγια, η λειτουργία "σύστημα σε έναν φίλο" με αντιγραφή του μηνύματος στο καθορισμένο email μου. Ευχαριστώ.

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

Γειά σου! Εξηγήστε γιατί δεν λειτουργεί στη φιλοξενία, λέει: "Δεν μπορώ να στείλω γράμμα". Και στο localhost στο Ντένβερ λειτουργεί καλά. Ποιο είναι το πρόβλημα?...

γιατί περισσότερες από μία φόρμες μου δεν λειτουργούν;

Ευχαριστώ πολύ. Όλα είναι πολύ απλά και προσβάσιμα. Χρησιμοποίησα το παράδειγμά σας στον ιστότοπο gosdogovor.ru. Απλώς τροποποίησα λίγο το σχέδιο για να ταιριάζει με τον εαυτό μου και τη σύνθεση των πεδίων: http://www.gosdogovor.ru/easuzcon.html. Ευχαριστώ και πάλι.

Παιδιά, αν προσπαθείτε να στείλετε μήνυμα από τον τοπικό σας διακομιστή, δηλαδή από ιστότοπο που δεν έχει αναρτηθεί ακόμα στο Διαδίκτυο, δεν θα τα καταφέρετε. Τοποθετήστε το σε κάποια φιλοξενία και θα είστε ευχαριστημένοι)

Andrey, πώς μπορώ να το κάνω έτσι ώστε όταν πατάω ένα κουμπί, να στέλνεται ένα μήνυμα με ένα συγκεκριμένο κείμενο σε μια συγκεκριμένη διεύθυνση; Βοηθήστε με παρακαλώ: [email προστατευμένο]

Φόρμες HTML. Πίνακες $_POST και $_GET

Φόρμες HTML. Μέθοδοι αποστολής δεδομένων στον διακομιστή

Πιθανότατα έχετε ήδη συναντήσει φόρμες HTML:

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

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

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

Ετικέτα

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

  • ενέργεια - καθορίζει τη διεύθυνση URL (πλήρη ή σχετική) στην οποία θα σταλεί η φόρμα. Εάν αυτό το χαρακτηριστικό δεν έχει καθοριστεί, τα περισσότερα προγράμματα περιήγησης (ακριβέστερα, όλα τα προγράμματα περιήγησης που είναι γνωστά σε εμένα) στέλνουν τη φόρμα στο τρέχον έγγραφο, δηλαδή "στο ίδιο". Αυτή είναι μια βολική συντομογραφία, αλλά σύμφωνα με το πρότυπο HTML, απαιτείται το χαρακτηριστικό action.
  • μέθοδος - τρόπος υποβολής της φόρμας. Υπάρχουν δύο από αυτούς.
    • GET - αποστολή δεδομένων φόρμας στη γραμμή διευθύνσεων.
      Μπορεί να έχετε παρατηρήσει σε διάφορους ιστότοπους την παρουσία ενός "?" στο τέλος της διεύθυνσης URL. και τα ακόλουθα δεδομένα στην παράμετρο μορφής=τιμή. Εδώ η "παράμετρος" αντιστοιχεί στην τιμή του χαρακτηριστικού name των στοιχείων της φόρμας (δείτε παρακάτω σχετικά με την ετικέτα ), και το "value" είναι το περιεχόμενο του χαρακτηριστικού value (για παράδειγμα, περιέχει την εισαγωγή του χρήστη στο πεδίο κειμένου της ίδιας ετικέτας ).
      Για παράδειγμα, δοκιμάστε να αναζητήσετε κάτι στο Yandex και δώστε προσοχή στη γραμμή διευθύνσεων του προγράμματος περιήγησής σας. Αυτή είναι η μέθοδος GET.
    • POST - τα δεδομένα της φόρμας αποστέλλονται στο σώμα της αίτησης. Εάν δεν είναι απολύτως σαφές (ή εντελώς ασαφές) τι είναι αυτό, μην ανησυχείτε, θα επιστρέψουμε σε αυτό το ζήτημα σύντομα.
    Εάν το χαρακτηριστικό της μεθόδου δεν έχει καθοριστεί, υποτίθεται ότι το GET.

Ετικέτα - καθορίζει ένα στοιχείο φόρμας που ορίζεται από το χαρακτηριστικό type:

  • Η τιμή "κείμενο" καθορίζει ένα πεδίο εισαγωγής κειμένου μιας γραμμής
  • Η τιμή "υποβολή" καθορίζει ένα κουμπί που, όταν πατηθεί, στέλνει τη φόρμα στον διακομιστή

Είναι δυνατές και άλλες τιμές (και - δεν είναι η μόνη ετικέτα που καθορίζει ένα στοιχείο φόρμας).

Τι συμβαίνει λοιπόν όταν κάνουμε κλικ στο "OK";

  1. Το πρόγραμμα περιήγησης εξετάζει τα στοιχεία που περιλαμβάνονται στη φόρμα και κατασκευάζει δεδομένα φόρμας από τα χαρακτηριστικά ονόματος και τιμής τους. Ας πούμε ότι έχει εισαχθεί το όνομα Vasya. Σε αυτήν την περίπτωση, τα δεδομένα της φόρμας είναι name=Vasya&okbutton=OK
  2. Το πρόγραμμα περιήγησης δημιουργεί μια σύνδεση με τον διακομιστή, στέλνει στον διακομιστή ένα αίτημα για το έγγραφο που καθορίζεται στο χαρακτηριστικό action της ετικέτας
    , χρησιμοποιώντας τη μέθοδο αποστολής δεδομένων που καθορίζεται στο χαρακτηριστικό μέθοδος (σε αυτήν την περίπτωση - GET), μεταβιβάζοντας τα δεδομένα φόρμας στο αίτημα.
  3. Ο διακομιστής αναλύει το αίτημα που έλαβε, δημιουργεί μια απάντηση, τη στέλνει στο πρόγραμμα περιήγησης και κλείνει τη σύνδεση
  4. Το πρόγραμμα περιήγησης εμφανίζει το έγγραφο που ελήφθη από τον διακομιστή

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

- συντομευμένη φόρμα για .

Ας υποθέσουμε ότι πληκτρολογήσαμε την τιμή 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 θα μπορούσε κανείς να γράψει το ίδιο εύκολα

: Η GET είναι η προεπιλεγμένη μέθοδος. Αυτή τη φορά το πρόγραμμα περιήγησης στέλνει ένα αίτημα GET, το οποίο ισοδυναμεί με την εισαγωγή της διεύθυνσης στη γραμμή διευθύνσεων: http://site-address/script-name.php?name=Vasya.

Η 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
"
;
) άλλο (
ηχώ "Γεια σου", . $name . "!
" ;
$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"] .

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

Φόρμα υποβολής δεδομένων HTML

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

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

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

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


Τιμή Α:
Τιμή Β:

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

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" ];
} αλλού(
ηχώ "Το πεδίο δεν έχει συμπληρωθεί";
}

Λοιπόν, φίλοι. Αυτό είναι το τελευταίο βίντεο στην ενότητα για την εκμάθηση φορμών HTML.

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

Σε αυτό το βίντεο θα μιλήσουμε για τον χειριστή δεδομένων φόρμας, που είναι ακριβώς αυτό που χρειάζεται για τη συλλογή δεδομένων από τα πεδία φόρμας και στη συνέχεια την επεξεργασία τους. Σε αυτό το βίντεο θα μάθουμε όχι μόνο πώς να συλλέγουμε δεδομένα από πεδία, αλλά και πώς να τα στέλνουμε μέσω email. Δεν θα υπάρχουν ειδικές λειτουργίες επεξεργασίας δεδομένων και παρόμοια. Απλώς θα χρησιμοποιήσουμε την απλούστερη επιλογή για τη συλλογή και την αποστολή δεδομένων. Θα στείλουμε τα δεδομένα στο E-mail που θα υποδείξουμε στον χειριστή. Αξίζει να θυμάστε εδώ ότι ο χειριστής είναι ένα αρχείο σε μορφή php. Και μιας και μελετάμε HTML, θα μιλήσουμε πολύ σύντομα για την PHP. Και απλώς σκεφτείτε ένα συγκεκριμένο παράδειγμα αποστολής δεδομένων μέσω ηλεκτρονικού ταχυδρομείου.

Διαχειριστής φορμών.

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

Αποστολή δεδομένων μέσω e-mail.

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

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

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

Μάθημα βίντεο: Διαχειριστής φορμών. Αποστολή δεδομένων μέσω e-mail.

Ο κατάλογος HTML και άλλα υλικά μπορούν και πρέπει να ληφθούν!

Στο επόμενο εκπαιδευτικό βίντεο θα ξεκινήσουμε μια νέα ενότητα για τη δημιουργία πινάκων σε HTML. Και θα μάθουμε

Εργαστηριακή εργασία 1. Πρωτόκολλο HTTP. Μέθοδοι GET, POST. Φόρμες HTML.

Θεωρητικό μέρος

Κύκλος ζωής αιτήματος HTTP

  1. Πρόγραμμα περιήγησης ανοίγει τη σύνδεσημε τον διακομιστή
  2. Το πρόγραμμα περιήγησης στέλνει ένα αίτημα στον διακομιστή για λήψη της σελίδας
  3. Ο διακομιστής δημιουργεί μια απάντηση (συνήθως κώδικας HTML) στο πρόγραμμα περιήγησης και κλείνει τη σύνδεση
  4. Το πρόγραμμα περιήγησης επεξεργάζεται τον κώδικα HTML και εμφανίζει τη σελίδα

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

Αυτό το είδος εργασίας ονομάζεται "διακομιστή-πελάτη". Ο πελάτης σε αυτή την περίπτωση είναι το πρόγραμμα περιήγησης.

Έτσι, η σύνδεση με τον διακομιστή Ιστού διαρκεί μόνο λίγα δευτερόλεπτα (ή κλάσματα δευτερολέπτων) - αυτή είναι η χρονική περίοδος μεταξύ του κλικ σε έναν σύνδεσμο (ή άλλου τύπου αιτήματος) και της έναρξης εμφάνισης της σελίδας. Τα περισσότερα προγράμματα περιήγησης εμφανίζουν κάποιο είδος ένδειξης κατά τη σύνδεση, για παράδειγμα, ο MS Internet Explorer εμφανίζει μια κινούμενη εικόνα στην επάνω δεξιά γωνία.

Για να απαλλαγούμε για πάντα από την αντίληψη του HTTP ως «μαύρου κουτιού», ας «προσποιηθούμε» ότι είμαστε πρόγραμμα περιήγησης που χρησιμοποιεί telnet:

  1. Ας ξεκινήσουμε telnet ya.ru 80
  2. Ας εισαγάγουμε τα εξής στο παράθυρο του τερματικού (αν δεν εμφανίζεται η είσοδος, δεν πειράζει):

GET / HTTP/1.0[πατήστε Enter εδώ]
Διοργανωτής: ya.ru[εδώ πατήστε Enter δύο φορές]

Το πάτημα Enter συνήθως αντιστοιχεί στον συνδυασμό των χαρακτήρων CR + LF, που συμβολίζονται ως \r\n. Αυτή η σημείωση θα χρησιμοποιηθεί παρακάτω.

Ο κώδικας HTML της σελίδας http://ya.ru/ θα τρέχει σε όλη την οθόνη. Όπως μπορείτε να δείτε, τίποτα περίπλοκο.

Ο πηγαίος κώδικας της τρέχουσας σελίδας μπορεί να προβληθεί σχεδόν σε οποιοδήποτε πρόγραμμα περιήγησης επιλέγοντας "Προβολή|Πηγή" από το μενού.

Εικόνες, κορνίζες - όλα αυτά είναι πρόσθετα αιτήματα, ακριβώς τα ίδια. Στην πραγματικότητα, από πού προέρχονται οι εικόνες στο παράθυρο του προγράμματος περιήγησης: κατά την ανάλυση (επεξεργασία) κώδικα HTML, το πρόγραμμα περιήγησης συναντά την ετικέτα https://i2.wp.com/ εικόνα"> κάνει ένα πρόσθετο αίτημα στον διακομιστή - αίτημα Εικόνες, και το εμφανίζει στο σημείο όπου βρίσκεται η ετικέτα .



Δοκιμάστε:

Telnet www.google.ru 80

GET /php/php5ru.png HTTP/1.0\r\n
Διοργανωτής: ya.ru\r\n\r\n

Αυτό που θα δείτε εάν προβάλετε αυτό το αρχείο png σε ένα πρόγραμμα επεξεργασίας κειμένου θα αναβοσβήνει στην οθόνη.

Ι-2. Φόρμες HTML. Μέθοδοι αποστολής δεδομένων στον διακομιστή

Πιθανότατα έχετε ήδη συναντήσει φόρμες HTML:

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

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

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

Ας ρίξουμε μια πιο προσεκτική ματιά στις ετικέτες που χρησιμοποιούνται σε αυτό το σύντομο παράδειγμα.

Ετικέτα

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

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

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

  • μέθοδος - τρόπος υποβολή της φόρμας. Υπάρχουν δύο από αυτούς.
    • ΠΑΙΡΝΩ- αποστολή δεδομένων φόρμας στη γραμμή διευθύνσεων.
      Μπορεί να έχετε παρατηρήσει σε διάφορους ιστότοπους την παρουσία ενός "?" στο τέλος της διεύθυνσης URL. και τα ακόλουθα δεδομένα στη μορφή παράμετρος=τιμή. Εδώ αντιστοιχεί η "παράμετρος". έννοιαΧαρακτηριστικό όνομαστοιχεία φόρμας (δείτε παρακάτω σχετικά με την ετικέτα ), και "τιμή" - τα περιεχόμενα του χαρακτηριστικού αξία(περιέχει, για παράδειγμα, εισαγωγή χρήστη σε ένα πεδίο κειμένου της ίδιας ετικέτας ).
      Για παράδειγμα, δοκιμάστε να αναζητήσετε κάτι στο Yandex και δώστε προσοχή στη γραμμή διευθύνσεων του προγράμματος περιήγησής σας. Αυτή είναι η μέθοδος GET.
    • ΘΕΣΗ- τα δεδομένα της φόρμας αποστέλλονται στο όργανο αιτήματος. Εάν δεν είναι απολύτως σαφές (ή εντελώς ασαφές) τι είναι αυτό, μην ανησυχείτε, θα επιστρέψουμε σε αυτό το ζήτημα σύντομα.

Αν χαρακτηριστικό μέθοδοςδεν προσδιορίζεται - υπονοείται "GET".

Ετικέτα - σκηνικά στοιχείο μορφής, που ορίζεται από το χαρακτηριστικό τύπος :

  • Εννοια "κείμενο"καθορίζει ένα πεδίο εισαγωγής κειμένου μιας γραμμής
  • Εννοια "υποβάλλουν"καθορίζει ένα κουμπί που, όταν πατηθεί, προκαλεί αποστολήφόρμες στον διακομιστή

Είναι δυνατές και άλλες τιμές (και - δεν είναι η μόνη ετικέτα που ορίζει ένα στοιχείο φόρμας), αλλά θα τις εξετάσουμε στα επόμενα κεφάλαια.

Τι συμβαίνει λοιπόν όταν κάνουμε κλικ στο "OK";

  1. Το πρόγραμμα περιήγησης εξετάζει τα στοιχεία που περιλαμβάνονται στη φόρμα και σχηματίζει τα χαρακτηριστικά ονόματος και τιμής από αυτά στοιχεία φόρμας. Ας πούμε ότι έχει εισαχθεί το όνομα Βάσια. Σε αυτήν την περίπτωση, τα δεδομένα της φόρμας είναι name=Vasya&okbutton=ΟΚ
  2. Το πρόγραμμα περιήγησης δημιουργεί μια σύνδεση με τον διακομιστή, στέλνει ένα αίτημα στον διακομιστή για το έγγραφο που καθορίζεται στο χαρακτηριστικό δράσηετικέτα
    , χρησιμοποιώντας τη μέθοδο αποστολής δεδομένων που καθορίζεται στο χαρακτηριστικό μέθοδος(στην περίπτωση αυτή - GET), περνώντας δεδομένα φόρμας στο αίτημα.
  3. Ο διακομιστής αναλύει το αίτημα που έλαβε, δημιουργεί μια απάντηση, τη στέλνει στο πρόγραμμα περιήγησης και κλείνει τη σύνδεση
  4. Το πρόγραμμα περιήγησης εμφανίζει το έγγραφο που ελήφθη από τον διακομιστή

Η μη αυτόματη αποστολή του ίδιου αιτήματος (με χρήση 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 του ή κάνοντας κλικ σε έναν σύνδεσμο. Χρησιμοποιώντας , η διεύθυνση URL απλώς επισυνάπτεται με ένα ερωτηματικό και δεδομένα φόρμας.

Τώρα ας αντικαταστήσουμε την πρώτη γραμμή της φόρμας μας με την εξής:

Καθορίσαμε τη μέθοδο αποστολής ως "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
Περιεχόμενο-Μήκος: 22\r\n
\r\n
name=Vasya&okbutton=ΟΚ

Όταν χρησιμοποιείτε τη μέθοδο POST, τα δεδομένα της φόρμας αποστέλλονται μετά από "δύο Εισαγωγές" - στο σώμααίτηση. Όλα τα παραπάνω είναι αλήθεια τίτλοςαίτημα (και όταν χρησιμοποιήσαμε τη μέθοδο GET, τα δεδομένα της φόρμας στάλθηκαν στην κεφαλίδα). Για να γνωρίζει ο διακομιστής σε ποιο byte θα σταματήσει να διαβάζει το σώμα του αιτήματος, η κεφαλίδα περιέχει τη γραμμή Περιεχόμενο-Μήκος; ότι τα δεδομένα της φόρμας θα μεταδοθούν στη φόρμα παράμετρος1=τιμή1&παράμετρος2=τιμή2..., και οι τιμές μεταδίδονται με τη μορφή urlencode - δηλαδή ακριβώς το ίδιο με τη μέθοδο GET, αλλά στο σώμα του αιτήματος - ο διακομιστής ενημερώνεται από την κεφαλίδα "Content-Type: application/x- www-form-urlencoded».

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

Όταν χρησιμοποιείτε τη μέθοδο POST, δεν είναι δυνατή η υποβολή της φόρμας απλώς «ακολουθώντας έναν σύνδεσμο», όπως συνέβη με το GET.

Όταν χρησιμοποιείτε μια φόρμα POST, στο χαρακτηριστικό της δράσηΜπορείτε επίσης να καθορίσετε παραμέτρους φόρμας GET μετά το ερωτηματικό. Έτσι, η μέθοδος POST περιλαμβάνει τη μέθοδο GET.