Autor Zpráva
Stig001
Profil
Dobrý den,

Sestavil jsem si v php formulář pro odesílání mailů na základě nějakých příkladů, které jsem našel na netu a ty upravil. Ačkoliv php rozumím úplně minimálně, tak to kupodivu funguje až na jednu věc.


<?
$jmeno = $_POST['name'];
$predmet = $_POST['predmet'];
$email = $_POST['email'];
$spam = $_POST['spam'];
$zprava = $_POST['zprava'];


$zprava2 = $zprava. "\n" . "\n" .'===>Tento e-mail byl odeslán aplikací pro odesílání e-mailů z webu www.radekcaga.wz.cz.' . "\n" . "\n" .'===> Vyplněné jméno je: ' . $jmeno  . "\n" . "\n" .'===> Předmět dotazu je: ' . $predmet ; 


if ($jmeno!="" and $predmet!="" and $email!="" and $zprava!="" and $spam=="2")
{
Mail("xxxxxxxx@seznam.cz", $predmet, $zprava2, "From: " . $email);
echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>";
}
else
{
echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo otázku proti zabranění spamu.</p>";
} 



?>
Tu hlášku při nesplnění podmínky: <p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo otázku proti zabranění spamu.</p> mě vypisuje ještě před tím, než se potvrdí tlačítko pro odeslání.

Jak by se to prosím dalo opravit, aby to tu hlášku zobrazilo až po odeslání tlačítka (+ při nesplnění podmínek) ?

Děkuji za případnou pomoc,
Pavlínka
Profil
if (($jmeno!="" OR $predmet!="" OR $email!="" OR $zprava!="") AND $spam=="2")
{
Mail("xxxxxxxx@seznam.cz", $predmet, $zprava2, "From: " . $email);
echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>";
}
else
{
echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo otázku proti zabranění spamu.</p>";
} 



plus... nauč se na místo <? používat <?php novější php nemusí <? papat :)
Stig001
Profil
Pavlínka:

Takto to nefunguje :-( ...

Potřebuji, aby se mail odeslal budou-li všechny podmínky splněny, tzn. zadaný mail + jméno + předmět + "2" a pokud se tak stane, vypíše se hláška, že byl mail odeslán.

Pokud některý z povinných parametrů není zadán, vypíše se ta druhá hláška.

Můj problém je, že mi to tu druhou hlášku vypisuje už když vstoupím na danou stránku bez toho, aniž bych odesílal nějaký mail - formulář. => Je tam zobrazena permanetně pořád.

Jinak form vypadá takto:


<div class="left_form">
  <form action="zk_autor.php#email" method="post">
  
    <label for="name" class="width">Vaše jméno</label>
    <input type="text" id="name" name="name"><br>     

    <label for="email" class="width">Váš E-mail</label>
    <input type="text" id="email" name="email"><br> 
    
    <label for="sub" class="width">Předmět</label>
    <input type="text" id="sub" name="predmet"><br> 

    <label for="spam" class="width">1 + 1 = </label>
    <input type="text" id="spam" name="spam"><br>  
    
    <label for="zprava" class="width">Vaše zpráva</label>
     <textarea id="zprava" name="zprava"></textarea> 
  
    <input type="submit" value="Odeslat" class="padding_left_100">
  </form>
</div>
Díky
Pavlínka
Profil
Stig001:
jo tak, špatně jsem četla... tak vytvoř druhou podmínku

if ($jmeno!="" and $predmet!="" and $email!="" and $zprava!="" and $spam=="2")
{
Mail("xxxxxxxx@seznam.cz", $predmet, $zprava2, "From: " . $email);
echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>";
}
if(!empty($_POST)){
echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo otázku proti zabranění spamu.</p>";
} 


v tvém případě bych ale asi spíš kontrolovala mail viz error_get_last()
T-fon
Profil
Dej si na začátek PHP scriptu podmínku:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
a celý zpracování formuláře a odeslání emailu dej do ní.
Stig001
Profil
T-fon:
Super, děkuji (bohužel jsem se k tomu dostal po nějaké delší době, ale v principu to funguje).

Jinak ještě prosím jedna otázka:

Zde je cvičná verze odesílání komentářů: radekcaga.wz.cz/zk2.php

mám tam mimo jiné:


<form action="zk2.php" method="post"></p>
<table>
<tr><th>*Jméno: </th><td><input type="text" name="jmeno" maxlength="25"></td></tr>
<tr><th>1 plus 1 = ?: </th><td><input type="text" name="kontrola" maxlength="10"></td></tr>
<tr><th>*Zpráva: </th><td><textarea cols="60" rows="5" name="zprava"></textarea></td></tr>
<tr><th></th><td><input type="submit" value="odeslat" id="submit"></td></tr>
</table>
</form>
a javascript
 <script>

$("submit").click(function() {
    $('html,body').animate({
        scrollTop: $(".second").offset().top},
        3000);
});

   </script> 

Mělo by to fungovat ideálně tak, že po odeslání formuláře mě slidem sjede obrazovka až dolů, kde je třída second - tj. jakoby na poslední koment.
Samotné php funguje, samotný javascript taky funguje, ale obojí dohromady nefunguje. Zkoušel jsem i tomu tlačítku dát id a třídu a stejný výsledek .

Nevěděl by prosím někdo, jak modifikovat kód pro plnou kompatibilitu ?

Děkuji moc,
Keeehi
Profil
1) Máš tam dvě verze jQuery. Takže si jednu vyber a tu druhou odstraň. Může to způsobovat divné chování. S problémem to nesouvisí ale může ti to pak dělat problémy.
2) Fungovat to nemůže, jelikož kliknutím na tlačítko odeslat se stávající stránka smaže a načte nová. Na té nové se zatím na žádné tlačítko nekliklo, takže se animace nespustí. Musíš ji tedy spouštět, rovnou při načtení (když je jQuery ready)
$(function() {
    $('html,body').animate({
        scrollTop: $(".second").offset().top},
        3000);
});

Mnohem lepší by ale bylo přidat komentářům kotvy (rozlišené IDčky) a po odeslání formuláře přesměrovat na stránku s kotvou. 1) Přesměrovávat po odeslání formuláře by jsi měl vždy, jelikož to zabrání jeho dvojitému odeslání. 2) Způsobí to automatické posunutí na danou kotvou ve všech prohlížečích a nevyžaduje to podporu/zapnutí javascriptu. Případná animace se k tomu dá samozřejmě dodělat.
Stig001
Profil
Keeehi:
Děkuji, zařadil jsem ten script do kódu a asi to i funguje, super. Nad tím dvojitým odesíláním už jsem taky uvažoval, ale na nic jsem zatím nepřišel. Hlavní a pro mě v podstatě jediný problém je, že po stisku F5 atd. to odesílá další duplicitní komentář.
Javascriptu se nebráním, protože 1) se nebude rozhodně jednat o žádná citlivá data 2) si myslím, že dnes ho má minimálně 99,5% lidí zapnutý.
Keeehi
Profil
Stig001:
Nad tím dvojitým odesíláním už jsem taky uvažoval, ale na nic jsem zatím nepřišel.
hm

Hlavní a pro mě v podstatě jediný problém je, že po stisku F5 atd. to odesílá další duplicitní komentář
To je přesně ono. Jenže řešení jsem ti i napsal. Keeehi: „Mnohem lepší by ale bylo přidat komentářům kotvy (rozlišené IDčky) a po odeslání formuláře přesměrovat na stránku s kotvou.

Javascriptu se nebráním
Vždyť já neříkal, že ho nemáš používat. Já říkal, že existuje jiná metoda, která bude fungovat vždy. A pokud tam tu animaci vyžaduješ, tak že se dá dodělat. Osobně si ale myslím, že to je prasárna. 1) Má to trochu problém s tím, že se to spouští až když je vše ready, což na určitých typech připojení není dostatečně brzo. 2) Koukat 3 vteřiny na scrollující obrazovku by se mi jako uživateli fakt nechtělo.
Stig001
Profil
Keeehi:
1. nad tím opětovným odesláním zkusím nějak zapracovat.
2. Vím, že způsobů je hodně, ale nejsem úplně "plnohodnotný" programátor (resp. ani nejsem programátor), takže jsem rád, za jakýkoliv příklad, který najdu na googlu a ten si přepracuji.
3. 3 sekundy je tam teď, není to finální podoba, čas mohu změnit třeba na 0,5s ... JS považuji za samozřejmost, bez něj v dnešní době toho moc nefunguje. Formulář se odešle ikdyž je JS neaktivní. Funkci to neomezí, "komfort" malinko ano.

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: