משתנים מחוץ ל-PHP

טפסי HTML (GET ו POST)

כאשר נשלח טופס לסקריפט PHP , כל המשתנים מטופס זה יהיו זמינים בסקריפט . אם ההגדרה של track_vars מאופשרת , משתנים אלו ימוקמו במערכים האסוציאטיבים $HTTP_POST_VARS , $HTTP_GET_VARS , ו\או $HTTP_POST_FILES , בהתאמה למקור המשתנים .

למידע נוסף בנושא יש לעיין בפרק משתנים מוגדרים מראש .

דוגמה 7-1 . משתנה פשוט בטופס

 
form

 
action="

 
foo.php

 
"

 
method="post

 
"

 
Name

 
:

 
input

 
type="text

 
"

 
name="username

 
"

 
br

 
input

 
type="submit

 
"

 
/

 
form





כאר הטופס הנ" ל נשלח , הערך שמכיל שדה הטקסט בטופס יהיה זמין במשתנה $HTTP_POST_VARS['username' ] . אם אופציית register_globals מאופשרת , המשתנה יוגדר גם כמשתנה $username שמוגדר בטווח המשתנים הגלובלי .

הערה : כאשר הוראת הקונפיגורציה magic_quotes_gpc מאופשרת , מושפעים ערכי משתנים של GET , POST וערכי עוגיות באופן שערך כמו ( It's "PHP !" ) ישתנה בצורה אוטומטית ל (It\'s \"PHP!\" ) . תהליך זה נדרש לצורך הכנסת מידע לבסיס נתונים . יש לעיין גם במידע על addslashes( ) , stripslashes( ) ו - magic_quotes_sybase .

PHP מבינה גם תכני מערכים של טפסים . ( יש לעיין ב שאלות ותשובות למידע נוסף ) . אפשר למשל להשתמש בתכונה זו על מנת לאחד משתנים מסויימים לקבוצות או לקלוט מידע מתיבת בחירה רבת אפשרויות .

דוגמה 7-2 . משתני טופס מורכבים

 
form

 
action="

 
array.php

 
"

 
method="post

 
"

 
Name

 
:

 
input

 
type="text

 
"

 
name="personal[name]

 
"

 
br

 
Email

 
:

 
input

 
type="text

 
"

 
name="personal[email]

 
"

 
br

 
Beer

 
:

 
br

 
select

 
multiple

 
name="beer[]

 
"

 
option

 
value="warthog

 
"

 
Warthog

 
option

 
value="guinness

 
"

 
Guinness

 
option

 
value="stuttgarter

 
"

 
Stuttgarter

 
Schwabenbr

 
auml;u

 
/

 
select

 
input

 
type="submit

 
"

 
/

 
form





ב - PHP 3 קיימת הגבלה למימד אחד בלבד במערכי הטפסים . ב - PHP 4 לא קיימת הגבלה כזו .

משתני טופס של כפתור שליחה גרפי

ניתן להגדיר תמונה ככפתור שליחה של טופס במקום כפתור שליחה סטנדרטי :

כאשר המשתמש ישלח את הטופס , משתני הטופס יועברו אל השרת ובנוסף יועברו משתנים המציינים את מיקום הלחיצה של העכבר בתמונה ויוגדרו כ - $sub_x ו - $sub_y . יש לציין ששם המשתנה המקורי מכיל נקודה שמומרת ל קו-תחתי על-ידי PHP באופן אוטומטי .

עוגיות HTTP

PHP תומכת בצורה שקופה בעוגיות HTTP לפי הגדרתן ב - Netscape' s Spec . עוגיות הן מנגנון המאפשר אגירת מידע בדפדפן ועל ידי-כך מאפשרות מעקב או זיהוי המשתמשים . ניתן להגדיר עוגיה בעזרת הפונקציה setcookie( ) . עוגיות הן חלק מכותר ה - (HTTP header ) HTTP ולכן קריאה לפונקציה setcookie( ) חייבת להתבצע לפני שנשלח פלט כלשהו לדפדפן . הגבלה זהה חלה גם על הפונקציה header( ) . כל עוגיה שנשלחת מהלקוח הופכת באופן אוטומטי למשתנה PHP בדומה לאופן הפעולה בשימוש ב שיטות GET ו - POST .

ניתן לקבוע לעוגיה אחת מספר ערכים על-ידי הוספת [ ] לשם העוגיה . לדוגמה :

 
setcookie(

 
"MyCookie[]"

 
,

 
"Testing"

 
,

 
time()+3600)

 
;



יש לציין כי עוגיה שנקבעה תדרוס ערכים קודמים של עוגיה בעלת שם זהה אלא אם מדובר בנתיב שונה או שם domain שונה כך שלבניית אפליקציה של עגלת קניות , יש צורך להגדיר מונה ולהעבירו הלאה . לדוגמה :

דוגמה 7-3 . דוגמת SetCookie

 
$Count++

 
;

 
setcookie("Count"

 
,

 
$Count

 
,

 
time()+3600)

 
;

 
setcookie("Cart[$Count]"

 
,

 
$item

 
,

 
time()+3600)

 
;



משתני סביבה

PHP מגדירה באופן אוטומטי משתני סביבה כמשתני PHP רגילים .

 
echo

 
$HOME

 
;

 
/

 
*

 
Shows

 
the

 
HOME

 
environment

 
variable

 
,

 
if

 
set

 
.

 
*

 
/





מאחר שגם המידע המגיע בעזרת GET , POST ומנגנון העוגיות נוצר כמשתנה PHP רגיל בסקריפט , לפעמים עדיף לקרוא את משתנה הסביבה היישר מהסביבה כדי לוודא שהתקבל הערך מהמקור הנכון . פונקציית getenv( ) משמשת לצורך זה . ניתן גם לקבוע משתנה סביבה בעזרת הפונקציה putenv( ) .

נקודות בשמות משתנים נקלטים

בדרך-כלל PHP לא תשנה את שם המשתנה המועבר לסקריפט . אולם , יש לציין כי תו הנקודה אינו תו תקין בשם משתנה . מסיבה זו הדוגמה הבאה לא תקינה :

 
$varname.ext

 
;

 
/

 
*

 
invalid

 
variable

 
name

 
*

 
/



במקרה זה המפרש יראה משתנה בשם $varname , שאחריו אופורטור לחיבור מחרוזות ואחריו המילה 'ext' שאינה מוכרת כמילה שמורה וחסרת הגדרה כלשהי.

מסיבה זו חשוב לציין שכאשר PHP מקבלת שם משתנה עם נקודה , הנקודה תוחלף בקו-תחתי .

הבחנה בין סוגי משתנים

ב - PHP אין הפרדה בין סוגי משתנים ובדרך-כלל התבצעות המרות לפי הצורך ולכן לא תמיד ברור מהו סוג המשתנה בכל זמן נתון . ב - PHP מספר פונקציות למציאת סוג המשתנה : gettype( ) , is_long( ) , is_double( ) , is_string( ) , is_array( ) , ו - is_object( ) .