Ich versuche, eine Web-App zu entwickeln, wo Sie Beiträge erstellen können und ein (nur ein) Bild mit ihm haben, aber Sie müssen nicht haben, es könnte auch nur ein Textbeitrag sein. Dies ist nur ein persönliches Projekt, um mit php und ajax besser zu werden, also mache ich das vielleicht falsch ... Was ich versuche zu tun ist, senden Sie die Formulardaten an eine PHP-Funktion, die bestimmen wird, ob sie hochgeladen wird oder nicht, dann, was ich tun möchte, ist, wenn es erfolgreich ist, senden Sie den Bildnamen zu einer anderen Funktion, um den Beitrag in die Datenbank einzufügen, aber wenn der Bildupload nicht erfolgreich ist, zeigen Sie die Fehler an. Auch wenn es nicht erfolgreich ist, aber der Fehler ist "Kein Bild hochgeladen", gehen Sie voran und erstellen Sie den Beitrag trotzdem. HierWie überprüft man, ob das Bild hochgeladen wurde? AJAX PHP
ist das, was ich bisher
Die jQuery
$(".new-post").submit(function (e) {
e.preventDefault();
$.ajax({
type: "post",
url: "includes/image-upload.php",
data: new FormData(this),
processData: false,
contentType: false,
error: function (response) {
console.log(response);
},
success: function (response) {
var body = $("#post-body").val();
$.ajax({
type: "post",
url: "create-post-feed.php",
data: {
body: body,
image: response
},
error: function (response) {
console.log(response);
},
success: function (response) {
// console.log(response);
$('section.feed').prepend(response);
$('article.post p').each(function() {
$(this).html(linkHashtags($(this).html()));
});
$('article.post p').each(function() {
$(this).html(linkatsymbols($(this).html()));
});
revealPosts();
}
});
}
});
});
Die PHP Nach einigen Recherchen fand ich heraus, dass, wenn es ein Fehler Ich habe es als JSON zurück zu senden und dann prüfen, die Ergebnisse in jQuery. Allerdings habe ich noch, dass die Arbeit zu bekommen ...
<?php
require_once('../dbconnect.php');
include_once(INCLUDES_PATH .'functions.php');
function uploadFile ($file_field = null, $check_image = false, $random_name = false) {
//Config Section
$user_id = $_SESSION['user_id'];
//check if directory exist if not create it
if (!file_exists(HOME_PATH ."users/user_".$user_id)) {
mkdir(HOME_PATH ."users/user_".$user_id, 0777, true);
}
if (!file_exists(HOME_PATH ."users/user_".$user_id."/posts")) {
mkdir(HOME_PATH ."users/user_".$user_id."/posts", 0777, true);
}
//Set file upload path
$path = "../users/user_".$user_id."/posts/"; //with trailing slash
//Set max file size in bytes
$max_size = 1000000;
//Set default file extension whitelist
$whitelist_ext = array('jpeg','jpg','png','gif');
//Set default file type whitelist
$whitelist_type = array('image/jpeg', 'image/jpg', 'image/png','image/gif');
//The Validation
// Create an array to hold any output
$out = array('error'=>null);
if (!$file_field) {
$out['error'][] = "Please specify a valid form field name";
}
if (!$path) {
$out['error'][] = "Please specify a valid upload path";
}
if (count($out['error'])>0) {
return $out;
}
//Make sure that there is a file
if((!empty($_FILES[$file_field])) && ($_FILES[$file_field]['error'] == 0)) {
// Get filename
$file_info = pathinfo($_FILES[$file_field]['name']);
$name = $file_info['filename'];
$ext = $file_info['extension'];
//Check file has the right extension
if (!in_array($ext, $whitelist_ext)) {
$out['error'][] = "Invalid file Extension";
}
//Check that the file is of the right type
if (!in_array($_FILES[$file_field]["type"], $whitelist_type)) {
$out['error'][] = "Invalid file Type";
}
//Check that the file is not too big
if ($_FILES[$file_field]["size"] > $max_size) {
$out['error'][] = "File is too big";
}
//If $check image is set as true
if ($check_image) {
if (!getimagesize($_FILES[$file_field]['tmp_name'])) {
$out['error'][] = "Uploaded file is not a valid image";
}
}
//Create full filename including path
if ($random_name) {
// Generate random filename
$tmp = str_replace(array('.',' '), array('',''), microtime());
if (!$tmp || $tmp == '') {
$out['error'][] = "File must have a name";
}
$newname = $tmp.'.'.$ext;
} else {
$newname = $name.'.'.$ext;
}
//Check if file already exists on server
if (file_exists($path.$newname)) {
$out['error'][] = "A file with this name already exists";
}
if (count($out['error'])>0) {
//The file has not correctly validated
return $out;
}
if (move_uploaded_file($_FILES[$file_field]['tmp_name'], $path.$newname)) {
echo $newname;
} else {
$out['error'][] = "Server Error!";
}
} else {
$out['error'][] = "No file uploaded";
return $out;
}
}
$file = uploadFile('file', true, true);
if (is_array($file['error'])) {
echo json_encode($file['error']);
}
die();
wirklich schätzen jede Hilfe oder Anregungen, wie man es besser machen BTW Das zur Zeit arbeitet, das einzige Problem ist, dass die Post immer, ob das Bild erstellt wird hochgeladen oder nicht.
Normalerweise würde ich am selben Tag zumindest eine Antwort bekommen ... Ist diese Frage so schlimm? XD Ich habe gehört, dass die Bearbeitung helfen wird, die Frage aufzuwerfen.
Ohhhh Ich sehe wow ich machte Dinge über kompliziert ... Hmm in Ordnung, ich werde versuchen, danke! –
Warte, wie würde ich den Körper Inhalt von der FormData() in PHP abrufen? @Mikey –
Fragen Sie, wie Sie die Daten, die Sie mit AJAX eingereicht haben, abrufen können? So wie Sie es normalerweise tun, indem Sie '$ _POST'- und' $ _FILES'-Arrays betrachten. Stellen Sie sicher, dass alle Ihre Eingaben in Ihrem Formular 'name' Attribute haben. – Mikey