Category Archives: PHP

הצגת אייפי באתר שלכם ip

הצגת אייפי באתר שלכם ip

<?PHP echo $_SERVER['REMOTE_ADDR']; ?>

 

Php, מבוא

מבוא לשפה

PHP, השפה – מהי?

PHP, היא שפת תיכנות לאינטרנט, היא בנויה ע"י מנוע, שתפקידו הוא להריץ את הסקריפטים תוך כדי שימוש במשאבים רבים, כמו למשל מסד הנתונים.
PHP מטפלת בטפסים, במסדי נתונים כמו למשל mySQL, ובמידע שנשלח מן המשתמשים.
כמו שאנחנו רואים, התפקיד של PHP בעצם הוא לנתח מידע, וליצור פלט או יותר בהתאם.

PHP – השפה, והמפתח הגרמני, "רזמוס לרדורף".

PHP היא שפת תיכנות לתכנות יישומי אינטרנט בצד השרת ולא על צד לקוח כמו C\C++ וכדומה, במחשב השרת יש מפרש, שתפקידו להריץ תסריטים בPHP תוך כדי שימוש במשאבי מחשב השרת כמו למשל מסדי נתונים.
כאשר המשתמש(clients) פותח את הדפדפן, כל הנתונים מתקבלים אל הדפדפן מהשרת.
השרת מזהה את הקובץ המבוקש, מפענח אותו, ולאחר מכן, יוצר פלט HTML רגיל, אותו שולח אל הדפדפן, ישירות דרך האינטרנט אל המשתמש.
הדפדפן לא מקבל קוד PHP ישירות, אלא שהמשתמש רואה פלט HTML רגיל, ולכן, התכונה הזאת מעניקה יתרון עצום בשמירה על פרטיות וסודיות התוכנית.

באמצעות PHP, ניתן ליצור דפי "ווב" (web) דינאמים בשילוב נתונים מן בסיסי הנתונים(datebases) ולטפל בטפסים ונתונים שנשלחים ע"י המשתמשים.
התפקיד של PHP, הוא לנתח את המידע, וליצור פלט בהתאם.
PHP אינה מתפלת במידע בצד לקוח כלומר בדפדפן, בהתאם לקח, היא מייצרת תוכן,פלט HTML, או כל אובייקט אחר ושולחת אותם אל הדפדפן, אך היא אינה מפענחת אותם, זוהי מלאכתו של הדפדפן בלבד.
מבחינה פונקציונלית, PHP מהווה תחליף לCGI שקדם לה. תפקידה של השפה CGI הינה לנתח מידע תוך שימוש במשאבי מחשב השרת ולהוציא פלט בהתאם, בדומה לPHP.
לרוב קבצי CGI נכתבים בשפת C, וגם בPERL, שהן שפות תיכנות צד לקוח ולא צד שרת שלא נועדו להריץ יישומי אינטרנט.
ולכן קצת מסובך לבצע משימה זאת באמצעותן.
PHP הינה שפה שמתבססת על עקרונותיה של שפות צד הלקוח C, ו PERL.

רזמוס לרדורף, האיש הגרמני, שהמציא את שפת הPersonal Home Page tools)PHP) או FI (Forms Interpreter) שרעיונה ההתחלתי היה בעיקר טיפול בטפסים.
אז איך הכל התחיל?
רזמוס לרדורף, רצה חיפש דרך קלה להכניס את נתוני קורות חייו דרך האינטרנט באמצעות מפענח שפה שירוץ בצד השרת.
בשנת 1995 הוא יצר את מפענח השפה PHP\FI, ולרדורף פיתח גם את הגירסה השנייהPHP/FI 2) )
השפה שלרדורף פיתח הייתה מסורבלת ושונה מן השפה המוכרת לנו כיום, זאב סורסקי ואנדי גוטמנס, שני מפתחים ישראלים מהטכניון, פיתחו את מהיסוד את השפה PHP, המוכרת לנו כיום והעניקו לשפה את הפירוש – PHP Hypertext Preprocessor.
סורסקי וגוטמנס החליטו להוציא לאור את הגרסה הבאה (PHP 3) כהמשך לגירסתו של לרדורף שהיא הייתה הגרסה הראשונה שהייתה מלאה, תמכה ואפשרה תכנות מונחה עצמים, מסדי נתונים, ועוד פרוטוקולים שונים והיא השפה המוכרת לנו.

PHP – האם יש בחירה אחרת? ולמי מיועדת השפה?

ישנן מגוון שפות נוספות חוץ מPHP, כגון ASP, וJSP, לכן, מדוע דווקא PHP ?

  • השפה קלה מאוד להבנה וללמידה, והיא דומה מאוד לשפת C, ומי שיודע את שפת C יוכל ללמוד אותה בקלות רבה.
  • PHP היא שפת קוד פתוח "open source" כלומר, שכל אחד יכול לפתח את השפה, וכל זה בחינם.
  • PHP הינה השפה הראשונה שפותחה, עוד לפני ASP, JSP וכדומה.
  • PHP היא שפת כחול לבן ולכן תומכת בעברית בצורה מלאה.

PHP מיועדת לכל אחד ואחד שמעוניין להקים אתר דינאמי שמשתמש בבסיסי נתונים, ושמספק אבטחת מידע יעילה.
PHP הינה מתאימה יותר לאנשים שיודעים את השפות C, ו\או PERL, כמובן, שPHP הינה שפה שמיועדת גם לכל אחד ואחד שגם לא יודע את שפות צד הלקוח הנ"ל, ויכול להתחיל גם ללא ידע בשפת תכנות אחרת, עם ידע בHTML.

מדריך | PHP – מערכים

מערכים – Arrays

כל מערך מורכב מפונקציה, הכוללת בתוכה את שם התצוגה [המשתנה], והתוכן, לרוב מתכנתים משתמשים במערכת על מנת לבנות קבצי שפה [lang.php].

כשתפתחו קובץ שפה, לרוב תראו משהו בסגנון:

PHP קוד:
<?Php
$lang 
= Array(

"txt1" => "Your txt1 content",
"txt2" => "Your txt2 content",
......................
);
?>

ובעצם על מנת להדפיס את תוכן המערך,

PHP קוד:
<?Php
print $lang['txt1']; // will print 'Your txt1 content'
?>
בעצם כמו שאתם רואים, זה פשוט וקל, ומסודר יותר.

תחום הגדרת מערך

איך מגדירים מערך?

על מנת להגדיר מערך, נצטרך שני פרמטרים, שם, ותוכן, את שניהם נכניס לתוך הפונקצייה array.

לאחר שנסיים לבנות את המערך, הוא יוצג בצורה הבאה:

$yourVar['YourArray'];

אנו נצטרך להגדיר את YourArray, ולהגדיר לו תוכן מסויים.

הגדרת שורה, מתבצעת באופן הבא:

PHP קוד:
"some Value" => "some Content"
על מנת להוסיף עוד ועוד שורות, רק נצטרך למקם פסיק,

PHP קוד:
"some Value" => "some Content",
"some Other Value" => "some Other Content"
כל מה שלמדנו עד כה, נכנס הישר לתוך הפונקצייה Array(); באופן הבא:

PHP קוד:
$array = array(

"my_value_1" => "hello world!",
"my_value_2" => "hello moon!"

);

ועל מנת להדפיס את התוכן, עלינו להציב פונקציית הדפסה רגילה [echo,print], כלומר:

PHP קוד:
<?Php
$array 
= array(

"my_value_1" => "hello world!",
"my_value_2" => "hello moon!"

);

print $array['my_value_1']."<br />".$array['my_value_2']; /*

will print:

hello world!
hello moon!

*/
?>

מדריך | SQL – מדריך בסיסי

מדריך SQL

1. הקדמה
SQL הינה שפה לטיפול בבסיסי נתונים.
מה זאת אומרת טיפול?
הכוונה היא לתפעול בסיס הנתונים דרך השפה.
SQL מאפשרת שליפה, מחיקה, הרצה, עידכון, הוספה וכל מיני פקודות שאפשר לבצע על בסיס הנתונים(על כך אסביר בהמשך).
פקודות אלו נקראות שאילתות.
את השאילתות ניתן להריץ ישירות מול בסיס הנתונים, בעזרת אקסס, או ע"י שפה מארחת (אסביר על כך בהמשך) כמו: PHP, ASP וכדומה.
בכדי ללמוד את שפת הSQL לא דרוש ידע מוקדם.

2. בניית בסיס הנתונים
בסיס הנתונים שלך צריך להיות מתוכנן ומאורגן היטב, ולכן, אני ממליץ לפני בנייה של כל בסיס לתכנן אותו קודם כל על דף או אפילו בעזרת אקסל.
בסיס נתונים מכיר טבלאות שבתוכם נמצאים הנתונים המסודרים ע"פ עמודות.
בשביל מדריך זה בניתי בסיס בעל טבלה אחת, אך ורק לצורך ההבנה.
הכנתי את הטבלה על נושא די קל להבנה – אבות המזון (סתם נושא).
הינה רשימת העמודות שיש לי בטבלת "אבות המזון" שבבסיס הנתונים שלי:
1. ירקות ופירות
2. חלבונים
3. שומנים
4. סוכרים
5. פחמימות
עד כאן. אני חושב שהבנתם את הקטע.
כל הרשימה שרשמתי למעלה אלה הם העמודות ובתוכם יופיעו הנתונים.
למשל בעמודה "ירקות ופירות" יכול להופיע לי הנתון "גזר" או "עגבנייה" או "בננה" וכו'.
עכשיו אחרי שתיכננו את המסד על "דף" אפשר להתחיל ליצור אותו.
בפרק הבא נתחיל ללמוד את השאילתות שאמרתי קודם.


3. SELECT – שליפת נתונים

הפקודה SELECT היא הפקודה הבסיסית ביותר בשפת הSQL.
הפעולה שהיא עושה היא פשוט שולפת את הנתונים מהטבלה.
אנחנו יכולים לשלוף לדוגמא את כל הנתונים שנמצאים בטבלת "אבות המזון" שלנו בעמודת ירקות ופירות – סתם לדוגמא.
הינה מבנה הפקודה:

קוד:
 
SELECT (שם העמודה) FROM (שם הטבלה)

עכשיו כמו שאמרתי בוא נשלוף את הירקות ופירות מהטבלה.

קוד:
SELECT fruits FROM avothamazon

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

קוד:
SELECT fruits, sugars FROM avothamazon

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

קוד:
SELECT * FROM avothamazon

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

4. ORDER BY – מיון התוצאות

כמו שאמרתי, ORDER BY מאפשר לנו למיין את התוצאות של השאילתה בסדר הרצוי.
הינה דוגמא:

קוד:
SELECT * FROM table ORDER BY name

הפקודה תמיין את הנתונים בטבלה ע"פ העמודה "שם" (כאן העדפתי לא להציג את הדוגמא של אבות המזון בגלל שזה מסובך בשביל הפרק הזה).
* יש לציין שאם לא מוסיפים לאחר הORDER BY value את המונח DWSC אז הסדר יופיע בסדר עולה ואם כן נוסיף את הDESC בסוף, הסדר יופיע בסדר יורד.
בפרק הבא נלמד איך להציב לפקודה תנאים על מנת שיוצג התוצאות שאנחנו באמת רוצים.

5. WHERE – תנאים
נגיד אנחנו רוצים לשלוף רק דבר מסויים מהטבלה ולא את הכל.
מכאן הגענו כבר לחלק יותר מתקדם ופה לא אשתמש בדוגמא של אסות המזון.
נחזור לנושא – הפקודה WHERE מאפשרת לנו להציג רק את התוצאות הרציות.
לדוגמא יש לי טבלה של קבוצת ילדים.
יש עמודות: שם, בית ספר, ושנת לידה.
אני רוצה להציג רק את הילדים שנולדו בשנת 1992 או רק את הילדים מבית הספר X
נכתוב זאת כך:

קוד:
SELECT name FROM childern WHERE school = "dapim"

התוצאה: יציג את כל שמות הילדים בקבוצה הלומדים בבית הספר "דפים" סתם המצאתי שם…
אני חושב שהבנו את העיקרון.

6. INSERT – הוספת נתונים
עד עכשיו למדנו איך לשלוף נתונים מהטבלה ולמדנו הרבה אפשרויות שאפשר לעשות עם הפקודה SELECT.
אבל אם אנחנו רוצים במקום לשלוף את הנתונים – להוסיף נתונים?
פקודה INSERT תשמש אותנו בכך.
למשל נרצה להוסיף ילד נוסף לקבוצה שלנו, נעשה זאת כך:

קוד:
INSERT INTO children (name, school, year_born) VALUES (oshri, dapim, 1992)

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

7. DELETE – מחיקת נתונים
אנחנו יודעים לשלוף, להוסיף אבל לפעמיים אנחנו צריכים למחוק נתונים.
הפקודה הכי פשוטה, למחוק את כל הילדים בטבלה שלנו:

קוד:
DELETE FROM children

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

קוד:
DELETE FROM children WHERE school = "dapim"

מיצינו את הרעיון? הלאה.

8. UPDATE – עדכון נתונים
לפעמיים דברים משתנים, למשל, ילד מהקבוצה שלנו העיפו אותו מהבית ספר והוא עבר לבית ספר אחר סתם לדוגמא.
צריך לעדכן את הנתונים!
וזאת נבצע ע"י הפקודה UPDATE.
נגיד אושרי, ילד מהקבוצה שלנו, הוא ילד חכם מאוד, עבר את המבחן כדי להיכנס לבית ספר למחוננים הנקרא "קלמרים"
אז הוא עזב את בית הספר "דפים".
את זאת נעדכן כך:

קוד:
UPDATE children SET school = "kalmarim" WHERE name = "oshri"

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

9. סיכום כללי
בהתחלה למדנו בקצרה על SQL, למדנו איך לתכנן בסיס נתונים ואיך לארגן את ה"כלי" שבו נשים את הנתונים.
מאז התחלנו ללמוד מעשית, למדנו איך לשלוף נתונים בעזרת הפקודה SELECT.
למדנו מיד אחרי זה כיצד לטפל בתוצאות, למיין, לעשות תנאים, לסדר ולארגן.
ואחר כך למדנו את הפקודות הנוספות:
כיצד להוסיף נתונים, למחוק נתונים ולעדכן אותם.
כמובן שזהו לא רק הSQL, הSQL רחב ומגוון.
זהו המידע הבסיסי למתכנתים.
שימו לב! אין אפשרות לעבוד מול בסיסי נתונים עם שפה מארחת ללא ידע בSQL!

10. אתרים ומקורות מידע
במדריך זה למדתם את הדבר הבסיסי והדרוש על מנת לעבוד מול מסד נתונים.
אבל תמיד אפשר להרחיב את הידע ולדעת עוד אודות הSQL.
נתתי לכם מתנת פרידה, אוסף של קישורים ללמידה מעמיקה.
להלן:
http://www.webmaster.org.il/guide.asp?subject=sql
http://www.sigall.co.il/sql.asp
http://www.asp.org.il/section/SQL
http://www.underwar.co.il/document-details.asp?id=251

עד כאן לימוד מעמיק.

מדריך | PHP – הגנה נגד הזרקות כתובת

רבותי שלום רב!,
במדריך זה החלטתי לכתוב על שיטות למניעת הזרקות כתובת והסבר כללי על הזרקות.
את המדריך אחלק לשלושה נושאי אם: מהם הזרקות?, כיצד פועלות ההזרקות הכתובת? וכיצד נמנע הזרקות כתובת?.

מהם הזרקות?

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

כיצד פועלות ההזרקות הכתובת?

ההזרקות הללו פועלות ע"י שליחת תוכן אחר לתוך שורת הכתובת.

למשל נתונה הכתובת:

קוד:
index.php?act=addpoint&add=500

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

קוד:
index.php?act=addpoint&add=50000.464;?>

דבר אשר יגרום לבעיות.

כיצד נמנע ההזרקות כתובת?

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

הצפנת נתונים.
במידה ונרצה ליצור משחק, שיהיה כמעיין חפש את המטמון. וניצור לחצן שיוסיף נקודות למשתמש כפרס ע"י לחיצה במקום מסוים בפורום, ושכל מקום יביא מספר שונה של נקודות; אך לא נרצה לתת מספר קטלוגי לכל מקום, כך שיביא נקודות שונות.
מה נעשה?, נצפין בשיטת הצפנה מסוימת הידועה רק לנו את מספר הנקודות, או נצפין בכמה הצפנות !.

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

ציטוט:
index.php?act=addpoint&add=500

בעצם שורת כתובת זו תבצע את השורות הבאות.

PHP קוד:
<?php
$act 
"addpoint";
$add 500;
?>

כלומר, הנתונים יוזנו לתוך המשתנה(addpoint יוזן למשתנה act, ו 500 יוזן למשתנה add).

כיצד נמנע זואת?
נוכל למנוע זואת ע"י הזנה שזוהיא שליחת GET.
ונבנה את הקוד הבא:

PHP קוד:
<?php
$action 
$_GET[act];
$nadd $_GET[add];
?>

* אפשר לכתוב בתוך ה [] עם גרשיים קטנים או בלעדיים, זה עניין של נוחות.

ניפוי באגים והקצבת מספר ערכים אפשריים.

במידה ואנו מעוניינים ליצור את כל הפעולות בקובץ אחד, כלומר ליצור action.
כיצד ניצור זואת?, ניצור זואת ע"י פונקציית ה Switch.

לדוגמא:

PHP קוד:
<?php
switch($_GET[act]) {
case 
"addpoint":
include(
"include/addpoint.php");
break;
case 
"points":
include(
"include/points.php");
break;
case 
"main":
include(
"include/main");
break;
default:
include(
"include/main.php");
}
?>

כאן אנו מזינים שיש אפשרות לact להיות שלושה ערכים(addpoint, points, main), ואם לא הוגדר ערך תגדיר תעשה כך וכך.
כמובן שנוכל להיות מתוחכמים יותר ע"י לולאה שיוצר את ה case ע"פ הקבצים הקיימים במחיצת "include".

למידע נוסף אודות פונקצייה זואת בקרו ביחידה המסבירה על פונקציית Switch במדריך הרישמי של Php:
http://www.Php.Net/Switch

מדריך | PHP – שיטת ההצפנה Base64 (הצפנה דו כיוונית) ושימושיה

שלום רב!,
במדריך זה החלטתי ללמד על ההצפנה הדו כיוונית הנפוצה ביותר כיום, Base64.
החלטתי לחלק את המדריך לארבעה נושאי אם: "מהי הצפנה דו כיוונית?", "כיצד נצפין מידע?", "כיצד נשחזר מידע?" ו"מהם שימושי הBase64?".

מהי הצפנה דו כיוונית?

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

קוד:
UEhQ

לאחר מכן ננסה לשחזר את הקוד ע"י פונקצייה הפוכה ונקבל:

קוד:
PHP

ובמדריך זה אנו נלמד להצפין מידע בשיטת ה Base64.

כיצד נצפין מידע?

על מנת להצפין מידע עלינו להשתמש בפונקצייה מסוג encode(פונקציית הצפנה), בBase64 אנו נשתמש בפונקצייה הבאה: base64_encode() .

תבנית הפונקצייה:

PHP קוד:
<?php
base64_encode
(x);
?>

לדוגמא:

PHP קוד:
<?php
$code 
"Base64 Guide - By Ikki";
$encode base64_encode($code);
echo 
$encode;
?>

יחזיר לנו:

ציטוט:
QmFzZTY0
כיצד נשחזר מידע?

על מנת לשחזר מידע עלינו להשתמש בפונקצייה מסוג decode(פונקציית שיחזור), בBase64 אנו נשתמש בפונקצייה הבאה: base64_decode() .

תבנית הפונקצייה:

PHP קוד:
<?php
base64_encode
(date);
?>

לדוגמא:

PHP קוד:
<?php
$code 
"QmFzZTY0";
$decode base64_decode($code);
echo 
$decode;
?>

יחזיר לנו:

ציטוט:
Base64 Guide – By Ikki
מהם שימושי ה Base64?

בBase64 נוכל להשתמש בשימושים רבים שמצריכים שיחזור.
למשל אם נרצה להצפין את הקוד, כך שרק מי שמכיר את הקוד ידע שצריך לשחזר כדי לערוך, וכך נמנע שינויים בקוד.
נצפין בBase64 ונשחזר בעמוד השיחזור.

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

לסיכום, לשיטת ההצפנה Base64 ישנם שימושים רבים!.

מדריך | יצירת תאריך בעברית עם PHP

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

PHP קוד:
$day=date('w');
$month=date('n');

אפשר לעשות את זה בצורות שונות אבל הדרך הזאת הכי נוחה (בשבילי לפחות).
2. נבדוק מה הפלט של date בשני המקרים ונכניס את החודש\יום בהתאמה.

PHP קוד:
switch($day){
case 
0:
$day="ראשון";
break;
case 
1:
$day="שני";
break;
...
case 
6:
$day="שבת";
break;
}
switch(
$month){
case 
1:
$month="ינואר";
break;
case 
2:
$month="פברואר";
break;
...
case 
12:
$month="דצמבר";
break;
}

וזהו סיימנו
רגע מה עם תאריך עברי?
את התאריך העברי אפשר לעשות כמעט אותו הדבר. החודשים העבריים יהיו אותו הדבר חוץ מבשנה מעוברת (בודקים עם date('L') כאשר הפונקציה מחזירה 0 לשנה רגילה ו1 לשנה מעוברת). את הימים נעשה בצורה הבאה:

PHP קוד:
    $he_day    =    date('j');
switch(
$he_day){
case 
1:
$he_day="א";
break;
case 
2:
$he_day="ב";
break;
...
}

יצירת תאריך בעברית עם PHP