משתנים שמקורם מחוץ לPHP
טפסי HTML
כאשר טופס נשלח לסקריפט PHP, המידע מהטופס אוטומטית נעשה זמין לסקריפט. ישנם מספר דרכים לשלוח את האינפורמציה, לדוגמא:
Example#1 טופס HTML פשוט
<form action="foo.php" method="POST"> Name: <input type="text" name="username"><br> Email: <input type="text" name="email"><br> <input type="submit" name="submit" value="Submit me!"> </form>
בהתחשב בתצורה ובהתקנה המדוייקת שלך, ישנם דרכים רבות לגשת למידע מטפסי הHTML. מספר דוגמאות הם:
Example#2 גישה לנתונים מטופס POST HTML
<?php // Available since PHP 4.1.0 print $_POST['username']; print $_REQUEST['username']; import_request_variables('p', 'p_'); print $p_username; // Available since PHP 3. As of PHP 5.0.0, these long predefined // variables can be disabled with the register_long_arrays directive. print $HTTP_POST_VARS['username']; // Available if the PHP directive register_globals = on. As of // PHP 4.2.0 the default value of register_globals = off. // Using/relying on this method is not preferred. print $username; ?>
שימוש בטופס מסוג GET הוא דומה, פרט לכך שעליך להשתמש במשתנה המוגדר מראש עבור GET במקום זה של POST. נתוני הGET מסופחים ל QUERY_STRING (המידע שאחרי ה '?' בשורת הURL). לכן, לדוגמא, https://www.example.com/test.php?id=3 מכיל נתוני GET אליהם ניתן להגיע על ידי $_GET['id']. ראה גם $_REQUEST ו import_request_variables().
Note: מערכים סופר גלובאליים, כמו $_POST ו $_GET, הוכנסו בPHP 4.1.0
כפי שהודגם, לפני PHP 4.2.0 ערך ברירת המחדל עבור register_globals היה on. ובPHP 3 הוא היה תמיד on. קהילת הPHP מעודדת שלא להשתמש על ההנחיה הזו, ועל כן ההנחה היא שערך זה הוא תמיד off והקוד בהתאם.
Note: הנחיית הקונפיגורציה magic_quotes_gpc משפיעה על ערכי Get, Post ו Cookie. אם מסבים אותה ל on, ערך המחרוזת (It's "PHP!") יהפך אוטומטית ל (It\'s \"PHP!\"). על מנת לעשות את המחרוזת מתאימה להזנה למסד נתונים. ראה גם addslashes(), stripslashes() ו magic_quotes_sybase.
PHP יודע לזהות מערכים בתוך משתנים המגיעים מהטופס (ראה השו"ת הרלוונטי). אתה יכול, לדוגמא, לקבץ יחד משתנים קשורים, או להשתמש בתכונה זו על מנת לקבל נתונים ממספר אפשרויות "select". לדוגמא הבה נשתמש בסקריפט אחד על מנת לשלוח ולקבל את הנתונים:
Example#3 More complex form variables
<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
print '<pre>';
print_r($_POST);
print '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';
print '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" 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>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbrהu</option>
</select><br>
<input type="hidden" name="action" value="submitted">
<input type="submit" name="submit" value="submit me!">
</form>
<?php
}
?>
בPHP 3 המערך המיוצר מהטופס מוגבל למערך חד מימדי, אך בPHP 4 לא קיימת מגבלה שכזו.
שמות המשתנה עבור IMAGE SUBMIT
כאשר שולחים טופס, זה אפשרי להשתמש בתמונה במקום לחץ שליחה סטנדרטי, למשל:
<input type="image" src="image.gif" name="sub">
כאשר המשתמש לוחץ איפשהו בתוך התמונה, הטופס ישלח לשרת עם שני משתנים נוספים, sub_x ו sub_y. אלו מייצגים את הקורדינאטות עליהם לחץ המשתמש בתוך התמונה. המנוסים שבכם אולי ישימו לב שהדפדפן שולח את המשתנים מופרדים על ידי נקודה ולא קח תחתי, אולם הPHP מבצע את ההמרה דלעיל אוטומטית.
נקודות בשמות משתנים המגיעים ממקורות שונים
באופן בסיסי, PHP לא משנה את שמות המשתנים המועברים לסקריפט, מכל מקום יש לציין שנקודה איננה חוקית כשם משתנה כדוגמא הבאה:
<?php
$varname.ext; /* invalid variable name */
?>
מהסיבה הזו, חשוב להדגיש שPHP יחליף באופן אוטומטי את כל הנקודות בקווים תחתיים.
קביעת סוג המשתנה
מכיוון שPHP קובע ומשנה את סוג המשתנים כאשר נדרש, זה לא תמיד מובן מאליו מה סוגו של משתנה ברגע נתון. למטרה זו קיימות מספר פונקציות: gettype(), is_array(), is_float(), is_int(), is_object(), ו is_string(). ראה גם את הפרק סוגים.