עבור לתוכן

טופס פשוט לשליחת מייל PHP - בניתי אחד עם בעיה

Featured Replies

פורסם

היי לכולם,

אני די הרבה לאחרונה בפורום הזה :)

כתבתי קוד PHP לטופס 'צור קשר' ויש לי 2 בעיות:

* אני מקבל למייל טופס בג'יבריש!

* ואין התרעה כאשר מישהו לא ממלא את השדות חובה - זה תמיד נשלח

* אשמח גם אם תגידו לי אם כתבתי סתם קודים שאפשר למחוק מהסקריפט

פורסם

תנסה את זה:

<?php
if (isset($_POST['submit']))
{

$name = $_POST["name"];
$company = $_POST["company"];
$phone = $_POST["phone"];
$email = $_POST["email"];
$msg_subject = $_POST["msg_subject"];
$msg = $_POST["msg"];
$to = "my@email.com";
$subject = "התקבלה הודעה חדשה מהאתר";
$message = "
<p>שם מלא:<BR>$name</p>
<p>חברה:<BR>$company</p>
<p>טלפון:<BR>$phone</p>
<p>דואר אלקטרוני:<BR>$email</p>
<p>נושא:<BR>$msg_subject</p>
<p>פירוט:<BR>$msg</p>
";

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: $email\r\n";
$headers .= "To: $to\r\n";
$headers .= "X-Priority: 1\r\n";
$headers .= "X-MSMail-Priority: High\r\n";


if (mail( $to, $subject, $message, $headers))
echo("<html><head><script language='JavaScript'>alert('הודעתך נשלחה בהצלחה');</script></head></html>");
else
echo ("<html><head><script language='JavaScript'> alert('נא עבור על הפרטים שוב');</script></head></html>");
}
?>

<html>
<head>
</head>
<body>

<form method="post" action="">

<table width="550" border="0">
<tr>
<td align="right" valign="middle"><label><input name="name" type="text" size="20" border="0" dir="rtl"></label></td>
<td align="right" valign="middle"></td>
<td align="right" valign="middle" class="content-text">* שם מלא:</td>
</tr>
<tr>
<td align="right" valign="middle"><label><input name="company" type="text" size="20" border="0" dir="rtl"></label></td>
<td align="right" valign="middle"></td>
<td align="right" valign="middle" class="content-text">חברה:</td>
</tr>
<tr>
<td align="right" valign="middle"><label><input name="phone" type="text" size="20" border="0" dir="rtl"></label></td>
<td align="right" valign="middle"></td>
<td align="right" valign="middle" class="content-text">טלפון:</td>
</tr>
<tr>
<td align="right" valign="middle"><label><input name="email" type="text" size="20" border="0" dir="rtl"></label></td>
<td align="right" valign="middle"></td>
<td align="right" valign="middle" class="content-text">* דואר אלקטרוני:</td>
</tr>
<tr>
<td align="right" valign="middle"><label><input name="msg_subject" type="text" size="50" border="0" dir="rtl"></label></td>
<td align="right" valign="middle"></td>
<td align="right" valign="middle" class="content-text">נושא ההודעה:</td>
</tr>
<tr>
<td align="right" valign="middle"><label><textarea name="msg" type="text" cols="50" rows="10" border="0" dir="rtl"></textarea></label></td>
<td align="right" valign="middle"></td>
<td align="right" valign="middle" class="content-text">* פירוט:</td>
</tr>
<tr>
<td align="center" valign="middle"><label><input name="submit" type="submit" value="שלח" class="button"></label></td>
<td align="right" valign="middle"></td>
<td align="right" valign="middle"></td>
</tr>
</table>

</form>
</body>
</html>

אני זוכר שגם אני הסתבכתי עם עברית בשליחת מייל...

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

(קודם כל לשנות את התג form ל- <form method="post" name="mailer" action="" onsubmit="validateFormFields();">) ולהוסיף את הסקריפט הבא:

<script type="text/javascript">
function validateFormFields()
{
if(document.mailer.email.value.length <= 0)
return false;

return true;
}
</scipt>

או לבצע בדיקה פשוטה בעזרת if ב php לדוגמה


if(!isset($_POST["email"]))
echo "Email is not set correctly";
exit();

פורסם
  • מחבר

היי אילן, תודה!

עכשיו זה מתקבל בעברית!

בקשר לוודאות:

שיניתי את הפורם

שכחתי משהו כי זה לא מקפיץ אף הודעה.

איך אני קובע איזו הודעה הוא יקפיץ בהתאם לכל תא שלא מילאו?

פורסם
<script type="text/javascript">
function validateFormFields()
{
if(document.mailer.email.value.length <= 0)
{
alert('אנא הכנס כתובת אימייל');
return false;
}

return true;
}
</script>

פורסם
  • מחבר

זה עובד, :) אך נוצרו 2 בעיות אחרות

1 אני מוסיף את הקוד שיכניסו שם מלא

מתחת או מעל ל"הכניסו מייל" אבל הוא מתייחס רק לראשון מבניהם שבקוד

2. אחרי שהוא מקפיץ את ההודעה "אנא הכנס מייל" הוא מקפיץ את ההודעה "הטופס נשלח בהצלחה" ושולח

פורסם

תנסה לשנות את השם של השדה במקום name ל fullname

או סתם שם אחר שיהיה שונה מname

פורסם
  • מחבר

ניסיתי ולא עבד. somebody save me

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

פורסם

יש לך סוגר שהוא אחרי התגית script

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

פורסם
  • מחבר

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

הבעיות שיש הן

סיטואציה מס' 1

כהטופס ריק ולוחצים שלח -> קופצת הודעה "אנא הכנס שם מלא" -> ואז קופצת הודעה "הודעתך נשלחה"

סיטואציה מס' 2

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

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

אני צריך שהוא לא ישלח את הטופס אלא יעצור ויתן לי להזין את השדות חובה

פורסם

כשרושמים פונקציה בארוע onsubmit צריך לרשום

<form onsubmit="return validateFormFields()">

תוספת של המילה return

פורסם
  • מחבר

יס! :xyxthumbs:

תבורך

פורסם
  • מחבר

הבוקר שמתי לב לבעיה חדשה

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

אבל אחרי ששולחים אותו יש שינוי ויזואלי בעמוד - ממה זה יכול לנבוע?

1. הטופס מתקרב לגבול העליון של הדף כאילו עולה שורה אחת למעלה

2. הכפתור "שלח" ומתקטן קלות

anyone?

  • 3 שבועות מאוחר יותר...
פורסם
  • מחבר

מנסה את מזלי שוב...

עזבו את הכפתור. למה הטקסט קופץ אחרי השליחה?! מישהו שמע מכיר ראה?

פורסם

יעזור אם תביא את מקור הדף המלא.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים