Autor Zpráva
Klainer
Profil
Dobrý den,

mám tu asi pro vás banální, ale pro mě velký problémek s formulářem.
Když příjdete na stránku s formulářem pod ním se automaticky vypíše :

E-mail se nepodařilo odeslat příčinou asi bude nevyplnění kontaktních udajů,
nebo špatné znění otázky !

Mno a já potřebuji, že když člověk příjde na stránku s formulářem tak pod ním
napsané nic nebude ( nic se nevypíše ), ale po odeslání formuláře potřebují aby
se pod ním objevilo: Zpráva byla úspěšně odeslána.

A pokud byly špatně vyplněny udaje by se mělo vypsat :

E-mail se nepodařilo odeslat příčinou asi bude nevyplnění kontaktních udajů,
nebo špatné znění otázky !

Díky

Tady přilážím kod mého formuláře:



<?php
$predmet = $_POST['predmet'];
$email = $_POST['email'];
$spam = $_POST['kontrola'];
$zprava = $_POST['zprava'];

if ($predmet!="" and $email!="" and $zprava!="" and
$kontrola=="2")
{
Mail("martinhascak@gmail.com", $predmet, $zprava, "From: " . $email);

$oznam = "<p>Zpráva byla úspěšně odeslána.</p>";
}
else
{
$oznam = "<p>E-mail se <strong>nepodařilo odeslat</strong> příčinou asi
bude nevyplnění kontaktních udajů, nebo špatné znění otázky !.</p>";
}



?>

<div id="mailform">
<form action="" method="post">
<fieldset>
<legend>Kontaktní formulář</legend>
<label for="email">Váš email:</label>
<input class="text" name="email" size="25" class="textpole"
/><br />
<label for="predmet">Předmět:</label>
<input class="text" name="predmet" size="25" class="textpole"
/><br />
<label for="kontrola">Kontrola: 1+1 se rovná ?</label>
<input class="text" name="kontrola" size="25" class="textpole"
/><br />
<label for="zprava">Zpráva:</label>
<textarea name="zprava" rows="6" class="textpole"
cols="40"></textarea><br />
<input class="submit" type="submit" value="Odeslat" />

<?php
if ($predmet!="" and $email!="" and $zprava!="" and
$kontrola!=="2")
{
echo $oznam;
}
else {
echo $oznam;
}
?>

</fieldset>
</form>
</div>
Alphard
Profil
<input class="submit" type="submit" value="Odeslat" name="odeslano" />

if (isset ($_POST['odeslano']))
{
// celý script
}
Klainer
Profil
vyřešeno
tiso
Profil
Klainer - ten skript má zlú logiku, reišenie od Alphard-a je iba čiastočné.
Princíp:
if(isset($_POST['odeslano'])){//form odoslany, mozem ho spracovat

if(...kontrola vyplnenych udajov...){//zle vyplnene udaje, vypis form s obsahom ktory navstevnik vyplnil a ku nevyplnenym formom vypis hlasku (doplňte prosím a podobne)
...
}
else{//dobre vyplnene udaje, mozem odoslat mail
if(FALSE === mail(...parametre...)){//mail sa nepodarilo odoslat, vypis hlasku
...
}
else{//mail odoslany, vypis hlasku
...
}
}
}
else{//vypis prazdny form
...
}
Klainer
Profil
diky mozná to pak skusím pokud dojdu na to jak to napojit
Klainer
Profil
Mám tu pořád ještě problémek s ověřováním vysledku součtu číslic proti spamu ….
Procházím to celý den a nemůžu najít chybku urcite tam je viditelna ale jelikoz php mocnerozumím, tak se mi to hledáhůře.

Pokud tedy máte čas podívejtese a případně skuste opravit dotyčnou chybku ve scriptu.

Děkuji



<?php
$cislo1 = rand(0, 9);
$cislo2 = rand(0, 9);
$vysledek = $cislo1 + $cislo2;
?>

<div id="mailform">
<form action="" method="post">
<fieldset class="ramecek">
<legend>Kontaktní formulář</legend>

<fieldset>
<label for="email">Váš email:</label>
<input class="text" name="email" size="25" class="textpole"
value="<?echo $_POST["email"]?>" />
</fieldset>

<fieldset>
<label for="predmet">Předmět:</label>
<input class="text" name="predmet" size="25" class="textpole"
/>
</fieldset>

<fieldset>
<label for="kontrola">Kolik je: <?php echo $cislo1.' + '.$cislo2.'
?';?></label>
<input class="text" name="kontrola" size="25" class="textpole"
/>
<input type="hidden" name="cislo1" value="<?php echo $cislo1;?>"
/>
<input type="hidden" name="cislo2" value="<?php echo $cislo2;?>"
/>
</fieldset>

<fieldset>
<label for="zprava">Zpráva:</label>
<textarea name="zprava" rows="6" class="textpole"
cols="40"></textarea>
<input class="submit" type="submit" value="Odeslat"
name="odeslano" />
</fieldset>

<?php

$predmet = $_POST['predmet'];
$email = $_POST['email'];
$zprava = $_POST['zprava'];


if (isset($_POST['odeslano'])){
$vysledek = $_POST['cislo1']+$_POST['cislo2'];
if ($predmet!='' AND $email!="" and $zprava!='' and $vysledek =
$_POST['cislo1']+$_POST['cislo2']){
//Mail("martinhascak@gmail.com", $predmet, $zprava, "From: " . $email);

mail("martinhascak@gmail.com", $predmet, $zprava, "From:
webmaster@$SERVER_NAME
Reply-To: webmaster@$SERVER_NAME
X-Mailer: PHP/" .
phpversion());
$akce = 1;
}else
$akce = 0;
}
switch ($akce){
case '1':
echo '<p>Zpráva byla úspěšně odeslána.</p>';
break;
case '0':
echo '<p>E-mail se <strong>nepodařilo odeslat</strong> příčinou
pravděpodobně bude špatné vyplnění kontaktních údajů nebo číselný
výsledek.</p>';
break;
}
?>

</fieldset>
</form>
Alphard
Profil
výsledek od uživatele máš v $_POST['kontrola']
and $vysledek = $_POST['cislo1']+$_POST['cislo2']){
bude to vždy správně a to hned ze dvou důvodů :-)
1. o řádek výše jsi to spočítal, teď provádíš ten stejný výpočet a porovnáš z předchozím výsledkem, jinak to být nemůže, HPH nedělá chyby v počítání do 20 :-)
2. porovnává se pomocí ==, ty jenom přiřazuješ a to vrátí TRUE bez ohledu na výsledek
Klainer
Profil
Aha diky za tip uz to sviští :)
v6ak
Profil
Klainer
Mail("martinhascak@gmail.com", $predmet, $zprava, "From: " . $email);
Tomu říkám injekce hlaviček! Co takhle do emailu napsat?:
jan.novak@gmail.com

bcc:jan.novak@gmail.com


Alphard
přiřazuješ a to vrátí TRUE
To IMHO vrací přiřazenou hodnotu.
Alphard
Profil
v6ak
která bude vyhodnocená jako TRUE (pravděpodobnost toho, že rand() určí 2x 0 je nízká, proto zanedbávám)
ale jo, napsal jsem to špatně, máš pravdu
Sanjay
Profil *
ahoj zkusil jsem tento kod protže php moc nerozumím a pokusil jsem se to opravit podle vašich rad ale nejak mi to nejde poradíte v čom mam chybu prosím

<?php
$cislo1 = rand(0, 9);
$cislo2 = rand(0, 9);
?>

<div id="mailform">
<form action="" method="post">
<fieldset class="ramecek">
<legend>Kontaktní formulár</legend>

<fieldset>
<label for="email">Váš email:</label>
<input class="text" name="email" size="25" class="textpole"
value="<?echo $_POST["email"]?>" />
</fieldset>

<fieldset>
<label for="predmet">Predmet:</label>
<input class="text" name="predmet" size="25" class="textpole"
/>
</fieldset>

<fieldset>
<label for="kontrola">Kolik je: <?php echo $cislo1.' + '.$cislo2.'
?';?></label>
<input class="text" name="kontrola" size="25" class="textpole"
/>
<input type="hidden" name="cislo1" value="<?php echo $cislo1;?>"
/>
<input type="hidden" name="cislo2" value="<?php echo $cislo2;?>"
/>
</fieldset>

<fieldset>
<label for="zprava">Zpráva:</label>
<textarea name="zprava" rows="6" class="textpole"
cols="40"></textarea>
<input class="submit" type="submit" value="Odeslat"
name="odeslano" />
</fieldset>

<?php

$predmet = $_POST['predmet'];
$email = $_POST['email'];
$zprava = $_POST['zprava'];


if (isset($_POST['odeslano'])){
if ($predmet!='' and $email!="" and $zprava!='' and $_POST['cislo1']+$_POST['cislo2'] == $cislo1+$cislo2){

Mail("slreklamavemail.cz", $predmet, $zprava, "From: " . $email);


$akce = 1;
}else
$akce = 0;
}
switch ($akce){
case '1':
echo '<p>Zpráva byla úspešne odeslána.</p>';
break;
case '0':
echo '<p>E-mail se <strong>nepodarilo odeslat</strong> prícinou
pravdepodobne bude špatné vyplnení kontaktních údaju nebo císelný
výsledek.</p>';
break;
}
?>

</fieldset>
</form> 
Sanjay
Profil *
Ještě se vracím k tomu te chybi z emailem si nevšímejte jen překlep ale chyba je vtom že mne to nenecha odeslat zpravu počád píše "E-mail se nepodarilo odeslat prícinou pravdepodobne bude špatné vyplnení kontaktních údaju nebo císelný výsledek."

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