Autor Zpráva
moom
Profil
Dobrý den, prosím, prosím, prosím o radu :)
Potřebuji udělat formulář na stránky a pokaždé jsem řešil
jenom odesílání emailu, ale tentokrát potřebuji vybírat
políčka pomoci RADIO a SELECT a netuším jak přidat
tyto pole do PHP.

Mám tento zdrojový kód formuláře:

<fieldset>
    <form action="php/kalkulace.php" method="post">
        <ul>
            <li>
                <label>Velikost plochy</label>
                <input type="text" size="6" name="plocha" />
                m2</li>
            <li>
                <label>Barevné provedení</label>
                <input type="radio" name="barva" value="natur" />
                Přírodní betonová šeď<br />
                <input type="radio" name="barva" value="barvene" />
                Barevný odstín dle vzorníku RAL </li>
            <li>
                <label>Typ plochy</label>
                <input type="radio" name="typ" value="Stěna" />
                Stěna<br />
                <input type="radio" name="typ" value="Podlaha" />
                Podlaha
            </li>
            <li>
                <label>Lokalita</label>
                <select name="lokalita">
                    <option value="Praha">Praha</option>
                    <option value="Brno">Brno</option>
                </select>
            </li>
            <li>
                <label>Jméno a Příjmení</label>
                <input name="jmeno" />
            </li>
            <li>
                <label>Váš email</label>
                <input name="email" />
            </li>
            <li>
                <label>Kontaktní telefon</label>
                <input name="telefon" />
            </li>
            <li>
                <label>1+10 = <span class="small">Vyplňte prosím součet</span></label>
                <input name="spam" />
            </li>
            <li>
                <label>Další poznámky</label>
                <textarea name="zprava" cols="40" rows="10"></textarea>
            </li>
            <li>
                <label for="submit">&nbsp;</label>
                <button class="button" type="submit" value="Odeslat">Odeslat</button>
            </li>
        </ul>
    </form>
</fieldset>


a v php mám zatím tento kód, ale už netuším jak do odeslaného emailu přidat
hodnoty zvolené pomocí RADIO tlačítka a pomocí SELECT:

<?
$plocha = iconv("utf-8", "windows-1250", $_POST['plocha']);
$barva = $_POST['barva'];
$typ = $_POST['typ'];
$lokalita = $_POST['lokalita'];
$jmeno = iconv("utf-8", "windows-1250", $_POST['jmeno']);
$email = $_POST['email'];
$telefon = iconv("utf-8", "windows-1250", $_POST['telefon']);
$predmet = iconv("utf-8", "windows-1250", $_POST['predmet']);
$zprava = iconv("utf-8", "windows-1250", $_POST['zprava']);
$spam = $_POST['spam'];

if ($email!="" and $zprava!="" and $spam=="11") {
      
    Mail("mujemail@mujemail.cz", $predmet, 
    "Jmeno:".$jmeno.
    "Plocha:".$plocha.

    "\n".$zprava, 
    "From: " .$email. "\nContent-type: text/plain;charset=windows-1250\n");

    echo "Váše kalkulace byla úspěšně odeslána."; }
    else {
    echo "Váši kalkulaci se nepodařilo odeslat; pravděpodobně jste nevyplnili všechny údaje."; }
?>


Nemáte prosím nějakou radu? Prosím, prosím :)
phobos9007
Profil
Ale dyť to tam už máš :)
moom
Profil
Omlouvám se, ale už mně to došlo. Nenapadlo mě, že hodnota VALUE je
vlastně to stejné, co by člověk vyplnil v normálním políčku. Děkuji, děkuji

Ale přece jenom mám prosím otázku, jak můžu přidat zakončení řádku
</br>

mezi jednotlivé hodnoty v emailu. Aby každá byla na jednom řádku.
Konkrétně takto:

Jméno:
Plocha:
Barva:
Typ plochy:
Lokalita:

Text emailu, pokračování textu...
Text emailu, pokračování textu...

Dopsal jsem toto:

<?
$plocha = iconv("utf-8", "windows-1250", $_POST['plocha']);
$barva = iconv("utf-8", "windows-1250", $_POST['barva']);
$typ = iconv("utf-8", "windows-1250", $_POST['typ']);
$lokalita = iconv("utf-8", "windows-1250", $_POST['lokalita']);
$jmeno = iconv("utf-8", "windows-1250", $_POST['jmeno']);
$email = $_POST['email'];
$telefon = iconv("utf-8", "windows-1250", $_POST['telefon']);
$predmet = iconv("utf-8", "windows-1250", $_POST['predmet']);
$zprava = iconv("utf-8", "windows-1250", $_POST['zprava']);
$spam = $_POST['spam'];

if ($email!="" and $zprava!="" and $spam=="11") {
      
    Mail("email@email.cz", $predmet, 
    "Jmeno:".$jmeno.
    "Plocha:".$plocha.
    "Barva:".$barva.
    "Typ plochy:".$typ.
    "Lokalita:".$lokalita.

    "\n".$zprava, 
    "From: " .$email. "\nContent-type: text/plain;charset=windows-1250\n");

    echo "Váše kalkulace byla úspěšně odeslána."; }
    else {
    echo "Váši kalkulaci se nepodařilo odeslat; pravděpodobně jste nevyplnili všechny údaje."; }
?>
moom
Profil
iconv("utf-8", "windows-1250",
toto mně doporučil kámoš, aby se
správně zobrazovala čeština, stejně tak řádek:
"\n".$zprava, 
    "From: " .$email. "\nContent-type: text/plain;charset=windows-1250\n");

ale netuším jestli je to správně :)
phobos9007
Profil
"Jmeno:".$jmeno. "\n" .
"Plocha:".$plocha. "\n" .


A ta čeština je myslím správně.
Stejně bych ti doporučoval přejít na utf-8, jak budeš dělat větší weby, přijde to vhod
moom
Profil
děkuji, děkuji :) a já si celou dobu říkám co znamená to \n

Po pravdě PHP neumím, jenom HTML a CSS, kde
všechno mám UTF-8, ale jak to předělat tady zatím netuším :)

Mohu se prosím zeptat, proč se umísťují ty tečky, to je něco jako oddělení?
phobos9007
Profil
Tečka je spojení, spojujeme řetězce a nebo proměnné dohromady.
Nemůžeme to zapsat bez tečky, nefungovalo by to
moom
Profil
Když mám doplněné řádky:
iconv("utf-8", "windows-1250",

tak se zobrazuje dobře čeština ve vyplněných políčkách
Ale bohužel se nezobrazuje správně čeština, pokud napíši toto:
"Jméno a Příjmení:".$jmeno. "\n" .

Tak v emailu se Jméno a Příjmení zobrazí špatně.

Asi to nechám bez diakritiky :)
Je to složité, prosím, prosím?
A děkuji za vysvětlení tečky, a za čas který mně věnujete.
Segi_L
Profil
tečky sa nemusia dávať pokiaľ sa dávajú zdvojené uvozovky.
"Jméno a Příjmení:$jmeno\n"


(všechno mám UTF-8...)
Máš súbor uložený jako UTF-8? Ak nie tak si ho ulož.
Stránka musí mať kodovanie UTF-8.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Vyhoď funkce
iconv()

Email posielaj tiež v UTF-8
"From: " .$email. "\nContent-type: text/plain;charset=utf-8\n");


Tak by to malo fungovať, aspoň ja to tak mám všade.
moom
Profil
Paráda, děkuji. Odstranil jsem všechny
iconv

a změnil Content-type na utf-8, což vyřešilo všechny problémy.
V meta mám kódování UTF-8 a asi odesílání jako windows-1250
právě dělalo tu neplechu.

Super děkuji :)

Výsledný kód mám tento, pokud by to v budoucnu někoho zajímalo:
<?
$plocha = $_POST['plocha'];
$barva = $_POST['barva'];
$typ = $_POST['typ'];
$lokalita = $_POST['lokalita'];
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$predmet = $_POST['predmet'];
$zprava = $_POST['zprava'];
$spam = $_POST['spam'];

if ($email!="" and $spam=="11") {
      
    Mail("muj@email.cz", $predmet, 
    "Jméno zákazníka: ".$jmeno. "\n" .
    "Telefonní kontakt: ".$telefon. "\n" .
    "Velikost plochy: ".$plocha. "\n" .
    "Barva: ".$barva. "\n" .
    "Typ plochy: ".$typ. "\n" .
    "Lokalita zakázky: ".$lokalita. "\n" .
    
    "\n".$zprava, 
    "From: " .$email. "\nContent-type: text/plain;charset=utf-8\n");
    
    echo "Váše kalkulace byla úspěšně odeslána."; }
    else {
    echo "Váši kalkulaci se nepodařilo odeslat; pravděpodobně jste nevyplnili všechny údaje."; }
?>
moom
Profil
Prosím, mám ještě jednu otázku, dal by se udělat text
Jméno zákazníka boldem a za dvojtečkou opět normální text.
"Jméno zákazníka: ".$jmeno. "\n" .


Stejně tak třeba opačně, že by vyplněný údaj byl boldem
a kategorie Normál.

Jenom, že bych si na závěr úspěšného formuláře rozšířil
možnosti v PHP.

Ještě jednou děkuji za rychlou pomoc a přeji pěkný víkend :)
Segi_L
Profil
No jasne.
Proste klasické html tagy.
"<strong>Jméno zákazníka:</strong> ".$jmeno. "\n" .

Akurát musíš email posielať ako html
"From: " .$email. "\nContent-type: text/html;charset=utf-8\n");
moom
Profil
Paráda, díky :) Dobrá rada. Moc, moc děkuji.
A pokud bych chtěl mít tučně, výsledek zadaného pole,
tak bych to musel udělat jak. Zkouším umístit
.$jmeno.
mezi tagy string, ale hned mě
to hlásí chybu, že mám kód špatně.
Segi_L
Profil
"Jméno zákazníka:<strong>$jmeno</strong>\n"


Zkouším umístit
.$jmeno.mezi tagy string, ale hned mě
to hlásí chybu, že mám kód špatně


musel by si sem hodiť celý riadok, inak nemožem vedieť kde je chyba.
moom
Profil
Paráda, děkuji, děkuji, děkuji. Funguje to dobře. Jenom jsem musel přidat
tečku. Jenom je jediný problém, že najednou se přestanou řádkovat
jednotlivé položky. Pokud nechám místo HTML, PLAIN, tak to řádkuje
dobře. Ale možná, že BOLD formátování je zbytečné. Celý kód mám tento:

<?
$plocha = $_POST['plocha'];
$barva = $_POST['barva'];
$typ = $_POST['typ'];
$lokalita = $_POST['lokalita'];
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$predmet = $_POST['predmet'];
$zprava = $_POST['zprava'];
$spam = $_POST['spam'];

if ($email!="" and $spam=="11") {
      
    Mail("email@email.cz", $predmet, 
    "<strong>Jméno zákazníka:</strong> ".$jmeno. "\n" .
    "Telefonní kontakt :<strong>$telefon</strong>\n".
    "Velikost plochy: ".$plocha. "\n" .
    "Barva: ".$barva. "\n" .
    "Typ plochy: ".$typ. "\n" .
    "Lokalita zakázky: ".$lokalita. "\n" .
    
    "\n".$zprava, 
    "From: " .$email. "\nContent-type: text/html;charset=utf-8\n");
    
    echo "Váše kalkulace byla úspěšně odeslána."; }
    else {
    echo "Váši kalkulaci se nepodařilo odeslat; pravděpodobně jste nevyplnili všechny údaje."; }
?>
Segi_L
Profil
Jasne riadky - tak kedze to nie je plain ale html tak místo
"\n"
daj
"<br>"
moom
Profil
Děkuji, děkuji, děkuji... skáču radostí jako blecha :)
Bejt v hospodě, taj bych tě hned pozval na nejlepší Plzeň
na Malé Straně (U Hrocha) :)

Ještě jednou díky. Funguje to pěkně.

A poslední teoretická otázka :) Myslíš, že je to dobré
posílat jako HTML. Nebo je lepší PLAIN. Lepší podpora, napříč
světem emailových klientů.

No mám radost, před spaním mám konečně funkční formulář
po celodenní práci a to díky vaší pomoci :)
Segi_L
Profil
Myslíš, že je to dobré
posílat jako HTML. Nebo je lepší PLAIN. Lepší podpora, napříč
světem emailových klientů.

Ja to zatiaľ neriešim. Posielam v html. Ak sa mi niekto bude sťažovať, tak to budem riešiť.

v plainu máš istotu, že ti to zobrazí každý klient.
moom
Profil
Paráda, děkuji :) děkuji
moom
Profil
Mohu prosím ještě jednu otázku. Teď si můžu pomocí RADIO selekce
vybrat za A za B, nebo za C. Ale co když někdo preferuje volbu
A i B, nebo dokoce všechny tři...

Jak prosím postupovat? Musím ve formuláři oddělit (třeba pomocí čísla)
jednotlivá políčka. Třeba takto:

<input type="radio" name="typ1" value="Stěna" />
<input type="radio" name="typ2" value="Stěna" />
<input type="radio" name="typ3" value="Stěna" />


Ale jak to potom umístím do PHP, musím pro každý vytvořit toto:

$typ1 = $_POST['typ1'];
$typ2 = $_POST['typ2'];
$typ3 = $_POST['typ3'];


Ale jak to zase sečtu tady:

Mail("email@email.cz", $predmet, 
    "Jméno zákazníka: " . $jmeno . "\n" .
    "Telefonní kontakt : " . $telefon . "\n" .
    "Velikost plochy: " . $plocha . "\n" .
    "Barva: " . $barva . "\n" .
    "Typ plochy: " . $typ . "\n" .
    "Lokalita zakázky: " . $lokalita . "\n" .


Nemáte prosím ještě jednu radu :)
Segi_L
Profil
Mal by si si preštudovať, aký input služi na čo.
Takto by to šlo, ale to by si ich označil, ale už nie odznačil.

V tomto prípade použi Checkbox.

<input type="checkbox" name="typ[]" value="Stěna">
<input type="checkbox" name="typ[]" value="Podlaha">


Príklad1 - zaškrtnuté oba
Pri odoslani formu sa ti odošle pole typ[] ktore bude obsahovať oba hodnoty
$_POST['typ'][0] = "Stěna";
$_POST['typ'][2] = "Podlaha";

$typ = implode('+', $_POST['typ']);
//$typ = "Stěna+Podlaha"

Príklad2 - zaškrtnuté "Stěna"
Pri odoslani formu sa ti odošle pole typ[] ktore bude obsahovať jednu hodnotu
$_POST['typ'][0]= "Stěna";
$typ = implode('+', $_POST['typ']);
//$typ = "Stěna"

Príklad3 - zaškrtnuté "Podlaha"
Pri odoslani formu sa ti odošle pole typ[] ktore bude obsahovať jednu hodnotu
$_POST['typ'][0]= "Podlaha";
$typ = implode('+', $_POST['typ']);
//$typ = "Podlaha"
moom
Profil
No to je nádhera. Děkuji, děkuji, děkuji :)
Ani nechápu jak jsem jsem chtěl použít Radio místo Checkbox.
Jsem to ale knedla :)

Takže finální PHP mám toto, pokud by to někdy někdo v budoucnu
zajímalo:
<?
$plocha = $_POST['plocha'];
$barva = $_POST['barva'];

$typ = implode('+', $_POST['typ']);

$lokalita = $_POST['lokalita'];
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$zprava = $_POST['zprava'];
$spam = $_POST['spam'];

if ($jmeno!="" and $email!="") {
	
    Mail("email@email.cz", "Kalkulace", 
    "<strong>Jméno zákazníka: </strong>" . $jmeno . 
    "<br><strong>Telefonní kontakt: </strong>" . $telefon . 
    "<br><strong>Velikost plochy: </strong>" . $plocha . 
    "<br><strong>Barva: </strong>" . $barva . 
    "<br><strong>Typ plochy: </strong>" . $typ . 
    "<br><strong>Lokalita zakázky: </strong>" . $lokalita . "<br>" .
				    
    "<br>".$zprava, 
    "From: " .$email. "\nContent-type: text/html;charset=utf-8\n");

    echo "Vaše kalkulace byla úspěšně odeslána."; 
    }
    else {
    echo "Váši kalkulaci se nepodařilo odeslat; pravděpodobně jste nevyplnili všechny údaje."; 
    }
?>
moom
Profil
V záchvatu radosti musím napsat, že v PHP začínám vidět netušené
možnosti. Nějak ovládám HTML, CSS, ale PHP by člověka pošouplo
o kus dál.

Jenom si nejsem jistý, jestli se to mám ještě učit, jestli to není na
úzkou specializaci. Každopádně jsem si už půjčil v knihovně od
Jakuba Macha knihu PHP pro úplné začátečníky :)

Jdu najít co znamená implode a co přesně znamenají ty hranaté
závorky v INPUT tagu:

<input type="checkbox" name="typ[]" value="Stěna">


Ještě jednou děkuji za pomoc a čas.

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: