Autor Zpráva
Chlupp
Profil
Jsem pouze uživatel internetu, ale potřeboval bych si vytvořit skript na odesílání emailu. Mám formulář i skript, vše funguje, odesílá, ale odesílá i prázdné emaily. Proto se snažím zadat podmínky pro vyplnění polí, ale když začnu měnit skritp, hází mi to chybu. V čem dělám chybu?

Snažím se, aby se mi zkontrolovalo zadání kdy, jméno, email a telefon. Pomůže mi někdo? Díky za radu.

skript php:

Rezervace111.php
<head>
<meta http-equiv="Content-type" content="text/html; charset=windows-1250">
  <title>Rezervace</title> 
</head>
<body>
<meta http-equiv="Content-type" content="text/html; charset=windows-1250">
<?php

$headers = 'From: '.$_POST['email'] . "\r\n";
$headers .= 'Reply-To: '.$_POST['email'] . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=windows-1250' . "\r\n";

  if(strstr($kdy, "\n") !== false || strstr($kdy, "\r") !== false) { 
echo "Vyberte termín!"; 
exit; 

 if(strstr($email, "\n") !== false || strstr($email, "\r") !== false) { 
echo "Zadejte svůj email!"; 
exit; 
} 
if(strstr($jmeno, "\n") !== false || strstr($jmeno, "\r") !== false) { 
echo "Zadejte své jméno!"; 
exit; 
} 
if(substr_count($email, '@') >= 2) { 
echo 'Do kolonky "Vas e-mail" lze zadat pouze jednu emailovou adresu.'; 
exit; 
}

$to = "chlupp@seznam.cz";
$subject = "".$_POST['predmet']."";
$mess = "kdy: ".$_POST['kdy']."<br>Jméno: ".$_POST['jmeno']."<br>Telefon: ".$_POST['telefon']."<br>E-mail: ".$_POST['email']."<br>Poznamka:<br>".$_POST['poznamka']."";
if (mail ($to, $subject, $mess, $headers));
<meta http-equiv="refresh" content="0; url=http://www.rezervace.centrumpaprsek.cz/form/dekujeme.html">
else "Pri zpracovani vzkazu nastala chyba!";
?>
</body>
<html>

samotný formulář index111.html.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 
  <head>
  <meta http-equiv="Content-Style-Type" content="text/css">
  <meta http-equiv="Content-type" content="text/html; charset=windows-1250">
  <title>Rezervace</title>
  </head>
  <body bgcolor=#DCEDFD>
<meta http-equiv="Content-type" content="text/html; charset=windows-1250">
 
<table style="height:100%;" width="100%" cellSpacing="0" cellPadding="0" border="0">
<tr><td align="center" valign="top">
<form action="rezervace111.php" method="post">
 
<input type="hidden" value="Stepy + posilování s činkami" name="predmet">
<input type="hidden" value="Pondělí 17:45-18:45" name="den_kurzu">
<input type="hidden" value="noreply@centrumpaprsek.cz" name="komu">
<fieldset>
<h2><legend align="center">Stepy + posilování s činkami</legend></h2>

<table>
<tr>  
<th valign="top" align="right">
<label for="jmeno">Kdy:</label>
</th> 
<td>
<input type="radio" name="kdy" value="Pondělí 17:45-18:45">Pondělí 17:45-18:45<br>
<input type="radio" name="kdy" value="Pátek 18:45-19:45">Pátek 18:45-19:45
</td>
</tr>  
<tr>
<th align="right">
<label for="jmeno">Jméno:</label>
</th>
<td>
<input type="text" name="jmeno" size="24">
</td>
</tr>
<tr>
<th align="right">
<label for="telefon">Telefon:</label>
</th>
<td>
<input type="text" name="telefon" size="24">
</td>
</tr>
<tr>
<th align="right">
<label for="email">E-mail:</label>
</th>
<td>
<input type="text" name="email" size="24">
</td>
</tr>
<tr>
<td colspan="2" align="right"> !Při rezervaci více cvičících, uveďte prosím jejich jména!
</td>
</tr>
<tr>
<th align="right" class="comment">
<label for="poznamka">Poznámka:</label>
</th>
<td>
<textarea name="poznamka" cols="30" rows="5"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="odeslano" class="button" value="Odeslat">
</td>
</tr>
 
  
 
</table>
</form>
</td></tr>
</table>
 
  </body>
</html>    
Camo
Profil
Chlupp:
Odhliadnuc od toho, že je to deravé ako sito, by tá chyba(ktorú si mal pridať k otázke) mohla byť v tom, že nemáš koncovú zátvorku v prvej podmienke.
Chlupp
Profil
Camo:
díky, za odpověď
závorku jsem doplnil, ale stále nic - hlásí mi to chybu.
Jak to myslíš, že je to děravé jak síto? Mohl by jsi mi poradit, jak to upravit?
Davex
Profil
Chlupp:
hlásí mi to chybu
Jakou chybu?
Chlupp
Profil
Davex:
Chyba protokolu HTTP 500 (Internal Server Error): Při pokusu o splnění požadavku došlo na serveru k neočekávané situaci. Když jsem se ptal na hostingu tak mi řekli, že je chyba někde v PHP. Ale neřekli mi kde :-(
ehm
Profil *
ten meta tag nie je echnutý..
Chlupp
Profil
[#6] ehm,
myslíš napsat před něj echo? to jsem udělal - výsledek stále stejný
ehm
Profil *
echo '';
Chlupp
Profil
ehm:
[#8] také nic :-(
peta
Profil
Chlupp:
Pokud udelas nejakou zmenu, je dobre, poslat tu cast kodu 5 radku niz, 5 pod tou zmenou.

500 (Internal Server Error) - googlem bys nasel, ze se jedna o chybu serveru.

index111.html
- na radku 9 nemas hodnotu v uvozovkach "#DCEDFD"
- na radku mas meta tag, ktery patri do head a ne do body
- na radku 20 mas pouzite legent, ktere vyhradne patri jen do tagu fieldset
- na radku 20, pouziti align u tagu typu inline je vec zbytecna, on je siroky jen na delku textu v nem, takze text je vzdy zarovnany na stred, vlevo i vpravo
- na radku 76 hlasi validator, ze nemas ukonceny tag fieldset
- na radku 50, "for" se propojuje na "id" inputu na radku 53 a ne na "name", for bud zrus nebo inputu pridej id

rezervace111.php
Parse error: syntax error, unexpected '<' in C:\wamp\www\x\xxmail\rezervace111.php on line 35
- na radku 35 neni php kod. Tam asi melo byt
echo '  <meta .... /dekujeme.html">   ';
Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\x\xxmail\rezervace111.php on line 36
- na radku 36 hlasi problem s else, protoze na radku 34 mas if ukonceno strednikem.
if (mail ($to, $subject, $mess, $headers));
Parse error: syntax error, unexpected $end in C:\wamp\www\x\xxmail\rezervace111.php on line 39
- na radku 39 hlasi schazejici ukonceni, zavorku a navic tam nemas opet echo.
else echo "Pri ... chyba!";
echo 'text'; je prikaz, aby do html kodu vypsal text
A tu zavorku si snadno dohledas treba v pspadu. Na radku 14 oteviras { ale na radku 17 ji neuzaviras
Davex
Profil
Chlupp:
Chyba protokolu HTTP 500 (Internal Server Error)
Na serveru máš vypnuté zobrazování chyb PHP, takže se dozvíš pouze tuto nekonkrétní chybu. Po nasekání chyb ve skriptech doporučuji zapnout jejich zobrazování, abys o nich alespoň věděl.
Chlupp
Profil
peta:
Díky za odpověď a pár typů.
upravil jsem index111.html
 <body bgcolor="#DCEDFD">
meta tag jsem smazal
- na radku 20 mas pouzite legent, ktere vyhradne patri jen do tagu fieldset
- na radku 20, pouziti align u tagu typu inline je vec zbytecna, on je siroky jen na delku textu v nem, takze text je vzdy zarovnany na stred, vlevo i vpravo


- používám fieldset, jen jsem ho zapoměl na konci ukončit.
- to zarovnání je použito z důvodu fildset. (sice se mi to v chromu nezobrazuje správně, ale taková byla alespoň myšlenka.
- na radku 76 hlasi validator, ze nemas ukonceny tag fieldset
ukončeno - to jsem přehlédl
</fieldset>
- na radku 50, "for" se propojuje na "id" inputu na radku 53 a ne na "name", for bud zrus nebo inputu pridej id
toto jsem nepochopil. mám to tak udělané u všech polí

Změny jsem provedl, ale formulář se i tak před změnamy zobrazoval správně.

rezervace111.php


Parse error: syntax error, unexpected '<' in C:\wamp\www\x\xxmail\rezervace111.php on line 35 
- na radku 35 neni php kod. Tam asi melo byt 
echo '  <meta .... /dekujeme.html">   ';
Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\x\xxmail\rezervace111.php on line 36 
- na radku 36 hlasi problem s else, protoze na radku 34 mas if ukonceno strednikem. 
if (mail ($to, $subject, $mess, $headers));
Parse error: syntax error, unexpected $end in C:\wamp\www\x\xxmail\rezervace111.php on line 39 
- na radku 39 hlasi schazejici ukonceni, zavorku a navic tam nemas opet echo. 
else echo "Pri ... chyba!";
echo 'text'; je prikaz, aby do html kodu vypsal text 
A tu zavorku si snadno dohledas treba v pspadu. Na radku 14 oteviras { ale na radku 17 ji neuzaviras


Změny jsem provedl. Tady je konec php kterého se to týkalo:
$to = "chlupp@seznam.cz";
$subject = "".$_POST['predmet']."";
$mess = "kdy: ".$_POST['kdy']."<br>Jméno: ".$_POST['jmeno']."<br>Telefon: ".$_POST['telefon']."<br>E-mail: ".$_POST['email']."<br>Poznamka:<br>".$_POST['poznamka']."";
if (mail ($to, $subject, $mess, $headers))
echo '<meta http-equiv="refresh" content="0; url=http://www.rezervace.centrumpaprsek.cz/Dekujeme_Vam.html">';
else echo "Pri zpracovani vzkazu nastala chyba!";

Výsledek je, že mi to už proběhne a nehází to chybu, ale i tak mi to dovolí poslat prázdný nevyplněný formulář. A zobrazit děkující stránku.

Tomu nerozumím :-( přeci tam jsou podmínky, tak by se to podle nich mělo řídit. Leda, že bych je špatně nadefinoval.


Davex:
Díky za radu, to by se mi hodilo.
Přečetl jsem si celý článek.
Zavolal na hosting, ale k dispozici mám pouze náhled do složek a kopírování souborů. Sám se do jiných souborů nedostanu.
A když zadám
ini_set('display_errors',1);
error_reporting(E_ALL);
Do <?php tak to vůbec nic neudělá a stále mi to hází chybu 500.
Davex
Profil
Chlupp:
stále mi to hází chybu 500
Pokud máš syntaktické chyby ve skriptu, tak zapnutí chyb ve skriptu nepomůže, protože se ještě nespustil. Musí se to zapnout dřív - třeba v souboru .htaccess, v php.ni nebo zkusit hledat v administraci hostingu, jestli se to nezapíná tam.
Chlupp
Profil
Davex:
syntaktická chyba je chyba kde mi chybí jako závorka...?
Jinak v hostingu to nikde zapnout nejde. a .htaccess tam nikde není a vytvořit ho neumím.
Po upravení skriptu od návodu od Peta už to chybu nehází,
ale podmínky mi to přejede jako by tam nebyly a odešle to děkovnou zprávu, která je až na konci.
Čím by to mohlo být?
Davex
Profil
Chlupp:
i tak mi to dovolí poslat prázdný nevyplněný formulář
Protože testuješ vyplnění proměnných, které nejsou definované? Viz Nejčastější potíže s PHP (FAQ) » Nefungují proměnné z formuláře nebo z URL (vypnuté register globals). Kdybys měl zapnuté zobrazování chyb, tak bys možná viděl informaci o tom, že používáš nedefinované proměnné. Tzn., že to nemá cenu ladit poslepu s vypnutými chybovými hláškami.

Ty podmínky udělej nějak normálně. Například podle vzoru

if (empty($_POST['kdy'])) { 
  echo "Vyberte termín!";
  exit;
}
Chlupp
Profil
Davex:
Děkuji mnohokrát, už to funguje.
Ještě jsem se chtěl zeptat, jak to udělat, aby ta hlaška se zobrazovala u pole, kdaž ho neviplníš.
Mám to vymyšlené, jako vyskakovací okno s formulářem.
S chybovou hláškou jako jsme to měli na naší původní stránce: http://paprsek.webuje.cz/prihlaska-cvicebni-kurzy.aspx
Ale když člověk něco nezadá, tak mu to nedovolí se vrátit.
Když to vyskakovací okno nechám velké, tak se musí vracet směrem zpět.
Teď to funguje takto: http://anglictina.centrumpaprsek.cz/test
Můžu toho nějak jednoduše docílit?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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