Autor Zpráva
akali
Profil *
Ahoj, chci po odeslání mailu přesměrovat uživatele na určitou stránku
a mám takovejto kód


    
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)){
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
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 *
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
akali:
tak si tam přidej ještě podmínku, zda byl odeslán formulář (např. isset pro odesílací tlačítko).
akali
Profil *
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
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
akali:
Chtělo by si to nastudovat podmínky :)

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 *
Tak tady přidávám celý kód

<?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
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
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:

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:
<?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 *
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

<?php
If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers)){
header("Location: odeslano.php?hotovo");
}
?>
panther
Profil
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
akali:

Nemam u sebe teď editor, psal sem to pouze v této textarea, ale princip by tak mohl být.
<?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 *
Hází mi to chybu na řádku, kde je přesměrování

  If(Mail("kittlerpeta@centrua.cz", $predmet, $zprava, $headers)){
  header("Location: odeslano.php?hotovo");
  }
test
Profil
akali:
Jakou chybu to píše?
panther
Profil
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.

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:

0