הגשה וטיפול בטפסים באמצעות PHP
ברגע שלוחצים על כפתור "שלח" של הטופס, תוכנו של הטופס נשלח לאחד משני משתנים גלובליים, שאותם מספק PHP - האחד הוא$_POST[] והאחר הוא $_GET[]. מיד נסביר את המשתנים, אבל ראשית נכתוב את טופס ה-HTML.
כתיבת טופס HTML
הטופס הוא אלמנט של HTML רגיל, כשאת הטופס עוטפות תגיות <form>. כך זה נראה:
<html>
<head>
</head>
<body>
<form>
</form>
</body>
</html>
לתוך תגית ה-form הפותחת, אנחנו משלבים את שיטת השליחה ואת הדף שבו סקריפט ה-PHP, שצריך לטפל בטופס. כך זה נראה:
1. method="POST" או method="GET", תלוי בשיטת שליחת הנתונים.
2. action="form.php", כפי שזה כתוב פה אנחנו מעוניינים לשלוח את הנתונים מהטופס לסקריפט שנמצא בקובץ "form.php ". במידה ונרצה שה-PHP שמטפל בטופס יהיה באותו קובץ נשאיר את ה-action ריק.
נוסיף זאת לטופס:
<form method = "GET" action = "" >
</form>
בשלב זה, נוסיף את השדות לטופס בתוך input. השדה הראשון הוא מהסוג text ושמו firstName. כך כותבים זאת:
<form method="GET" action="">
<input name="firstName" type="text" >
הסוג text מאפשר להזין מחרוזות שכוללות אותיות, מספרים ותווים נוספים.
השם name="" של השדה הוא מאוד חשוב, מפני שהוא מאפשר לנו לגשת לתוכן שהזין המשתמש לאותו שדה.
שדה נוסף, וחשוב מאוד הוא שדה submit, שיוצר את כפתור השליחה של הטופס.
<form method="GET" action="">
<input name="firstName" type="text" >
<input type="submit" name="submit" value="שלח" >
</form>
כך ייראה הטופס המוכן.
שליחת טופס עם GET
הגדרנו את שיטת משלוח הטופס ל-GET, ואחרי שמלאנו את הטופס ושלחנו אותו, תופיע בשורת הכתובות השורה הבאה:
ננסה להבין מה שכתוב בשורת הכתובות:
forms.php?firstName=&יוסיsubmitשלח=
לפני סימן השאלה (?), מופיע שמו של הקובץ, ואחרי סימן השאלה, המשתנים שנשלחו עם GET.
המשתנה הראשון, יוסי firstName=
והמשתנה השני, שלח submit=
שמם של המשתנים firstName ו-submit הוא לפי הערך שנתנו בתור name של השדה. ערכם של המשתנים הוא לפי מה שבחר המשתמש להזין, או לפי ה-value שהגדרנו עבור השדה.
בין המשתנים מחבר &.
שימו לב: אני משתמש בדפדפן chrome שאין לו בעיה להעביר משתנים ב-GET באותיות עבריות, אבל קיימת בעיה של העברת נתונים בעברית בדפדפנים מסוימים. באחד המדריכים העתידיים, אסביר כיצד לקודד עברית, כדי שנוכל להעביר אותה בבטחה דרך שורת הכתובות בשיטת GET.
טיפול במשתנים באמצעות PHP
כדי לטפל בנתונים נוסיף סקריפט של PHP מעל לטופס. לדוגמה, הקוד הבא שמדפיס למסך את הערך שהזין המשתמש לשדה firstName.
<body>
<?php
echo $_GET["firstName"];
?>
<form method = "GET" action = "" >
<input name="firstName" type="text" >
<input type="submit" name="submit" value="שלח" >
</form>
</body>
כתוצאה מקוד זה, כשהמשתמש ישלח את הטופס עם מחרוזת מסוימת שהוא הזין לשדה, המחרוזת תופיע מעל לטופס. בדוגמה זו שלחתי את המחרוזת "יוסי".
במידה והטופס לא נשלח, ייתכן שתופיע הודעת שגיאה מכוערת מפני שהמשתנה $_GET["firstName"] אינו מוגדר. כדי למנוע שגיאה כזו, נקפיד לשאול האם המשתמש שלח את הטופס, ורק בתנאי ששלח נבקש שמה שהוא שלח יודפס למסך. כך נראה הקוד שמכיל את התנאי:
if(isset($_GET["submit"])){// האם הטופס נשלח
echo $_GET["firstName"]; // אז תדפיס את תוכן השדה למסך
}
שיטת POST לשליחת הנתונים
נוסף לשיטת GET, ששולחת את הנתונים דרך שורת הכתובות, קיימת שיטת POST, שלא מעבירה נתונים דרך שורת הפקודות. כדי להשתמש בשיטת POST, נגדיר את שיטת משלוח הטופס ל-POST והמשתנה הגלובלי שקולט ומטפל בערכים שנשלחים עם הטופס יהיה $_POST[].
<body>
<?php
if(isset($_POST["submit"])){
echo $_POST["firstName"];
}
?>
<form method = "POST" action = "" >
<input name="firstName" type="text" >
<input type="submit" name="submit" value="שלח" >
</form>
</body>
כשנשלח את הנתונים עם הטופס, לא נראה את הערכים ששלחנו בשורת הכתובות מפני שהשתמשנו ב-POST. כך זה נראה:
ההבדלים בין POST ו-GET
- בעוד הנתונים נשלחים עם GET דרך שורת הכתובות, POST לא מעביר את הנתונים דרך שורת הכתובות.
- עם GET ניתן להעביר עד 2000 תווים סטנדרטיים, ועם POST ניתן להעביר הרבה יותר מידע.
- GET הוא פחות בטוח מפני שניתן להעביר אותו דרך שורת הכתובות, ושם אפשר לשנות את הנתונים.
- טפסים שמשתמשים ב- GET ניתן לשמור בדפדפן, מפני שיש להם כתובת ייחודית שמכילה את הערכים שנשלחו בטופס.
- צריך לקודד את GET כשמעבירים תווים שאינם סטנדרטיים, דוגמת אותיות עבריות. את POST לא צריך לקודד. במדריך שאפרסם בעתיד, אסביר כיצד ניתן לקודד נתונים שנשלחים עם GET.
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
שירן בתאריך: 03.03.2016
תודה רבה אחלה הסבר.
יוסי בן הרוש בתאריך: 04.03.2016
בבקשה.
עידן בתאריך: 09.06.2016
תודה רבה ההסבר מפורט מאד
יוסי בן הרוש בתאריך: 10.06.2016
בכיף.
אילון בתאריך: 03.02.2017
אין הרבה מדריכים בעברית כל הכבוד על הרעיון
יוסי בן הרוש בתאריך: 04.02.2017
תודה רבה.
ברק בתאריך: 20.02.2017
תודה על ההסבר!
יוסי בן הרוש בתאריך: 22.02.2017
בבקשה, ברק.
מרדכי אזרחי בתאריך: 10.06.2020
תודה על המדריך יצרתי טופס אלקטרוני HTML אני מעוניין שהטופס ישלח את התוכן למייל שלי איך עושים זאת ? יש לך במדריך על זה ? ושוב תודה רבה
מרדכי אזרחי בתאריך: 07.12.2020
ראשית תודה רבה לך
שנית - זה לא עובד הקוד הזה
אולי ב 2020 זה כבר לא רלוונטי ? היום כותבים את זה אחרת ?
שילת בתאריך: 19.07.2021
תודה רבה עזרת לי מאוד!