Вход

Просмотр полной версии : JS не отправляет вложения


аленка86
21.07.2012, 09:46
Подобные темы видела на форуме, но признаюсь честно в JS ничего не понимаю, поэтому спрашиваю на конкретном своем примере.
У меня есть форма обратной связи. Вот она http://xn----gtbd6abawidg.xn--p1ai/Form2/index.php. Но файлы и письма отправляются только при отключении JS. При включении письма вообще не приходят с прописанном кодом для файлов, код удаляю все работает и при JS/ Подскажите как настроить JS на отправку файлов.

аленка86
21.07.2012, 09:46
script.js
$(document).ready(function(){ /* После загрузки страницы */
$('#contact-form').jqTransform(); /* Видоизменить форму с помощью плагина jqtransform */

$("button").click(function(){

$(".formError").hide();/* Спрятать все тултипы с ошибками */

});

var use_ajax=true;
$.validationEngine.settings={};/* Инициализировать настройки для плагина formValidation */

$("#contact-form").validationEngine({
/* Создать проверку введенных данных */
inlineValidation: false,
inlineValidation: false,
promptPosition: "centerRight",
success : function(){use_ajax=true;}, /* если все OK включить AJAX */
failure : function(){use_ajax=false;} /* если есть ошибка, выключить AJAX */
})

$("#contact-form").submit(function(e){

if(!$('#subject').val().length)
{
$.validationEngine.buildPrompt(".jqTransformSelectWrapper","Это обязательное поле","error")
return false;
}

if(use_ajax)
{
$('#loading').css('visibility','visible'); /* Показать вращающийся gif */
$.post('submit.php',$(this).serialize()+'&ajax=1',

function(data){
if(parseInt(data)==-1)
$.validationEngine.buildPrompt("#captcha","упс, воспользуйтесь калькулятором","error"); /* если есть ошибка, создать сообщение об ошибке в captcha */

else
{
$("#contact-form").hide('slow').after('<h1>Ваша заявка принята. Ждите ответа на E-mail!</h1>'); /* показать сообщение подтверждения */
}

$('#loading').css('visibility','hidden'); /* Спрятать вращающийся gif */
}

);
}
e.preventDefault();
})

});

index.php

<?php

session_name("fancyform");
session_start();

$_SESSION['n1'] = rand(1,20);
$_SESSION['n2'] = rand(1,20);
$_SESSION['expect'] = $_SESSION['n1']+$_SESSION['n2'];


$str='';
if($_SESSION['errStr'])
{
$str='<div class="error">'.$_SESSION['errStr'].'</div>';
unset($_SESSION['errStr']);
}

$success='';
if($_SESSION['sent'])
{
$success='<h1>Thank you!</h1>';

$css='<style type="text/css">#contact-form{display:none;}</style>';

unset($_SESSION['sent']);
}
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />



<link rel="stylesheet" type="text/css" href="jqtransformplugin/jqtransform.css" />
<link rel="stylesheet" type="text/css" href="formValidator/validationEngine.jquery.css" />
<link rel="stylesheet" type="text/css" href="demo.css" />

<?=$css?>


<script src="calendar_ru.js" type="text/javascript"></script>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="jqtransformplugin/jquery.jqtransform.js"></script>
<script type="text/javascript" src="formValidator/jquery.validationEngine.js"></script>

<script type="text/javascript" src="http://scriptjava.net/source/scriptjava/scriptjava.js"></script>
<script type="text/javascript" src="script.js"></script>

<script src="calendar_ru.js" type="text/javascript"></script>

</head>

<body>

<div id="main-container">

<div id="form-container">
<h1>Форма завки на работу</h1>
<h2>Здесь вы можете оправить заявку на выполнение работы.</h2>

<form id="contact-form" name="contact-form" method="post" action="submit.php"
enctype="multipart/form-data">
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td width="15%"><label for="name">Ваше имя:</label></td>
<td width="70%"><input type="text" class="validate[required,custom[onlyLetter]]" name="name" id="name" value="<?=$_SESSION['post']['name']?>" /></td>
<td width="15%" id="errOffset">&nbsp;</td>
</tr>
<tr>
<td><label for="tel">Ваш телефон:</label></td>
<td><input type="text" class="validate[required,custom[onlyNumber]]" name="tel" id="tel" value="<?=$_SESSION['post']['tel']?>" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><label for="email">Ваш e-mail:</label></td>
<td><input type="text" class="validate[required,custom[email]]" name="email" id="email" value="<?=$_SESSION['post']['email']?>" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="3"><h2>Выберите тип работы и опишите требования</h2></td>
</tr>
<tr>
<td><label for="subject">Тип работы:</label>
<td><select name="subject" id="subject">
<option value=""> - выбрать тип работы -</option>
<option value="Диплом">Диплом</option>
<option value="Курсовая работа">Курсовая работа</option>
<option value="Контрольная работа">Контрольная работа</option>
<option value="Реферат">Реферат</option>
<option value="Эссе">Эссе</option>
<option value="Тип работы не выбран" selected="selected">Выберите тип работы</option>
</select> </td>
<td>&nbsp;</td>
</tr>
<tr>
<td><label for="poss">Тема:</label></td>
<td><input type="poss" class="validate[required]" name="poss" id="poss" value="<?=$_SESSION['post']['poss']?>" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><label for="poss1">Предмет:</label></td>
<td><input type="poss1" class="validate[required]" name="poss1" id="poss1" value="<?=$_SESSION['post']['poss1']?>" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><label for="poss3">ВУЗ:</label></td>
<td><input type="poss3" name="poss3" id="poss3" value="<?=$_SESSION['post']['poss3']?>" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><label for="poss1">Срок сдачи:</label></td>
<td><input type="text" class="validate[required]" name="poss2" id="poss2" onfocus="this.select();lcs(this)"
onclick="event.cancelBubble=true;this.select();lcs(this)"> <?=$_SESSION['post']['poss2']?></td>
</tr>
<td valign="top"><label for="message">Комментарий к работе:</label></td>
<td><textarea name="message" id="message" cols="35" rows="5"><?=$_SESSION['post']['message']?></textarea></td>
<td valign="top">&nbsp;</td>
</tr>
<tr>
<td><label for="attachfile">Методичка:</label></td>
<td><input name="attachfile" type="file" size="28"> </td>
<td><div onclick="SendFile();">Отправить файл через Ajax</div></td>
</tr>
<tr>
<td colspan="3"><h2>Введите капчу и нажмите "Отправить".</h2></td>
</tr>
<tr>
<td><label for="captcha"><?=$_SESSION['n1']?> + <?=$_SESSION['n2']?> =</label></td>
<td><input type="text" class="validate[required,custom[onlyNumber]]" name="captcha" id="captcha" /></td>
<td valign="top">&nbsp;</td>
</tr>
<tr>
<td valign="top">&nbsp;</td>
<td colspan="2"><input type="submit" name="button" id="button" value="Заказать" />
<input type="reset" name="button2" id="button2" value="Очистить" />

<?=$str?> <img id="loading" src="img/ajax-load.gif" width="16" height="16" alt="loading" /></td>
</tr>
</table>
</form>
<?=$success?>
</div>
<div class="tutorial-info">
</div>

</div>

</body>
</html>


submit.php

<?php

/* config start */

$emailAddress = 'nn@info-univer.ru';

/* config end */

require "phpmailer/class.phpmailer.php";

session_name("fancyform");
session_start();


foreach($_POST as $k=>$v)
{
if(ini_get('magic_quotes_gpc'))
$_POST[$k]=stripslashes($_POST[$k]);

$_POST[$k]=htmlspecialchars(strip_tags($_POST[$k]));
}
/* ???? ?????? ???? */
if(count($err))
{
/* ???? ????? ?????????? ? ??????? AJAX */
if($_POST['ajax'])
{
echo '-1';
}
/* ? ????????? ?????? ????????? ?????? SESSION ? ???????? ??????? ?? ????? */
else if($_SERVER['HTTP_REFERER'])
{
$_SESSION['errStr'] = implode('<br />',$err);
$_SESSION['post']=$_POST;


header('Location: '.$_SERVER['HTTP_REFERER']);
}

exit;
}
/* ???? ?????? */
$msg=
'<strong>Имя:</strong> '.$_POST['name'].'<br />
<strong>Телефон:</strong> '.$_POST['tel'].'<br />
<strong>e-mail:</strong> '.$_POST['email'].'<br />
<strong>Тип работы:</strong> '.$_POST['subject'].'<br />
<strong>Тема работы:</strong> '.$_POST['poss'].'<br />
<strong>Предмет:</strong> '.$_POST['poss1'].'<br />
<strong>ВУЗ:</strong> '.$_POST['poss3'].'<br />
<strong>Срок сдачи:</strong> '.$_POST['poss2'].'<br />
<strong>Комментарий:</strong><br /> '.nl2br($_POST['message']).'<br />
<strong>IP:</strong> '.$_SERVER['REMOTE_ADDR'].'<br />
';
$target_path = "uploads/";


$target_path = $target_path . basename( $_FILES['attachfile']['name']);
if(move_uploaded_file($_FILES['attachfile']['tmp_name'], $target_path)) {


$mail = new PHPMailer();
$mail->IsMail();

$mail->AddReplyTo($_POST['email'], $_POST['name']);
$mail->AddAddress($emailAddress);
$mail->SetFrom($_POST['email'], $_POST['name']);
$mail->Subject = $_POST['poss'];

if(pathinfo($_FILES['attachfile']['name'], PATHINFO_EXTENSION)!='php'){
$mail->AddAttachment($target_path, basename( $_FILES['attachfile']['name']));
}

$mail->MsgHTML($msg);

$mail->Send();
}
unset($_SESSION['post']);
/* ????? ?????? ???? ?????????? */

if($_POST['ajax'])
{
echo '1';
}
else
{
$_SESSION['sent']=1;

if($_SERVER['HTTP_REFERER'])
header('Location: '.$_SERVER['HTTP_REFERER']);

exit;
}
/* ?????????????? ??????? */
function checkLen($str,$len=2)
{
return isset($_POST[$str]) && mb_strlen(strip_tags($_POST[$str]),"utf-8") > $len;
}

function checkEmail($str)
{
return preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $str);
}
?>

tadjik1
21.07.2012, 17:05
$.post('submit.php',$(this).serialize()+'&ajax=1',

файлы таким образом не отправляются. либо удалите эту строчку, и отправляйте форму без жс, либо реализуйте отправку формы через FormData(), но тогда вам придётся отказаться от поддержки ИЕ.

tadjik1
21.07.2012, 17:06
http://javascript.ru/forum/ajax/29902-ajax-problema-zagruzki-fajjla.html