PHP ו-HTML פועלות בצורה הדדית אחת עם השניה: PHP יוצרת HTML, ול-HTML יש מידע שישלח ל-PHP וישמש אותה.
ישנם כמה שלבים בהם הקידוד חשוב. בהנחה שנתונה מחרוזת $data, שמכילה את המחרוזת שברצונך להעביר הלאה בצורה לא מקודדת (ללא קודי HTML), אלה השלבים הנחוצים:
תרגום HTML. בכדי לציין מחרוזת כלשהי, חובה עליך לכתוב אותה בין מרכאות כפולות, ולהעביר את הערך בפונקציה htmlspecialchars.
כתובת אינטרנט (URL): כתובת אינטרנט מורכבת מכמה חלקים. אם ברצונך שהמידע יתורגם כפריט (item) אחד, חובה עליך לקודד אותו בעזרת הפונקציה urlencode().
הערה: תהיה טעות לעשות urlencode() ל-$data, משום שזאת אחריות הדפדפן לעשות urlencode() למידע. כל הדפדפנים הפופולרים עושים זאת נכון. דבר זה קורה בלי קשר לצורת השליחה (כלומר, GET או POST). למרות זאת, רק באופן שליחה של GET תוכל להבחין בזה, משום שאופן שליחה של POST בדרך כלל מוסתר.
הערה: המידע שיראה בדפדפן יהיה כמתוכנן, זאת משום שהדפדפן מפרש את התגים המיוחדים של HTML לסימנים הנכונים.
בזמן שליחה, או דרך GET או דרך POST, המידע יומר לצורת urlencoded אוטומטית לפי הדפדפן בכדי להשלח, וגם אוטומטית יעבור urldecoded על-ידי PHP. כך שבסופו של דבר, אין לך צורך לבצע אף urldecoded או urldecoding בעצמך, הכל מתנהל בצורה אוטומטית.
הערה: בעצם, ניתן בצורה זו לזייף שליחת HTML בתצורת GET, לכן לפעמים נחוץ לעשות urlencode() למידע מסויים בצורה ידנית.
הערה: עליך לבצע htmlspecialchars() לכל ה-URL, משום שה-URL מתרחש כערך תכונה של HTML (כלומר, HTML-attribute). במקרה כזה, בתחילה הדפדפן יהפוך את הערך ללא-htmlspecialchars(), ורק אז יעביר את ה-URL הלאה. PHP מבינה את ה-URL בצורה הנכונה שלו, משום שלפני-כן נעשה לערך urlencoded().
ניתן לשים לב שסימן & בשדה הכתובת מוחלף בסימן &. למרות שרוב הדפדפנים יצליחו להמשיך אם דבר זה לא נעשה, זה לא תמיד אפשרי. לכן, אפילו אם כתובתך אינה דינמית, חובה עליך לעשות htmlspecialchars() לכתובת.
בזמן שליחת טופס, יתכן מצב של שימוש בתמונה (image) במקום בכפתור השליחה (submit) הסטנדרטי עם שימות בתג כמו:
<input type="image" src="image.gif" name="foo"> |
מאחר ש-$foo.x ו-$foo.y אינם משתנים שמתקבלים על-ידי PHP, שמותיהם מומרים אוטומטית ל-$foo_x ו-$foo_y. מה שבעצם קורה הוא שהנקודות במשתנים מוחלפות בקוים תחתונים.
כדי להעביר מערך כתוצאה של טופס - <form> - כלשהו לסקריפט (קוד) ה-PHP שלך, עליך לקרוא לתגי <input>, <select> ו- <textarea> באופן הבא:
<input name="MyArray[]"> <input name="MyArray[]"> <input name="MyArray[]"> <input name="MyArray[]"> |
<input name="MyArray[]"> <input name="MyArray[]"> <input name="MyOtherArray[]"> <input name="MyOtherArray[]"> |
<input name="AnotherArray[]"> <input name="AnotherArray[]"> <input name="AnotherArray[email]"> <input name="AnotherArray[phone]"> |
הערה: קביעת מפתחות לערכי המערכים היא רק פונקציה אפשרית ב-HTML, והיא אינה חובה. אם לא יצויינו המפתחות, המערך יקבל את הערכים מסודרים בסדר שבו הם הופיעו בטופס. הדוגמה הראשונה שהבאנו מעבירה את המפתחות 0, 1, 2 ו-3.
See also פונקציות למערכים ו משתנים מקוד PHP חיצוני.
תיבת הבחירה רבת התוצאות ב-HTML מאפשרת למשתמשים לבחור מספר פריטים מתוך רשימה. לאחר-מכן הפריטים מועברים לטיפול של הטופס. הבעיה היא שכל הפריטים מועברים עם אותו שם משתנה. לדוגמא:
<select name="var" multiple> |
var=option1 var=option2 var=option3 |
<select name="var[]" multiple> |
עליך לשים לב שאם קיים באתר שימוש ב-JavaScript, הוספת [] לשם המשתנה עלול לגרום לבעיות בעת ניסיון לקרוא למשתנה לפי שמו. מומלץ לנסות לקרוא לו לפי מספר הזיהוי שלו במערך form של JavaScript במקום, או לתחום את שם המשתנה בין מרכאות (יחידות / לא כפולות) ולהשתמש בו כאינדקס של פריטי המערך של JavaScript, לדוגמא:
variable = documents.forms[0].elements['var[]']; |