Forum und email

משתנים שמקורם מחוץ ל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 מבצע את ההמרה דלעיל אוטומטית.

עוגיות (cookies)

PHP מאפשר בצורה שקופה שימוש HTTP cookies כפי שמוגדר ב » פירוט של Netscape. עוגיות הם מנגנון לאפסון מידע על צד המשתמש ועל ידי כך לזהות אותו בביקורו הבא. אתה יכול לאתחל cookies על ידי שימוש בפונקציה setcookie(). Cookies הם חלק מהHTTP header, ולכן הפקודה SetCookie חייבת להקרא לפני שנשלח פלט כלשהו לדפדפן המשתמש. זוהי מגבלה הזהה עבור כל פקודות ה header(). נתוני הCookie זמינות במשתנים הרלוונטיים דוגמת $_COOKIE, $HTTP_COOKIE_VARS כמו גם ב $_REQUEST. ראה את התיעוד עבור הפונקציה setcookie()לפרטים ודוגמאות נוספות.

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

<?php
  setcookie
("MyCookie[foo]""Testing 1"time()+3600);
  
setcookie("MyCookie[bar]""Testing 2"time()+3600);
?>

זה יצור שני עוגיות נפרדות אף אל פי ש MyCookie הוא מערך בודד בתוך הסקריפט שלך. אם ברצונך לשים ערכים שונים בעוגיה אחת בלבד, אולי תבחר להשתמש בפונקציה serialize() או explode().

שים שעוגיות הנשלחות יחליפו עוגיות ישנות יותר הקיימות בדפדפן שלך אא"כ התחום (domain) שונה. לכן, עבור ישומים של חנויות אלקטרוניות, אולי תבחר לשמור מונה ולהעביר אותו ביחד. לדוגמא:

Example#4 A setcookie() example

<?php
if (isset($_COOKIE['count'])) {
    
$count $_COOKIE['count'] + 1;
} else {
    
$count 1;
}
setcookie("count"$counttime()+3600);
setcookie("Cart[$count]"$itemtime()+3600);
?>

נקודות בשמות משתנים המגיעים ממקורות שונים

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

<?php
$varname
.ext;  /* invalid variable name */
?>
כאן, מה שהמפרש מצליח להבין הוא שם משתנה $varname, המלווה באופרטור שירשור מחרוזות, מלווה על ידי מחרוזת חשופה (כלומר מחרוזת בלתי מוקפת במרכאות, שאיננה תואמת אף מילה שמורה) 'ext'. ברור שאין לכך שום מובן.

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

קביעת סוג המשתנה

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