Autor Zpráva
Jirsak
Profil
Chtel bych poprosit o radu, jak nejjednoduseji pres PHP odeslat informaci o zaskrtnutych checkboxech. Na strance mam napriklad 50 checkboxu (toto cislo se postupem casu bude menit). A uzivatel zaskrtne pouze 4 checkboxy. Informace o zaskrtnutych checkboxech chci nechat PHP zaslat na mail.

Je mozne PHP nechat zaroven zaslat informaci na mail, a zaroven nechat na strace secist pocet oznacenych checkboxu? Toto cislo zaskrtnutych checkboxu by se objevilo na strance "vyber_ok.html" (stranka, na kterou se uzivatel dostane, pokud odeslani probehlo v poradku)

Dekuji za radu,
Jakub Jirsak
rada_losik
Profil
Já s checkbox pracuji jako s polem:
<input type='checkbox' name='check[]' value='check01' />

<input type='checkbox' name='check[]' value='check02' />
....


Po odeslání se ti normálně vytvoří pole jako kdyby jsi napsal:
<?php

$check[] = "check01";
$check[] = "check02";
...
?>
Jirsak
Profil
Ja vim, ze je to jiste pro vetsinu pochopitelne. Chtel bych ale poprosit o detailnejsi vysvetleni. Proto uvadim konkretni pripad:

Mam v HTML pripravene napriklad pole (input type="text"), tato pole "obsluhuji" PHP script:

<?php
if (preg_match('/^(?:(?:[!#-\'*+-\/0-9=?A-Z^-¦]+|"[^"\\\n\x80-\xFF]")+\.) *(?:[!#-\'*+-\/0-9=?A-Z^-¦]+|"[^"\\\n\x80-\xFF]")+@((?:[a-z0-9](?:[a-z 0-9-]{0,63}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,63}[a-z0-9])?)$/i',$_P OST['Email'],$matches) and strlen($matches[1]) <= 255):
$body = "Příjmení: $_POST[Prijmeni]\n";
$body .= "Jméno: $_POST[Jmeno]\n";
$jmeno = str_replace('<','',$_POST['Příjmení']);
$jmeno = str_replace('>','',$jmeno);
mail('nejaky@mail.cz','Nekdo mi pise.',$body,"From: \"$jmeno\" <$_POST[Email]>\nContent-Type: text/plain; charset=\"windows-1250\"\nContent-Transfer-Encoding: 8bit\n");
header ("Location: objednat_ok.html");
exit;
else:
header ("Location: objednat_fail.html");
exit;
endif;
?>


Tento script zaridi, ze mi na mail prijde napriklad toto:
Příjmení: Novák
Jméno: Petr

Ted bych k tomu chtěl přidat, aby když ve formuláři někdo klikne na několik třeba z těch 50 checkboxů, přišlo mi například toto:
Příjmení: Novák
Jméno: Petr
Vybral: 1, 10, 15, 16

Dekuji,
Jakub Jirsak
rada_losik
Profil
Pokud můžeš použít PHP 5 tak:

foreach($check as $c){
$oznaceno .= $c. " | ";
}
...
$body .= $oznaceno;
...


Toto by mělo fungovat pokud jsem se někde překlik tak sorry
Jirsak
Profil
Tak jsem to zkusil, ale asi to pisi spatne. Vzhledem k tomu, ze jsem s PHP zacal prave dnes, chtel bych poprosit o napovedu jako pro zacatecnika. Aplikaci hostuji na pipni.cz (bohuzel), dival jsem se na jejich web a jestli to chapu spravne, maji tam mit PHP 5

Dekuji
rada_losik
Profil
Ale celkem zašnu nad tou podmínkou to jsi psal sám? Co to znamená odešle si ten mail?
Jirsak
Profil
Mail se odesle. A dokonce i prijde do schranky. (V tom scriptu je par mezer navic, jak jsem to vykopiroval z HomeSite, takze primo takhle okopirovany asi funkcni nebude. Kdyz se vymaznou mezery navic, mel by jit.)

Ta podminka je evidentne od nekoho zkuseneho. Bylo mi doporuceno ji pouzit. Osobne se domnivam tak po prvnim odhadu, ze by mohlo jit o omezeni emailove adresy, tak aby tam nekdo nepsal koniny. Zkratka si myslim, ze je to nejake propracovane overeni spravnosti emailove adresy. Ta nemuze obsahovat plno znaku, nesmi byt delsi nez 256 znaku (pokud se nepletu) atp.

Jak jsem napsal, neni to ode me. Ale zbytku jsem se pokusil pochorozumet.

Jakub

P.S.: mozna je to s cim se trapim jen prace s checkboxy. Chtel jsem udelat take treba checkbox, u ktereho by se mi odeslalo na mail: Chcekbox byl zaskrtnut: Ano/Ne
Jirsak
Profil
Tak ja si odpovim sam. Podminku v checkboxu jsem vyresil takto:

if ($rozmery_1 = isset($rozmery_1)) {
$body .= "Objednat Rozměry 1: Ano\n";
} else {
$body .= "Objednat Rozměry 1: Ne\n";
}


Ted zkusim vkladat informace z vice checkboxu do pole.
Jirsak
Profil
rada_losik mi poradil dobre. Do zdroje jsem pridal podle jeho navodu:

$body .= "\nVybráno: $_POST[check]\n";
foreach($check as $c){
$oznaceno .= $c. "\n";
}
$body .= $oznaceno;


a funguje to jak ma. Dulezite je dat v HTML na checkbox value="ID_1" a name="check[]", kde ID_1 je treba kod produktu, ktery zakaznik zaskrtl. Dalsi produkt by mel treba ID_2 atd.
rada_losik
Profil
Každopádně když dáš nazev formulářového pole check['boty'] tak index pole této buňky v poli se budou jmenovat "boty". Funguje to normálně jako PHP pole:

$check['boty'] = hodnota;


Výhoda je taková že kdyby jsi chtěl dělat int. obchod tak můžeš dát index Boty a možnosti ano / ne. Tím se ti upraví cyklus na (ale nemůsí):

foreach($check as $index => $hodnota){
$oznaceno .= "\$check[" .$index. "] = " .$hodnota. \n";
}


Výhoda je taková že se nemusíš orientovat podle ID, produktu ale máš přímo napsaný co si chce koupit. V tvojem případe by ti třebas napsal:

body = ID_1

A id tam máš taky;)
Jirsak
Profil
Aha, dekuji za napovedu.

Ted bych chtel jeste zkusit rozsirit script o to, ze krome toho, ze se vse odesle na mail, chtel bych, aby se vse co "zakaznik" do formulare napsal, zaroven vypsalo na potvrzovaci strance "objednat_ok.html".

Takze by vlastne script udelal to, ze informace z formulare odesle na mail a zaroven preda informaci pro soubor objednat_ok.html, co my vypst.

Take bych chtel zkusit napsat script, ktery by secetl kolik bylo zaskrtnuto checkboxu.

Zkusim to napsat sam, ale kdyby treba nekdo vedel, jak na to, nezlobil bych se, kdyby se pochlubil...

To: rada_losik
Dekuji za rady ktere jsi mi udelil.
rada_losik
Profil

foreach($check as $index => $hodnota){
$oznaceno .= "\$check[" .$index. "] = " .$hodnota. \n";
$pocet_oznacenych_check++;
}


Pokud uživatel neoznačí check tak se ani neodešle. Druhý způsob je:

$pocet_oznacenych_check = count($check)
Jirsak
Profil
Zkusil jsem ten druhy script (je kratsi) a funguje. Dekuji. Chtel jsem jit na to pres array_sum, pak jsem ale prisel na to, ze je to nesmysl, protoze to scita polozky v poli. Takze pro muj ucel k nicemu. No a pak uz tu byl Tvuj script.
rada_losik
Profil
U té potvrzovací strányk můžeš napsat:

foreach($HTTP_POST_VARS as $hodnoty){
echo $hodnoty. "<br />";
}


Toto ti vypíše odeslany hodnoty pomoci metody POST, ale soubor musí být PHP a hodnoty v "POST" musí být ještě uložený:

<form action='zobraz_a_zpracuj.php'>
....
<input type='check' ...>
...
</form>
Jirsak
Profil
Tak jsem to zkusil. Ale nejak asi nevim co kam napsat. Jeste se zkusim nad tim zamyslet jednou...
rada_losik
Profil
Musíš ten formulář odeslat metodou POST. Pokud ti to hlasí chybu tak ji napiš;)
Jirsak
Profil
Tak jsem to nakonec vyresil jinak. Napsal jsem to tak, aby se mail odeslal zaroven pro majitele formulare i pro toho, kdo formular vyplnil. To bude lepsi i obchodne, protoze se tim uz navaze kontakt pres mail.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0