Autor | Zpráva | ||
---|---|---|---|
akali Profil * |
#1 · Zasláno: 30. 8. 2010, 16:45:22
Ahoj, chci po odeslání mailu přesměrovat uživatele na určitou stránku
a mám takovejto kód 1
If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers))
echo "odeslano";
else{
echo "Objednávka se <strong>nepodařila odeslat</strong> kvůli nevyplnění těchto povinných údajů";
a podmínku, která je nejspíš nefunkční If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers)){ If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers)){
header("Location: odeslano.php?hotovo");
}
Jenže stránka se přesměruje hned při načtení a ne až po odeslání mailu :( Pomohl by někdo? |
||
mckay Profil |
#2 · Zasláno: 30. 8. 2010, 16:49:40
akali:
Email se odešle. Jenom se stránka hned přesměruje. Zkus si přečíst něco o meta tagu refresh. Můžeš vypsat hlášku a přesměrovat. |
||
akali Profil * |
#3 · Zasláno: 30. 8. 2010, 16:59:09
Email se neodešle, protože ani nevidím formulář na vyplňování. Z té stránky, kde je ten formulář se to hned přehodí na stránku odeslano.php?hotovo
|
||
panther Profil |
#4 · Zasláno: 30. 8. 2010, 17:44:03
akali:
tak si tam přidej ještě podmínku, zda byl odeslán formulář (např. isset pro odesílací tlačítko). |
||
akali Profil * |
#5 · Zasláno: 30. 8. 2010, 17:50:07
Jo, to se nepřesměruje hned, ale po kliknutí na "odeslat" bez ohledu na to, zda byly vyplněna všechna políčka.
|
||
panther Profil |
#6 · Zasláno: 30. 8. 2010, 17:51:44
akali:
nebaví mě věštit, dej sem větší kus PHP kódu, ne jen ten dvojřádek (ten je sám o sobě v pořádku). HTML formuláře sem taky dávat nemusíš. |
||
Medvídek Profil |
#7 · Zasláno: 30. 8. 2010, 17:54:30
akali:
Chtělo by si to nastudovat podmínky :) 1if(odešle formulář){ if(odešle formulář){
if(je vše správně vyplněno){
if(odeslán mail){
přesměruju
}
else{
chyba přesměrování
}
}
else{
chyba vyplnění formuláře & zobrazim formulář
}
}
else{
zobrazim formulář
} |
||
akali Profil * |
#8 · Zasláno: 30. 8. 2010, 17:58:15
Tak tady přidávám celý kód
1<?php <?php
if (isset($_POST['odeslano'])) {
If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers)){
header("Location: odeslano.php?hotovo");
}}
?>
Formuláře a ostatní HTML kód
<?php
If($_POST['odeslano']) {
if (Empty($_POST['jmeno']))
echo "chybí jmeno<br>";
if (Empty($_POST['prijmeni']))
echo "chybí prijmeno<br>";
if (Empty($_POST['email']))
echo "chybí email<br>";
if (Empty($_POST['mesto']))
echo "chybí mesto<br>";
if (Empty($_POST['ulice']))
echo "chybí ulice<br>";
if (Empty($_POST['psc']))
echo "chybí psc<br>";
$jmeno = $_POST['jmeno'];
$prijmeni = $_POST['prijmeni'];
$email = $_POST['email'];
$ulice = $_POST['ulice'];
$psc = $_POST['psc'];
$zprava = $_POST['zprava'];
$telefon = $_POST['telefon'];
$predmet = 'Objednávka';
$zprava .= "\n\n Jméno:".$jmeno;
$zprava .= "\n Příjmení:".$telefon;
$zprava .= "\n e-mail:".$email;
$zprava .= "\n ulice a čp:".$ulice;
$zprava .= "\n PSČ:".$psc;
$zprava .= "\n Telefonní číslo:".$telefon;
// předmět s diakritikou
$clearsubject = $predmet;
$encodedsubject = base64_encode ($clearsubject);
$predmet = "=?utf-8?B?$encodedsubject?=";
//nastavení mailu
$headers = "MIME-Version: 1.0\r\n";
$headers.= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers.= "Content-Transfer-Encoding: 8bit\r\n";
$headers.= "From: $email\r\n";
echo "<br>";
If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers)) echo "odeslano";
else{
echo "neodesláno";
} }
?> |
||
panther Profil |
#9 · Zasláno: 30. 8. 2010, 18:06:38
akali:
a divíš se, že to nefunguje? Teda funguje, ale jinak, než chceš. Pokud kliknu na odesílací tlačítko, odešli email a přesměruj. Kontrola je až po přesměrování, logicky k ní tedy nedojde. Script se zpracovává, trochu překvapivě, shora dolů. |
||
Medvídek Profil |
#10 · Zasláno: 30. 8. 2010, 18:09:48
1. Formulář je lepší pro přehlednost mít v samostatném souboru (formular.php) a dle potřeb ho includovat.
2. Je celkem zbytečné dělat toto: $jmeno = $_POST['jmeno']; Klidně to do skriptu dosazuj jako $_POST['jmeno']; (nejlépe ještě ošetřené) 3. To vypsání chyb mi přijde takové nehezké, já používám třeba toto: 1if(malo znaku) $chyba[1]="Napsali jste velice krátkou zprávu."; if(malo znaku) $chyba[1]="Napsali jste velice krátkou zprávu.";
if(zadne znaky) $chyba[2]="Napsali jste žádnou zprávu.";
if(isset($chyba)){
echo '<div class="chybovehlasky">'.implode("<br />", $chyba).'</div>';
include "formular.php";
}
else{
mail();
}
Ten tvůj kód na začátku: 1<?php <?php
if (isset($_POST['odeslano'])) {
If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers)){
header("Location: odeslano.php?hotovo");
}}
?>
Je tam zbytečnej, smaž ho a uprav ten spodní :) |
||
akali Profil * |
#11 · Zasláno: 30. 8. 2010, 18:09:51
Jo to je mi jasný, jenom jsem to tam přidal jak is mi to psal ty, samozřejmě, že jsem to tam zkusil naivně..
Tak tedy bez té isset |
||
panther Profil |
#12 · Zasláno: 30. 8. 2010, 18:11:48
akali:
zamysli se, než napíšeš a zároveň si to zkus (ano, ani tohle nebude fungovat). Zkus zapřemýšlet nad schématem, které ti napsal Medvídek v [#7], myšlenka je správná. |
||
Medvídek Profil |
#13 · Zasláno: 30. 8. 2010, 18:19:13 · Upravil/a: Medvídek
akali:
Nemam u sebe teď editor, psal sem to pouze v této textarea, ale princip by tak mohl být. 1<?php <?php
If($_POST['odeslano']) {
if (Empty($_POST['jmeno'])) $chyba[1]="chybí jméno";
if (Empty($_POST['prijmeni'])) $chyba[2]="chybí přijmení";
if (Empty($_POST['email'])) $chyba[3]="chybí e-mail";
if (Empty($_POST['mesto'])) $chyba[4]="chybí město";
if (Empty($_POST['ulice'])) $chyba[5]="chybí ulice";
if (Empty($_POST['psc'])) $chyba[6]="chybí psč";
if(isset($chyba)){
echo '<div class="chybovehlasky">'.implode("<br />", $chyba).'</div>';
include "formular.php";
}
else{
$zprava = htmlspecialchars($_POST['zprava']);
$zprava .= "\n\n Jméno:".htmlspecialchars($_POST['jmeno']);
$zprava .= "\n Příjmení:".htmlspecialchars($_POST['prijmeni']);
$zprava .= "\n e-mail:".htmlspecialchars($_POST['email']);
$zprava .= "\n ulice a čp:".htmlspecialchars($_POST['ulice']);
$zprava .= "\n PSČ:".htmlspecialchars($_POST['psc']);
$zprava .= "\n Telefonní číslo:".htmlspecialchars($_POST['telefon']);
// předmět s diakritikou
$encodedsubject = base64_encode ("Objednávka");
$predmet = "=?utf-8?B?$encodedsubject?=";
//nastavení mailu
$headers = "MIME-Version: 1.0\r\n";
$headers.= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers.= "Content-Transfer-Encoding: 8bit\r\n";
$headers.= "From: $_POST['email']\r\n";
If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers)){
header("Location: odeslano.php?hotovo");
}
else{
echo '<div class="chybovehlasky">Chyba odeslání E-mailu</div>';
include "formular.php";
}
}
}
else{
include "formular.php";
}
?>
|
||
akali Profil * |
#14 · Zasláno: 30. 8. 2010, 18:31:50
|
||
test Profil |
#15 · Zasláno: 30. 8. 2010, 18:38:15
akali:
Jakou chybu to píše? |
||
panther Profil |
#16 · Zasláno: 30. 8. 2010, 18:40:07 · Upravil/a: panther
akali:
Jakou chybu? Headers already sent? Tak tuto chybu hledej, co znamená (např. ve FAQ této sekce). Nikdo tu za tebe nebude všechno psát, musíš projevit trochu vlastní snahy. Máš chybovou hlášku a místo, aby sis zjistil, co znamená, raději napíšeš sem, ať to za tebe někdo opraví. Špatný přístup jsi zvolil. |
||
Časová prodleva: 15 let
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0