Autor Zpráva
Filip Kadlec
Profil
Zdravim,
mám rozsáhlejší formulář v PHP a když to odešlu na mejl tak místo háčku tam mám znaky.Vůbec PHP neovládám, poraďte mi prosím nebo zkopírujte ten kód a k němu vepište co tam mám prosím dát.Díky moc.

 <?php
        
        $jmeno = $_POST['jmeno'];
        $prijmeni = $_POST['prijmeni'];
        $vek = $_POST['vek'];
        $adresa = $_POST['adresa'];
        $telefon = $_POST['telefon'];
        $email = $_POST['email'];
        $kod = $_POST['kod'];
        
		if ( isset($_POST['odeslat']) ) {
			if ($jmeno != "" && $prijmeni != "" & $vek != "" && $adresa != "" && $telefon != "" && $email != "" && $kod != "") {
				
				$predmet = "Aktivace poukázky";
				$zprava = $jmeno." ".$prijmeni.", Věk - ".$vek.", Adresa - ".$adresa.", Telefon - ".$telefon.", E-mail - ".$email;
				
				if ($kod == "hodnota1") {
					mail("vase@adresa.com", $predmet, $zprava, "From: " . $email);
					echo "<p><strong>Váš e-mail byl úspěšně odeslán!</strong></p>";
				} elseif ($kod == "hodnota2") {
					mail("vase@adresa.com", $predmet, $zprava, "From: " . $email);
					echo "<p><strong>Váš e-mail byl úspěšně odeslán!</strong></p>";
				} elseif ($kod == "hodnota3") {
					mail("vase@adresa.com", $predmet, $zprava, "From: " . $email);
					echo "<p><strong>Váš e-mail byl úspěšně odeslán!</strong></p>";
				} elseif ($kod == "hodnota4") {
					mail("vase@adresa.com", $predmet, $zprava, "From: " . $email);
					echo "<p><strong>Váš e-mail byl úspěšně odeslán!</strong></p>";
				} elseif ($kod == "hodnota5") {
					mail("vase@adresa.com", $predmet, $zprava, "From: " . $email);
					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>, vložili jste neplatný kód.</p>";
				}
				
			} else {
				echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong>, pravděpodobně jste nevyplnili některé z polí.</p>";
			}
		}
        
        ?>



Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Alphard
Profil
Nejčastější potíže s PHP (FAQ)
Filip Kadlec
Profil
Alphard:
Nejčastější potíže s PHP (FAQ)
Ja sem to studoval asi hodku,ale ja PHP vubec neumim takze to nejak nechapu nevim co kam dat :( nutne to potrebuju
Alphard
Profil
Zkopírujte si ty dvě funkce a ve svém kódu dejte místo mail() funkci cs_mail().
Filip Kadlec
Profil
Díky moc!!
Honza84
Profil *
Ahoj. Nějak mi unikají souvislosti. Mám svůj formulář, ale stále se mi nějak nedaří úplně správně naroubovat na něj tyto funkce.
Mohl by mi někdo vysvětlit, jak je to spolu vlastně provázané? Co mi ovlivňuje proměnná $head ? Co je vlastně nyní tím reálným řádkem, který odesílá e-mail. Ten můj nebo ten v nabízené funkci? Fakt jsem se v tom ztratil.
Pro příklad zasílám kód pro odesílání mého formuláře:
<?

$pro = $_POST['pro'];
$kopie = $_POST['kopie'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$jmeno = $_POST['jmeno'];
$predmet = $_POST['predmet'];
$textmailu = $_POST['textmailu'];

mail("$pro, $kopie", "$predmet" , "$jmeno, $telefon, $textmailu", "From: " . $_POST["email"]);

?>


Mám jej nastavený tak, aby se vyplněný e-mail zobrazoval rovnou jako Odesílatel.
Jestli jsem tomu dříve porozuměl, je to v PHP již dané tak, že první část mezi závorkami je vyhrazená pro adresáty, druhá pro předmět zprávy, třetí pro vlastní text a jiné proměnné a poslední, čtvrtá pro e-mail odesílatele.

Já jsem tu funkci po různých zdlouhavých pokusech narouboval takto, ale stále nechápu, na co je mi tam ta proměnná head a co vlastně můj e-mail odesílá. Navíc se mi adresa Odesílatele začala objevovat v textu zprávy, kde měl být jenom vlastní text, jméno a telefon.

function cs_mail($pro, $predmet, $jmeno, $telefon, $textmailu,  $head = "")
{
    $predmet = "=?utf-8?B?".base64_encode(autoUTF($predmet))."?=";
    $head .= "MIME-Version: 1.0\r\n";
    $head .= "Content-Type: text/html; charset=\"utf-8\"\r\n";
    $head .= "Content-Transfer-Encoding: base64\r\n";
    $textmailu = base64_encode(autoUTF($textmailu));
    return mail("$pro, $kopie", "$predmet", "$jmeno, $telefon, $textmailu", "From: " . $_POST["email"]);
}



$pro = $_POST['pro'];
$kopie = $_POST['kopie'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$jmeno = $_POST['jmeno'];
$predmet = $_POST['predmet'];
$textmailu = $_POST['textmailu'];

cs_mail("$pro, $kopie", "$predmet" , "$jmeno, $telefon, $textmailu", "From: " . $_POST["email"]);

?>


Předem moc děkuji každému, kdo mi pomůže se v tom nějak vyznat.
Je sice hezké, že mi to nějak funguje a děkuji za to, avšak nedá mi to spát, dokud nepochopím princip provázání.
PHP se věnuji jen velmi okrajově a krátce, tak mě prosím nekamenujte, díky ;)
Keeehi
Profil
function cs_mail($pro, $predmet, $text, $head = "")
{
    $predmet = "=?utf-8?B?".base64_encode(autoUTF($predmet))."?=";
    $head .= "MIME-Version: 1.0\r\n";
    $head .= "Content-Type: text/html; charset=\"utf-8\"\r\n";
    $head .= "Content-Transfer-Encoding: base64\r\n";
    $text = base64_encode(autoUTF($text));
    return mail($pro, $predmet, $text, $head);
}



$pro = $_POST['pro'];
$kopie = $_POST['kopie'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$jmeno = $_POST['jmeno'];
$predmet = $_POST['predmet'];
$textmailu = $_POST['textmailu'];

cs_mail("$pro, $kopie", "$predmet" , "$jmeno, $telefon, $textmailu", "From: $_POST[email]\r\n");
Začíná to definicí funkce, ta nic nedělá, dokud není zavolaná. Pak následuje obyčejné přepsání hodnot z POSTu do proměnných a končí to zavoláním funkce, kterou jsme nadefinovali na začátku. Tím se ta funkce spustí. Má 4 parametry, přičemž poslední je nepovinný. V té funkci se provedou nějaké úpravy (převod textu do utf8, přidání hlaviček) a nakonec se to vše odešle tou funkcí mail.
K tomuto kódu patří ještě funkce autoUTF, kterou tu nemáte na kopírovanou, ale funkce cs_mail ji ke správné činnosti potřebuje.
Honza84
Profil *
Keeehi:
Děkuji, tu funkci autoUTF tam samozřejmě mám. Co znamená to \r\n za proměnnou e-mail?
A s tou funkcí to už asi chápu. Potvrďte mi prosím mojí doměnku:
z formuláře mám nějaké proměnné,
"pro, kopie" je zpracována ve funkci cs_mail pod proměnnou "pro"
"predmet" je zpracován přes proměnnou "predmet"
a proměnné "jmeno, telefon, textmailu" jsou zpracovány přes proměnnou "text"
Tyto překódované proměnné jsou následně odeslány již sloučené do 3 proměnných.

K čemu pak slouží ta proměnná head?

Díky.
Honza84
Profil *
Když jsem funkci nyní nastavil tak, jak jste napsal, v textu e-mailu dostávám toto:
SmFuIMWgdGVtYmVyayDEm8WhxI3FmcW+w73DocOtw6kgxJrFoMSMxZjFvcOdw4HDjcOJIC0ga29uZWMgam3DqW5hLCA3MjgzMzY3MTAsIMSbxaHEjcWZxb7

Co s tím?
Honza84
Profil *
Zatím mi to připadá na špatný převod kódu ve funkci autoUTF.
Když pro textmailu nastavím ve funkci cs_mail to samé co pro předmět, funguje to lépe, dostanu normální text, avšak nefunguje "š" a "ž" .
Nemůže být ještě chyba v nastavení hostingu, na kterých mi běží e-mailové schránky? Ve schránce na Centrum.cz se mi text zprávy vždy zobrazoval korektně, tedy krom toho: SmFuIMWgdGVtYmVyayDEm8WhxI3FmcW+w73DocOtw6kgxJrFoMSMxZjFvcOdw4HDjcOJIC0ga29uZWMgam3DqW5hLCA3MjgzMzY3MTAsIMSbxaHEjcWZxb7

Ještě jednou díky.
Honza84
Profil *
Tak už sae mi daří. Ale stále ne stoprocentně.
Zjistil jsem, že problém je s tělem e-mailu. Předmět zprávy se převádí v pořádku, ať do něj zařadím cokoliv, funguje správně.
V těle vlastní zprávy (textu), který přichází z formuláře z tagu "textarea", jsou však potíže. Pokud se pokusím převést kódování pomocí výše uvedené funkce
$text = base64_encode(autoUTF($text));
vyhodí to výše uvedený kód: "SmFuIMWgdGVtYmVyayDEm8WhxI3FmcW+w73Doc..." namísto textu. Pokud text zprávy nepřevádím, nezobrazuje se šžť .

Prosím prosím o radu, co s tím. Není problém již v tom tagu "textarea"?

Díky moc. Honza

Pro pořádek ještě zasílám náhled na moje kódy:
<form action="mail_jednotky.php" method="post">

<p>
  Příjmení a jméno (nepovinné):
</p>
<input type="text" name="jmeno"> <br>

<p>
  Váš e-mail (nepovinné):
</p>
<input type="text" name="email"><br>

<p>
  Váš telefon (nepovinné):
</p>
<input type="text" name="telefon"><br>

<input type="hidden" readonly="readonly" value="Připomínky k programu VIKLAN Jednotky" name="predmet">

<p>
  Připomínka nebo jiná informace:
</p>
<textarea name="textmailu" rows="5" cols="50" tabindex="1"></textarea>


<input type="hidden" value="info@viklan.cz" name="pro">
<input type="hidden" value="jets@centrum.cz" name="kopie">
<INPUT TYPE="SUBMIT" VALUE="Zaslat dotaz">

</form>
(to je stránka s formulářem, nazveme ji např. formular.php)

<?



// convert to UTF-8
function autoUTF($s)
{
    // detect UTF-8
    if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
        return $s;

    // detect WINDOWS-1250
    if (preg_match('#[\x7F-\x9F\xBC]#', $s))
        return iconv('WINDOWS-1250', 'UTF-8', $s);

    // assume ISO-8859-2
    return iconv('ISO-8859-2', 'UTF-8', $s);
} 


function cs_mail($komu, $predmety, $textmailu, $odesilatel)
{
    $predmety = "=?utf-8?B?".base64_encode(autoUTF($predmety))."?=";
    return mail($komu, $predmety, $textmailu, $odesilatel);
}


$pro = $_POST['pro'];
$kopie = $_POST['kopie'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$jmeno = $_POST['jmeno'];
$predmet = $_POST['predmet'];
$textmailu = $_POST['textmailu'];

$komu = $pro.", ".$kopie;
$predmety = $predmet.", ".$jmeno. ", ".$telefon;


cs_mail($komu, $predmety, $textmailu, "From: $_POST[email]\r\n");





function detect($s)
{
    if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
        return 'UTF-8';

    if (preg_match('#[\x7F-\x9F\xBC]#', $s))
        return 'WINDOWS-1250';

    return 'ISO-8859-2';
}

echo detect ($jmeno);
echo detect ($telefon);
echo detect ($textmailu);



?>
Alphard
Profil
Ten rozsypaný čaj vidíte v důsledku svých úprav, kdy mažete "zbytečné řádky" a možná rozbíjíte ještě něco jiného. Je to způsobeno base64_encode() a chybějící hlavičkou. Původní script by měl fungovat.
Honza84
Profil *
Bohužel, i když byl kód přesně dle vzoru, nefungovalo to.
Davex
Profil
Honza84:
Použij celý kód z PHP FAQ. V kódu [#11] nemáš žádnou MIME hlavičku, ve které by měl být definován formát a kódování e-mailu. Bez ní to fungovat nemůže.
Jeffery
Profil *
To je psycho tady :D
Já už snad ani nevím co jsem to vlastně chtěl....
Kecám...php, js, asp a kdejaké jiné funkce mi přijdou jako vyšší level na které nešahám.
Spokojit se musím pouze s html, které trochu umím.
Měl bych na Vás prosbičku....potřebuju udělat formulář....k tomu jsem se už dopracoval, a ty data poslat na můj email. Jsou 2 varianty...skrz email odesilatele a nebo poslat to na nějaký php soubor, který to asi nějak zázračně odešle na můj email.
Nemáte někdo tady něco takového sestrojeného jednoduchého? Tzn. soubor PHP, který na můj email pošle vyplněné údaje z formuláře?

Našel sem si jeden php soubor, ale za boha ho nemožu stáhnout z toho webu.
Prosím....
amater77
Profil *
mas na mysli treba tohle ???
(to je varianta mit PHP soubor)

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">

<title>Vysledek zpracovani a odeslani prihlasky:></title>
</head>

<body>
<h4>Zpracovani a odeslani prihlasky</h4>

<?php
$vysledek = "Jméno dítěte: {$_POST['jmeno1']}\r\n";
$vysledek .= "Rodné číslo: {$_POST['rodcis']}\r\n";
$vysledek .= "Telefon rodiče: {$_POST['telefon']}\r\n";
$vysledek .= "Kontaktní email: {$_POST['email']}\r\n";
$vysledek .= "Zpráva - poznámka: {$_POST['zprava']}\r\n";
if ( Mail("info@domena.cz", $_POST['jmeno1'], $vysledek))
echo "<h3>Vase prihlaska byla uspesne odeslana. Dekujeme.</h3>";
else echo "Prihlasku se nepodarilo odeslat !!! Prosim kontaktujte nas primo na uvedeny email.";
?>

</body>
</html>

Formular obsahuje 5 poli,
Tohle mi fungovalo, dokud mi freehosting neupgradoval PHP na verzi 5.3
(a tam je funkce MAIL vetsinou zakazana)
Treba to pomuze.

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:

0