2013-03-21 5 views
0

У меня есть страница с меню опций, однако хотелось бы, чтобы пользователь прошел тест captcha. В настоящее время я хочу, чтобы пользователь вводил по крайней мере 3 символа в текстовое поле, иначе они не смогли бы отправить форму, код будет показан ниже с условием php в конце формы. Однако я знаю, что я, очевидно, ошибся. Есть ли способ сделать это, не вставляя php-код на другой странице? Благодарю.условие перед отправкой php-формы

<?php 
// Check to see if the form has been submitted. 
if(isset($_POST['menu1'])) { 
    // If the form has been submitted, force a re-direct to the choice selected. 
    header('Location: ' . $_POST['menu1']); 
} 
?> 




<div style="padding-left: 50px"> 
<p class="arial"><strong></strong><br /><br /></p> 
<form method="post"> 
<table class="freecontact2form" border="0" width="400px"> 
<tbody> 
<tr> 
<td colspan="2"><span style="font-size: x-small;"> </span> <font color=#000000 >Which of the following do you want to use?</font> 
    <br /><br /></td> 
</tr> 
<tr> 
    <td valign="top"><table width="400px" class="freecontact2form"> 
    <tr> 
     <td colspan="2"><br /> 
     <br /> 
     <div class="freecontact2formmessage"> </div></td> 
    </tr> 
    <tr> 
     <td valign="top"><label for="menu1" >The options are:<span class="required_star"> </span></label></td> 
     <td valign="top"><select name="menu1" id="menu1"> 
     <option selected="selected" value ="http://www.google.com">Google </option> 
     <option value ="http://www.yahoo.com">Yahoo</option> 
     <option value ="http://www.bing.com">Bing</option> 
     </select></td> 
    </tr> 








    <tr> 
     <td valign="top"><label for="captcha" ><span class="required_star"></span><span class="required_star"></span></label></td> 
     <td valign="top"><BR /><BR /><img src="captcha.jpg" /></td> 
    </tr> 
    <tr> 
     <td>Please enter the characters shown in the CAPTCHA image:</td> 
     <td><input type="text" name="captcha" id="captcha" value="" size="10" /> 
     </td> 
    </tr> 







    <tr> 
     <td style="text-align:center" colspan="2"><br /><br /> 
     <input type="submit" value=" Submit "> 

</td> 
    </tr> 
    </table></td> 
    <td valign="top">&nbsp;</td> 
</tr> 



</tbody> 
</table> 
</form> <br /> 
<p> </p> 
<p> </p> 

<?php 




if(isset($_POST['menu1'])) { 


    function died($error) { 
     echo "Sorry, but there were error(s) found with the form you submitted. "; 
     echo "These errors appear below.<br /><br />"; 
     echo $error."<br /><br />"; 
     echo "Please go back and fix these errors.<br /><br />"; 
     die(); 
    } 

    if(!isset($_POST['menu1']) || 

       !isset($_POST['captcha']) 

     ) { 
     died('Sorry, there appears to be a problem with your form submission.');   
    } 

    $error_message = ""; 







    if(strlen($captcha) < 3) { 
    $error_message .= 'Please ensure the captcha entered is at least 3 characters long'; 
    } 


    if(strlen($error_message) > 0) { 
    died($error_message); 
    } 



?> 

<?php 
} 
die(); 
?> 

ответ

0

Попробуйте этот код в верхней части вашего файла (а не внизу). Заметьте, я исправил несколько проблем.

Во-первых, вы делали перенаправление header() перед выполнением кода проверки, потому что это было в верхней части вашего файла, а проверка была ниже. Я изменил логику, поэтому, если проверка завершится успешно, она будет перенаправлена, в противном случае появится сообщение об ошибке

Во-вторых, вы проверяли strlen($captcha), но должны были проверить strlen($_POST['captcha']).

<?php 
function died($error) { 
    echo "Sorry, but there were error(s) found with the form you submitted. "; 
    echo "These errors appear below.<br /><br />"; 
    echo $error."<br /><br />"; 
    echo "Please go back and fix these errors.<br /><br />"; 
    die(); 
} 

if(isset($_POST['menu1'])) { 
    if(!isset($_POST['menu1']) || !isset($_POST['captcha'])) { 
     died('Sorry, there appears to be a problem with your form submission.');   
    } 

    $error_message = ""; 

    if(strlen($_POST['captcha']) < 3) { 
    $error_message .= 'Please ensure the captcha entered is at least 3 characters long'; 
    } 

    if(strlen($error_message) > 0) { 
    // VALIDATION ERRORS, DIE 
    died($error_message); 
    } 
    else { 
    // DO YOUR REDIRECT RIGHT HERE... NO VALIDATION ISSUES, CONTINUE... 
    header('Location: ' . $_POST['menu1']); 
    } 
} 
?> 
0

Вы должны держать капчи в сессии, а затем проверить его со значением, представленного для того, чтобы соответствовать их после проверки того, что введенное значение 3 символа или больше.

Смежные вопросы