[מדריך] יצירת קשר - שליחת אימייל

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

מנהל: צוות האתר

VladK
חבר צוות phpBB ישראל לשעבר
חבר צוות phpBB ישראל לשעבר
הודעות: 766
הצטרף: 12/04/2006 ב-11:19:05
מיקום: לוד

[מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי VladK » 11/10/2008 ב-02:23:40

אהלן.

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

הכנתי במיוחד בשביל המדריך את הסקריפט המלא.
דוגמא אפשר לראות פה:
http://phpbbskins.gofreeserve.com/Demo/contact.html

הרמה של המדריך היא בין בנוני לקל.

ובכן אני ינסה להסביר את המדריך כך שכמה שיותר אנשים יבינו. אה וכן....שאלות בסוף :roll:

נתחיל כמובן מדף HTML פשוט וקל:

קוד: בחר הכל

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
   <title>טופס יצירת קשר</title>
   <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
   <link rel="stylesheet" href="css.css" type="text/css" />
</head>

<body>
<h1>טופס יצירת קשר</h1>

<form name="theform" method="post" action="contact.php">
<table><tr>
   <td>שם פרטי:</td>
   <td><input type="text" name="Pname" /></td>
</tr><tr>
   <td>שם משפחה:</td>
   <td><input type="text" name="Lname" /></td>
</tr><tr>
   <td>האימייל שלך:</td>
   <td><input type="text" name="Email" /></td>
</tr><tr>
   <td>כותרת ההודעה:</td>
   <td><input type="text" name="Mtitle" /></td>
</tr><tr>
   <td valign="top">תוכן ההודעה:</td>
   <td><textarea name="Mtext"></textarea></td>
</tr><tr>
   <td></td>
   <td><input type="submit" value="שלח טופס" class="botton" name="Submit" />
   <input type="reset" value="נקה טופס" class="botton" /></td>
</tr></table>
</form>
</body>

</html>


ניתן לראות פה עמוד HTML רגיל שכולל 4 שדות INPUT ושדה אחד של TEXTAREA...שום דבר מיוחד...
אני בא מנקודת הנחה שאתם יודעים HTML כי אחרת להתחיל להתעסק עם PHP בלי לדעת HTML בסיסי כמו זה פשוט מיותר לחלוטין.

עמוד הHTML שאני קראתי לו contact.html אחרי שליחה מעביר את הנתונים לעמוד contact.php (כמה אורגינלי מצידי :roll: )

נתחיל בקוד המלא של העמוד CONTACT.PHP

קוד: בחר הכל

<?php
header
('Content-Type: text/html; charset=utf-8');

Define("MY_EMAIL""[email protected]");
$Mess = array(
    
'אחד או יותר מן השדות ריקים',
    
'האימייל נשלח בהצלחה',
    
'האימייל שציינתה לא חוקי'
    
);

function 
skin($content) {
return <<<EOB
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>טופס יצירת קשר</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="css.css" type="text/css" />
</head>

<body>
<h1>טופס יצירת קשר</h1>

{$content}
<br /><br />
<a href="contact.html">חזור לעמוד הקודם</a>
</body>

</html>
EOB;
}

if(isset(
$_POST['Submit'])) {
    
$Pname trim($_POST['Pname']);
    
$Lname trim($_POST['Lname']);
    
$Email trim($_POST['Email']);
    
$Mtitle trim($_POST['Mtitle']);
    
$Mtext trim($_POST['Mtext']);

    if((
$Pname == null) OR ($Lname == null) OR ($Email == null) OR ($Mtitle == null) OR ($Mtext == null)) {
        
$cont $Mess[0];
    } else {
        if(
filter_var($EmailFILTER_VALIDATE_EMAIL)) {

            
$header "From: {$Pname} {$Lname} <{$Email}>\r\n";
            
mail(MY_EMAIL$Mtitle$Mtexty$header);

            
$cont $Mess[1];
        } else {
            
$cont $Mess[2];
        }
    }

    echo 
skin($cont);
} else {
    
header("Location: contact.html");
}

?>


כעת נעבור שורה שורה ואני יסביר.
השורה:

קוד: בחר הכל

header('Content-Type: text/html; charset=utf-8'); 

למעשה מגדירה שימוש בUTF-8 (זהו קידוד אוניברסלי שמאפשר שימוש בכל השפות באותו עמוד ללא שינויי META וכו'.)

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

קוד: בחר הכל

Define("MY_EMAIL""[email protected]"); 

חשוב לציין שמותר לערוך רק את האימייל עצמו ולא את הMY EMAIL.

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

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

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

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

קוד: בחר הכל

if(isset($_POST['Submit'])) { 

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

זה מאפשר לנו למנוע מהמשתמש להגזים קצת וגם למקרה שהמשתמש יודע שבעוד מספר שורות נעשה בדיקה אם הINPUTים שהוא שולח ריקים הוא ישים סתם רווחים.
כלומר אם הוא הקליד רק רווחים התוצאה תהיה - ריק.

ובכן הנה הבדיקה אם כל INPUT שנשלח ריק:

קוד: בחר הכל

if(($Pname == null) OR ($Lname == null) OR ($Email == null) OR ($Mtitle == null) OR ($Mtext == null)) { 

אם כן תודפס ההודעה:
אחד או יותר מן השדות ריקים

עכשיו נשאלת השאלה: אבל לא כתוב את זה! כתוב:

קוד: בחר הכל

$cont $Mess[0]; 

$Mess זו למעשה המערך שעשינו זוכרים? בהתחלה עוד... ה0 מציין שאני רוצה את ההודעה מספר 0 (בPHP ובכלל ברוב שפות התכנות אם לא כולם הספירה מתחילה לא מ1 אלא מ0)
מה זה $cont ? בינתיים זה סתם משתנה שהגדרנו לו את הערך של המערך מספר 0 שהוא "אחד או יותר מן השדות ריקים"

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

קוד: בחר הכל

if(filter_var($EmailFILTER_VALIDATE_EMAIL)) { 

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

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

קוד: בחר הכל

$header "From: {$Pname} {$Lname} <{$Email}>\r\n";
mail(MY_EMAIL$Mtitle$Mtexty$header); 

להסביר על הפונקציה ממש אין לי חשק אבל למזלי עשו זאת רבים אחרים:
http://www.php.net/mail

והנה שוב מופיעה $cont = $Mess[1];
אבל עם מספר שונה ... פה אני מבקש הודעה אחרת מן המערך.

ומתחת עוד הודעה זו הודעה נוספת...

כעת תרדו למטה ותראו שם:

קוד: בחר הכל

echo skin($cont); 

פה אני רוצה להציג את התוכן של הפונקציה SKIN ומזרים לפונקציה את התוכן של המשתנה CONT...למעשה המשתנה הזה נקבע כל פעם בצורה שונה בהתאם להודעה, בהתאם למצב.

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

ובכן כמו שאמרתי שאלות בסוף.

סוף

עריכה:
הוספתי לכם גם את הסקריפט להורדה, תשתמשו בו חופשי ;)
contact.rar
(15.4 KiB) הורד 978 פעמים

leibo208
משתמש חדש
משתמש חדש
הודעות: 42
הצטרף: 27/04/2006 ב-20:38:17

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי leibo208 » 11/10/2008 ב-11:55:31

שאלות בסוף :P

את כל הקבצים שייוצרים שמים פשוט ב FILE MANAGER?

VladK
חבר צוות phpBB ישראל לשעבר
חבר צוות phpBB ישראל לשעבר
הודעות: 766
הצטרף: 12/04/2006 ב-11:19:05
מיקום: לוד

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי VladK » 11/10/2008 ב-12:34:37

תעלה את זה לאן שבא לך ...

leibo208
משתמש חדש
משתמש חדש
הודעות: 42
הצטרף: 27/04/2006 ב-20:38:17

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי leibo208 » 11/10/2008 ב-12:49:14

The Godfather כתב:תעלה את זה לאן שבא לך ...

תודה רבה :D

leibo208
משתמש חדש
משתמש חדש
הודעות: 42
הצטרף: 27/04/2006 ב-20:38:17

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי leibo208 » 11/10/2008 ב-18:07:40

שאלה קטנה :lol:

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

Chen
חבר צוות phpBB ישראל לשעבר
חבר צוות phpBB ישראל לשעבר
הודעות: 2897
הצטרף: 02/06/2006 ב-20:49:24
יצירת קשר:

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי Chen » 11/10/2008 ב-18:29:44

leibo208 כתב:שאלה קטנה :lol:

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


קישור או תמונת מסך יוכלו לעזור.

חוץ מזה, ניתן לבטל את אחד מקבצי הCSS, או לשלב ביניהם.
בברכה,
חן :wink:

leibo208
משתמש חדש
משתמש חדש
הודעות: 42
הצטרף: 27/04/2006 ב-20:38:17

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי leibo208 » 11/10/2008 ב-19:50:10

SuperDragon כתב:
leibo208 כתב:שאלה קטנה :lol:

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


קישור או תמונת מסך יוכלו לעזור.

חוץ מזה, ניתן לבטל את אחד מקבצי הCSS, או לשלב ביניהם.

אני אסביר את עצמי יותר טוב:
הדף הראשי באתר, דף ה HTML נתמך ע"י קובץ CSS שבו כל העיצוב נמצא - פונטים, צבעים, גודל טקסט, תמונות. כשאני שם את קוד ה HTML לטופס בדף הראשי שלי, גם הוא נתמך ע"י קובץ CSS מה שגורם להתנגשות בין שני הקבצים והאתר נצבע בצבעים האחרים ומתבלגן.
השאלה שלי, איך אני מפריד בין שני הקבצים כך שגם הדף ייתמוך בקובץ CSS מספר 1, וקוד ה HTML יתמוך בקובץ CSS מספר 2?

VladK
חבר צוות phpBB ישראל לשעבר
חבר צוות phpBB ישראל לשעבר
הודעות: 766
הצטרף: 12/04/2006 ב-11:19:05
מיקום: לוד

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי VladK » 11/10/2008 ב-23:19:04

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

leibo208
משתמש חדש
משתמש חדש
הודעות: 42
הצטרף: 27/04/2006 ב-20:38:17

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי leibo208 » 12/10/2008 ב-00:32:03

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

VladK
חבר צוות phpBB ישראל לשעבר
חבר צוות phpBB ישראל לשעבר
הודעות: 766
הצטרף: 12/04/2006 ב-11:19:05
מיקום: לוד

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי VladK » 12/10/2008 ב-08:19:01

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

NADAV955
משתמש באימונים
משתמש באימונים
הודעות: 238
הצטרף: 05/05/2008 ב-06:52:27

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי NADAV955 » 12/10/2008 ב-16:31:38

תודה אבל לא עובד לי אחרי שאני רושם את הפרטים הוא רושם את זה :

Fatal error: Call to undefined function: filter_var() in /home/DINAMIT/domains/maccabi-haifafc.2us.co.il/public_html/contact.php on line 44

leibo208
משתמש חדש
משתמש חדש
הודעות: 42
הצטרף: 27/04/2006 ב-20:38:17

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי leibo208 » 14/10/2008 ב-17:17:17

The Godfather כתב:תכלס השליחה עצמה אמורה להיות מיידית. כבר התלוננו אליי בעניין הזה...הבעיה היא השרת gofreeserve מסיבה כלשהי האימיילים פשוט לא נשלחים. תכלס אם תנסה כל שרת אחר זה יעבוד....הבעיה היא ספציפית בשרת הזה.

פניתי ל gofreeserve והם אמרו לי לרשום או לשים 'php_value display_errors on' בקוד או משהו כזה. לא בדיוק הבנתי איך. הם רוצים לראות אם אין שגיאה בקובץ, או שהשגיאה בשרתים שלהם.
איך אני בודק את זה?

Chen
חבר צוות phpBB ישראל לשעבר
חבר צוות phpBB ישראל לשעבר
הודעות: 2897
הצטרף: 02/06/2006 ב-20:49:24
יצירת קשר:

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי Chen » 14/10/2008 ב-17:38:07

The Godfather, תודה רבה על תרומתך,
על איזה גירסת php בנית / בדקת את הקוד הנ"ל?


תודה על תרומתך,
המשך כך.
בברכה,
חן :wink:

VladK
חבר צוות phpBB ישראל לשעבר
חבר צוות phpBB ישראל לשעבר
הודעות: 766
הצטרף: 12/04/2006 ב-11:19:05
מיקום: לוד

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי VladK » 15/10/2008 ב-14:55:45

אני עובד על שרת ביתי לרוב בזמן הבנייה עצמה.
אם אני לא טועה
MySQL 5.0.67
PHP 5.2.6

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

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

NADAV955
משתמש באימונים
משתמש באימונים
הודעות: 238
הצטרף: 05/05/2008 ב-06:52:27

Re: [מדריך] יצירת קשר - שליחת אימייל

הודעה שלא נקראהעל ידי NADAV955 » 15/10/2008 ב-15:16:31

The Godfather כתב:אני עובד על שרת ביתי לרוב בזמן הבנייה עצמה.
אם אני לא טועה
MySQL 5.0.67
PHP 5.2.6

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

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


אז מה אני יעשה ?


חזור אל “בניית אתרים”

מי מחובר

משתמשים הגולשים בפורום זה: אין משתמשים רשומים ו־ 109 אורחים

cron