IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jiří Javůrek
Brigádník
Avatar
Jiří Javůrek:16.11.2021 19:07

Ahoj, mam tento kod:

<?php
$hlaska = 'Kontaktní formulář';

$odeslat = true;
$input_list = array ('jmeno', 'email', 'telefon', 'zprava');
foreach ($input_list as $name)
$odeslat &= isset($_POST[$name]) && !empty($_POST[$name]);

if($odeslat)
{
$hlavicka = array();
$hlavicka[] = 'From:' . $_POST['email'];
$hlavicka[] = "MIME-Version: 1.0";
$hlavicka[] = "Content-Type: text/html; charset='utf-8'";
$adresa = '[email protected]';
$predmet = 'Nová zpráva z mailformu';
$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava']);
if($neuspech)
{
$hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
}
else
$hlaska = 'Formulář je špatně vyplněný.';
}
echo ("$neuspech");

$to = '[email protected]';
$subject = 'formular';
$message = $_POST['zprava'];
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: javor.cekuj' . "\r\n" .
'X-Mailer: PHP/' . phpversion(7.4);

mail($to, $subject, $message, $headers);

?>

Chci docílit: a vubec mi na kliknuti tlacitka odeslat nic neodesle. Potreboval bych, aby mi to odeslalo vyplnene udaje do mailu. Nevim, jestli je chyba v PHP, nebo HTML nedokaze poznat, jakou akci udelat. Diky

Odpovědět
16.11.2021 19:07
Vše jde, když se chce.
Avatar
Václav Methez:29.11.2021 1:45

A co třeba přidat kód formuláře? Předpokládám že to odesíláš přes JS co když je chyba tam?

 
Nahoru Odpovědět
29.11.2021 1:45
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:29.11.2021 8:48

Podle mne, on ma nejakou pseudoverzi, co nejak poskladal... Takovou mam taky :)

<?php
function abc($post=null)
        {
        // !!! tohle ty tam napriklad vubec neresis,
        //     zda uz bylo kliknuto na tlacitko odeslat, pak odesilas prazdne udaje, nejspis, uz pri nacteni stranky
        // byl formular odeslan?
        // ! Pozn: V html kodu mas <form method="post">, ne <form>, ne <form method="get">
        $sended = is_array($post) && count($post)>0;
        // $sended = is_array($post) && isset($post['xyz']) && isset($post['xyz']=='hodnota') // lepe neco takoveho
        if (!$sended)
                {
                echo 'Html formular nebyl odeslan na server.';
                return;
                }

        // precti form
        $names = array(
//              'notify'  => '',
                'jmeno'   => 'Jméno a pøíjmení',
                'telefon' => 'Telefoní èíslo',
                'email'   => 'Emailová adresa',
                'prijezd' => 'Datum pøíjezdu',
                'odjezd'  => 'Datum odjezdu',
                'osoby'   => 'Poèet osob',
                'pokoj'   => 'Typ pokoje',
                'poznamka'=> 'Pøání a upøesnìní',
                'karta'   => 'Èíslo platební karty',
                'kartajmeno'    => 'Jméno držitele karty',
                'kartaplatnost' => 'Platnost karty'
                );
        $form = array();
        foreach ($names as $key=>$value)
                {
                $form[$key] = isset($post[$key]) ? $post[$key] : ''; // viz ten clanek, ten isset je tam nutny, ty to mas bez neho
                }

        // zde dopln validaci udaju - kontrola, zda jsou vyplneny spravne, jinak ti zahlti mail spam s viagrou
        // vysledkem bude $validated = true nebo false
        $validated = true;
        if (!$validated)
                {
                echo 'Html formular je spatne vyplneny.';
                return;
                }

        // mail
//      $from      = $form['email'];
        $from      = "[email protected]";
        $reply     = $form['email'];
        $to        = "[email protected]";
        $subject   = "Rezervace od ".$form['jmeno'];

        $headers   = array();
        $headers[] = "From: $from";
        $headers[] = "Reply-To: $reply";
        $headers[] = "Return-To: $reply";
//      if ($form['notify']==true)
//              {
//              $headers[] = "Disposition-Notification-To: $from";
//              $headers[] = "Return-Receipt-To: $from";
//              }
        $headers[] = 'MIME-Version: 1.0';
        $headers[] = 'X-Mailer: PHP/' . phpversion();
        $headers[] = 'Content-type: text/plain; charset=utf-8';
        $headers[] = 'Content-Transfer-Encoding: 8-bit';
        $headers   = implode(PHP_EOL, $headers);

        $arr = array();
        foreach($form as $key=>$value)
                {
                $arr[] = $names[$key].': '.$value;
                }
        $message = implode("\n", $arr);

        $sended = mail($to, $subject, $message, $headers);
        if(!$sended)
                {
                echo "Nastala chyba. Prosím opakujte rezervaci"; // !!! tady jsi mel else a zadny prikaz
                return;
                }
        echo "Email byl odeslán";
        }
abc($_POST);
?>

Je to videt uz podle toho, ze tam mota pate pres devate. Nejspis skolni ukol, ke kteremu se opet dostal a uz by to potreboval odevzdat a uz by potreboval, aby za nej nekdo cely kod napsal :) Jeste asi neodeslal nikdy nikomu mail ani neklikl na funkci zobrazit zdrojovy kod mailu.
Kdyz se podivas na jeho kod, tak naprosto nahodile sklada kousicky kodu. ma tam promenou uspech, ale zepta se na ni v ifku jako if($ne**uspech**). Je to nepozornost? Je nepozorny v dalsich 20 pripadech take? Spis mi to prijde jako lenost. Protoze, preci, kdyby jen zkopiroval nejaky priklad z dokumentace a pokusil se ho rozchodit, tak se tu nemusi ptat.

function OdesliMail($from, $to, $subject, $message) // http://php.net/mail - Example #3 Sending mail with extra headers as array
{
$headers = array(
    'From' => $from,
    'Reply-To' => $from,
    'Content-Type' => "text/html; charset='utf-8'",
    'X-Mailer' => 'PHP/' . phpversion()
    );
$uspech = mail($to, $subject, $message, headers);
$hlaska = $uspech ? 'Email byl úspěšně odeslán, brzy vám odpovíme.' : 'Formulář je špatně vyplněný.';
var_dump( $uspech, $hlaska);
}



$from = '[email protected]'
$to = '[email protected]';
$subject = 'Kontaktní formulář';

$callback = fn(string $k, string $v): string => "$k: $v";  //https://www.php.net/manual/en/function.array-map.php - Example #7 array_map() - associative arrays
$list = array_map(null, array_keys($_POST), array_values($_POST));
$message = implode("\n", $list); // php.net/implode

OdesliMail($from, $to, $subject, $message);
OdesliMail($to, $to, $subject, $message);
Editováno 29.11.2021 8:49
 
Nahoru Odpovědět
29.11.2021 8:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.