2010-08-24 3 views
1

Arr.Erreur de boucle sans fin dans le formulaire de contact php et jQuery

Je ne peux pas repérer la boucle sans fin dans ce formulaire de contact. Le "merci" div imprime sans cesse après la soumission du formulaire. Qu'est-ce que je rate? Est-ce l'erreur php ou aussi jQuery? (Dans le fichier de travail, la JS est inclus via <script type="text/javascript" src="contact.js"></script>)

Merci

<?php 
if(isset($_POST['submitted'])) { 
if(trim($_POST['checking']) !== '') { 
$captchaError = true; 
} else { 

if(trim($_POST['email']) === '') { 
$emailError = 'Please enter a valid email address'; 
$hasError = true; 
} else if (!eregi("^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) { 
$emailError = 'That\'s not a valid email address'; 
$hasError = true; 
} else { 
$email = trim($_POST['email']); 
} 
} 

if(!isset($hasError)) { 

$emailTo = 'to email'; 
$subject = 'site email'; 
$body = "$email"; 
$headers = 'From: webmail'; 
mail($emailTo, $subject, $body, $headers); 
$emailSent = true; 
} 
} ?> 


<script type="text/javascript"> 

$(document).ready(function() { 
    $('form#contactForm').submit(function() { 
     $('form#contactForm .error').remove(); 
     var hasError = false; 
     $('.requiredField').each(function() { 
      if($(this).hasClass('email')) { 
       var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
       if(!emailReg.test(jQuery.trim($(this).val()))) { 
        var labelText = $(this).prev('label').text(); 
        $(this).parent().append('<span class="error">&nbsp;&nbsp;<i>invalid email</i></span>'); 

        hasError = true; 
       } 
      } 
     }); 
     if(!hasError) { 
      $('#thanks').fadeOut('normal', function() { 
$(this).parent().append('<img src="../loading-small.gif" alt="Loading&hellip;" height="31" width="31" />'); 

      }); 
      var formInput = $(this).serialize(); 
      $.post($(this).attr('action'),formInput, function(data){ 
       $('form#contactForm').slideUp("fast", function() {     
        $(this).before('<p class="thanks">&nbsp;<strong>Thanks!</strong>'); 
        $(".thanks").delay(3000).fadeOut(); 
       }); 
      }); 
     } 

     return false; 

    }); 
}); 

</script> 


<?php if(isset($emailSent) && $emailSent == true) { ?> 

<div class="thanks"></div> 

<?php } else { ?> 

<form action="http://mysite.com" id="contactForm" method="post"> 

Sign up for email notification <input type="text" name="email" size="30" id="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" class="requiredField email" /> 

<?php if($emailError != '') { ?><span class="error"><?=$emailError;?></span><?php } ?> 

<input type="hidden" name="submitted" id="submitted" value="true" /> 
<button type="submit">Send</form> 

<?php } ?> 
+0

Vous ne croyez pas en indentation du code en PHP? – Tomalak

+0

Tout cela dans un fichier? – Stian

+0

N'a pas encore appris l'indentation de code :) Pense que j'ai besoin de. Et le JS est généralement inclus par URL (détails édités ci-dessus) – markratledge

Répondre

1

J'apporté quelques modifications à votre code et eu à travailler sur ma machine locale voir si celui-ci fonctionne pour vous

<?php 
if(isset($_POST['submitted'])) { 
    if(trim($_POST['checking']) !== '') { 
     $captchaError = true; 
    }else{ 
     if(trim($_POST['email']) === '') { 
      $emailError = 'Please enter a valid email address'; 
      $hasError = true; 
     } else if (!eregi("^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) { 
      $emailError = 'That\'s not a valid email address'; 
      $hasError = true; 
     } else { 
      $email = trim($_POST['email']); 
     } 
    } 

    if(!isset($hasError)) { 
     $emailTo = 'to email'; 
     $subject = 'site email'; 
     $body = "$email"; 
     $headers = 'From: webmail'; 
     mail($emailTo, $subject, $body, $headers); 
     $emailSent = true; 
    } 
} 
?> 
<html> 
    <head> 
     <title></title> 
     <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script> 
     <script type="text/javascript" src="js/jquery-ui.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('form#contactForm').submit(function() { 
       $('.error').remove(); //remove the existing error messages before we submit 
       var hasError = false; 
       //lets go through all the required feilds 
       $('.requiredField').each(function() { 
        //check to see if we are processing email 
        if($(this).hasClass('email')) { 
         var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
         if(!emailReg.test(jQuery.trim($(this).val()))) { 
          // var labelText = $(this).prev('label').text(); //this line seem useless 
          $(this).parent().append('<span class="error">&nbsp;&nbsp;<i>invalid email</i></span>'); // supply eror message 
          hasError = true; 
         } 
        } 
       }); 
       if(!hasError) { 
        $('#thanks').fadeOut('normal', function() { 
         $(this).parent().append('<img src="../loading-small.gif" alt="Loading&hellip;" height="31" width="31" />'); 
        }); 
        var formInput = $(this).serialize(); 
        $.post($(this).attr('action'),formInput, function(data){ 
         $('form#contactForm').slideUp("fast", function() {     
          $(this).before('<p class="thanks">&nbsp;<strong>Thanks!</strong>'); 
          $(".thanks").delay(3000).fadeOut(); 
         }); 
        }); 
       } 
       return false; 
      }); 
     }); 

    </script> 
</head> 
<body> 



<?php if(isset($emailSent) && $emailSent == true) { ?> 

<div class="thanks"></div> 

<?php } else { ?> 

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" id="contactForm" method="post"> 

Sign up for email notification <input type="text" name="email" size="30" id="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" class="requiredField email" /> 

<?php if($emailError != '') { ?><span class="error"><?=$emailError;?></span><?php } ?> 

<input type="hidden" name="submitted" id="submitted" value="true" /> 
<button type="submit">Send</form> 

<?php } ?> 
    </body> 
</html> 
+0

Merci! Cela fonctionne maintenant. Et les commentaires de code sont bons à savoir. Va comparer le code pour voir ce que je faisais mal .... – markratledge

+0

content je pourrais aider ..... les commentaires de code étaient la plupart du temps pour ma santé mentale – mcgrailm

1

On dirait que vous essayez à la fois ajouter un élément (<p class="thanks") tout en ayant un élément existant (le div). Pouvez-vous préciser lequel? Aussi, vous avez $("#thanks").fadeOut mais ne semblent pas avoir d'élément avec un id de thanks.

Je suggère de parcourir le code un peu plus attentivement. Je ne vois pas une boucle sans fin, mais si pour une raison quelconque la fonction est déclenchée de façon répétée, alors cela présenterait les mêmes symptômes.

Questions connexes