0

I am getting some strange behavior on Internet Explorer with a form I am building, when I add a remote rule in the jQuery, namely, the remote validate rule relating to "username" using "check_username.php". In the code below I am using requiring a view.php script that utilizes jquery scripts and creates the "page_start" custom function that is for having a uniform view on pages throughout the site. These are the jquery scripts on view.php:

<script type="text/javascript" src="/StructuredPages/js/jquery.js"></script>
<script type="text/javascript" src="/StructuredPages/js/jquery.validate.js"></script>
<script type="text/javascript" src="/StructuredPages/js/jquery.validate.password.js"></script>

This is the form code that I want client side validation on, then has a server side validation through the create_user_redo_old.php file.

    <?php

    require_once $_SERVER['DOCUMENT_ROOT'] . "/StructuredPages/scripts/view.php";

    $inline_javascript = <<<EOD
        $(document).ready(function() {
          $("#signup_form").validate({
            rules: {
          first_name: {
            minlength : 2
          },
              last_name: {
            minlength : 2
          },
          username: {
            minlength: 4,
        remote: "check_username.php"
          },
              street: {
            minlength : 5
          },
          city: {
            minlength : 2
          },
          postal_code: {
        minlength: 5
          },
              password: {
                minlength: 6
              },
              confirm_password: {
                minlength: 6,
                equalTo: "#password"
              }
            },
            messages: {
          first_name: {
            minlength: "First Name must contain at least 2 characters"
           },
          last_name: {
                minlength: "Last Name must contain at least 2 characters"
          },
          username: {
            minlength: "Username must contain at least 4 characters",
        remote: "Username already exists, please try another"
          },
          street: {
            minlength: "Street must contain at least 5 characters"
              },
          city: {
            minlength: "City must contain at least 2 characters"
          },
            postal_code: {
                minlength: "Zip Code must contain 5 numerals"
              },
              password: {
                minlength: "Passwords must be at least 6 characters"
              },
              confirm_password: {
                minlength: "Passwords must be at least 6 characters",
                equalTo: "Your passwords do not match."
              }
            }
          });
        });
    EOD;

    page_start("Free Member Registration", $inline_javascript); 
    ?>

    <div id="content">
    <h1>Member Registration</h1>
    <p>Please enter your information below:</p>
    <form id="signup_form" action="create_user_redo_old.php" 
          method="POST" enctype="multipart/form-data">
      <fieldset>
        <label for="first_name">First Name:</label> 
        <input type="text" name="first_name" id="first_name" size="20" class="required" /><br />
        <label for="last_name">Last Name:</label> 
        <input type="text" name="last_name" id-"last_name" size="20" class="required" /><br />
        <label for="username">Username:</label> 
        <input type="text" name="username" id="username" size="20" class="required" /><br />
        <label for="password">Password:</label> 
        <input type="password" id="password" name="password" 
               size="20" class="required password" />
        <div class="password-meter">
          <div class="password-meter-message"> </div>
          <div class="password-meter-bg">
            <div class="password-meter-bar"></div>
          </div>
        </div>
        <br />
        <label for="confirm_password">Confirm Password:</label> 
        <input type="password" id="confirm_password" name="confirm_password" 
               size="20" class="required" /><br />
        <label for="email">E-Mail Address:</label> 
        <input type="text" name="email" size="30" class="required email" /><br />
        <label for="street">Street:</label> 
        <input type="text" name="street" id="street" size="50" class="required" /><br />
        <label for="city">City:</label> 
        <input type="text" name="city" id="city" size="30" class="required" /><br />
        <label for="state">State:</label> 
        <select name="state" class="required">
            <option value=""></option>
            <option value="AL">Alabama</option>
            <option value="AK">Alaska</option>
            <option value="AZ">Arizona</option>
            <option value="AR">Arkansas</option>
            <option value="CA">California</option>
            <option value="CO">Colorado</option>
            <option value="CT">Connecticut</option>
            <option value="DE">Delaware</option>
            <option value="DC">District of Columbia</option>
            <option value="FL">Florida</option>
            <option value="GA">Georgia</option>
            <option value="HI">Hawaii</option>
            <option value="ID">Idaho</option>
            <option value="IL">Illinois</option>
            <option value="IN">Indiana</option>
            <option value="IA">Iowa</option>
            <option value="KS">Kansas</option>
            <option value="KY">Kentucky</option>
            <option value="LA">Louisiana</option>
            <option value="ME">Maine</option>
            <option value="MD">Maryland</option>
            <option value="MA">Massachusetts</option>
            <option value="MI">Michigan</option>
            <option value="MN">Minnesota</option>
            <option value="MS">Mississippi</option>
            <option value="MO">Missouri</option>
            <option value="MT">Montana</option>
            <option value="NE">Nebraska</option>
            <option value="NV">Nevada</option>
            <option value="NH">New Hampshire</option>
            <option value="NJ">New Jersey</option>
            <option value="NM">New Mexico</option>
            <option value="NY">New York</option>
            <option value="NC">North Carolina</option>
            <option value="ND">North Dakota</option>
            <option value="OH">Ohio</option>
            <option value="OK">Oklahoma</option>
            <option value="OR">Oregon</option>
            <option value="PA">Pennsylvania</option>
            <option value="RI">Rhode Island</option>
            <option value="SC">South Carolina</option>
            <option value="SD">South Dakota</option>
            <option value="TN">Tennessee</option>
            <option value="TX">Texas</option>
            <option value="UT">Utah</option>
            <option value="VT">Vermont</option>
            <option value="VA">Virginia</option>
            <option value="WA">Washington</option>
            <option value="WV">West Virginia</option>
            <option value="WI">Wisconsin</option>
            <option value="WY">Wyoming</option>
            <option value="AS">American Samoa</option>
            <option value="FM">Federated States of Micronesia</option>
            <option value="GU">Guam</option>
            <option value="MH">Marshall Islands</option> 
            <option value="MP">Northern Mariana Islands</option>
            <option value="PW">Palau</option>
            <option value="PR">Puerto Rico</option>
            <option value="VI">Virgin Islands</option>
        </select><br />
        <label for="postal_code">Zip Code:</label> 
        <input type="text" name="postal_code" id="postal_code" size="5" maxlength="5" class="required digits" /><br />
        <input type="hidden" name="MAX_FILE_SIZE" value="400000" />
        <label for="user_pic">Upload a picture:</label> 
        <input type="file" name="user_pic" size="30" /><br />
        <label for="bio">Bio:</label> 
        <textarea name="bio" cols="40" rows="10"></textarea>
      </fieldset>
      <br />
      <fieldset class="center">
        <input type="submit" value="Register" />
        <input type="reset" value="Clear and Restart" />
      </fieldset>
    </form>
  </div>

  <div id="footer"></div>
 </body>
</html>

This is the check_username.php code

<?php
    require_once $_SERVER['DOCUMENT_ROOT'] . '/StructuredPages/scripts/app_config.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/StructuredPages/scripts/database_connection.php';

    $name = trim($_REQUEST['username']);
    $uname = mysql_real_escape_string($name);

    $query = "SELECT username FROM users WHERE username='$uname';";
    $res = mysql_query($query);
    if (mysql_num_rows($res) != 0)  
    {
        $output = false;
    } else {
        $output = true;
    }
    echo json_encode($output);
?>

My problem in IE is that the username validation works sometimes and only for certain usernames in the MySQL database. And if you try a username in the database and the message doesn't come up that "Username already exists..." then things appear to go out of sorts and no matter what that field cannot be verified once a different message comes up, such as "This field is required" as a product of the class="required", or the message "Username must contain at least 4 characters" as a result of the jquery validation minlength rule (even if the rule has been obeyed). The most mysterious thing about this is why certain usernames will match and others will not. It appears that a match is found but something is causing certain usernames to break the code. Also, it works fine in Chrome.

Jay C. Besch
  • 89
  • 1
  • 9
  • By the way this code is also working fine with Internet Explorer 8 (the message as a result of the remote validation does take a second before appearing, but does appear correctly). So the problem above appears to be with IE 9. – Jay C. Besch Mar 13 '12 at 20:40
  • Ok, got it to work by replacing: $(document).ready(function() {...your code...}) with: jQuery(function() {...your code...}) – Jay C. Besch Mar 14 '12 at 01:23

1 Answers1

0

Changing this:

$(document).ready(function(){...})

with:

jQuery(function(){...})

resolved the wonky IE9 behavior in the form script. If you are having weird problems with remote validation using jQuery in Internet Explorer give this a try.

Jay C. Besch
  • 89
  • 1
  • 9