Медленно, но верно, я собираюсь получить AJAX. У меня есть форма, которая загружает текстовое поле и файл в базу данных. Ранее у меня был запрос на PHP, но не AJAX. Теперь работает AJAX, но не PHP. И я знаю, что некоторые из них сочтут неприемлемым загрузить изображение в BLOB, но сам запрос работает, поэтому я хотел бы сосредоточиться на проблемах, с которыми у меня возникает мой javascript, чтобы поговорить с моим PHP. Я исследовал проблему как сумасшедшую и пробовал много вещей, но то, что я ушел, заключается в том, что загрузка файлов сложна.PHP и AJAX: AJAX работает, PHP не выполняет запрос
Вопросы 1. Исправьте меня, если я ошибаюсь, но если javascript и jquery реализуют вызов «POST», переданные параметры не должны отображаться на URL страницы? Потому что они.
2. Почему мой PHP-файл не разбирает отправленные данные и не отправляет их в базу данных? Я вижу в URL-адресе и в Firebug (хотя я тоже медленно изучаю Firebug), что данные передаются. Я запустил тестовый php-файл, и я подключаюсь к базе данных с этим файлом.
Спасибо!
HTML
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.1.1.min.js"></script>
<script src="jquery.validate.js"></script>
<script src="jquery.form.js"></script>
<script>
$(document).ready(function(){
$('#addForm').validate();
function addRecord() {
$("#aTable").hide('slow', function() { //this is not working
alert('Working on it.');
});
$("#tableText").hide('slow', function() {//this is not working
alert('Working on it.');
});
var output = document.getElementById("message");
var nAname = document.getElementById("aname");
var nAInfo = new FormData(document.forms.namedItem("addForm"));
nAInfo.append('aname', nAname);
$.ajax({
type: "POST",
url: "addPhoto.php",
data: nAInfo
});
});
</script>
</head>
<body>
<form id="addForm" name="addForm" onsubmit="addRecord()" enctype="multipart/form-data">
<label>Name: </label>
<input type="text" id="aname" name="aname" class=required/>
<br>
<br>
<label>Photo: </label>
<input type="file" id="aimage" name="aimage" class="required">
<br>
<br>
<input type="submit" value="ADD" />
<br>
</form>
<div id="message" name="message"></div>
<br>
<br>
<div id="image_display"></div>
</body>
</html>
PHP
<?php
ini_set('display_errors', 'On');
ini_set('display_startup_errors', 'On');
error_reporting(E_ALL);
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error;
}
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $_SERVER['REQUEST_METHOD'];
$aname = $_POST['aname'];
$errorinfo = $_FILES["aimage"]["error"];
$filename = $_FILES["aimage"]["name"];
$tmpfile = $_FILES["aimage"]["tmp_name"];
$filesize = $_FILES["aimage"]["size"];
$filetype = $_FILES["aimage"]["type"];
$fp = fopen($tmpfile, 'r');
$imgContent = fread($fp, filesize($tmpfile));
fclose($fp);
if (!($filetype == "image/jpeg" && $filesize > 0)) {
echo "Import of photo failed";
}
if ($filetype == "image/jpeg" && $filesize > 0 && $filesize < 1048576) {
if (!($stmt=$mysqli->prepare("INSERT INTO actor_info (aname, aimage_data) VALUES (?,?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ")" . $mysqli->error;
}
if (!$stmt->bind_param("ss", $aname, $imgContent)) {
echo "Binding parameters failed: (" . $stmt->errno .") " . $stmt->error;
}
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
$stmt->close();
}
else {
echo "Image must be under 1 MB";
}
echo mysqli_error();
mysqli_close($mysqli);
?>
остановка. отступите от этого кода. посмотрите, насколько он сумасшедший. вы используете jquery ... но реализуете свой ** OWN ** ajax-код? **ЗАЧЕМ**? В jquery есть замечательные и простые интерфейсы ajax, встроенные в него: http://api.jquery.com/jQuery.post/ –
Также, если ваши параметры формы отображаются в URL-адресе, то вы, вероятно, не выполняете POST, это скорее всего GET. Вы можете тривиально отладить это, выполнив 'echo $ _SERVER ['REQUEST_METHOD']' в вашем php-коде. Ваш код обработки файлов является притворным. 'addslashes()' настолько дерьмовый, что даже HOPE не может стремиться к тому, чтобы его звали. ** НИКОГДА не используйте **, особенно в коде базы данных. ** НИКОГДА не предполагайте, что загрузка файла преуспела. ** НИКОГДА ** доверие данные в $ _FILES –
@Marc B Я попытался следующие без успеха $ .ajax ({ типа: "POST", URL: "addActorPhoto.php", данные: nAInfo }) ; – user1852050