Επεξεργαζόμαστε αιτήματα POST στην PHP. NodeJS. Τρόπος επεξεργασίας αιτημάτων POST Επεξεργασία αιτημάτων http php

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

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

Name1=value1&name2=value2&name3=value3

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

Μέθοδος GET

Η μέθοδος GET στέλνει κωδικοποιημένες πληροφορίες χρήστη που επισυνάπτονται στο αίτημα σελίδας. Διαχωρίζονται οι σελίδες και οι κωδικοποιημένες πληροφορίες μεταξύ τους; ερωτηματικό.

http://www.test.com/index.htm?name1=value1&name2=value2

  • Η μέθοδος GET παράγει μια μεγάλη συμβολοσειρά που εμφανίζεται στα αρχεία καταγραφής του διακομιστή σας στο πεδίο "Τοποθεσία" του προγράμματος περιήγησης.
  • Η μέθοδος GET περιορίζεται στην αποστολή έως και 1024 χαρακτήρων μόνο.
  • Ποτέ μην χρησιμοποιείτε τη μέθοδο GET εάν έχετε κωδικό πρόσβασης ή άλλες ευαίσθητες πληροφορίες για αποστολή στον διακομιστή.
  • Το GET δεν μπορεί να χρησιμοποιηθεί για τη μεταφορά δυαδικών δεδομένων, όπως εικόνων ή εγγράφων κειμένου, στον διακομιστή.
  • Τα δεδομένα που αποστέλλονται με τη μέθοδο GET είναι προσβάσιμα χρησιμοποιώντας τη μεταβλητή περιβάλλοντος QUERY_STRING.
  • Η PHP παρέχει τον συσχετιστικό πίνακα $_GET για πρόσβαση σε όλες τις αποστελλόμενες πληροφορίες χρησιμοποιώντας τη μέθοδο GET.

if($_GET["name"] || $_GET["ηλικία"]) ( echo "Welcome ". $_GET["name"]; echo "You are ". $_GET["age"]. " χρονών "; exit();

Ονομα: Ηλικία:

Μέθοδος POST

Μέθοδος ΘΕΣΗμεταδίδει πληροφορίες μέσω κεφαλίδων HTTP. Οι πληροφορίες κωδικοποιούνται όπως περιγράφεται στην περίπτωση της μεθόδου ΠΑΙΡΝΩ, και τοποθετείται στην κεφαλίδα QUERY_STRING.

  • Η μέθοδος POST δεν έχει όριο στο μέγεθος των δεδομένων που πρέπει να σταλούν.
  • Η μέθοδος POST μπορεί να χρησιμοποιηθεί για την αποστολή δεδομένων ASCII καθώς και δυαδικών δεδομένων.
  • Τα δεδομένα που αποστέλλονται χρησιμοποιώντας τη μέθοδο POST διέρχονται από μια κεφαλίδα HTTP, επομένως η ασφάλεια εξαρτάται από το πρωτόκολλο HTTP. Χρησιμοποιώντας το Ασφαλές HTTP, μπορείτε να διασφαλίσετε ότι οι πληροφορίες σας προστατεύονται.
  • Η PHP παρέχει έναν συσχετιστικό πίνακα $_POST για πρόσβαση σε όλες τις πληροφορίες που αποστέλλονται χρησιμοποιώντας τη μέθοδο POST.

Δοκιμάστε το ακόλουθο παράδειγμα τοποθετώντας τον πηγαίο κώδικα στο σενάριο test.php.

if($_POST["όνομα"] || $_POST["ηλικία"]) (if (preg_match("[^A-Za-z"-]",$_POST["όνομα"])) (die (" μη έγκυρο όνομα και όνομα θα πρέπει να είναι άλφα"); ) echo "Καλώς ήρθατε ". $_POST["όνομα"]; echo "Είστε ". $_POST["ηλικία"]. " ετών."; exit(); )

Ονομα: Ηλικία:

$_REQUEST μεταβλητή

μεταβλητή PHP $_ΑΙΤΗΣΗπεριέχει περιεχόμενα όπως $_GET, $_POST, Έτσι $_COOKIE. Θα συζητήσουμε τη μεταβλητή $_COOKIEόταν μιλάμε για cookies.

Η μεταβλητή PHP $_REQUEST μπορεί να χρησιμοποιηθεί για την ανάκτηση του αποτελέσματος από δεδομένα φόρμας που υποβλήθηκαν χρησιμοποιώντας τις μεθόδους GET και POST.

Η πρώτη μέθοδος για να εκτελέσετε ένα αίτημα PHP POST είναι να χρησιμοποιήσετε το file_get_contents. Η δεύτερη μέθοδος θα χρησιμοποιήσει το fread σε συνδυασμό με μερικές άλλες λειτουργίες. Και οι δύο επιλογές χρησιμοποιούν τη συνάρτηση stream_context_create για να συμπληρώσουν τα απαιτούμενα πεδία κεφαλίδας αιτήματος.

Επεξήγηση κώδικα

Η μεταβλητή $sPD περιέχει τα δεδομένα που πρόκειται να μεταφερθούν. Πρέπει να είναι σε μορφή συμβολοσειράς αιτήματος HTTP, επομένως ορισμένοι ειδικοί χαρακτήρες πρέπει να κωδικοποιηθούν.

Τόσο στη συνάρτηση file_get_contents όσο και στη συνάρτηση fread έχουμε δύο νέες παραμέτρους. Το πρώτο είναι use_include_path . Εφόσον κάνουμε ένα αίτημα HTTP, θα είναι ψευδές και στα δύο παραδείγματα. Όταν οριστεί σε true για την ανάγνωση ενός τοπικού πόρου, η συνάρτηση θα αναζητήσει το αρχείο στο include_path .

Η δεύτερη παράμετρος είναι το περιβάλλον, το οποίο συμπληρώνεται με την επιστρεφόμενη τιμή του stream_context_create, που παίρνει την τιμή του πίνακα $aHTTP.

Χρήση file_get_contents για την υποβολή αιτημάτων POST

Για να στείλετε ένα αίτημα POST χρησιμοποιώντας file_get_contents στην PHP, πρέπει να χρησιμοποιήσετε το stream_context_create για να συμπληρώσετε με μη αυτόματο τρόπο τα πεδία κεφαλίδας και να καθορίσετε ποιο "περιτύλιγμα" θα χρησιμοποιήσετε - σε αυτήν την περίπτωση HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // Δεδομένα POST $aHTTP = array("http" => // Περιτύλιγμα που θα χρησιμοποιηθεί array("method" => "POST", // Μέθοδος αιτήματος // Οι κεφαλίδες αιτήματος ορίζονται κάτω από "header" => "Περιεχόμενο - τύπος: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $περιεχόμενα;

Χρήση του fread για την υποβολή αιτημάτων POST

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

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // Δεδομένα POST $aHTTP = array("http" => // Περιτύλιγμα που θα χρησιμοποιηθεί array("method" => "POST", // Μέθοδος αιτήματος // Οι κεφαλίδες αιτημάτων ορίζονται κάτω από "header" => "Περιεχόμενο - τύπος: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; ενώ (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $περιεχόμενα;

Δημιουργία αιτημάτων GET με την PHP

Τώρα θα επικεντρωθούμε στη χρήση των fread και file_get_contents για τη λήψη περιεχομένου από το διαδίκτυο μέσω HTTP και HTTPS. Για να χρησιμοποιήσετε τις μεθόδους που περιγράφονται σε αυτό το άρθρο, πρέπει να ενεργοποιήσετε την επιλογή fopen wrappers. Για να το κάνετε αυτό, πρέπει να ορίσετε την παράμετρο allow_url_fopen σε On στο αρχείο php.ini.

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

Χρήση του fread για λήψη ή λήψη αρχείων μέσω Διαδικτύου

Να θυμάστε ότι η ανάγνωση της ιστοσελίδας περιορίζεται στο προσβάσιμο τμήμα του πακέτου. Επομένως, πρέπει να χρησιμοποιήσετε τη συνάρτηση stream_get_contents ( παρόμοια με το file_get_contents) ή ένα βρόχο while για να διαβάσετε τα περιεχόμενα σε μικρότερα κομμάτια μέχρι να φτάσετε στο τέλος του αρχείου:

Σε αυτήν την περίπτωση επεξεργασίας ενός αιτήματος PHP POST, το τελευταίο όρισμα της συνάρτησης fread είναι ίσο με το μέγεθος του τμήματος. Γενικά δεν πρέπει να είναι μεγαλύτερο από 8192 ( 8*1024 ).

Λάβετε υπόψη ότι μπορεί να είναι μεγαλύτερο ή μικρότερο και μπορεί επίσης να περιορίζεται από τις ρυθμίσεις του συστήματος στο οποίο εκτελείται η PHP.

Χρησιμοποιώντας το file_get_contents για να λάβετε τη διεύθυνση URL ενός ιστότοπου

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

Αυτή η δημοσίευση είναι μετάφραση του άρθρου «Making POST Requests With PHP», που εκπονήθηκε από τη φιλική ομάδα του έργου

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

Η γλώσσα PHP δημιουργήθηκε για να λύσει ένα συγκεκριμένο πρακτικό πρόβλημα στο Διαδίκτυο (το οποίο μπορεί κανείς να ανακαλύψει διαβάζοντας την πρώτη διάλεξη του μαθήματος). Θα προσπαθήσουμε επίσης να μην αποσπάται πολύ η θεωρητική συλλογιστική και θα προσπαθήσουμε να λύσουμε ένα συγκεκριμένο πρόβλημα σε κάθε μια από τις διαλέξεις. Τα περισσότερα από τα παραδείγματα προέρχονται από ένα πραγματικό σύστημα: ένα εικονικό μουσείο της ιστορίας της επιστήμης των υπολογιστών. Το πρώτο μέρος του μαθήματος είναι αφιερωμένο στη μελέτη των βασικών συντακτικών και δομών ελέγχου. Μετά από αυτό, η τεχνολογία πελάτη-διακομιστή θεωρείται ως η κύρια περιοχή εφαρμογής της γλώσσας PHP. Στη συνέχεια προχωράμε στη μελέτη των πιο χρήσιμων ενσωματωμένων λειτουργιών κατά τη γνώμη μας και στην επίλυση πρακτικών προβλημάτων με τη βοήθειά τους. Αν και το μοντέλο αντικειμένου στη γλώσσα PHP δεν είναι το πιο πλούσιο, η θεμελιώδης παρουσία του σάς επιτρέπει να περιγράφετε φυσικά μοντέλα δεδομένων αντικειμένων. Ως βασικό μοντέλο, θα ληφθεί υπόψη το μοντέλο εγγράφου ενός εικονικού μουσείου επιστήμης υπολογιστών. Μετά από αυτό, θα ληφθούν υπόψη ορισμένες εφαρμοζόμενες πτυχές: εργασία με το σύστημα αρχείων, με τη βάση δεδομένων, συμβολοσειρές, περιόδους λειτουργίας, DOM XML - όλα αυτά θα μας επιτρέψουν να εξετάσουμε τα βασικά καθήκοντα της πρακτικής χρήσης της γλώσσας.

Όπως φαίνεται από τον παραπάνω πίνακα, ο διακομιστής Apache κατέχει ηγετική θέση. Όλα όσα θα πούμε ποτέ για τους διακομιστές Ιστού είναι Apache-centric, εκτός εάν σημειώνεται διαφορετικά. Έχουμε ήδη μιλήσει για το πώς να το εγκαταστήσετε στον υπολογιστή σας στην πρώτη κιόλας διάλεξη. Και τώρα, όπως υποσχεθήκαμε, ας στραφούμε στο πρωτόκολλο HTTP.

Πρωτόκολλο HTTP και μέθοδοι μεταφοράς δεδομένων στον διακομιστή

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

Το HTTP (HyperText Transfer Protocol) είναι ένα πρωτόκολλο επιπέδου εφαρμογής σχεδιασμένο για την ανταλλαγή πληροφοριών υπερκειμένου στο Διαδίκτυο.

Το HTTP παρέχει ένα σύνολο μεθόδων για τον καθορισμό του σκοπού του αιτήματος που αποστέλλεται στον διακομιστή. Αυτές οι μέθοδοι βασίζονται στην πειθαρχία αναφοράς, όπου χρησιμοποιείται ένα Universal Resource Identifier, είτε ως Universal Resource Locator (URL) είτε ως Universal Resource Name, για να υποδείξει τον πόρο στον οποίο πρέπει να εφαρμοστεί η μέθοδος. ,URN).

Τα μηνύματα μέσω του δικτύου όταν χρησιμοποιείτε το πρωτόκολλο HTTP μεταδίδονται σε μορφή παρόμοια με τη μορφή μηνύματος αλληλογραφίας Διαδικτύου (RFC-822) ή με τη μορφή μηνύματος MIME (Πολλαπλών χρήσεων Internet Mail Exchange).

Το HTTP χρησιμοποιείται για επικοινωνίες μεταξύ διαφόρων προγραμμάτων χρηστών και προγραμμάτων πύλης που παρέχουν πρόσβαση σε υπάρχοντα πρωτόκολλα Διαδικτύου όπως SMTP (πρωτόκολλο email), NNTP (πρωτόκολλο μεταφοράς ειδήσεων), FTP (πρωτόκολλο μεταφοράς αρχείων), Gopher και WAIS. Το HTTP έχει σχεδιαστεί για να επιτρέπει σε τέτοιες πύλες να μεταφέρουν δεδομένα μέσω διακομιστών μεσολάβησης χωρίς απώλεια.

Το πρωτόκολλο εφαρμόζει την αρχή αίτησης/απόκρισης. Το πρόγραμμα που ζητά - ο πελάτης ξεκινά την αλληλεπίδραση με το πρόγραμμα που απαντά - ο διακομιστής και στέλνει ένα αίτημα που περιέχει:

Μέθοδος πρόσβασης.

Διεύθυνση URI.

Έκδοση πρωτοκόλλου.

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

Η απάντηση διακομιστή περιέχει:

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

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

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

Ας ρίξουμε μια πιο προσεκτική ματιά στη μορφή με την οποία αποστέλλονται τα αιτήματα στον διακομιστή.

Έντυπο Αίτησης Πελατών

Ο πελάτης στέλνει το αίτημα στον διακομιστή με μία από τις δύο μορφές: πλήρες ή συντομευμένο. Ένα αίτημα στην πρώτη μορφή ονομάζεται πλήρες αίτημα και στη δεύτερη μορφή απλό αίτημα.

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

<Простой-Запрос> := <Метод> <символ пробел>
<Запрашиваемый-URI> <символ новой строки>

Η μέθοδος μπορεί να είναι GET, POST, HEAD, PUT, DELETE και άλλες. Για τα πιο συνηθισμένα από αυτά θα μιλήσουμε λίγο αργότερα. Το URI που ζητήθηκε είναι τις περισσότερες φορές η διεύθυνση URL του πόρου.

Παράδειγμα απλού αιτήματος:

ΛΑΒΕ http://phpbook.info/

Εδώ το GET είναι η μέθοδος πρόσβασης, π.χ. μια μέθοδος που πρέπει να εφαρμοστεί στον ζητούμενο πόρο και το http://phpbook.info/ είναι η διεύθυνση URL του ζητούμενου πόρου.

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

<Полный запрос> := <Строка Состояния>
(<Общий заголовок>|<Заголовок запроса>|
<Заголовок содержания>)
<символ новой строки>
[<содержание запроса>]

Οι αγκύλες εδώ υποδεικνύουν προαιρετικά στοιχεία κεφαλίδας και οι εναλλακτικές επιλογές παρατίθενται μέσω μιας κάθετης γραμμής. Στοιχείο<Строка состояния>περιέχει τη μέθοδο αιτήματος και το URI πόρων (ακριβώς όπως ένα απλό αίτημα) και, επιπλέον, την έκδοση του πρωτοκόλλου HTTP που χρησιμοποιείται. Για παράδειγμα, για να καλέσετε ένα εξωτερικό πρόγραμμα, μπορείτε να χρησιμοποιήσετε την ακόλουθη γραμμή κατάστασης:

ΑΝΑΡΤΗΣΗ http://phpbook.info/cgi-bin/test HTTP/1.0

Σε αυτήν την περίπτωση, χρησιμοποιείται η μέθοδος POST και η έκδοση HTTP 1.0.

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

Η πλήρης φόρμα περιέχει τον τύπο του πρωτοκόλλου πρόσβασης, τη διεύθυνση του διακομιστή πόρων και τη διεύθυνση του πόρου στον διακομιστή (Εικόνα 4.2).

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


Ρύζι. 4.2.Πλήρης φόρμα URL

Μέθοδοι

Όπως ήδη αναφέρθηκε, κάθε αίτημα πελάτη προς τον διακομιστή πρέπει να ξεκινά με μια προδιαγραφή μεθόδου. Η μέθοδος κοινοποιεί το σκοπό του αιτήματος του πελάτη. Το πρωτόκολλο HTTP υποστηρίζει αρκετές μεθόδους, αλλά στην πραγματικότητα χρησιμοποιούνται μόνο τρεις: POST, GET και HEAD. Η μέθοδος GET σάς επιτρέπει να ανακτήσετε τυχόν δεδομένα που προσδιορίζονται από το URI στο αίτημα πόρων. Εάν το URI δείχνει σε ένα πρόγραμμα, τότε επιστρέφεται το αποτέλεσμα της λειτουργίας του προγράμματος, όχι το κείμενό του (εκτός, φυσικά, εάν το κείμενο είναι το αποτέλεσμα της λειτουργίας του). Πρόσθετες πληροφορίες που είναι απαραίτητες για την επεξεργασία του αιτήματος είναι ενσωματωμένες στο ίδιο το αίτημα (στη γραμμή κατάστασης). Όταν χρησιμοποιείτε τη μέθοδο GET, οι πραγματικές ζητούμενες πληροφορίες (το κείμενο ενός εγγράφου HTML, για παράδειγμα) επιστρέφονται στο πεδίο του σώματος πόρων.

Υπάρχει μια παραλλαγή της μεθόδου GET - υπό όρους GET. Αυτή η μέθοδος λέει στον διακομιστή ότι το αίτημα πρέπει να απαντηθεί μόνο εάν η συνθήκη που περιέχεται στο πεδίο if-Modified-Since της κεφαλίδας αιτήματος είναι αληθής. Πιο συγκεκριμένα, το σώμα του πόρου μεταβιβάζεται ως απάντηση στο αίτημα εάν ο πόρος έχει τροποποιηθεί από την ημερομηνία που καθορίζεται στο if-Modified-Since.

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

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

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

Χρήση φορμών HTML για την υποβολή δεδομένων στον διακομιστή

Πώς να μεταφέρετε δεδομένα στον διακομιστή; Για το σκοπό αυτό η γλώσσα HTML έχει ειδική κατασκευή – φόρμες. Οι φόρμες έχουν σχεδιαστεί για να λαμβάνουν πληροφορίες από τον χρήστη. Για παράδειγμα, πρέπει να γνωρίζετε τα στοιχεία σύνδεσης και τον κωδικό πρόσβασης του χρήστη για να προσδιορίσετε ποιες σελίδες του ιστότοπου μπορεί να έχει πρόσβαση. Ή χρειάζεστε τα προσωπικά δεδομένα του χρήστη για να μπορέσετε να επικοινωνήσετε μαζί του. Τα έντυπα χρησιμοποιούνται ακριβώς για την εισαγωγή τέτοιων πληροφοριών. Μπορείτε να εισαγάγετε κείμενο σε αυτά ή να επιλέξετε τις κατάλληλες επιλογές από μια λίστα. Τα δεδομένα που είναι γραμμένα στη φόρμα αποστέλλονται για επεξεργασία σε ένα ειδικό πρόγραμμα (για παράδειγμα, ένα σενάριο PHP) στον διακομιστή. Ανάλογα με τα δεδομένα που εισάγει ο χρήστης, αυτό το πρόγραμμα μπορεί να δημιουργήσει διάφορες ιστοσελίδες, να στείλει ερωτήματα στη βάση δεδομένων, να εκκινήσει διάφορες εφαρμογές κ.λπ.

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

Έτσι, για τη δημιουργία μιας φόρμας σε HTML, χρησιμοποιείται η ετικέτα FORM. Μέσα του υπάρχουν μία ή περισσότερες εντολές INPUT. Χρησιμοποιώντας τα χαρακτηριστικά ενέργειας και μεθόδου της ετικέτας FORM, καθορίζετε το όνομα του προγράμματος που θα επεξεργαστεί τα δεδομένα της φόρμας και τη μέθοδο αιτήματος, αντίστοιχα. Η εντολή INPUT καθορίζει τον τύπο και τα διάφορα χαρακτηριστικά των πληροφοριών που ζητούνται. Τα δεδομένα της φόρμας αποστέλλονται αφού πατήσετε το κουμπί εισαγωγής του τύπου υποβολής. Ας δημιουργήσουμε μια φόρμα για την εγγραφή συμμετεχόντων σε μια σχολή προγραμματισμού αλληλογραφίας.

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


Ρύζι. 4.3.Παράδειγμα φόρμας html

Έτσι δημιουργούνται και μοιάζουν οι φόρμες HTML. Θα υποθέσουμε ότι μάθαμε ή θυμηθήκαμε πώς να τα δημιουργήσουμε. Όπως μπορούμε να δούμε, μπορείτε να καθορίσετε τη μέθοδο μεταφοράς δεδομένων στη φόρμα. Ας δούμε τι θα συμβεί αν καθορίσετε τη μέθοδο GET ή POST και ποια θα είναι η διαφορά.

Για τη μέθοδο GET

Κατά την υποβολή δεδομένων φόρμας χρησιμοποιώντας τη μέθοδο GET, το περιεχόμενο της φόρμας προσαρτάται στη διεύθυνση URL μετά το ερωτηματικό ως ζεύγη ονόματος=τιμής που συνδέονται με ένα σύμφωνο &:

action?name1=value1&name2=value2&name3=value3

Εδώ η ενέργεια είναι η διεύθυνση URL του προγράμματος που πρέπει να επεξεργαστεί τη φόρμα (είτε το πρόγραμμα που καθορίζεται στο χαρακτηριστικό δράσης της ετικέτας φόρμας, είτε το ίδιο το τρέχον πρόγραμμα, εάν αυτό το χαρακτηριστικό παραλειφθεί). Τα ονόματα name1, name2, name3 αντιστοιχούν στα ονόματα των στοιχείων της φόρμας και η τιμή1, η τιμή2, η τιμή3 αντιστοιχούν στις τιμές αυτών των στοιχείων. Όλοι οι ειδικοί χαρακτήρες, συμπεριλαμβανομένων των = και &, θα παραληφθούν από αυτά τα ονόματα ή τις τιμές παραμέτρων. Επομένως, δεν πρέπει να χρησιμοποιείτε αυτά τα σύμβολα και τους κυριλλικούς χαρακτήρες σε αναγνωριστικά στα ονόματα ή τις τιμές των στοιχείων της φόρμας.

Εάν εισαγάγετε κάποιο χαρακτήρα υπηρεσίας στο πεδίο εισαγωγής, θα μεταδοθεί στον δεκαεξαδικό κωδικό του, για παράδειγμα, το σύμβολο $ θα αντικατασταθεί από το %24. Τα ρωσικά γράμματα μεταδίδονται επίσης με τον ίδιο τρόπο.

Για τα πεδία εισαγωγής κειμένου και κωδικού πρόσβασης (αυτά είναι στοιχεία εισαγωγής με τα χαρακτηριστικά type=text και type=password), η τιμή θα είναι ό,τι εισαγάγει ο χρήστης. Εάν ο χρήστης δεν εισάγει τίποτα σε ένα τέτοιο πεδίο, τότε το στοιχείο name= θα υπάρχει στη συμβολοσειρά ερωτήματος, όπου το όνομα αντιστοιχεί στο όνομα αυτού του στοιχείου φόρμας.

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

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

http://phpbook.info/test.php?id=10&user=pit

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

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

Για τη μέθοδο POST

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

Οι πληροφορίες που εισάγονται από τον χρήστη και αποστέλλονται στον διακομιστή χρησιμοποιώντας τη μέθοδο POST προβάλλονται σε τυπική είσοδο στο πρόγραμμα που καθορίζεται από το χαρακτηριστικό action ή στο τρέχον σενάριο εάν αυτό το χαρακτηριστικό παραλείπεται. Το μήκος του απεσταλμένου αρχείου μεταβιβάζεται στη μεταβλητή περιβάλλοντος CONTENT_LENGTH και ο τύπος δεδομένων μεταβιβάζεται στη μεταβλητή CONTENT_TYPE.

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

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

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

REMOTE_ADDR – Διεύθυνση IP του κεντρικού υπολογιστή (υπολογιστή) που στέλνει το αίτημα.

REMOTE_HOST – όνομα κεντρικού υπολογιστή από τον οποίο στάλθηκε το αίτημα.

HTTP_REFERER – διεύθυνση της σελίδας που συνδέεται με το τρέχον σενάριο.

REQUEST_METHOD – η μέθοδος που χρησιμοποιήθηκε κατά την αποστολή του αιτήματος.

QUERY_STRING – πληροφορίες που βρίσκονται στη διεύθυνση URL μετά το ερωτηματικό.

SCRIPT_NAME – εικονική διαδρομή προς το πρόγραμμα που πρέπει να εκτελεστεί.

HTTP_USER_AGENT – πληροφορίες σχετικά με το πρόγραμμα περιήγησης που χρησιμοποιεί ο πελάτης

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

Μέσα σε ένα σενάριο PHP, υπάρχουν διάφοροι τρόποι πρόσβασης στα δεδομένα που αποστέλλονται από έναν πελάτη μέσω HTTP. Πριν από την PHP 4.1.0, η πρόσβαση σε τέτοια δεδομένα γινόταν με τα ονόματα των μεταφερόμενων μεταβλητών (θυμηθείτε ότι τα δεδομένα μεταφέρονται με τη μορφή ζευγών "όνομα μεταβλητής, σύμβολο "=", τιμή μεταβλητής"). Έτσι, εάν, για παράδειγμα, το first_name=Nina είχε περάσει, τότε η μεταβλητή $first_name με την τιμή Nina εμφανίστηκε μέσα στο σενάριο. Εάν ήταν απαραίτητο να γίνει διάκριση με ποια μέθοδο μεταφέρθηκαν τα δεδομένα, τότε χρησιμοποιήθηκαν οι συσχετιστικοί πίνακες $HTTP_POST_VARS και $HTTP_GET_VARS, τα κλειδιά των οποίων ήταν τα ονόματα των μεταφερόμενων μεταβλητών και οι τιμές ήταν, αντίστοιχα, οι τιμές ​από αυτές τις μεταβλητές. Έτσι, εάν το ζεύγος first_name=Nina περάσει από τη μέθοδο GET, τότε $HTTP_GET_VARS["first_name"]="Nina".

Δεν είναι ασφαλές να χρησιμοποιείτε τα ονόματα των μεταβλητών που έχουν περάσει απευθείας σε ένα πρόγραμμα. Ως εκ τούτου, αποφασίστηκε, ξεκινώντας από την PHP 4.1.0, να χρησιμοποιηθεί ένας ειδικός πίνακας – $_REQUEST – για πρόσβαση σε μεταβλητές που μεταδίδονται μέσω αιτημάτων HTTP. Αυτός ο πίνακας περιέχει δεδομένα που μεταφέρονται χρησιμοποιώντας τις μεθόδους POST και GET, καθώς και με χρήση cookie HTTP. Αυτός είναι ένας υπερσφαιρικός συσχετιστικός πίνακας, δηλ. Οι τιμές του μπορούν να ληφθούν οπουδήποτε στο πρόγραμμα χρησιμοποιώντας ως κλειδί το όνομα της αντίστοιχης μεταβλητής (στοιχείο φόρμας).

Παράδειγμα 4.2.Ας υποθέσουμε ότι δημιουργήσαμε μια φόρμα για την εγγραφή συμμετεχόντων σε μια σχολή αλληλογραφίας προγραμματισμού, όπως στο παραπάνω παράδειγμα. Στη συνέχεια, στο αρχείο 1.php που επεξεργάζεται αυτήν τη φόρμα, μπορείτε να γράψετε τα εξής:

$str = "Γεια σας,
".$_REQUEST["first_name"]."
".$_REQUEST["last_name"]."!
";
$str .="Έχετε επιλέξει να σπουδάσετε ένα μάθημα σε
".$_REQUEST["kurs"];
echo $str;
?>

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

Γεια σου Vasya Petrov!

Μετά την εισαγωγή του πίνακα $_REQUEST, οι πίνακες $HTTP_POST_VARS και $HTTP_GET_VARS μετονομάστηκαν σε $_POST και $_GET, αντίστοιχα, για συνέπεια, αλλά οι ίδιοι δεν εξαφανίστηκαν από τη χρήση για λόγους συμβατότητας με προηγούμενες εκδόσεις της PHP. Σε αντίθεση με τους προκατόχους τους, οι πίνακες $_POST και $_GET έχουν γίνει υπερ-σφαιρικοί, δηλ. προσβάσιμο άμεσα και μέσα σε λειτουργίες και μεθόδους.

Ας δώσουμε ένα παράδειγμα χρήσης αυτών των πινάκων. Ας υποθέσουμε ότι πρέπει να επεξεργαστούμε μια φόρμα που περιέχει στοιχεία εισαγωγής με όνομα first_name, last_name, kurs (για παράδειγμα, το form.html παραπάνω). Τα δεδομένα μεταφέρθηκαν χρησιμοποιώντας τη μέθοδο POST και δεν θέλουμε να επεξεργαστούμε δεδομένα που μεταφέρθηκαν με άλλες μεθόδους. Αυτό μπορεί να γίνει ως εξής:

$str = "Γεια σας,
".$_POST ["first_name"]."
".$_POST ["last_name"] ."!
";
$str .= "Έχετε επιλέξει να μελετήσετε ένα μάθημα με θέμα ".
$_POST["kurs"];
echo $str;
?>

Στη συνέχεια, στην οθόνη του προγράμματος περιήγησης, εάν εισάγουμε το όνομα "Vasya", το επίθετο "Petrov" και επιλέξουμε το μάθημα PHP μεταξύ όλων των μαθημάτων, θα δούμε ένα μήνυμα, όπως στο προηγούμενο παράδειγμα:

Γεια σου Vasya Petrov!
Έχετε επιλέξει να σπουδάσετε ένα μάθημα PHP

Προκειμένου να διατηρηθεί η δυνατότητα επεξεργασίας σεναρίων προγενέστερων από την PHP 4.1.0, εισήχθη η οδηγία register_globals, η οποία επιτρέπει ή αρνείται την πρόσβαση σε μεταβλητές απευθείας με το όνομά τους. Εάν η παράμετρος register_globals=On βρίσκεται στο αρχείο ρυθμίσεων της PHP, τότε οι μεταβλητές που μεταβιβάζονται στον διακομιστή χρησιμοποιώντας τις μεθόδους GET και POST μπορούν να προσπελαστούν απλώς με το όνομά τους (δηλαδή μπορείτε να γράψετε $first_name). Εάν register_globals=Off, τότε πρέπει να γράψετε $_REQUEST["first_name"] ή $_POST["first_name"], $_GET["first_name"], $HTTP_POST_VARS["first_name"], $HTTP_GET_VARS["first_name"]. Από άποψη ασφάλειας, είναι καλύτερο να απενεργοποιήσετε αυτήν την οδηγία (δηλ. register_globals=Off). Με την οδηγία register_globals ενεργοποιημένη, οι πίνακες που αναφέρονται παραπάνω θα περιέχουν επίσης τα δεδομένα που διαβιβάζονται από τον πελάτη.

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

getenv("REQUEST_METHOD");
// θα επιστρέψει τη μέθοδο που χρησιμοποιήθηκε
echo getenv("REMOTE_ADDR");
// θα εμφανίσει τη διεύθυνση IP του χρήστη,
// ποιος έστειλε το αίτημα
?>

Όπως είπαμε, εάν χρησιμοποιηθεί η μέθοδος GET, τότε τα δεδομένα μεταφέρονται προσθέτοντας μια συμβολοσειρά ερωτήματος με τη μορφή ζευγών variable_name=value στη διεύθυνση URL του πόρου. Οτιδήποτε μετά το ερωτηματικό στη διεύθυνση URL μπορεί να ανακτηθεί χρησιμοποιώντας την εντολή

getenv("QUERY_STRING");

Χάρη σε αυτό, είναι δυνατή η μεταφορά δεδομένων με κάποια άλλη μορφή χρησιμοποιώντας τη μέθοδο GET. Για παράδειγμα, μπορείτε να καθορίσετε μόνο τις τιμές πολλών παραμέτρων χρησιμοποιώντας ένα σύμβολο συν και στο σενάριο μπορείτε να αναλύσετε τη συμβολοσειρά ερωτήματος σε μέρη ή μπορείτε να μεταβιβάσετε την τιμή μιας μόνο παραμέτρου. Σε αυτήν την περίπτωση, ένα κενό στοιχείο με ένα κλειδί ίσο με αυτήν την τιμή (ολόκληρη τη συμβολοσειρά ερωτήματος) θα εμφανιστεί στον πίνακα $_GET και ο χαρακτήρας "+" που συναντάται στη συμβολοσειρά ερωτήματος θα αντικατασταθεί με μια υπογράμμιση "_".

Με τη μέθοδο POST, τα δεδομένα μεταδίδονται μόνο χρησιμοποιώντας φόρμες και ο χρήστης (πελάτης) δεν βλέπει ποια δεδομένα αποστέλλονται στον διακομιστή. Για να τα δει, ο χάκερ πρέπει να αντικαταστήσει τη φόρμα μας με τη δική του. Στη συνέχεια, ο διακομιστής θα στείλει τα αποτελέσματα της επεξεργασίας της λανθασμένης φόρμας σε λάθος μέρος. Για να αποφύγετε αυτό, μπορείτε να ελέγξετε τη διεύθυνση της σελίδας από την οποία στάλθηκαν τα δεδομένα. Αυτό μπορεί να γίνει ξανά χρησιμοποιώντας τη συνάρτηση getenv():

getenv("HTTP_REFERER");

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

Παράδειγμα επεξεργασίας αιτήματος με χρήση PHP

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

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

Το σενάριο που θα αναλύσει και θα επεξεργαστεί όλα αυτά ονομάζεται 1.php (η φόρμα αναφέρεται συγκεκριμένα σε αυτό το αρχείο, το οποίο είναι γραμμένο στο χαρακτηριστικό action του). Από προεπιλογή, η μέθοδος GET χρησιμοποιείται για μετάδοση, αλλά καθορίσαμε POST. Με βάση τις πληροφορίες που λαμβάνονται από το εγγεγραμμένο άτομο, το σενάριο δημιουργεί ένα αντίστοιχο μήνυμα. Εάν κάποιος έχει επιλέξει κάποια μαθήματα, θα λάβει ένα μήνυμα για την ώρα που θα πραγματοποιηθούν και τους διδάσκοντες που τα διδάσκουν. Εάν ένα άτομο δεν έχει επιλέξει τίποτα, τότε εμφανίζεται ένα μήνυμα σχετικά με την επόμενη συνάντηση του Correspondence School of Programmers (ZSH).

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

Προσοχή! Το μάθημα είναι ξεπερασμένο. Νέα μαθήματα σχετικά με αυτό το θέμα περιέχονται στο μάθημα PHP για αρχάριους.

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

Μεταφορά πληροφοριών με χρήση γλώσσας PHP

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

Έλλειψη κρατικής υποστήριξης στο πρωτόκολλο HTTP

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

Ακόμα κι αν ο ιστότοπος είναι σχεδιασμένος με τέτοιο τρόπο ώστε η πλοήγηση, π.χ. η μετάβαση από τη μια σελίδα στην άλλη γίνεται αυστηρά προς μία κατεύθυνση (ας πούμε ότι η σελίδα 1 οδηγεί μόνο στη σελίδα 2, η οποία οδηγεί μόνο στη σελίδα 3 κ.λπ.), τα εργαλεία υποστήριξης πρωτοκόλλου HTTP δεν έχουν πληροφορίες και δεν λαμβάνουν υπόψη ότι ένας χρήστης Η προβολή της σελίδας 2 πρέπει να έχει επισκεφτεί προηγουμένως τη σελίδα 1. Δεν μπορείτε να εκχωρήσετε μια τιμή σε μια μεταβλητή στη σελίδα 1 και να περιμένετε να εισαχθεί στη σελίδα 2 χρησιμοποιώντας την ίδια την HTML. Ο κώδικας HTML μπορεί να χρησιμοποιηθεί για την εμφάνιση μιας φόρμας και αυτός ο κώδικας μπορεί να χρησιμοποιηθεί ακόμη και για την εισαγωγή πληροφοριών, αλλά εκτός εάν χρησιμοποιηθούν πρόσθετα μέσα για τη μεταφορά των εισαγόμενων πληροφοριών σε άλλη σελίδα ή πρόγραμμα, η τιμή που έχει εκχωρηθεί στη μεταβλητή απλώς θα εξαφανιστεί μετά τη μετακίνηση σε άλλη σελίδα.

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

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

GET παραμέτρους

Η μέθοδος GET μεταβιβάζει παραμέτρους από την προηγούμενη σελίδα στην επόμενη ως μέρος μιας συμβολοσειράς ερωτήματος, η οποία αναπαρίσταται με τη μορφή ενός URI Uniform Resource Identifier. Όταν χρησιμοποιείτε τη μέθοδο GET για την επεξεργασία μιας φόρμας, η διεύθυνση URL που προσδιορίζεται από το χαρακτηριστικό δράσης της φόρμας ακολουθείται από ένα ερωτηματικό μετά τον οριοθέτη, ακολουθούμενο από τα καθορισμένα ονόματα μεταβλητών και τιμές και, στη συνέχεια, ολόκληρη η συμβολοσειρά μεταβιβάστηκε στον παράγοντα επεξεργασίας (σε αυτήν την περίπτωση, στον διακομιστή web).

Παρακάτω είναι ένα παράδειγμα φόρμας HTML που χρησιμοποιεί τη μέθοδο GET (πληκτρολογήστε αυτήν τη σήμανση και αποθηκεύστε το αρχείο ως sportselect.html):

Βασικά στοιχεία της PHP

Επιλέξτε το αγαπημένο σας άθλημα

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

  • URL σε εισαγωγικά μετά τη λέξη δράση (http://localhost/sports.php).
  • Ένα ερωτηματικό (?) που υποδεικνύει ότι οι ακόλουθοι χαρακτήρες αποτελούν μια συμβολοσειρά GET.
  • Η μεταβλητή ονόματος, το σύμβολο ίσου (=) και η αντίστοιχη παράμετρος τιμής (value=Hockey).
  • Το συμπλεκτικό σύμβολο (&) ακολουθούμενο από το ζεύγος name=value (εάν υπάρχει).

Έτσι το πρόγραμμα περιήγησης θα δημιουργήσει την ακόλουθη συμβολοσειρά URL:
http://localhost/sports.php?sport=Χόκεϊ

Στη συνέχεια, το πρόγραμμα περιήγησης ανακατευθύνει τη συμβολοσειρά URL που προκύπτει στον δικό του χώρο διευθύνσεων ως νέο αίτημα. Το παρακάτω σενάριο PHP (sports.php), στο οποίο υποβάλλεται η φόρμα, ανακτά τις τιμές της μεταβλητής GET από το τελευταίο μέρος της συμβολοσειράς ερωτήματος, εισάγει αυτές τις μεταβλητές και τις τιμές μεταβλητών στον υπερσφαιρικό πίνακα $_GET (να περιγράφεται σύντομα) και εκτελεί ορισμένες απαραίτητες ενέργειες με αυτές τις τιμές. Σε αυτήν την περίπτωση, η εισαγωγή γίνεται σε μια συμβολοσειρά κειμένου.

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

Αγαπημένο άθλημα

Το αγαπημένο σας άθλημα είναι

Σημειώστε ότι η τιμή που εισήχθη στο πεδίο φόρμας HTML με το χαρακτηριστικό name="sport" στην προηγούμενη σελίδα είναι τώρα διαθέσιμη ως μεταβλητή PHP με το όνομα $_GET["sport"]. Το παρακάτω σχήμα δείχνει πώς λειτουργεί αυτό το παράδειγμα:

Τώρα πρέπει να εξηγήσουμε ακριβώς πώς μπορείτε να έχετε πρόσβαση στις τιμές που μεταβιβάζονται από σελίδα σε σελίδα. Αυτό το άρθρο εξετάζει τις δύο κύριες μεθόδους μετάδοσης τιμών που χρησιμοποιούνται σε φόρμες - GET και POST. Κάθε μέθοδος έχει έναν υπερσφαιρικό πίνακα που σχετίζεται με αυτήν. Οι υπερσφαιρικοί πίνακες περιγράφονται λεπτομερέστερα στο άρθρο "Μεταβλητές και σταθερές". Ένα ξεχωριστό χαρακτηριστικό των υπερσφαιρικών πινάκων από άλλους πίνακες είναι η παρουσία ενός προθέματος στο όνομα με τη μορφή υπογράμμισης.

Ο επεξεργαστής φόρμας έχει πρόσβαση σε κάθε στοιχείο που υποβάλλεται χρησιμοποιώντας τη μέθοδο GET αποκτώντας πρόσβαση στον πίνακα $_GET και σε κάθε στοιχείο που υποβάλλεται χρησιμοποιώντας τη μέθοδο POST αποκτώντας πρόσβαση στον πίνακα $_POST. Η συντακτική δομή που χρησιμοποιείται για την πρόσβαση σε οποιοδήποτε στοιχείο ενός υπερσφαιρικού πίνακα είναι απλή και εντελώς ομοιόμορφη:

$_array_name["index_name"]

Εδώ, index_name είναι το τμήμα ονόματος του ζεύγους name-value (για τη μέθοδο GET) ή το όνομα του πεδίου φόρμας HTML (για τη μέθοδο POST). Ακολουθώντας το προηγούμενο παράδειγμα, το $_GET["sport"] καθορίζει την τιμή του στοιχείου επιλογής της φόρμας που ονομάζεται "sport"; Αυτή η τιμή μεταβιβάστηκε χρησιμοποιώντας μια λειτουργία GET που εκτελέστηκε στο αρχικό αρχείο. Ο χειριστής φόρμας πρέπει να χρησιμοποιεί έναν πίνακα που αντιστοιχεί στη μέθοδο με την οποία υποβλήθηκαν τα δεδομένα. Συγκεκριμένα, σε αυτό το παράδειγμα, η τιμή του $_POST["sport"] δεν έχει οριστεί επειδή η αρχική φόρμα δεν υπέβαλε δεδομένα χρησιμοποιώντας τη μέθοδο POST.

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

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

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

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

Παράμετροι POST

Επί του παρόντος, η προτιμώμενη μέθοδος για την υποβολή δεδομένων φόρμας είναι η POST (ειδικά σε περιπτώσεις όπου η εκτέλεση ενεργειών οδηγεί σε μόνιμες αλλαγές, όπως η εισαγωγή πληροφοριών σε μια βάση δεδομένων). Το σύνολο δεδομένων φόρμας περιλαμβάνεται στο σώμα της φόρμας όταν η φόρμα ανακατευθύνεται στον παράγοντα επεξεργασίας (σε αυτήν την περίπτωση, στον διερμηνέα PHP). Η συμβολοσειρά URL δεν υφίσταται ορατές αλλαγές για να αντικατοπτρίζει την ποικιλία των δεδομένων που μεταφέρονται.

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

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

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

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

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

...

Εργασία με πολλαπλές τιμές

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

"metod="post">
Επιλέξτε τα αγαπημένα σας κατοικίδια

Επιλεγμένα ζώα: "; foreach ($animal ως $a) ( echo " ".htmlentities($a).""; } } ?>

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

Στον χειριστή, ο πίνακας αποθηκεύεται στη μεταβλητή $animal και απαριθμείται χρησιμοποιώντας έναν βρόχο foreach, όπως ένας κανονικός πίνακας.

Επικύρωση φόρμας και μορφοποίηση μεταβλητών φόρμας

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

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

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

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

Βασικά στοιχεία της PHP

"metod="post">
Στοιχεία επικοινωνίας "class="">
"class="">

Αυτό το παράδειγμα χρησιμοποιεί τη συνάρτηση filter_var(), η οποία ελέγχει μια μεταβλητή χρησιμοποιώντας ένα φίλτρο και λαμβάνει δύο παραμέτρους - μια συμβολοσειρά πηγής και μια σταθερά που υποδεικνύει τον τύπο του φίλτρου. Εκτός από την επικύρωση διευθύνσεων email (FILTER_VALIDATE_EMAIL), αυτή η συνάρτηση υποστηρίζει τις ακόλουθες σταθερές: FILTER_VALIDATE_URL - ελέγχει την τιμή για την ορθότητα του URL (για παράδειγμα), FILTER_VALIDATE_IP - ελέγχει την τιμή για την ορθότητα των διευθύνσεων IP, FILTER_VALIDATE_REGEXP - ελέγχει για την ορθότητα της σύνταξης της κανονικής έκφρασης και πολλών άλλων σταθερών, οι οποίες είναι εναλλακτικές στις συναρτήσεις is_bool(), is_float(), is_int(), κ.λπ.

Αυτή και οι ακόλουθες ενότητες θα καλύψουν συνοπτικά τον τρόπο δημιουργίας βασικών εφαρμογών Ιστού χρησιμοποιώντας PHP. Αυτό που συζητήθηκε στην ενότητα σαφώς δεν επαρκεί για να επικοινωνήσει η εφαρμογή σας με τον χρήστη και να διατυπωθεί ανάλογα με τις ενέργειες που έκανε ή τις παραμέτρους που εισήγαγε. Τι λείπει? Δεν υπάρχουν αρκετές γνώσεις σχετικά με τον τρόπο οργάνωσης της εισαγωγής δεδομένων χρήστη και της μεταφοράς αυτών των δεδομένων στον διακομιστή. Λοιπόν, θα πρέπει να έχετε ήδη βασικές γνώσεις σχετικά με τον τρόπο επεξεργασίας των πληροφοριών που λαμβάνονται στον διακομιστή μέσω προγραμματισμού.

Μέθοδοι αιτήματος HTTP και οι παράμετροί τους

Οποιαδήποτε δυναμική εφαρμογή Ιστού παράγει μια απάντηση στον χρήστη σύμφωνα με τις παραμέτρους που έχει εισαγάγει ή τις ενέργειες που εκτελούνται από την πλευρά του πελάτη. Η επικοινωνία με τον διακομιστή συνήθως καταλήγει σε δύο τύπους αιτημάτων: χρησιμοποιώντας τη μέθοδο GET ή τη μέθοδο POST. Λίγα λόγια για τις διαφορές μεταξύ αυτών των δύο τύπων αιτημάτων.

Μέθοδος GET:

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

    Πιστεύεται ότι τα αποτελέσματα πολλών πανομοιότυπων αιτημάτων GET που εκτελούνται στη σειρά θα πρέπει να είναι τα ίδια.

Μέθοδος POST:

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

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

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

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

Διαδρομή προς τον πόρο;parameter1=value1¶meter2=value2&…

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

Http://site/php-samples/sql.php?sql=select * από το d_staff

Για να αποκτήσετε πρόσβαση στις παραμέτρους αιτήματος από την πλευρά του διακομιστή, θα πρέπει να χρησιμοποιήσετε καθολικούς πίνακες $_GETΚαι $_POSTαντίστοιχα. Εάν η εφαρμογή σας δεν ενδιαφέρεται με ποια μέθοδο έχει πρόσβαση, τότε θα πρέπει να χρησιμοποιήσετε έναν πίνακα $_ΑΙΤΗΣΗ, το οποίο συνδυάζει τα δεδομένα των πινάκων $_GET και $_POST, για παράδειγμα, ως εξής:

$sql = isset($_REQUEST["sql"]) ? $_REQUEST["sql"] : "";

Σε αυτό το παράδειγμα, το πρόγραμμα καθορίζει εάν η παράμετρος «sql» έχει περάσει: εάν ναι, εκχωρεί την τιμή της στην αντίστοιχη μεταβλητή και αν όχι, της εκχωρεί μια κενή τιμή.

Καθορισμός παραμέτρων αιτήματος HTTP μέσω φόρμας HTML

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

μέθοδος "ανάρτηση" δράση =’sql.php’ > SQL:

Το χαρακτηριστικό μέθοδος του στοιχείου φόρμας καθορίζει τη μέθοδο που καθορίζει τη μέθοδο μετάδοσης δεδομένων στον διακομιστή (get ή post). Το χαρακτηριστικό action καθορίζει php αρχείο, το οποίο θα επεξεργαστεί το αίτημα. Εάν ο χειριστής πρέπει να είναι το τρέχον αρχείο, τότε το χαρακτηριστικό action δεν χρειάζεται να προστεθεί. Για όλα τα στοιχεία των οποίων η τιμή πρέπει να μεταβιβαστεί ως παράμετρος αιτήματος HTTP, πρέπει να ορίσετε μια μοναδική τιμή για το χαρακτηριστικό name. Είναι η τιμή του χαρακτηριστικού όνομαθα είναι δείκτηςστους πίνακες $_GET, $_POST ή $_REQUEST (βλ. παράδειγμα παραπάνω). Πατώντας ένα κουμπί υποβάλλουνστέλνει τη φόρμα με όλες τις καταχωρημένες τιμές στον διακομιστή.