mail() изпраща при рефреш, не при събмит

zareva_rositsa

Registered
Здравейте, искам да си направя една формичка, която да ми изпраща съобщения на е-мейл. Не мога да я накарам да изпраща съобщения когато натисна "submit" бутона, изпраща всеки път, когато опресня страницата и освен това видях, че стойностите в $_POST масива се запазват и след рефреша, не се изтриват. Къде бъркам? Ето кода на формата и на mail() функцията:

Код:
<form id="form" action="index-6.php" method="POST" style="margin:0px; padding:0px "><table width="222"  border="0" cellspacing="0" cellpadding="0">
                          <tr>
                            <td height="26" align="left" valign="top"><input name="your_name" type="text" style="width:222px; height:24px; font-family:tahoma; font-size:11px; color:#5A676E; border:1px solid #83888B; padding-left:7px; padding-top: 3px " value="Вашето име"></td>
                          </tr>
                          <tr>
                            <td height="26" align="left" valign="top"><input name="subject" type="text" style="width:222px; height:24px; font-family:tahoma; font-size:11px; color:#5A676E; border:1px solid #83888B; padding-left:7px; padding-top: 3px " value="относно"></td>
                          </tr>
                          <tr>
                            <td height="26" align="left" valign="top"><input name="e-mail" type="text" style="width:222px; height:24px; font-family:tahoma; font-size:11px; color:#5A676E; border:1px solid #83888B; padding-left:7px; padding-top: 3px " value="e-mail"></td>
                          </tr>
                          <tr>
                            <td height="26" align="left" valign="top"><input name="phone" type="text" style="width:222px; height:24px; font-family:tahoma; font-size:11px; color:#5A676E; border:1px solid #83888B; padding-left:7px; padding-top: 3px " value="телефон - опционално"></td>
                          </tr>
                          <tr>
                            <td height="26" align="left" valign="top"><input name="address" type="text" style="width:222px; height:24px; font-family:tahoma; font-size:11px; color:#5A676E; border:1px solid #83888B; padding-left:7px; padding-top: 3px " value="адрес - опционално"></td>
                          </tr>

                          <tr>
                            <td align="left" valign="top"><textarea cols="10" rows="10" name="message" style="width:222px; height:164px; font-family:tahoma; font-size:11px; color:#5A676E; border:1px solid #83888B; padding-left:7px; padding-top:3px;  overflow:auto">Съобщение</textarea></td>
                          </tr>

                          <tr>
                            <td height="26" align="left" valign="top"><input  type="submit" name="submit" style="width:222px; height:24px; font-family:tahoma; font-size:11px; color:#5A676E; border:1px solid #83888B; padding-left:7px; padding-top: 3px " value="submit">
                            <input type="hidden" name="submit_form" value="1">

                            </td>
                          </tr>

                          
                         
                        </table></form>

и на пхп -частта:


Код:
<?php
if($_POST["submit_form"] == 1 )
{
$to = "zareva_rositsa@mail.bg";
$subject = $_POST["subject"];
$message = "Съобщение от: " . $_POST["your_name"] . "<br />" .

"с адрес: " . $_POST["address"] . "<br />" .
"и телефон: " . $_POST["phone"] . "<br />" .
$_POST["message"];

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: webmaster@example.com'  ;
 mail($to, $subject, $message, $headers);
}
?>
 
значи гледай сега. аз по принцип, когато започнах да си правя mail форми и при мен не работеха. и се оказа,че като си ги тествам на моя компютър (с xampp) просто не работят защото им липсва Mail сървър, който да изпраща съобщенията. Това е единия възможен проблем. В кода не намирам проблем (не съм и кой знае колко добър в това де). Но ако в кода ти няма проблем значи остава това за Mail сървъра. Единствения вариант е да си качиш сайта в хост който поддържа php и който има Mail server. Има и такива безплатни. Така че пробвай, би трябвало да се получи.
 
Сложи тази проверка и кода който ти изпраща вътре

if ( count($_POST) > 0 ){
code....
}

Какво прави - брои пост променливите и ако те са повече от 0 изпълнява кода ;)
 
ама аз съм го хостнала на безплатен вече, оттам са ми констатациите. Просто, вместо да изпраща само при натискане на бутона, то праща и при натискане на бутона и при рефреш на страницата, като при рефреш не занулява пост - променливата, а си я помни и стойността на хидън - полето, което ползвам за проверката си стои едно и проверката минава.
 
Сложи една капча/секюрити код/ и няма да ти праща нито при рефреш нито спам бот.
Има готови кодове в интернет.
 
ми даа, слагала съм, ама сега нямам нужда. Искам просто да оправя променливите и да огранича формата да се праща само при събмит .
 
Виж сега, нормално е при един път натиснат събмит, след това при рефреш да се праща наново.. Ако си с Firefox, той ще те пита дали да пратиш данните наново, ако дадеш да, ще се пратят, ако си с Опера, направо ще прати данните наново при рефреш и съответно ще се изпрати съобщението отново.
 
Значи, работещ вариант се оказа, при форма, състояща се от 2 файла - хтмл и логика, да са налични следните неща:

1. екшъна на формата да праща към файла - логика, като хедър ни връща оттам;
2. в началото на хтмл файла е хубаво да има нещо, което изпразва $_POST[] масива. Аз си избрах просто $_POST = array(); , обаче сигурно unset($_POST); върши същата работа :).

Сега ми остана само следната нерешена част:

Успявям да предам кирилица от полетата на формата във е-мейла с:
Код:
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
. Полето "Относно", обаче, остава извън тялото на е-мейл - а, затова, като си пращам на кирилица точно "Относно" ми е на маймунешки. Как да си сетна чарсета и на "Относно"?

Поздрави,
Росица
 
Ще пробваш ли да конвертнеш променливата $subject чрез тази функция $subject= mb_encode_mimeheader($subject,"UTF-8", "Q", "\n");
 
Виж чарсета на самата форма, в която задаваш $subject. Запази я като utf-8 без БОМ.
 
Код:
$headers .= 'MIME-Version: 1.0' ."\r\n";
$headers .= 'Content-Type: text/HTML; charset=ISO-8859-1' . "\r\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\r\n";
$headers .= $text . "\r\n";

Където $headers променливата е четвъртият параметър на mail() функцията. И ако не стане, може да ползваш фреймуърка SwiftMailer за пращане на имейли и няма да имаш никакъв проблем. :)
 
<?php
if(isset($_POST["submit_form"]))
{
$to = "zareva_rositsa@mail.bg";
$subject = $_POST["subject"];
$message = "Съобщение от: " . $_POST["your_name"] . "<br />" .

"с адрес: " . $_POST["address"] . "<br />" .
"и телефон: " . $_POST["phone"] . "<br />" .
$_POST["message"];

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: webmaster@example.com' ;
mail($to, $subject, $message, $headers);
}
?>
:?:
 

Back
Горе