0

I'm trying to add a file upload function to a contact form, but it won't work for some reason. The upload script works fine by itself, but when I add it to the contact code, the jquery script makes it fail.

As you can tell, I am by no means an expert.

pontact.php

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(function(){
        $('#contact_form').submit(function(e){
            e.preventDefault();
            var form = $(this);
            var post_url = form.attr('action');
            var post_data = form.serialize();
            $('#loader', form).html('<img src="loader.gif" /> Please Wait...');
            $.ajax({
                type: 'POST',
                url: post_url, 
                data: post_data,
                success: function(msg) {
                    $(form).fadeOut(500, function(){
                        form.html(msg).fadeIn();
                    });
                }
            });
        });
    });
    </script>
    </head>
    <body>
    <form action="process.php" method="post" id="contact_form">
        <div>
             <label for="name">Your Name:</label>
             <input type="text" name="name" id="name" value="" tabindex="1" />
        </div>
        <div>
             <label for="email">Your Email:</label>
             <input type="text" name="email" id="email" value="" tabindex="2" />
        </div>
        <div>
            <label for="message">Message:</label>
            <textarea cols="40" rows="8" name="message" id="message"></textarea>
        </div>
<div>
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
    Send this file: <input name="userfile" type="file" />
</div>
        <div id="loader">
            <input type="submit" value="Submit" /> 
        </div>
    </form>
    </body>
    </html>

Process.php

$uploaddir = '/var/www/download/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo "<p>";

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  echo "File is valid, and was successfully uploaded.\n";
} else {
   echo "Upload failed";
}

echo "</p>";
echo '<pre>';
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
John Smith
  • 646
  • 1
  • 9
  • 30

2 Answers2

0

File upload doesnt work via jQuery even if you call form.serialize().

You can achieve the same effect via hacks like using iFrames (good article here on this) or Flash based uploaders like Uploadify.

Chris
  • 26,744
  • 48
  • 193
  • 345
0

By default you cant upload a file using ajax,( Why can't I upload files asynchronously? )

but there are a few techinques, including iframes or flash plugins you could use

Hope this helps

Community
  • 1
  • 1
pleasedontbelong
  • 19,542
  • 12
  • 53
  • 77