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

קבלת נתונים דרך טופס

PHP יודעת לטפל בטפסים ממש כמו CGI. כאשר בונים טופס יש צורך לתת שם ייחודי וערך לכל רכיב בטופס. שם ייחודי זה ישמש לנו כשם משתנה שיכיל בתוכו ערכים שנשלחו מהטופס.

נביא דוגמא פשוטה לקליטת שם משתמש:

<FORM action="do_form.php" method="POST">
/*יוצר טופס ב-HTML.
action: לאן יישלחו הנתונים של הטופס.
method: סוג שליחת המידע.
*/

   Name: <INPUT type="TEXT" name="username">
/*יוצר שדה קלט.
type: סוג שדה הקלט (שורת טקסט).
name: שם השדה (username).
*/
<BR>
   <INPUT type="SUBMIT">
/*יוצר כפתור שליחה.*/

</FORM>

כאשר נשלח את הטופס הנ"ל לקובץ do_form.php, PHP תהפוך את הנתונים מהטופס למשתנים באופן אוטומטי, ותאחסן אותם במשתנה המערך הגלובלי $_POST או $_GET, בהתאם לסוג שליחת המידע של הטופס (POST או GET בהתאמה), וכדי לדעת את ערכו של רכיב מסויים, נשתמש בשם הייחודי שניתן לרכיב. בדר"כ ניתן לפנות למשתני הרכיבים גם בדרך ישירה ולא דרך המערך הגלובלי (תלוי בקונפיגורציה, בכניסה register_globals), אך לאחרונה מעדיפים לא להשתמש בתכונה זו כדי שהקוד יהיה יציב יותר ומוגן יותר.

file name: do_form.php
<?php
  echo "Hello, ".$_POST['username']
/*ערכו של שדה הקלט ששמו הוא username,
הבא מן הטופס שנשלח לקובץ הזה.
בדר"כ ניתן לפנות למשתנים מהטופס בדרך ישירה,
כלומר ניתן לפנות למשתנה הזה גם כך: $username
*/
;
?>

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

<FORM action="do_array.php" method="POST">
   Name: <INPUT type="TEXT" name="userinfo[name]">
/*שם הרכיב שהגדרנו הוא בצורה של מערך,
כך שהוא יתקבל כמערך בקובץ אליו יישלח.
המפתח של איבר זה הוא המחרוזת name.
*/
<BR>
   E-Mail: <INPUT type="TEXT" name="userinfo[email]"><BR>
   Choose colors:
   <SELECT multiple name="color[]">
/*רכיב זה יתקבל כמערך עם מספר משתנה
של אלמנטים (הנע, במקרה זה, בין 0 ל-3),
ובעל מפתחות מספריים.
*/

      <OPTION value="red">red
      <OPTION value="green">green
      <OPTION value="blue">blue
   </SELECT>
   <INPUT type="SUBMIT">
</FORM>

file name: do_array.php
<?php
  echo "<A href=\"mailto:".$_POST["userinfo"]['email']
/*ערכו של שדה הקלט ששמו הוא:
userinfo[mail]
*/
."\">".$_POST["userinfo"]['name']
/*ערכו של שדה הקלט ששמו הוא:
userinfo[name]
*/
."</A> chose the next colors:";
  if (is_array($_POST["color"]))
/*במידה ולא בוחרים אף אפשרות מהרשימה,
לא מתקבל לנו מערך עם 0 אלמנטים,
אלא הוא מתקבל כ-NULL, משתנה שלא מוגדר.
הבדיקה נחוצה כדי למנוע שליחה של משתנה
שאינו מערך ל-foreach (אחרת נקבל שגיאה).
*/

  {
     foreach ($_POST["color"] as $col)
        echo "<BR>\n".$col;
  }
  else
     echo "<BR>no color was chosen.";?>

ניתן להשתמש בתמונה במקום בכפתור submit באמצעות התג:

<INPUT type="image" src="img.gif" name="sub">

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


תגובות בנושא

input type=image 06-12-02 01:02
 איתי ולצמן
#212

ניסתי לצור מצב שבו אני לוחץ על כפתור מסוג זה ומתבצע submit. הבעיה שלי שאני לא מצליח לפנות למשתנה של שם האלמנט וקבל האם בוצעה לחיצה או לא.

תגובה: input type=image 06-12-02 03:01
 אלי חן (מנהל)
#214

תן לשדה ה-input הזה גם שם וערך (למשל: name=hit value=clicked), ואז כאשר תלחץ על התמונה, תוכל לפנות למשתנה hit (במערך של GET או POST, תלוי איך הגדרת את הטופס שלך), ושם יהיה לך הערך clicked.
כמו-כן, בנוסף יהיו לך גם המשתנים hit_x ו hit_y שמכילים את ערכי הקורדינטה שעליה נלחץ העכבר.

שליחת נתוני הטופס בדאל 06-12-02 22:01
 איתן
#278

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

שאלה 07-12-02 09:02
 [ללא שם]
#315

אם לא היינו מגדירים את שם הרכיב בצורה של מערך,כמו בדוגמא הראשונה,זה גם היה מקבל את הנתונים?

יש הבדל בין post ל get ? 09-12-02 07:01
 אסף
#432

יש הבדל או ששניהם אותו דבר?
ואפשר לשים כמה משתנים במתודות post ו get נכון?

ההבדל בין POST ל-GET 09-12-02 10:02
 אלי חן (מנהל)
#438

ברור שיש הבדל בין שניהם, אחרת היו יוצרים רק מתודה אחת. :)

ההבדל העיקרי ביניהם הוא שמתודת GET מעבירה את הנתונים (של הטופס) דרך ה-URL, ולכן רואים את הערכים של הטופס בשורת ה-URL. ואילו מתודת POST מעבירה את הנתונים (של הטופס) דרך header מיוחד, וכאן לא רואים את הערכים של הטופס בשורת ה-URL.

שאלה חשובה 01-12-03 15:01
 שגיא
#670

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

תשתמש ב FRAME ו target 01-12-03 16:01
 אלי חן (מנהל)
#674

בדף תוכל להשתמש בפריימים, <FRAME>.
בטופס תוכל להשתמש באלמנט target שיציג את תוצאות השליחה בתוך הפריים שהגדרת.

העלאת קובץ ל- DB 07-12-03 03:00
 רוני
#930

אני עובד בשרת בו ה- REGISTRY GLOBALS כבוי - אני לא מצליח להעלות את הקובץ ל- DB - הוא מעלה לי רק את המידע הבינארי ולא מצליח לדלות את - NAME TYPE ו -SIZE

אני משתמש ב- $_POST

שאלה קטנה... 07-12-03 03:00
 רון מזרחי
#937

האם יש דרך לעשות בדיקה של נתוני הטופס באותו העמוד?

העלאת קבצים ב-PHP 07-12-03 07:01
 אלי חן (מנהל)
#961

כאשר אתם מעלים קובץ באמצעות טופס, אז יש להשתמש במערך הגלובלי המיוחד $_FILES שמורכב ממערך של קבצים שהועלו. אם בטופס השם של שדה הקובץ היה למשל userfile, אז במערך המידע של הקובץ יהיה בתוך $_FILES['userfile'] שהוא גם מערך על הקובץ שהועלה ב-userfile, עם המפתחות:
name - שם הקובץ המקורי במחשב הלקוח.
type - סוג הקובץ. ה mime-type של הקובץ.
size - גודל הקובץ שהועלה.
tmp_name - שם הקובץ (נתיב מלא) כפי שהוא נשמר על השרת.
error - קוד שגיאה באם אירעה שגיאה בהעלאת הקובץ.

למשל:
$_FILES["user_file"]["tmp_name"] יחזיר את הנתיב של הקובץ שהועלה שנשמר בשרת.

בדיקה של נתוני טופס באותו סקריפט 07-12-03 07:01
 אלי חן (מנהל)
#964

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

נניח והכפתור submit שלך בטופס הוא:
<input type="submit" name="do_submit" value="Send!">

אז בסקריפט יהיה לך:
if (isset($_POST["do_submit"])
{
/* parse the form here */
}
else
{
/* print the form here */
}

שאלה... 08-12-03 21:01
 TFW
#1080

אני מצליח לשלוח נתונםי והכול עובד נהדר הבעיה שלי זה שאם מישהוא יבנה דף HTML פשוט וישלח נתונים זה יוכל ליצור מצב לא רצוי, לכן רציתי לשאול אם יש אפשרות לדעת מאיזה דף נשלחו הנתונים, זה מאוד יעזור לי! תודה מראש.

enctype=text/plain 31-10-03 19:01
 גיא
#1214

כאשר מוגדרת לי האופציה הזו בתוך הגדרת ה form אני לא מצליח לקבל את הנתונים בעזרת המשתנה POST
למה זה קורה?

FORM enctype 01-11-03 03:00
 אלי חן (מנהל)
#1235

המאפיין enctype בתג FORM (טופס) מציין את סוג הקידוד שהטופס ישלח את הנתונים ליעדו. ערך ברירת המחדל עבור הקידוד של הטופס הוא:
application/x-www-form-urlencoded
( נראה משהו כמו: formname=form_name&field1=value1 )

enctype=text/plain
מציין כי הקידוד יהיה טקסט רגיל (לא בפורמט הרגיל), ולכן PHP לא מצליחה לנתח את נתוני הטופס שנשלחים אליה (קידוד לא נכון). אני מציע לך להוריד את המאפיין הזה, משתמשים בו לדברים אחרים.

עברית ב mysql 02-11-03 13:01
 מישל מקסב
#1320

מה שלא הגדרתי... אין עברית בדטה
רק סימני שאלה
קבעתי charset=windows-1255 ולא עזר
מה עושים?
אני משתמש ב php5 ו mysql4.1

איך אני עושה? 05-12-04 01:01
 דן גבריאלוב
#1585

אני עיתי form ואני רוצה שכשמישהו ילחץ על התחבר אז יהיה נגיד:
blabla.co.il/index.php?act=blabla

הפרטים ישארו בדף 31-10-05 12:00
 ניסים גבאי
#2625

האם אני יכול לעשות שהפרטים שהגולש שלח ישארו בדף ומישו אחר יבוא וישלח גם פרטים וגם הם ישארו בדף ? [כמו דף תגובות]

ניסים. תודה על העזרה

צ'ק בוקס 02-12-06 13:01
 אלעד חוזינוב
#2656

איך מקבלים נתון שאפשר "לעבד" אותו מצ'ק בוקס?

שאלה 03-12-06 02:01
 מתן שאטי
#2662

איך אני עושה if שאני לוחץ על sumbit הוא עושה משהו?

תמונה במקום כפתור 06-12-06 16:01
 יבגניה אלקינד
#2687

איך מוסיפים תמונה שהיא כפתור "reset" ?


לדף הקודםקבלת נתונים דרך ה-URL -הקודם
לתחילת הדףלתחילת הדף
הבא- שימוש בעוגיותלדף הבא