אתה נמצא כאן יסודות השפה  >>  העברת נתונים ל-PHP  >>  קבלת נתונים דרך ה-URL

קבלת נתונים דרך ה-URL

פעמים רבות נרצה לשלוח נתונים לדף מסויים, ואחת הדרכים הנפוצות לעשות זאת היא דרך ה-URL. מידע שנשלח דרך ה-URL מופיע אחרי כתובת הדף (שאליו נשלח המידע), בתבנית של: "?var1=value1&var2=value2&var3=value3" וכך הלאה עד הנתון האחרון. ה-? מפריד בין הכתובת של הדף לבין מחרוזת הנתונים, וה-& מפריד בין נתון לנתון. var1, var2 ו-var3 הם שמות הנתונים, ואילו value1, value2 ו-value3 הם הערכים של נתונים אלו (בהתאמה). אם אנו מדליקים בקונפיגורציה את האפשרות של register_globals, אז הנתונים מה-URL ישמרו גם במשתנים גלובליים.

PHP יודעת לתרגם נתונים מה-URL באופן אוטומטי, ולשמור אותם כמשתנים במערך הגלובלי $_GET, כך שהמפתחות במערך הם שמות הנתונים ב-URL, והערכים במערך הם הערכים של הנתונים ב-URL (בהתאמה).

לדוגמא, ה-URL הבא: "http://www.myhost.com/download.php?cat_id=24&file=digger.exe", יוסיף למערך $_GET את המשתנים: $_GET['cat_id']="24" ו-$_GET['file']="digger" (ובתלות בקונפיגורציה, יוסיף גם למשתנים הגלובליים את: $cat_id ו-$file). סוג המשתנה שבו נשמרים הערכים של הנתונים הוא תמיד מחרוזת (string).

<?php
  echo "<BODY bgcolor=\"";
  switch ($_GET['bg_color'])
/*בודק את הערך של הנתון
bg_color שהתקבל מה-URL,
ומשנה את צבע הרקע בהתאם.
*/

  {
  case "red":
     echo "#FF0000";
     break;
  case "green":
     echo "#00FF00";
     break;
  case "blue":
     echo "#0000FF";
     break;
  default:
     echo "#FFFFFF";
  }
  echo "\">\n";
?>
<H1>BG:
<?= (isset($_GET['bg_color']
/*בודק האם המשתנה $_GET['bg_color'] מאותחל.
אם הוא לא מאותחל, אז סימן שלא קיבלנו נתון
ששמו bg_color דרך ה-URL.
*/
)?$_GET['bg_color']
/*אם המשתנה $_GET['bg_color'] מאותחל,
אז אנו מדפיסים את ערכו שהוא צבע הרקע.
*/
:"white (default)"
/*אם המשתנה $_GET['bg_color'] אינו מאותחל,
אז אנו מדפיסים את צבע הרקע של ברירת המחדל.
*/
); ?></H1><BR>
Change the background color to:<BR>
<A href="
<?= $_SERVER['PHP_SELF'];
/*משתנה גלובלי חשוב שמכיל
את הכתובת של הדף הנוכחי.
*/
 ?>?bg_color=red
/*מוסיפים באופן ידני נתונים
שיעברו לדף דרך ה-URL.
מעבירים את הנתון ששמו הוא
bg_color וערכו הוא red.
*/
">RED</A><BR>
<A href="
<?= $_SERVER['PHP_SELF']; ?>?bg_color=green">GREEN</A><BR>
<A href="
<?= $_SERVER['PHP_SELF']; ?>?bg_color=blue">BLUE</A><BR>
<A href="
<?= $_SERVER['PHP_SELF']; ?>"
/*כשאנו לא רוצים להעביר ערך
עם הנתון bg_color, אנו לא
מוסיפים אותו כלל ל-URL.
*/
>WHITE (default)</A><BR>
</BODY>

אם רוצים להעביר נתון עם ערך שמכיל תווים שלא מתאימים ל-URL (כגון: רווח, #, @ וכו'), יש להמיר תווים אלו לסימנים מיוחדים שיכולים לעבור דרך ה-URL ללא בעיות (תווים אלו מתחילים עם %). PHP מספקת פונקציות שמטפלות בתווים הבעייתיים ובסימנים המיוחדים המתאימים להם - urlencode() ו-urldecode(). רצוי להשתמש בפונקציה urlencode() בעיקר כאשר הערכים שרוצים להעביר הם משתנים, או כאשר משתמשים בתווים בעייתיים ב-URL.


תגובות בנושא

רק תיקון 08-12-02 06:02
 אייל בן-סימון
#353

בכתובת לא חייבים לרשום
$_SERVER['PHP_SELF']
הדבר אינו נחוץ
הHTML עושה זאת אוטומטית

לאייל 01-11-02 13:01
 חסוי (חחחח)
#552

טעית...
ה HTML מכיל את הכתובת עד לסלאש האחרון, לכן תצטרך לכתוב את שם העמוד שוב.
לא טוב במקרה שעוברים דירה.

יש לי בעיה מוזרה 02-11-02 06:01
 מישהו
#607

אני לא מצליח להשתמש ב $_GET זה לא מתייחס אליו..
לא משנה איפה אני מנסה זה תמיד לא מקבל=
גם נגיד שאני משתמש בסקריפט שכתוב פה

_GET, למרות שלא שלחתי 04-12-03 09:01
 תומר בר
#819

מה קורה כאשר אני עושה _GET לפרמטר למרות שלא נשלח אחד כזה לאתר??
איך אפשר לעשות שלא יקרה כלום??

לא קורה כלום 04-12-03 11:00
 אלי חן (מנהל)
#825

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

זה לא עובד... 02-12-04 03:00
 רז אוזן
#1437

העתקתי את הקוד, וזה פשוט לא פועל..:|

תשובה לשניר. 08-12-04 07:01
 איתן בןאב
#1739

בתחילת הקוד יש:
echo "<BODY bgcolor "";
הגרשים הראשונים והאחרונים הם על מנת ליצור מחרוזת.התו זה כדי שהשרת ידפיס את ה" כפי שהוא ולא יסיים בזה את המחרוזת.
אחרי זה ישנה לולאת switch שמדפיסה את הצבע באמצע ואחרי סוף לולאת הswitch יש את הסוגר של
הבודי (<") וה n זה על מנת לרדת שורה.
כך שיוצא הקוד הזה:
<BODY bgcolor"הצבע שיודפס מהלולאה">

גדולים 06-12-09 14:00
 אלכס נוסינוב
#2843

פשוט גדולים הכל מובן כמו שצריך! תודה!

request_uri https 09-12-16 19:01
 מוטי כושר
#2907

מנסה לעבוד עם
$url = parse_url($_SERVER['REQUEST_URI']);
לא הצליח עם HTTTPS , מה חסר?
https://www.seokru.com/


לדף הקודםהעברת נתונים ל-PHP -הקודם
לתחילת הדףלתחילת הדף
הבא- קבלת נתונים דרך טופסלדף הבא