Autor Zpráva
snazimse
Profil
Zdravím,mám problém v kodu,sestavil jsem si formulář, dle svých požadavků,ale nefunguje mi výpis echo if,echo else,nevypisuje,je tam nějaký problém,podle mě s if isset, mám tam hodně parametrů,tak to nefunguje,nevím proč,ale ikdyž zadám splnit jen jeden parametr,tak se sice vypíše,echo else,ale ani při splnění dané podmínky,nebo celého formuláře,stejně skončí zase v echo else.

A ještě bych potřeboval radu,jak zařídit,aby se celý formulář,když zadám něco špatně,uložil s informacemi,tedy aby zůstal vyplněný,a jen bych opravil,nebo doplnil něco do inputů.

Přikládám, kod okolo problému ,zbytek za metodou post je v pořádku,jedná se o formulář na jednu stránku.Děkuji všem převelice

Kod zde:
<?php
If(isset($_POST['termin']) and ($_POST['demont'])  and  ($_POST['velikostbytudomu'])   and ($_POST['100kg'])  and  ($_POST['psc2'])  and   ($_POST['ulice2'])  and  ($_POST['vytah2'])  and  ($_POST['kam-patro']) 
and ($_POST['psc1'])  and ($_POST['mesto1'])  and ($_POST['ulice1'])  and ($_POST['vytah1'])  and
($_POST['patroodkud']) and ($_POST['telefon']) and ($_POST['jmeno']) and ($_POST['spam']) and ($_POST['zprava'])) {

$termin = $_POST['termin'];
$demont = $_POST['demont'];
$velikost = $_POST['velikostbytudomu'];
$kg = $_POST['100kg'];


$mesto2 = $_POST['mesto2'];
$psc2   = $_POST['psc2'];
$ulice2 = $_POST['ulice2'];
$vytah2 = $_POST['vytah2'];
$patrokam = $_POST['kam-patro'];




$psc1   = $_POST['psc1'];
$mesto1 = $_POST['mesto1'];
$ulice1 = $_POST['ulice1'];
$vytah1 = $_POST['vytah1'];
$patroodkud = $_POST['patroodkud'];


$telefon = $_POST['telefon'];
$headers = 'Content-type: text/html; charset=windows-utf-8' . "\r\n";
$headers .= 'From:'.$_POST['email']. "\r\n";
$name = $_POST['jmeno'];
$predmet = "KALKULACE STĚHOVÁNÍ -$name";
$spam = $_POST['spam'];
$zprava= $_POST['zprava'];

$message = "
       <html><head></head><body>
       <h1>KALKULACE STĚHOVÁNÍ</h1>
     <p><span style='color:red'<strong>Kontaktní údaje:</strong></span></p>
      
      <p><b>Jméno:&nbsp;</b>$name
      <b>Email:&nbsp;</b>$email
      <b>Telefon:&nbsp;</b>$telefon</p>
      <p>&nbsp;</p>
     <p><span style='color:red'<strong>Odkud stěhujeme:</strong></span></p>
      
      <p><b>Město:&nbsp;</b>$mesto1 <b>Ulice:&nbsp;</b>$ulice1 <b>PSČ:&nbsp;</b>$psc1  
      <b>Výtah:&nbsp;</b>$vytah1
      <b>Patro:&nbsp;</b>$patroodkud</p>
      
      <p>&nbsp;</p>
      
       <p><span style='color:red'<strong>Kam stěhujeme:</strong></span></p>
      
      <p><b>Město:&nbsp;</b>$mesto2 <b>Ulice:&nbsp;</b>$ulice2 <b>PSČ:&nbsp;</b>$psc2  
      <b>Výtah:&nbsp;</b>$vytah2
      <b>Patro:&nbsp;</b>$patrokam</p>
      
      <p>&nbsp;</p>
      
       <p><span style='color:red'<strong>Podrobnosti zakázky:</strong></span></p>
      
      <p><b>Váš termín:&nbsp;</b> $termin <b>Demontování nábytku*:&nbsp;</b>$demont  
      <b>Rozsah stěhování:&nbsp;</b>$velikost
      <b>Věci nad 100kg:&nbsp;</b>$kg</p>
      
      
        <p>&nbsp;</p>
      
      
      
     <b>Doplňující poznámky:&nbsp;</b>$zprava
        
         <p>&nbsp;</p>  
         
         <p>Poznámka:*Uveďte v poznámce:Jaký nábytek se má demontovat.</p>
         </body></html>  \n
        "; 



if($predmet!=""  and $message!="" and $spam=="10") {
mail ("muj@email.cz", $predmet, $message,$headers);
echo "<h2>Váše kalkulace byla úspěšně odeslána</h2><p></p>";
}
else {
echo "<h2>Vaši kalkulaci se nepodařilo odeslat,pravděpodobně jste nevyplnili všechny údaje, nebo nevíte kolik je 1+9.</h2>";
}
}
else {


echo '<form action="/" method="post" name="poznamka" onsubmit="return kontrola();">
 <div id="kudaje">
      
     <center>Kontaktní údaje:&nbsp;</center>
   
?>
jenikkozak
Profil
- Funkce isset má ve tvém případě jen jeden parametr. Pokud jich chceš použít víc, odděl je čárkou.
- Aby se formulář vyplnil odeslanými hodnotami, zařídíš tak, že je jednotlivým textovým inputům přiřadíš pomocí atributu value.
- Volné místo v HTML se netvoří pomocí <p></p> ani <p></p>. Používají se na to CSS.
- Tučné písmo se v CSS zapisuje pomocí vlastnosti font-weight.
- Přestože nemívám problémy se čtením složitých souvětí, ve tvém prvním souvětí se ztrácím a vůbec tedy nechápu, jak se problém projevuje a zda vůbec existuje.
snazimse
Profil
Když tam mám,tolik parametrů and ,and v if isset,tak to nevypíše nic.Když tam zadám jen jeden,If(isset($_POST['termin'])) { tak,i při kompletních vyplnění parametrů,to stále napíše text z echo else viz:
else {
echo "<h2>Vaši kalkulaci se nepodařilo odeslat,pravděpodobně jste nevyplnili všechny údaje, nebo nevíte kolik je 1+9.</h2>";
Což je špatně,mělo by se zobrazit echo "<h2>Váše kalkulace byla úspěšně odeslána</h2><p></p>"; Ale to já vím,že value se dává inputům,to jsem sem nedával,je to velký kod,ale vložím tedy sem zbytek kodu,z vrchu.Děkuji velice ! PS:Jinak jak,zařídit aby se formulář,ukládal,když zadám špatné info,aby tam ty informace zůstaly?
jenikkozak
Profil
Ale ta větev echo "<h2>Vaši kalkulaci se nepodařilo odeslat,pravděpodobně jste nevyplnili všechny údaje, nebo nevíte kolik je 1+9.</h2>"; patří k té druhé podmínce: if($predmet!="" and $message!="" and $spam=="10") { Úpravou té první se tedy nemění. Budeš mít skript snáze čitelný, pokud si jej budeš odsazovat pomocí tabulátorů nebo mezer.

Hodnoty do formuláře vyplníš třeba takto: (Ukazuji schéma u jedné proměnné)
$telefon = ($_POST ? htmlspecialchars($_POST["telefon"]) : "");

if(!empty($telefon)){

    /*Sestavíme zprávu s telefonem a odešleme ji*/

}else{

    echo '<form ...>
    Telefon: <input name="telefon" value="'.$telefon.'">';
}
snazimse
Profil
Jo jasně,já už sem včera,asi na to neviděl,že jsem si to neuvědomil,takže do if isset bych měl dát co? To stejné co uvedu v podmínce if mail,akorát oddělené čárkou?

htmlspecialchars? Kvůli bezpečnosti?[pre] to znamená co? To vidím prvně. Jinak ,jak tedy zachovat údaje uložené ze špatně vyplněného formuláře.? Aby se nemusely vyplňovat znovu? Děkuji velmi jste mi pomohl
jenikkozak
Profil
- Funkce htmlspecialchars se používá proto, aby vložená hodnota nemohla narušit strukturu HTML stránky. Viz článek o escapování.
- [pre] jsem vložil omylem při dopisování skriptu v příspěvku. Omlouvám se.

Vypsání popíšu ještě jednou, polopatičtěji: Pro zjednodušení příkladu použiji pouze dvě políčka formuláře.

<?php
/*Pokud nebyl odeslán formulář s políčkem telefon, nastavíme prázdnou proměnnou.
Byl-li odeslán, do proměnné uložíme escapovanou hodnotu.*/
if(isset($_POST["telefon"])){
    $telefon=htmlspecialchars($_POST["telefon"]);
}else{
    $telefon="";
}

/*Pokud nebyl odeslán formulář s políčkem jmeno, nastavíme prázdnou proměnnou.
Byl-li odeslán, do proměnné uložíme escapovanou hodnotu.*/
if(isset($_POST["jmeno"])){
    $jmeno=htmlspecialchars($_POST["jmeno"]);
}else{
    $jmeno="";
}




 
if(!empty($telefon) AND !empty($telefon)){ /*Ověříme, zda jsou všechny potřebné hodnoty vyplněné*/
 
    /*Sestavíme zprávu s telefonem a odešleme ji*/
    $predmet = "KALKULACE STĚHOVÁNÍ - $jmeno";
    $headers = "Content-type: text/html; charset=windows-utf-8" . "\r\n";
    $message = "
       <html><body>
       <h1>KALKULACE STĚHOVÁNÍ</h1>
       <p style='color:red;font-weight:bold'>Kontaktní údaje:</p>
       <p><b>Jméno:&nbsp;</b>$name
       <b>Email:&nbsp;</b>$jmeno";


      if(mail ("muj@email.cz", $predmet, $message, $headers)){
          echo "<h2>Vaše kalkulace byla úspěšně odeslána</h2>";
      }

 
}else{ /*Některá z hodnot vyplněna není*/
 
    echo '<form ...>
    Jméno: <input name="jmeno" value="'.$jmeno.'"><br>
    Telefon: <input name="telefon" value="'.$telefon.'">
    </form>';
}
?>
snazimse
Profil
Děkuji,a to ukládání ve formuláři mi zajistí to /*Pokud nebyl odeslán formulář s políčkem jmeno, nastavíme prázdnou proměnnou.
Byl-li odeslán, do proměnné uložíme escapovanou hodnotu.*/ tohle pod poznámkou ?
jenikkozak
Profil
Tak postupně:

Hodnoty z formuláře jsou v PHP dostupné v poli $_POST (v případě, že je formulář odesílán metodou post) nebo $_GET (v případě odeslání metodou get).
Klíčem položky pole je obsah atributu name z formuláře. (Viz vysvětlení formulářů v HTML.) Hodnota z prvku <input name="jmeno"> bude po odeslání v prvku $_POST["jmeno"].
Do políčka HTML formuláře se výchozí hodnota zapisuje pomocí atributu value. Pokud chci dát jako výchozí hodnotu tvůj nick, zadám: <input name="jmeno" value="snazimse">. Výchozí hodnotu tam mohu v PHP dosadit pomocí proměnné nebo položky pole. Například takto: echo '<input name="jmeno" value="'.$jmeno.'">'; Řetězce se totiž v PHP spojují pomocí operátoru tečky.

Nyní tedy skript vypadá takto (opět pro zjednodušení používám pouze dvě položky formuláře):
<?php
echo '<form method="post">
    Jméno: <input name="jmeno" value="'.$_POST["jmeno"].'">
    Telefon: <input name="telefon" value="'.$_POST["telefon"].'">
  </form>';
?>

Potřebujeme odeslaná data použít i pro odesílanou zprávu. Proto si je „zjednodušíme“ uložením do proměnných:
<?php
$jmeno = $_POST["jmeno"];
$telefon = $_POST["telefon"];

$mail_zprava="<html><body><h1>Stěhování</h1>
    Jméno: $jmeno Email: $email
    </body></html>";
mail ("muj@email.cz", "Předmět", $mail_zprava);


echo '<form method="post">
    Jméno: <input name="jmeno" value="'.jmeno.'">
    Telefon: <input name="telefon" value="'.$telefon.'">
  </form>';
?>

Protože chceme, aby se zpráva odeslala pouze v případě, že jsou obě hodnoty vyplněné, použijeme v podmínce funkci empty, která ověřuje, zda má proměnná nastavenou hodnotu. Zjednodušeně. Pokud prázdná je, funkce vrátí hodnotu true. My potřebujeme zjistit, zda proměnná není prázdná. Výsledek funkce znegujeme tím, že před něj použijeme vykřičník:
<?php
$jmeno = $_POST["jmeno"];
$telefon = $_POST["telefon"];

if(!empty($jmeno) AND !empty($telefon)){ //Pokud není prázdná proměnná jmeno a zároveň není prázdná proměnná telefon
  $mail_zprava="<html><body><h1>Stěhování</h1>
      Jméno: $jmeno Email: $email
      </body></html>";
  mail ("muj@email.cz", "Předmět", $mail_zprava);
}

echo '<form method="post">
    Jméno: <input name="jmeno" value="'.jmeno.'">
    Telefon: <input name="telefon" value="'.$telefon.'">
  </form>';
?>

Když se stránka zobrazí poprvé, formulář ještě není odeslán, a proto neexistuje ani pole $_POST. Kdybychom pracovali s prvky pole, které jsme dříve nenastavili, PHP by se to nelíbilo a vypsalo by chybovou poznámku. Abychom tomu zabránili, pomocí podmínky zjistíme, zda konkrétní položka pole existuje. Pokud ano, vložíme ji do proměnné. V opačném případě do proměnné vložíme prázdný řetězec. Místo $jmeno = $_POST["jmeno"]; tedy budeme mít:
if(isset($_POST["jmeno"])){
  $jmeno = $_POST["jmeno"];
}else{
  $jmeno = "";
}
Totéž provedeme s proměnnou $telefon.

Kdyby uživatel do políčka napsal třeba uvozovky a ostrou závorku, po dosazení této hodnoty do formuláře by se nám rozbilo HTML. S vyplněnou hodnotou by totiž políčko vypadalo takto: <input name="jmeno" value="">">. Abychom tomu zabránili, před dosazením hodnoty ošetříme získaná data funkcí htmlspecialchars, která takto nebezpečné znaky deaktivuje tím, že je přepíše na HTML entity, které se na obrazovce zobrazí stejně, ale nerozbijí nám strukturu HTML stránky.
Nyní náš skript vypadá takto:
<?php
if(isset($_POST["jmeno"])){
  $jmeno = htmlspecialchars($_POST["jmeno"]);
}else{
  $jmeno = "";
}

if(isset($_POST["telefon"])){
  $telefon = htmlspecialchars($_POST["telefon"]);
}else{
  $telefon = "";
}


if(!empty($jmeno) AND !empty($telefon)){ //Pokud není prázdná proměnná jmeno a zároveň není prázdná proměnná telefon
  $mail_zprava="<html><body><h1>Stěhování</h1>
      Jméno: $jmeno Email: $email
      </body></html>";
  mail ("muj@email.cz", "Předmět", $mail_zprava);
}

echo '<form method="post">
    Jméno: <input name="jmeno" value="'.jmeno.'">
    Telefon: <input name="telefon" value="'.$telefon.'">
  </form>';
?>

Tím jsme se dopracovali ke stavu, který mám v příspěvku výše.
snazimse
Profil
Jojo ok,děkuji mnohokrát,za vysvětlení.Moc jste i pomohl !!!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0