Φανταστική υποβολή php. Φόρμες html: φόρμα php - στείλτε ένα αίτημα στην ίδια σελίδα. Πώς να αποφύγετε προβλήματα με την PHP _SELF

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

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

Το έθεσα λοιπόν για να το εξετάσετε.

Η ουσία του προβλήματος

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

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

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

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

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

Παράδειγμα #1 Η πιο απλή φόρμα HTML

Το όνομα σου:

Η ηλικία σου:

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

Παράδειγμα #2 Εμφάνιση δεδομένων φόρμας

Γειά σου, .
Είσαι μεγάλος σε ηλικία.

Παράδειγμα εξόδου αυτού του προγράμματος:

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

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

15 χρόνια πριν

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

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

Πριν 2 χρόνια

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

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

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

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

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

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

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

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

1. Κουμπιά - Ετικέτα

Η ετικέτα δημιουργεί κουμπιά σε μια ιστοσελίδα και η δράση της μοιάζει με το αποτέλεσμα που προκύπτει χρησιμοποιώντας την ετικέτα (με την παράμετρο type="button | reset | Submission"). Σε αντίθεση με αυτήν την ετικέτα, προσφέρει προηγμένες επιλογές για τη δημιουργία κουμπιών. Για παράδειγμα, σε ένα τέτοιο κουμπί μπορείτε να τοποθετήσετε οποιαδήποτε στοιχεία HTML, συμπεριλαμβανομένων των εικόνων. Χρησιμοποιώντας στυλ, μπορείτε να ορίσετε την εμφάνιση ενός κουμπιού αλλάζοντας τη γραμματοσειρά, το χρώμα φόντου, το μέγεθος και άλλες παραμέτρους.

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

Επιλογές:

απενεργοποιημένο - αποκλείει την πρόσβαση και την τροποποίηση του στοιχείου.

τύπος - τύπος κουμπιού

τιμή - Η τιμή του κουμπιού που θα σταλεί στον διακομιστή ή θα διαβαστεί χρησιμοποιώντας sprits.

Κουμπί με κείμενο

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

Ενεργό κουμπί Ανενεργό κουμπί

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

Επιχειρήματα:

κουμπί - Κανονικό κουμπί.

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

Υποβολή - Κουμπί αποστολής δεδομένων φόρμας στον διακομιστή.

Εκκαθάριση φόρμας Υποβολή φόρμας

Παράμετρος VALUE Καθορίζει την τιμή του κουμπιού που θα σταλεί στον διακομιστή. Ένα ζεύγος «όνομα=τιμή» αποστέλλεται στον διακομιστή, όπου το όνομα καθορίζεται από την παράμετρο ονόματος της ετικέτας και η τιμή καθορίζεται από την παράμετρο τιμής. Το νόημα μπορεί είτε να συμπίπτει με το κείμενο στο κουμπί είτε να είναι ανεξάρτητο. Η παράμετρος τιμή χρησιμοποιείται επίσης για πρόσβαση σε δεδομένα μέσω σεναρίων.

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

1.1. Κουμπί (τύπος εισαγωγής=κουμπί) 1.2. Κουμπί με εικόνα (τύπος εισαγωγής=εικόνα) Κουμπί με μια εικόνα

Τα κουμπιά με εικόνες είναι παρόμοια σε δράση με το κουμπί Υποβολή, αλλά αντιπροσωπεύουν μια εικόνα. Για να το κάνετε αυτό, ορίστε type=image και src="image.gif" .

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

1.3. Κουμπί υποβολής φόρμας (τύπος εισαγωγής=υποβολή)

Χρησιμεύει για την υποβολή της φόρμας στο σενάριο. Όταν δημιουργείτε ένα κουμπί για να υποβάλετε μια φόρμα, πρέπει να καθορίσετε 2 χαρακτηριστικά: type="submit" και value="Button text" . Атрибут name необходим, если кнопка не одна, а несколько и все они созданы для разных операций, например кнопки "Сохранить", "Удалить", "Редактировать" и т.д. После нажатия на кнопку сценарию передается строка имя=текст кнопки.!}

Δεν απαιτείται σενάριο PHP.

1.4. Μια σειρά κουμπιών (υποβολή) για την επιλογή της επιλογής ενέργειας 2. Κουμπί επαναφοράς φόρμας (Επαναφορά)

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

Δεν απαιτείται σενάριο PHP.

3. Πλαίσιο ελέγχου

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

άσπρο
Πράσινος
Μπλε
το κόκκινο
Μαύρος

// πρώτο σετ κουμπιών
// δεύτερο σετ κουμπιών
// τρίτο σετ κουμπιών

5. Πεδίο κειμένου (κείμενο)

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

6. Πεδίο κωδικού πρόσβασης

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

7. Πεδίο κρυφού κειμένου (κρυφό)

Σας επιτρέπει να μεταβιβάσετε ορισμένες πληροφορίες υπηρεσίας στο σενάριο χωρίς να το εμφανίσετε στη σελίδα.

8. Αναπτυσσόμενη λίστα (επιλογή)

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

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

Λευκό Πράσινο Μπλε Κόκκινο Μαύρο

Εάν πρέπει να δημιουργήσετε ένα αναπτυσσόμενο μενού με προβλέψιμη ακολουθία. Για παράδειγμα, μια λίστα με έτη από το 2000 έως το 2050. Στη συνέχεια χρησιμοποιείται η ακόλουθη τεχνική.

9. Πεδίο εισαγωγής κειμένου σε πολλές γραμμές (textarea)

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

Υπάρχει μια παράμετρος περιτύλιξης - ρύθμιση περιτύλιξης γραμμής. Πιθανές τιμές:

off - απενεργοποιεί την αναδίπλωση γραμμής.

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

φυσική - οι αλλαγές γραμμής αφήνονται στην αρχική τους μορφή.

Από προεπιλογή, η ετικέτα δημιουργεί ένα κενό πεδίο πλάτους 20 χαρακτήρων και αποτελείται από 2 γραμμές.


Προκειμένου ένα πεδίο κειμένου πολλών γραμμών να συμμορφώνεται με τη μορφοποίηση html (αναδίπλωση γραμμής χρησιμοποιώντας την ετικέτα
ή
), στη συνέχεια χρησιμοποιήστε τη συνάρτηση nl2br():

Αρχικά εισήχθη γραμμή 1 Αρχικά εισήχθη γραμμή 2 Αρχικά εισήχθη γραμμή 3

10. Κουμπί για τη μεταφόρτωση αρχείων (περιήγηση)

Χρησιμεύει για την υλοποίηση της αποστολής αρχείων στον διακομιστή. Όταν δημιουργείτε ένα πεδίο κειμένου, πρέπει επίσης να καθορίσετε τον τύπο του πεδίου ως "αρχείο" .

Ανέβασμα αρχείου:

ΤΡΟΠΟΙ ΕΠΙΚΟΙΝΩΝΙΑΣ ΤΟΥ Browser ΜΕ ΤΟΝ ΔΙΑΚΟΜΙΣΤΗ

Υπάρχουν λίγες μέθοδοι που παρέχονται από το πρωτόκολλο HTTP. Αυτή είναι σημαντική πληροφορία. Δεν υπάρχουν άλλοι τρόποι. Στην πράξη, χρησιμοποιούνται δύο: GET είναι όταν τα δεδομένα μεταφέρονται στη γραμμή διευθύνσεων, για παράδειγμα, όταν ο χρήστης κάνει κλικ σε έναν σύνδεσμο. ΑΝΑΡΤΗΣΗ - όταν κάνει κλικ σε ένα κουμπί στη φόρμα.

Μέθοδος GET

Για να μεταφέρετε δεδομένα χρησιμοποιώντας τη μέθοδο GET, δεν χρειάζεται να δημιουργήσετε μια φόρμα σε μια σελίδα HTML (κανείς δεν σας απαγορεύει να χρησιμοποιείτε φόρμες για αιτήματα χρησιμοποιώντας τη μέθοδο GET - αλλά αυτό είναι βλακεία) - απλώς ένας σύνδεσμος προς το έγγραφο με την προσθήκη μια συμβολοσειρά ερωτήματος που μπορεί να μοιάζει με ζεύγη μεταβλητής=τιμής συνδυάζονται χρησιμοποιώντας ένα συμπλεκτικό σύμβολο & και η συμβολοσειρά προστίθεται στη διεύθυνση URL της σελίδας χρησιμοποιώντας ένα ερωτηματικό "? "

Ωστόσο, δεν χρειάζεται να χρησιμοποιήσετε ζεύγη κλειδιού=τιμής εάν χρειάζεται να περάσετε μόνο μία μεταβλητή· για να το κάνετε αυτό, πρέπει να γράψετε την ΑΞΙΑ (όχι το όνομα) της μεταβλητής μετά το ερωτηματικό.

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

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

Για πρόσβαση σε δημόσιες σελίδες μεταβιβάζοντας παραμέτρους (αυξημένη λειτουργικότητα)

Μεταφορά πληροφοριών που δεν επηρεάζει το επίπεδο ασφάλειας

Για πρόσβαση σε προστατευμένες σελίδες με περασμένες παραμέτρους

Για τη μετάδοση πληροφοριών που επηρεάζουν το επίπεδο ασφάλειας

Για τη μετάδοση πληροφοριών που δεν μπορούν να τροποποιηθούν από τον χρήστη (μερικοί μεταδίδουν το κείμενο των ερωτημάτων SQL.

Μέθοδος POST

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

Πλεονέκτημα:

Μεγαλύτερη ασφάλεια και λειτουργικότητα για αιτήματα που χρησιμοποιούν φόρμες POST.

Ελάττωμα:

Λιγότερη διαθεσιμότητα.

Σε τι πρέπει να το χρησιμοποιείτε:

Για τη μετάδοση μεγάλου όγκου πληροφοριών (κείμενο, αρχεία..).

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

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

Σε ποιες περιπτώσεις δεν πρέπει να χρησιμοποιείται:

ΧΩΡΙΣ ΠΕΡΙΟΡΙΣΜΟΥΣ.

Μεταφόρτωση αρχείων με τη μέθοδο POST

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

Η σελίδα μεταφόρτωσης αρχείου μπορεί να υλοποιηθεί χρησιμοποιώντας μια ειδική φόρμα που μοιάζει με αυτό:

//Φόρμα για τη μεταφόρτωση αρχείων Στείλτε αυτό το αρχείο:

Στο παραπάνω παράδειγμα, το "_URL_" πρέπει να αντικατασταθεί με έναν σύνδεσμο προς το σενάριο PHP. Το κρυφό πεδίο MAX_FILE_SIZE (η τιμή πρέπει να καθορίζεται σε byte) πρέπει να προηγείται του πεδίου επιλογής αρχείου και η τιμή του είναι το μέγιστο επιτρεπόμενο μέγεθος αρχείου που πρέπει να γίνει αποδεκτό. Θα πρέπει επίσης να βεβαιωθείτε ότι έχετε καθορίσει enctype="multipart/form-data" στα χαρακτηριστικά φόρμας, διαφορετικά τα αρχεία δεν θα μεταφορτωθούν στον διακομιστή.

Προσοχή

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

Πώς να ορίσετε μια μέθοδο αιτήματος;

Κατευθείαν:

Getenv("REQUEST_METHOD");

θα επιστρέψει GET ή POST.

Ποια μέθοδος πρέπει να χρησιμοποιηθεί;

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

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

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

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

Αυτό το άρθρο περιγράφει λεπτομερώς τη χρήση της μεταβλητής PHP _SELF.

Τι είναι η μεταβλητή PHP _SELF;

Η μεταβλητή PHP _SELF επιστρέφει το όνομα και τη διαδρομή του τρέχοντος αρχείου (σε σχέση με τη ρίζα του εγγράφου). Μπορείτε να χρησιμοποιήσετε αυτήν τη μεταβλητή στο χαρακτηριστικό action της φόρμας. Υπάρχουν επίσης ορισμένες αποχρώσεις που πρέπει να γνωρίζετε. Φυσικά, δεν μπορούμε να αγνοήσουμε αυτές τις αποχρώσεις.

Ας δούμε μερικά παραδείγματα.

Echo $_SERVER["PHP_SELF"];

1) Ας υποθέσουμε ότι το αρχείο php βρίσκεται στην ακόλουθη διεύθυνση:

Http://www.yourserver.com/form-action.php

Σε αυτήν την περίπτωση, η μεταβλητή PHP _SELF θα περιέχει:

"/form-action.php"

2) Ας υποθέσουμε ότι το αρχείο php βρίσκεται σε αυτή τη διεύθυνση:

Http://www.yourserver.com/dir1/form-action.php

Το PHP_SELF θα είναι:

"/dir1/form-action.php"

PHP _SELF στο χαρακτηριστικό action της φόρμας. Γιατί χρειαζόταν εκεί;

Συνήθως η μεταβλητή PHP _SELF χρησιμοποιείται στο χαρακτηριστικό action της ετικέτας φόρμας. Το χαρακτηριστικό action καθορίζει τη διεύθυνση στην οποία θα σταλούν τα περιεχόμενα της φόρμας μετά την επιβεβαίωση (ο χρήστης κάνει κλικ στο κουμπί με type="submit"). Κατά κανόνα, αυτή είναι η ίδια σελίδα από την οποία έφυγε η φόρμα.

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

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

Ας υποθέσουμε ότι έχετε ένα αρχείο φόρμας που ονομάζεται form-action.php και θέλετε η φόρμα να υποβληθεί στο ίδιο αρχείο μετά την επιβεβαίωση. Συνήθως γράφουν ως εξής:

Αλλά μπορείτε να χρησιμοποιήσετε τη μεταβλητή PHP _SELF αντί για το form-action.php. Σε αυτή την περίπτωση ο κώδικας θα μοιάζει με αυτό: