При попытке комбинировать отправку и загрузку в одной форме у меня есть проблема с загрузкой, но для формы отправки это не проблема.
JQuery + Ajax:
$("#oqcsubmit").click(function() { if($("#oqc").valid()) { var params=$("#oqc").serialize(); $.ajax({ type:"post", url:"doinput.php", data:params, cache :false, async :false, success : function() { $(".dt").val(""); $(".stat").val(""); return this; }, error : function() { alert("Data failed to input."); } }); return false; } }); <form id="oqc" enctype="multipart/form-data" > <input type="text" id="mod" name="mod" class="dt"/> <input type="text" id="no" name="no" class="dt"/> <input id="filename" name="uploadedfile" type="file" /> <input type="submit" id="oqcsubmit" value="Submit" /> <input type="hidden" name="action" value="oqcdata" /> </form>
PHP:
$dbc=mysql_connect(_SRV,_ACCID,_PWD) or die(_ERROR15.": ".mysql_error()); $db=mysql_select_db("QPL",$dbc) or die(_ERROR17.": ".mysql_error()); $target_path = "data/"; $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); //print_r($_FILES); if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; } switch(postVar('action')) { case 'oqcdata' : oqcdata(postVar('mod'),postVar('no')); break; } function oqcdata($mod,$no) { $Model = mysql_real_escape_string($mod); $Serial = mysql_real_escape_string($no); //build query $sql = "INSERT INTO OQC (Model, Serial) VALUES ('".$Model."','".$Serial."')"; echo $sql; $result=mysql_query($sql) or die(_ERROR26.": ".mysql_error()); echo $result; mysql_close($dbc);
как правильно разместить код загрузки на этой странице? так что оба могут работать. разрешение каталога: chmod 777 data
файл остается в форме после отправки (не отправляется).
ОБНОВИТЬ
После перемещения кода загрузки перед переключением я получил ошибку:
PHP Notice: Undefined index: uploadedfile
это означает, что форма не отправляет значение uploadedfile
. После проверки параметра нет uploadedfile
файла. почему так происходит? даже это значение включено внутри формы и использует .serialize()
.
form data : mod:KD-R321ED no:177X1000 // where is the uploaded file value? action:oqcdata
PHP Notice: Undefined index: uploadedfile
это означает, что форма не отправляет значение uploadedfile. После проверки параметра нет загруженного файла. почему так происходит?
Вы не можете загружать файлы поверх анимированных браузеров , таких как jQuery. Период, полная остановка, конец истории.
Если вы должны сделать загрузку без обновления страницы, общий трюк заключается в создании iframe
и отправке формы на него. Другой трюк заключается в использовании экспериментального Файлового API , представленного как часть HTML5. Это может быть болью, чтобы справиться с собой, но она должна хорошо работать, если вы хотите сделать все это вручную.
Для этого я настоятельно рекомендую использовать сторонний файл для загрузки. Мне повезло с Plupload , но некоторые люди также рекомендуют Uploadify . Они могут оба по желанию использовать Flash или HTML5-сервер для выполнения загрузки, что также дает пользователям счастливый небольшой индикатор прогресса.
Вы должны использовать XHR2 для загрузки файлов через AJAX.
Пример :
Javascript / Clientside:
function upload() { var fileInput = document.getElementById('file_input_upload'); var file = fileInput.files[0]; xhr = new XMLHttpRequest(); xhr.open('post', 'upload.php', true); xhr.setRequestHeader("Content-Type", "application/octet-stream"); xhr.setRequestHeader("Cache-Control", "no-cache"); xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); xhr.setRequestHeader("X-File-Name", file.name); xhr.setRequestHeader("X-File-Size", file.size); xhr.setRequestHeader("X-File-Type", file.type); xhr.send(file); }
HTML:
<input type="file" id="file_input_upload"/> <div onmousedown="upload()">Upload my file</div>
PHP / Serverside (upload.php):
$file_name = $_SERVER['HTTP_X_FILE_NAME']; $file_size = $_SERVER['HTTP_X_FILE_SIZE']; file_put_contents( "data/" . $file_name, file_get_contents("php://input") );
Это был простой пример без проверки ошибок. Поэтому, пожалуйста, не используйте этот код для использования в целях производства. И если вы хотите загружать большие файлы (в GB), вы должны использовать веб-мастеров
Вы можете использовать Uploadify для обработки загрузки файла. Он предлагает функцию обратного вызова onUploadSuccess . Откуда вы можете получить информацию о загруженном файле (имя файла, путь и т. Д.). Вы можете использовать эту информацию и обновить скрытое поле ввода в своей форме. А затем вы можете получить доступ к информации на стороне сервера и манипулировать ею.
Надеюсь это поможет.
Невозможно отправить входные данные файла только с помощью $ .ajax. Я успешно использовал плагин jQuery form http://malsup.com/jquery/form/ . Он переносит любую форму в обработку AJAX и добавляет много полезных вариантов обратного вызова. Он также делает некоторые умные вещи для обработки загрузки файлов. Для старых браузеров (которые не поддерживают XHR Level 2) могут быть некоторые незначительные дополнительные модификации на стороне сервера, но в остальном это работает из коробки.
Для конкретных документов по использованию формы jQuery для обработки загрузки файлов см. http://malsup.com/jquery/form/#file-upload
Лучше использовать простой способ, с отдельным процессом:
$("#oqcsubmit").click(function() { if($("#oqc").valid()) { var params=$("#oqc").serialize(); $.ajax({ type:"post", url:"doinput.php", data:params, cache :false, async :false, success : function() { $(".dt").val(""); $(".stat").val(""); return this; }, error : function() { alert("Data failed to input."); } }); return false; } }); <form id="oqc"> <input type="text" id="mod" name="mod" class="dt"/> <input type="text" id="no" name="no" class="dt"/> <input type="submit" id="oqcsubmit" value="Submit" /> <input type="hidden" name="action" value="oqcdata" /> </form> <form enctype="multipart/form-data" action="uploader.php" method="POST"> Upload File: <input id="filename" name="uploadedfile" type="file" /> <input id="upload" type="submit" value="Upload File" style="display:none;"/> </form>
.$("#oqcsubmit").click(function() { if($("#oqc").valid()) { var params=$("#oqc").serialize(); $.ajax({ type:"post", url:"doinput.php", data:params, cache :false, async :false, success : function() { $(".dt").val(""); $(".stat").val(""); return this; }, error : function() { alert("Data failed to input."); } }); return false; } }); <form id="oqc"> <input type="text" id="mod" name="mod" class="dt"/> <input type="text" id="no" name="no" class="dt"/> <input type="submit" id="oqcsubmit" value="Submit" /> <input type="hidden" name="action" value="oqcdata" /> </form> <form enctype="multipart/form-data" action="uploader.php" method="POST"> Upload File: <input id="filename" name="uploadedfile" type="file" /> <input id="upload" type="submit" value="Upload File" style="display:none;"/> </form>
.$("#oqcsubmit").click(function() { if($("#oqc").valid()) { var params=$("#oqc").serialize(); $.ajax({ type:"post", url:"doinput.php", data:params, cache :false, async :false, success : function() { $(".dt").val(""); $(".stat").val(""); return this; }, error : function() { alert("Data failed to input."); } }); return false; } }); <form id="oqc"> <input type="text" id="mod" name="mod" class="dt"/> <input type="text" id="no" name="no" class="dt"/> <input type="submit" id="oqcsubmit" value="Submit" /> <input type="hidden" name="action" value="oqcdata" /> </form> <form enctype="multipart/form-data" action="uploader.php" method="POST"> Upload File: <input id="filename" name="uploadedfile" type="file" /> <input id="upload" type="submit" value="Upload File" style="display:none;"/> </form>
.$("#oqcsubmit").click(function() { if($("#oqc").valid()) { var params=$("#oqc").serialize(); $.ajax({ type:"post", url:"doinput.php", data:params, cache :false, async :false, success : function() { $(".dt").val(""); $(".stat").val(""); return this; }, error : function() { alert("Data failed to input."); } }); return false; } }); <form id="oqc"> <input type="text" id="mod" name="mod" class="dt"/> <input type="text" id="no" name="no" class="dt"/> <input type="submit" id="oqcsubmit" value="Submit" /> <input type="hidden" name="action" value="oqcdata" /> </form> <form enctype="multipart/form-data" action="uploader.php" method="POST"> Upload File: <input id="filename" name="uploadedfile" type="file" /> <input id="upload" type="submit" value="Upload File" style="display:none;"/> </form>
оба могут работать нормально, лучший способ – не делать сложный путь, если легко сделать это.
для загрузки файлов через ajax пройти этот URL-адрес ajax-файл для загрузки