Autor Zpráva
miropiro
Profil
Dobrý den, tak stránka moje se již dostává do fáze, že by mohla fungovat. Vytvořil jsem si pro ni také kontaktní formulář na stránce powderdosing.info/powderdosing-info/fermentor-style/contact - vytvořil jsem jej podle návodu na www.pcdays.cz/2012/04/kontaktni-formular-s-captcha-v-php

V tomto návodu se ovšem nepsalo, jak upozornit uživatele na to, že určité pole je povinné, tuhle věc jsem odkoukal z novinek v HTML5. Jenže, pořád je problém v tom, že nevím, jak vyřešit to, že když návštěvník stránky opíše kód nesprávně, tak při kliknutí na odeslání formuláře nebude muset celý formulář vyplňovat, ale jen opíše znova ten kód Captcha...

Určitě jde jen o nějakou věc navíc v kódu, ale kde ji přidat? Stávající kód je následující.

<?php
session_start();
if (!empty($_REQUEST['captcha'])) 
{
    if (empty($_SESSION['captcha']) || trim(strtolower($_REQUEST['captcha'])) != $_SESSION['captcha']) 
    {
        $oznameni= 'Please rewrite the text of the image correctly.';
    } 
    else 
    {
    if($_SERVER["REQUEST_METHOD"] == "POST")
{
// promenne
$jmeno = $_POST["jmeno"];
$company = $_POST["company"];
$email = $_POST["email"];
$txt = $_POST["txt"];
$moje_adresa = "office01@lambda-instruments.com,in@lambda-instruments.com"; // zmente na svoji adresu
$predmet = "Contact from Powderdosing.info"; // zde nastavite co bude uvedeno v predmetu
$zprava = ("Name: " . $jmeno . "\n\n" . "Company: " . $company . "\n\n" . "Text: \n" . $txt . "\n\nSender: " . $email);
// odeslani emailu
mail($moje_adresa,$predmet,$zprava);

$oznameni= 'Your message was sent. We will reply as soon as possible.';
}
    }
    unset($_SESSION['captcha']);
}
?>

<form method="post">
<fieldset>
 <p>Do you have any questions concerning the DOSER? Are you interested about getting the DOSER for your lab? Then just fill the formular and we will contact you! We are ready to respond constructively to ideas, proposals or innovative products you may wish to share with us.</p>
<table style="font-size: 14px;">
    <tr><td colspan="2"><div style="width:300px;background:red; margin-bottom:20px"><?php echo $oznameni; ?></div></td>
    <tr><td>Name:</td><td><input type="text" name="jmeno" required/></td></tr>
    <tr><td>Company:</td><td><input type="text" name="company" required/></td></tr>
    <tr><td>E-mail:</td><td><input type="email" name="email" required/></td></tr>
    <tr><td>Message:</td><td><textarea name="txt" cols="50" rows="5" required></textarea></td></tr>
    <tr><td colspan="2"><b>Please write the text from the image:</b></td></tr>
    <tr><td><input type="text" name="captcha" id="captcha-form" required/></td><td><img src="captcha.php" id="captcha" /><input type="submit" value="Send" style="font-size: 14px;"/></td></tr>
    <tr><td colspan="2"><a href="#" onclick="document.getElementById('captcha').src='captcha.php?'+Math.random();
        document.getElementById('captcha-form').focus();"id="change-image">Cannot read the image? Try another one!</a></td></tr>
</table>

</fieldset>
</form>

Předem děkuji za rady :-)


A jinak mne ještě napadlo - kdybych chtěl místo captchi používat Math Guard, bude to pro mne jednodušší? Jak ale jednoduše ten kód přidat :) ?
lionel messi
Profil
miropiro:

Nepoužívajte globálne pole $_REQUEST, prináša so sebou viacero problémov.

jak vyřešit to, že když návštěvník stránky opíše kód nesprávně, tak při kliknutí na odeslání formuláře nebude muset celý formulář vyplňovat, ale jen opíše znova ten kód Captcha...

<input type="text" name="jmeno" required value="<?php echo isset ($_POST['jmeno'] ? htmlspecialchars($_POST['jmeno']) : '')?>" />

a obdobne pre každé pole okrem CAPTCHA.
Manny
Profil
CAPCHA je zlo. V 90% případů nemá opodstatnění. (viz. tato diskuse)
Jsou i jiné způsoby michal.skrabalek.cz/navody/opravdu-funkcni-antispam-reseni
miropiro
Profil
Manny: Ten návod je zajímavý, ale na druhou stranu jsem úplně nepochopil to, jak dojde k zablování toho spamu? Tam se píše, že když použiji skryté formulářové pole či falešné odesílací tlačítko, ta to vychytá ty spamy, to jako samo?
mimochodec
Profil
miropiro:
Člověk to pole nevidí, robot ho vidí a vyplní. Na tobě je, abys tam, kde ten formulář zpracováváš, ten rozdíl odchytil a podle něj reagoval.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0