Autor Zpráva
davevo
Profil
Dobrý den,

mám dotaz sem tam mě po odeslání formuláře od zákazníka příjde na email toto:

724 643 171, 532 299 326MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

IFBvcHTDoXZrYSA6DQoNCkTFmWV6b3bDvSBzdMWvbCBuZXJlem92w70gLSByb3ptxJtyIGTFmWV6dSA5MHg2MCwgOTAgdsO9xaFrYSBzdG9sdSwgaGxvdWJrYSBkxZllenUgNjBjbSwgbmEgbm/FvmvDoWNoIDEga3VzLiBQcm9zw61tIG8gemFzbMOhbsOtIGNlbm92w6kgbmFiw61ka3kuDQoNCkTEm2t1amkgemEgcnljaGzDqSB2ecWZw616ZW7DrQ0KSmFyb3NsYXZhIFNsw6FkZcSNa292w6ENCnZlZG91Y8OtIG9kZMSbbGVuw60ga29udHJha3TFryBOTUIgQnJubyxwLm8uCkphcm9zbGF2YSBTbMOhZGXEjWtvdsOhLCBOTUIgQnJubyxwLm8uCmphcm9zbGF2YS5zbGFkZWNrb3ZhQG5tYmJybm8uY3oKNzI0IDY0MyAxNzEsIDUzMiAyOTkgMzI2Cg==

Nevíte čím to je? 10 meilů v pohodě a pak jeden nesrozumitelný. Asi je to problém s kodováním ale proč je většina meilů ok a pár ko.
Dík za odpověd.
juriad
Profil
Ukaž, jak skládáš e-mail. To vypadá, že provádíš něco jako:
mail($to, $subject, base64_encode($text), "From: $email\n" . (!empty($tel) ? "\n$telefon" . "") . $headers);
Tedy, že telefon vkládáš mezi hlavičky a nikoli do těla e-mailu. Někde tam také omylem vypisuješ dvě odřádkování za sebou.
Nejspíš to bude souviset s (ne)zadaným telefonem.
davevo
Profil
juriad:
<?php
/* *************** diskuse.jakpsatweb.cz *** PHP FAQ ********************** */
function autoUTF($s)
{
    if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) // detect UTF-8
    {
        return $s;
    }
    elseif (preg_match('#[\x7F-\x9F\xBC]#', $s)) // detect WINDOWS-1250
    {
        return iconv('WINDOWS-1250', 'UTF-8', $s);
    }
    else // assume ISO-8859-2
    {
        return iconv('ISO-8859-2', 'UTF-8', $s);
    }
}

function cs_mail($to, $predmet, $zprava, $head = "")
{
    $predmet = "=?utf-8?B?".base64_encode(autoUTF($predmet))."?=";
    $head .= "MIME-Version: 1.0\r\n";
    $head .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";
    $head .= "Content-Transfer-Encoding: base64\r\n";
    $zprava = base64_encode(autoUTF($zprava));
    return mail($to, $predmet, $zprava, $head);
}

$predmet = $_POST['predmet']; 
$email = $_POST['email'];
$telefon = $_POST['telefon'];  
$zprava = $_POST['zprava'].PHP_EOL;
$zprava .= $_POST['predmet'].PHP_EOL;
$zprava .= $_POST['email'].PHP_EOL;
$zprava .= $_POST['telefon'].PHP_EOL;


if ($predmet!="" and $email!="" and $telefon!="" and  $zprava!="") 
{ 
cs_mail("obchod@gastronerez.eu", $predmet,$zprava,$telefon, "From: ".$email."\r\n"); 
echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong></p>"; 
} 
else 
{ 
echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje.</p>"; 
} 
?>
juriad
Profil
funkce cs_mail má jen 4 parametry, ty jí předáváš 5.
Tedy ten $telefon odstraň a předej ho jako součást $zpravy.
davevo
Profil
juriad:
A kterých 5? Já napočítal jen 4 o kterém řádku se bavíme o 19? nebo 40. Děkuji
juriad
Profil
Obou. Na 19. řádku definuješ funkci, která chce 4 argumenty a na 40. řádku jí předáváš argumentů 5. Stačí odstranit ten nadbytečný $telefon, a pak by to snad mělo být v pořádku.
davevo
Profil
Takto?


<?php
/* *************** diskuse.jakpsatweb.cz *** PHP FAQ ********************** */
function autoUTF($s)
{
    if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) // detect UTF-8
    {
        return $s;
    }
    elseif (preg_match('#[\x7F-\x9F\xBC]#', $s)) // detect WINDOWS-1250
    {
        return iconv('WINDOWS-1250', 'UTF-8', $s);
    }
    else // assume ISO-8859-2
    {
        return iconv('ISO-8859-2', 'UTF-8', $s);
    }
}

function cs_mail($to, $predmet, $zprava, $head = "")
{
    $predmet = "=?utf-8?B?".base64_encode(autoUTF($predmet))."?=";
    $head .= "MIME-Version: 1.0\r\n";
    $head .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";
    $head .= "Content-Transfer-Encoding: base64\r\n";
    $zprava = base64_encode(autoUTF($zprava));
    return mail($to, $predmet, $zprava, $head);
}

$predmet = $_POST['predmet']; 
$email = $_POST['email'];
$zprava = $_POST['zprava'].PHP_EOL;
$zprava .= $_POST['predmet'].PHP_EOL;
$zprava .= $_POST['email'].PHP_EOL;
$zprava .= $_POST['telefon'].PHP_EOL;


if ($predmet!="" and $email!="" and  $zprava!="")
{ 
cs_mail("obchod@gastronerez.eu", $predmet,$zprava,$telefon, "From: ".$email."\r\n"); 
echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong></p>"; 
} 
else 
{ 
echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje.</p>"; 
} 
?>
juriad
Profil
Změň řádek na:
cs_mail("obchod@gastronerez.eu", $predmet,$zprava, "From: ".$email."\r\n");
To, co jsi měl před tím, jsi mohl nechat, to bylo v pořádku.
davevo
Profil
juriad:
takže odesílání nefungovalo ale zjistil jsem čím to je
je to v zadávání telefoního čísla
pokud dám formát 123456789 funguje to jak má pokud dám 123 456 789 popřípadě 123 456 789,987 654 321 pak vyběhne meil nesmyslný tzn ošetřit vztupy
davevo
Profil
zdravím může mě někdo poradit jak z této podmínky vyloučit mezery?
$je_telefon = preg_match('#^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$#', $telefon);

prostě aby to nebralo číslo ve formátu 123 456 789 ale jen 123456789 popřípadě +420123456789
juriad
Profil
Odstraň z celého výrazu dvojici po sobě jdoucích znaků „mezera otazník“.

Tedy to bude:
'#^(\+420)?[0-9]{3}[0-9]{3}[0-9]{3}$#', což lze zkrátit na '#^(+420)?[0-9]{9}$#'.

A tohle si nedpustím :-)
preg_replace('/ \?/', '', '#^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$#');
http://xkcd.com/1313/
davevo
Profil
děkuji mnohokrát už to fungíruje

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: