Autor Zpráva
magnus87
Profil
Ahojte, mam formular v ktorom je prvou volbou volba mesta resp volba pobocky

<select class="element select" id="element_4" name="element_4"> 
<option value="Banská Bystrica" selected="selected">Banská Bystrica</option>
<option value="Brezno" >Brezno</option>
<option value="Ružomberok" >Ružomberok</option>
<option value="Liptovský Mikuláš" >Liptovský Mikuláš</option>
</select>

potrebujem formular odoslat na mail prislusnej pobocky podla volby uzivatela. Tj mesto = jedna pobocka = jeden mail. Takto ako to je dokazem odosielat len na jeden mail bez ohladu na zvolenu pobocku. Je to moje prve php takze fakt nemam tusenie ako by som to urobil:/ Dakujem za tipy/pomoc/cokolvek:)

<?php
$prijemca = "bbystrica@domena.sk";
$element_1_1 = $_POST['element_1_1']; //krsne meno
$element_1_2 = $_POST['element_1_2']; //priezvisko
$element_4 = $_POST['element_4']; //pobocka
$element_5 = $_POST['element_5']; //jazyk
$element_3 = $_POST['element_3']; //iny jazyk
$element_2 = $_POST['element_2']; //tel c
$element_6 = $_POST['element_6']; //uroven
$element_7 = $_POST['element_7']; //email

if ($element_1_1 && $element_1_2 && $element_4 && $element_5 && $element_2 && $element_6 && $element_7){
$hlavicka = "From: " . $odosielatel . " <" . $element_7 . ">\r\n"  
. "Content-Type: text/plain; charset=windows-1250; format=flowed\n"  
. "MIME-Version: 1.0\n" 
. "Content-Transfer-Encoding: 8bit\n" 
. "Return-Path: <" . $element_7 . "> \n" 
. "X-Mailer: PHP\n"; 
mail("$prijemca", "$element_1_1 $element_1_2 $element_5 $element_3", "$element_1_1 $element_1_2 má záujem o ukážkovú hodinu na pobočke $element_4. Zaujíma sa o jazyk $element_5 $element_3 a jeho približná úroveň je $element_6. Kontaktujte ho prosím na telefónnom čísle $element_2 alebo mailom na adrese $element_7.", 
"from: $element_7");
echo "Váš email bol úspešne odoslaný. Naši pracovníci Vás budú kontaktovať na vašom telefónnom čísle. Ďakujeme za prejavený záujem.";
}
elseif (($element_1_1 && $element_1_2 && $element_4 && $element_5 && $element_2 && $element_6 && $element_7) == false){
echo "Váš email nebol odoslaný. Nezadali ste všetky povinné údaje. Prosím vyplňte prihlášku znovu. Ďakujeme";
}
?>
quatzael
Profil
magnus87:
Proměnné se nedávají do uvozovek, naopak obyčejný text ano! Ty to máš přesně naopak!!
Jednotlivé části textu se spojují tečkou.
xROAL
Profil
switch($element_4){
case "Banská Bystrica":$prijemca="bbystrica@domena.sk";
break;
case "Brezno":$prijemca="brezno@domena.sk";
break;
case "Ružomberok":$prijemca="ruzomberok@domena.sk";
break;
case "Liptovský Mikuláš":$prijemca="lmikulas@domena.sk";
}
Alphard
Profil
Takhle přece ne, když se změní název, musel by se upravovat milion míst. Vytvořte asociativní pole [mail1 => nazev1, mail2 => nazev2], z toho vygenerujete formulář i následné zpracování.

magnus87:
Ta funkce mail() je zapsána velmi nepřehledně, když jsou argumenty tak dlouhé, je vhodné je předem sestavit do nějaké rozumně pojmenované proměnné.
magnus87
Profil
quatzael:
ok, zapracujem na tom trošku.

xROAL:
No recipient addresses found in header

Alphard:
Neviem to tak urobiť, fakt úplne s tým celým len začínam...áno, uvedomujem si že funkcia mail() je hodne neprehľadná ale to mi zatiaľ nevadí, neobmedzuje to funkčnosť.
quatzael
Profil
Ty value - hodnoty si u těch optionů přepiš (pokud je ještě teda nepotřebuješ k něčemu jinýmu).
Takže, aby to bylo nějak takhle:

<select class="element select" id="element_4" name="element_4"> 
<option value="bbystrica" selected="selected">Banská Bystrica</option>
<option value="brezno" >Brezno</option>
<option value="ruzomberok" >Ružomberok</option>
<option value="lmikulas" >Liptovský Mikuláš</option>
</select>

A v PHP si udělej něco takovýho:

<?php
$prijemca = "bbystrica@domena.sk";
$element_1_1 = $_POST['element_1_1']; //krsne meno
$element_1_2 = $_POST['element_1_2']; //priezvisko
$element_4 = $_POST['element_4']; //pobocka
$element_5 = $_POST['element_5']; //jazyk
$element_3 = $_POST['element_3']; //iny jazyk
$element_2 = $_POST['element_2']; //tel c
$element_6 = $_POST['element_6']; //uroven
$element_7 = $_POST['element_7']; //email

$prijemca = $element_4 . "@domena.sk";
$predmet = $element_1_1 . " " . $element_1_2 . " " . $element_5 . " " . $element_3;
$zprava = "$element_1_1 $element_1_2 má záujem o ukážkovú hodinu na pobočke $element_4. Zaujíma sa o jazyk $element_5 $element_3 a jeho približná úroveň je $element_6. Kontaktujte ho prosím na telefónnom čísle $element_2 alebo mailom na adrese $element_7.";
$header = "From: " . $element_7;

mail($prijemca, $předmět, $zprava, $header);
magnus87
Profil
Trošku dosť neskôr som sa k tomu dostal, každopádne po kozmetických úpravách - diakritika v premennej (riadok 17) a odstránenie riadku 2 to funguje presne ako som potreboval. Ďakujem quatzael
magnus87
Profil
Tak nakoniec som to celé dal takto:

<?php
$krsne_meno = $_POST['krsne_meno']; 
$priezvisko = $_POST['priezvisko'];
$pobocka = $_POST['pobocka'];
$jazyk = $_POST['jazyk'];
$jazyk2 = $_POST['jazyk2'];
$telc = $_POST['telc'];
$uroven = $_POST['uroven'];
$email = $_POST['email'];
if ($pobocka=="Banská Bystrica") $prijemca="bbystrica";
if ($pobocka=="Brezno") $prijemca="brezno";
if ($pobocka=="Ružomberok") $prijemca="ruzomberok";
if ($pobocka=="Liptovský Mikuláš") $prijemca="lmikulas";
if ($krsne_meno && $priezvisko && $pobocka && $jazyk && $telc && $uroven && $email){
$prijemca = $prijemca . "@domena.sk";
$predmet = $krsne_meno . " " . $priezvisko . " " . $jazyk . " " . $jazyk2;
$sprava = "$krsne_meno $priezvisko má záujem o ukážkovú hodinu na pobočke $pobocka. Zaujíma sa o jazyk $jazyk $jazyk2 a jeho približná úroveň je $uroven. Kontaktujte ho prosím na telefónnom čísle $telc alebo mailom na adrese $email.";
$header = "From: $email\r\n" . "MIME-Version: 1.0\r\n" . "Content-Type: text/plain; charset=UTF-8\r\n" . "Content-Transfer-Encoding: 8bit\r\n";
mail($prijemca, $predmet, $sprava, $header);

echo "Váš email bol úspešne odoslaný. Naši pracovníci Vás budú kontaktovať na vašom telefónnom čísle. Ďakujeme za prejavený záujem.";

}

elseif (($krsne_meno && $priezvisko && $pobocka && $jazyk && $telc && $uroven && $email) == false){

echo "Váš email nebol odoslaný. Nezadali ste všetky povinné 
údaje. Prosím vyplňte prihlášku znovu. Ďakujeme";

}

?>

...aby mi option value z formulára išlo do mailu vo forme Banská Bystrica a nie bbystrica...funguje to tak ako treba, len by ma zaujímalo či je takéto riešenie OK, prípadne ako by ste to realizovali?
abc
Profil
Ten option by šel vyřešit o něco elegantněji:
static $pobocky = array(
    "bbystrica" => "Banská Bystrica",
    "brezno" => "Brezno",
);
$prijemca = $pobocky[$_POST['pobocka']];

IF na řádku 14:
 if (isset($krsne_meno, $priezviesko, ...))

16. řádek, aby se případně lépe přidávalo další parametry:
$predmet = implode(" ", array($krsne_meno, $priezviesko, $jazyk, $jazyk2);
Podívej se na Heredoc
$sprava = <<<HEREDOC
$krsne_meno $priezvisko má záujem o ukážkovú hodinu na pobočke $pobocka. 
Zaujíma sa o jazyk $jazyk $jazyk2 a jeho približná úroveň je $uroven. 
Kontaktujte ho prosím na telefónnom čísle $telc alebo mailom na adrese $email
HEREDOC;

Mělo by být ošetřené i neodeslání e-mailu:
if (mail($prijemca, $predmet, $sprava, $header)) {
    echo "Váš email bol úspešne odoslaný. Naši pracovníci Vás budú kontaktovať na vašom telefónnom čísle. Ďakujeme za prejavený záujem.";
}  else {
    echo "E-mail se nepodařilo odeslat, zkuste to prosím znovu";
}

Jsou to většinou takové kosmetické úpravy, které se zase někomu můžou líbit více jinak.
Dál bych doporučil začít používat něco s automatickým formátováním kódu (např. Netbeans), jelikož vůbec neodsazujete.

Dodatek:
25. řádek - podmínka je takto špatně:
buď
} elseif (($krsne_meno || $priezvisko || $pobocka || $jazyk || $telc || $uroven || $email) == FALSE)
nebo přes !isset
nebo třeba jen přes else, jelikož to má být jen opak té první podmínky...

A ještě drobná poznámka k těm ifům bez složených závorek.
Takto se to dá ještě docela přečíst:
if ($pobocka=="Banská Bystrica") $prijemca="bbystrica";
Ovšem nedávno jsem přebral projekt, ve kterém původní programátor psal tyto ify na 2 řádky
if ($pobocka=="Banská Bystrica") 
  $prijemca="bbystrica";
A to už se samozřejmě uprostřed kódu čte blbě, takže jsem si na ify bez složených závorek pomalu ale jistě vypěstoval alergii...
Věřím, že nejsem sám proto bych doporučil zásadně používat delší, ale přehlednější zápis:
if ($pobocka=="Banská Bystrica") {
   $prijemca="bbystrica";
}
magnus87
Profil
abc:
Ďakujem. Verím že by to bolo krásne a elegantné riešenie ale nech sa snažím ako chcem, nerozbehal som to :// .....časom keď sa viac naučím asi....
romano
Profil
quatzael:
Ty value - hodnoty si u těch optionů přepiš (pokud je ještě teda nepotřebuješ k něčemu jinýmu).
Takže, aby to bylo nějak takhle:
>
1
2
3
4
5
6
>
<select class="element select" id="element_4" name="element_4">
<option value="bbystrica" selected="selected">Banská Bystrica</option>
<option value="brezno" >Brezno</option>
<option value="ruzomberok" >Ružomberok</option>
<option value="lmikulas" >Liptovský Mikuláš</option>
</select>
>
>
A v PHP si udělej něco takovýho:
>
1
2
3
4
5
6
7
8
9
10
11
......

<select class="element select" id="element_4" name="element_4"> <option value="bbystrica" selected="selected">Banská Bystrica</option> <option value="brezno" >Brezno</option> <option value="ruzomberok" >Ružomberok</option> <option value="lmikulas" >Liptovský Mikuláš</option> </select>

<select class="element select" id="element_4" name="element_4"> <option value="bbystrica" selected="selected">Banská Bystrica</option> <option value="brezno" >Brezno</option> <option value="ruzomberok" >Ružomberok</option> <option value="lmikulas" >Liptovský Mikuláš</option> </select>

<select class="element select" id="element_4" name="element_4"> <option value="bbystrica" selected="selected">Banská Bystrica</option> <option value="brezno" >Brezno</option> <option value="ruzomberok" >Ružomberok</option> <option value="lmikulas" >Liptovský Mikuláš</option> </select>
[#6] quatzael, quatzael, quatzael

<select class="element select" id="element_4" name="element_4"> <option value="bbystrica" selected="selected">Banská Bystrica</option> <option value="brezno" >Brezno</option> <option value="ruzomberok" >Ružomberok</option> <option value="lmikulas" >Liptovský Mikuláš</option> </select>

<select class="element select" id="element_4" name="element_4"> <option value="bbystrica" selected="selected">Banská Bystrica</option> <option value="brezno" >Brezno</option> <option value="ruzomberok" >Ružomberok</option> <option value="lmikulas" >Liptovský Mikuláš</option> </select>
quatzael:

Zdravím, viem že forum už dlhšie nie je aktívne, ale potrebujem riešiť podobnú požiadavku - na web pod Wordpress vložiť kontaktný formulár (meno,adresa, telefón, email užívateľa, MESTO) a podľa voľby mesta zaslať na email. ALE NAVIAC je pre každé mesto daný zoznam emailových adries, na ktoré má byť formulár zaslaný podľa nasledovného pravidla:
- ked prvy zaujemca vyplni formular na webe a zvoli v nom napr. okres Bratislava, email bude odoslany na adresu c.1 zo zoznamu adries v skupine Bratislava
- ked druhy zaujemca vyplni formular a zvoli okres Bratislava, email bude odoslany na adresu c.2 zo zoznamu adries v skupine Bratislava
- takto by boli formulare odosielane na adresy zo zoznamu pre okres Bratislava, ked sa dostaneme k poslednej adrese v zozname, dalsi formular bude odoslany na prvu adresu zo zoznamu - a znova dookola

Zaroven by bolo dobre mat centralny prehlad o odoslanych formularoch (datum vyplnenia, udaje zaujemcu, cielova emailova adresa).

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: