Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem PHP notice

Dobrý den,
Nejde mi jeden příklad z knízky, mám tento PHP kod(cast):

<?php
$jmeno=trim(htmlspecialchars(strip_tags($_POST['jmeno'])));
$telefon=trim(htmlspecialchars(strip_tags($_POST['telefon'])));
$email=trim(htmlspecialchars(strip_tags($_POST['email'])));
$predmet=trim(htmlspecialchars(strip_tags($_POST['predmet'])));
$zprava=trim(htmlspecialchars(strip_tags($_POST['zprava'])));

A prohlízec píse toto:

Notice: Undefined index: jmeno in C:\xampp\htdocs\kniha\03\kontakt.php on line 2

Notice: Undefined index: telefon in C:\xampp\htdocs\kniha\03\kontakt.php on line 3

Notice: Undefined index: email in C:\xampp\htdocs\kniha\03\kontakt.php on line 4

Notice: Undefined index: predmet in C:\xampp\htdocs\kniha\03\kontakt.php on line 5

Notice: Undefined index: zprava in C:\xampp\htdocs\kniha\03\kontakt.php on line 6

Jak se toho zbavím?
(Pouzivam XAMPP 1.8.2, defaut nastaveni)
Děkuji

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
A ten HTML formulář vypadá jak?
ws79 27.12.2013 11:05
ws79
Musel jsem to trochu oriznout <?php $jmeno=trim(htmlspecialchars(strip_tags($_POST['jmeno']))); $te… nový
Gorila20 27.12.2013 11:21
Gorila20
Nejdriv si ujasni, co chces, aby ten program delal a jak toho dosahnout, z toho ti vyjde vse ostatni… poslední
gilhad 27.12.2013 13:58
gilhad

Musel jsem to trochu oriznout

<?php
$jmeno=trim(htmlspecialchars(strip_tags($_POST['jmeno'])));
$telefon=trim(htmlspecialchars(strip_tags($_POST['telefon'])));
$email=trim(htmlspecialchars(strip_tags($_POST['email'])));
$predmet=trim(htmlspecialchars(strip_tags($_POST['predmet'])));
$zprava=trim(htmlspecialchars(strip_tags($_POST['zprava'])));

if($_POST['poslat']=="ano") {
		$chyby=array();
		if(empty($jmeno)) { $chyby[]='Vyplňte své jméno.'; };  // jmeno je prázdné
		if(is_numeric($jmeno)) { $chyby[]='Jméno nemůže mít číselnou hodnotu.'; };  // jméno nemůže být číslo
		if(strlen($jmeno)<=2) { $chyby[]='Uvedené jméno je moc krátke.'; };  // minimální délka jména je tři znaky
		
		if(empty($telefon) && empty($email)){  // pokud jsou oba údaje nevyplněny
		   $chyby[]='Uveďte kontaktní telefon nebo emailovou adresu.'; 
		};
		if(!empty($telefon)) {  // pokud je $telefon vyplněn
		   $telefon=str_replace('+', '', $telefon);   // zmažeme nečíselné znaky 
		   $telefon=str_replace('-', '', $telefon);
		   $telefon=str_replace('/', '', $telefon);
		   $telefon=str_replace(' ', '', $telefon);   // zmažeme i mezery
		   if(!is_numeric($telefon)) {  // pokud to není číslo, obsahuje nepovolené znaky
			  $chyby[]='Telefonní kontakt obsahuje nepovolené znaky.';
		   }
		   if(strlen($telefon)<9 || strlen($telefon)>15) {
			  // délku si můžete zvolit sami podle vašeho uvážení
			  $chyby[]='Telefonní kontakt má nesprávnou délku.';
		   }
		}
		if(!empty($email)){  // pokud je vyplněný $email
		   if(!preg_match('/^[^@]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2 ,4}+$/', $email)){
			  // emailová adresa nemá správní tvar
			  $chyby[]='Uvedená emailová adresa nemá správní tvar.';
		   }
		}
		
		if(empty($predmet)){ $chyby[]='Uveďte předmět vaši zprávy.'; };
		if(strlen($predmet)<5){ $chyby[]='Předmět zprávy je příliš krátký.'; };
		if(empty($zprava)){ $chyby[]='Napište vaši zprávu.'; };
		if(strlen($zprava)<20){ $chyby[]='Zpráva je příliš krátká. Zkuste ji popsat podrobněji.'; };
		
		
		$chyba=join('<br />', $chyby);
		if(!empty($chyba)){
			echo '<div class=“chybovaHlaska“>'.$chyba.'</div>';
		};
		if(empty($chyba)){    // všechna jsou v pořádku
		   $textZpravy='Odesílatel: <strong>'.$jmeno.'</strong><br /><br />
		   [ '.$email.' '.$telefon.' ]<br /><br />
		   '.$zprava;
		
		   	require "class.phpmailer.php";
   			require "class.smtp.php";
		
			$Mail = new PHPMailer();
			$Mail->CharSet = 'UTF-8';
			$Mail->IsSMTP();
		   	$Mail->Host = "smtp.googlemail.com";
		   	$Mail->Username="prihlasovaci.jmeno.k.emailu";
		   	$Mail->Password="heslo";
		   	$Mail->SMTPAuth=true;
		   	$Mail->From = "prihlasovaci.jmeno.k.emailu@gmail.com";
			$Mail->FromName = $jmeno;
		   	$Mail->AddAddress("prihlasovaci.jmeno.k.emailu@gmail.com");
			if($_POST['kopie']=="on") {
			  $Mail->AddBCC($email);
			}
			$Mail->IsHTML(true);
		    $Mail->Subject  = $predmet;
		    $Mail->Body = $textZpravy;
			$cistyText=strip_tags($textZpravy);
   			$Mail->AltBody=$cistyText;

		  if($Mail->Send()) {
		   	$okHlaska="Zpráva byla úspěšne odesláná.";
		  } else {
		  	echo "Zprávu se nepodařilo odeslat. Zkuste to znovu.";
		  }
	 }
}

Nejdriv si ujasni, co chces, aby ten program delal a jak toho dosahnout, z toho ti vyjde vse ostatni. Nauc se, jak funguje PHOP, jak HTML, co je server, co klient, jak to spolu souvisi ...

Kdyz to hodne zjednodusim: PHP se zpracovava na serveru, vysledkem je HTML kod, ktery se zobrazi klientovi v prohlizeci. Klient typicky neco nejak vyplni nebo naklika a odesle to serveru, kde ceka nejaky PHP kod, aby s tim neco udelal a vyplodil HMTL, ktere se zobrazi klientovi atd. atd. ...

PHP kod se zpracovava shora dolu (az na skoky, cykly, volani funkci a jine zajimavosti), pokud je v nem vlozen HTML, tak se proste vypise v tom danem miste.

Takze pokud chces porad dokola volat tu samou stranku, dokud ji uzivatel nevyplni spravne, tak postup bude asi takovyto:

1) podivam se, zda jsem vubec dostal v POST nejaka data, pokud ne (uzivateli zada o stranku poprve, jeste ji nevidel, ja ji generuju), tak jen vypisu vsechny <form> a <input> a tak s defaultnima hodnotama a SKONCIM
2) pokud mam v POST nejaka data, tak prekontroluju, zda jsou vsechna (jmeno, telefon ...), teprve pak muzu pouzivat $_POST["jmeno"] a podobne - pokud vsechna nemam, asi aplikuju bod 1) protoze kdovi jak na tuto stranku prisel
3) zkontroluju, zda $_POST["jmeno"] ma nejakou rozumnou hodnotu (treba aspon neprazdnou), obdobne dalsi polozky - pokud ne, vygeneruju chybovou hlasku a co nejlepe predvyplnim vstupni pole, jdu na 1)
4) pokud je vse v poradku, provedu pozadovanou akci (napriklad poslu email) a zaridim prechod na dalsi/jinou stranku

Zpět do poradny Odpovědět na původní otázku Nahoru