mbrainiac Postado Outubro 27 Denunciar Share Postado Outubro 27 Não sei qual o motivo do código criar 2 pastas: 1 - user/userid/profilePhoto (desejada) 2 - user/profilePhoto (indesejada) Para carregar a imagem preciso manualmente copiar da 2 para a 1. O que devo alterar para fazer isso e não gerar a pasta 2? Foi inserido com sucesso no banco profile.php (javascript, jquery) $(document).on('change', '#profile-upload', function(){ var name = $('#profile-upload').val().split('\\').pop(); var file_data = $('#profile-upload').prop('files')[0]; var file_size = file_data["size"]; var file_type = file_data["type"].split('/').pop(); var userid = '<?php echo $userid; ?>'; var imgName = 'user/' + userid + '/profilePhoto/' + name + ''; var form_data = new FormData(); form_data.append('file', file_data); if(name != ''){ $.post('http://localhost/facebook/core/ajax/profilePhoto.php', {imgName: imgName, userid: userid}, function(data){ // $('#adv-dem').html(data); }) $.ajax({ url: 'http://localhost/facebook/core/ajax/profilePhoto.php', cache: false, contentType: false, processData: false, data: form_data, type: 'post', success: function(data){ $('.profile-pic-me').attr('src', ""+data+""); $('.profile-dialog-show').hide(); } }) } }) Citar Link para o comentário Compartilhar em outros sites More sharing options...
1 Frank K Hosaka Postado Outubro 27 Denunciar Share Postado Outubro 27 Eu sou novo no JavaScript, mesmo assim, eu acredito que o problema é lá no arquivo profilePhoto.php, deve ser ele que está duplicando os arquivos. Eu fiz um teste aqui, usando a pasta Astudy e dentro dele criei a pasta profilePhoto, usando um código HTML e outro PHP, ele não usa o código do usuário para renomear os arquivos, mas ele funciona. Espero que esses códigos ajudem você a montar o projeto do jeito que você espera: arquivo index.php <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Upload de Arquivo com AJAX</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <input type="file" id="file-upload"> <button id="upload-btn">Enviar Arquivo</button> <img id="uploaded-img" src="" alt="Imagem enviada"> <script> $(document).ready(function() { $('#upload-btn').click(function() { var file_data = $('#file-upload').prop('files')[0]; var form_data = new FormData(); form_data.append('file', file_data); $.ajax({ url: 'upload.php', // URL do script PHP para salvar o arquivo type: 'POST', data: form_data, contentType: false, processData: false, success: function(response) { $('#uploaded-img').attr('src', response); alert('Upload realizado com sucesso!'); }, error: function() { alert('Erro no upload do arquivo.'); } }); }); }); </script> </body> </html> arquivo upload.php <?php if (isset($_FILES['file'])) { $file = $_FILES['file']; $upload_dir = 'profilePhoto/'; $upload_file = $upload_dir . basename($file['name']); if (move_uploaded_file($file['tmp_name'], $upload_file)) { echo $upload_file; // Retorna o caminho da imagem salva } else { echo 'Erro ao salvar o arquivo.'; } } else { echo 'Nenhum arquivo enviado.'; } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
1 Frank K Hosaka Postado Outubro 27 Denunciar Share Postado Outubro 27 A imagem não está na raiz do user, ele está na pasta user/profilePhoto. Quanto ao id, vou estudar o seu novo código, e retorno em seguida. Se tiver segundo turno na sua cidade, aconselho a votar agora, senão você vai acabar esquecendo do candidato que você escolheu. Até daqui a pouco. Citar Link para o comentário Compartilhar em outros sites More sharing options...
1 Frank K Hosaka Postado Outubro 27 Denunciar Share Postado Outubro 27 (editado) Eu modifiquei o profilePhoto2.php, ele usa vários comandos que foram definidos em load.php e login.php, mas você não listou esses códigos aqui. Assim, a minha saída foi improvisar e criei um código que nem precisa do Ajax: ** atenção, aqui eu defini o diretório da minha pasta Astudy, não usei a sua estrutura de arquivos. O objetivo aqui é apresentar o conceito. <?php class Login { static function isLoggedIn() { return 14; } } $userid = Login::isLoggedIn(); if(isset($_FILES['file'])) { $imgName = $_FILES['file']['name']; $file = $_FILES['file']; $upload_dir = $_SERVER['DOCUMENT_ROOT']."/Astudy/".$userid."/profilePhoto/"; if(!file_exists($upload_dir ) && !is_dir($upload_dir )) { mkdir($upload_dir , 0777, true); } $upload_file = $upload_dir . basename($file['name']); if (move_uploaded_file($file['tmp_name'], $upload_file)) { echo "Sucesso!"; } else { echo 'Erro ao salvar o arquivo.'; } } ?> <form method=post enctype=multipart/form-data> <input type="file" name="file"> <input type=submit> </form> Editado Outubro 27 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
1 Frank K Hosaka Postado Outubro 27 Denunciar Share Postado Outubro 27 (editado) Acho que você não está usando o meu código. O código que eu passei é auto-sustentável, ele não precisa de outros arquivos para funcionar. Caso você esteja tentando adaptar, eu posso ajudar mais se você me passar o código load.php e login.php. Se preferir, você pode zipar todo o projeto e mandar para o meu email frankhosaka@gmail.com Editado Outubro 27 por Frank K Hosaka Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mbrainiac Postado Outubro 27 Autor Denunciar Share Postado Outubro 27 8 horas atrás, Frank K Hosaka disse: Eu sou novo no JavaScript, mesmo assim, eu acredito que o problema é lá no arquivo profilePhoto.php, deve ser ele que está duplicando os arquivos. Eu fiz um teste aqui, usando a pasta Astudy e dentro dele criei a pasta profilePhoto, usando um código HTML e outro PHP, ele não usa o código do usuário para renomear os arquivos, mas ele funciona. Espero que esses códigos ajudem você a montar o projeto do jeito que você espera: arquivo index.php <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Upload de Arquivo com AJAX</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <input type="file" id="file-upload"> <button id="upload-btn">Enviar Arquivo</button> <img id="uploaded-img" src="" alt="Imagem enviada"> <script> $(document).ready(function() { $('#upload-btn').click(function() { var file_data = $('#file-upload').prop('files')[0]; var form_data = new FormData(); form_data.append('file', file_data); $.ajax({ url: 'upload.php', // URL do script PHP para salvar o arquivo type: 'POST', data: form_data, contentType: false, processData: false, success: function(response) { $('#uploaded-img').attr('src', response); alert('Upload realizado com sucesso!'); }, error: function() { alert('Erro no upload do arquivo.'); } }); }); }); </script> </body> </html> arquivo upload.php <?php if (isset($_FILES['file'])) { $file = $_FILES['file']; $upload_dir = 'profilePhoto/'; $upload_file = $upload_dir . basename($file['name']); if (move_uploaded_file($file['tmp_name'], $upload_file)) { echo $upload_file; // Retorna o caminho da imagem salva } else { echo 'Erro ao salvar o arquivo.'; } } else { echo 'Nenhum arquivo enviado.'; } ?> obrigado, vou testar seu código Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mbrainiac Postado Outubro 27 Autor Denunciar Share Postado Outubro 27 fiz do seu modo e salva na raiz da pasta user e ignora o profilePhoto e salva sem a pasta com Id, acho que talvez tenha alguma forma diferente de fazer a pasta com Id. Também não sou especialista estou seguindo um curso no Udemy e o instrutor é bem desleixado, tinha até largado a área de TI profilePhoto2.php <?php require_once("../load.php"); require_once("../../connect/login.php"); // include '../load.php'; // include '../../connect/login.php'; $userid = Login::isLoggedIn(); if(isset($_POST['imgName'])){ $imgName = $loadFromUser->checkInput($_POST['imgName']); $userid = $loadFromUser->checkInput($_POST['userid']); $loadFromUser->update('profile', $userid, array('profilePic' => $imgName)); $file = $_FILES['file']; $upload_dir = $_SERVER['DOCUMENT_ROOT']."/facebook/user/".$userid."/profilePhoto/"; if(!file_exists($upload_dir ) && !is_dir($upload_dir )){ mkdir($upload_dir , 0777, true); } $upload_file = $upload_dir . basename($file['name']); } if (move_uploaded_file($file['tmp_name'], $upload_file)) { echo $upload_file; // Retorna o caminho da imagem salva } else { echo 'Erro ao salvar o arquivo.'; } else { echo 'Nenhum arquivo enviado.'; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mbrainiac Postado Outubro 27 Autor Denunciar Share Postado Outubro 27 quando coloco o número equivalente do userid que é 14 ele carrega imediatamente $path_directory = $_SERVER['DOCUMENT_ROOT']."/facebook/user/14/profilePhoto/"; if(!file_exists($path_directory) && !is_dir($path_directory)){ mkdir($path_directory, 0777, true); } Vou logo depois do almoço votar $path_directory = $_SERVER['DOCUMENT_ROOT']."/facebook/user/".$userid."/profilePhoto/"; if(!file_exists($path_directory) && !is_dir($path_directory)){ mkdir($path_directory, 0777, true); } ou $path_directory = $_SERVER['DOCUMENT_ROOT']."/facebook/user/{$userid}/profilePhoto/"; if(!file_exists($path_directory) && !is_dir($path_directory)){ mkdir($path_directory, 0777, true); } usando o $userid dá problema Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mbrainiac Postado Outubro 27 Autor Denunciar Share Postado Outubro 27 postei aqui também https://pt.stackoverflow.com/questions/597626/php-jquery-dublicando-pastas-com-id Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mbrainiac Postado Outubro 27 Autor Denunciar Share Postado Outubro 27 2 horas atrás, Frank K Hosaka disse: Eu modifiquei o profilePhoto2.php, ele usa vários comandos que foram definidos em load.php e login.php, mas você não listou esses códigos aqui. Assim, a minha saída foi improvisar e criei um código que nem precisa do Ajax: ** atenção, aqui eu defini o diretório da minha pasta Astudy, não usei a sua estrutura de arquivos. O objetivo aqui é apresentar o conceito. <?php class Login { static function isLoggedIn() { return 14; } } $userid = Login::isLoggedIn(); if(isset($_FILES['file'])) { $imgName = $_FILES['file']['name']; $file = $_FILES['file']; $upload_dir = $_SERVER['DOCUMENT_ROOT']."/Astudy/".$userid."/profilePhoto/"; if(!file_exists($upload_dir ) && !is_dir($upload_dir )) { mkdir($upload_dir , 0777, true); } $upload_file = $upload_dir . basename($file['name']); if (move_uploaded_file($file['tmp_name'], $upload_file)) { echo "Sucesso!"; } else { echo 'Erro ao salvar o arquivo.'; } } ?> <form method=post enctype=multipart/form-data> <input type="file" name="file"> <input type=submit> </form> você conseguiu gerar o arquivo na pasta Astucy/14/profilePhoto/imagem.jpg ? o sseu gerou a pasta profilePhoto/imagem.jpg ? procurei a pasta e não achei. Este foi com seu código Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mbrainiac Postado Outubro 29 Autor Denunciar Share Postado Outubro 29 Olá FRank, O seu deu certo sim, tinha salvado nUma pasta fora da raiz agora salvou certo com estas modificações, salva na raiz, no meu caso facebook. Vou tentar descobrir o que está diferente no meu https://i.postimg.cc/Nf8g1R9R/imagem-2024-10-28-210341095.png teste.php <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Upload de Arquivo com AJAX</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <input type="file" id="file-upload"> <button id="upload-btn">Enviar Arquivo</button> <img id="uploaded-img" src="" alt="Imagem enviada"> <script> $(document).ready(function() { $('#upload-btn').click(function() { var file_data = $('#file-upload').prop('files')[0]; var form_data = new FormData(); form_data.append('file', file_data); $.ajax({ url: 'upload.php', // URL do script PHP para salvar o arquivo type: 'POST', data: form_data, contentType: false, processData: false, success: function(response) { $('#uploaded-img').attr('src', response); alert('Upload realizado com sucesso!'); }, error: function() { alert('Erro no upload do arquivo.'); } }); }); }); </script> </body> </html> upload.php <?php class Login { static function isLoggedIn() { return 14; } } $userid = Login::isLoggedIn(); if(isset($_FILES['file'])) { $imgName = $_FILES['file']['name']; $file = $_FILES['file']; $upload_dir = $_SERVER['DOCUMENT_ROOT']."/facebook/Astudy/".$userid."/profilePhoto/"; if(!file_exists($upload_dir ) && !is_dir($upload_dir )) { mkdir($upload_dir , 0777, true); } $upload_file = $upload_dir . basename($file['name']); if (move_uploaded_file($file['tmp_name'], $upload_file)) { echo "Sucesso!"; } else { echo 'Erro ao salvar o arquivo.'; } } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mbrainiac Postado Quinta às 20:33 Autor Denunciar Share Postado Quinta às 20:33 Fiz este teste para ver se o Id chegava e está chegando: https://localhost/facebook/core/ajax/profilePhoto.php int(14) Warning: Undefined array key "file" in C:\xampp\htdocs\facebook\core\ajax\profilePhoto.php on line 25 Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\facebook\core\ajax\profilePhoto.php on line 25 int(14) string(46) "C:/xampp/htdocs/facebook/user/14/profilePhoto/" Warning: Undefined array key "file" in C:\xampp\htdocs\facebook\core\ajax\profilePhoto.php on line 35 Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\facebook\core\ajax\profilePhoto.php on line 35 Warning: Undefined array key "file" in C:\xampp\htdocs\facebook\core\ajax\profilePhoto.php on line 35 Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\facebook\core\ajax\profilePhoto.php on line 35 string(46) "C:/xampp/htdocs/facebook/user/14/profilePhoto/" Warning: Undefined array key "file" in C:\xampp\htdocs\facebook\core\ajax\profilePhoto.php on line 37 Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\facebook\core\ajax\profilePhoto.php on line 37 user/14/profilePhoto/ profilePhoto.php <?php include("../load.php"); include("../../connect/login.php"); global $userid; $userid = Login::isLoggedIn(); var_dump($userid); // $userid = 14; if(isset($_POST['imgName'])){ $imgName = $loadFromUser->checkInput($_POST['imgName']); $user_id = $loadFromUser->checkInput($_POST['userid']); $loadFromUser->update('profile', $user_id, array('profilePic' => $imgName)); } if(0<$_FILES['file']['error']){ echo 'Error: ' . $_FILES['file']['error'].'<br>'; }else{ var_dump($userid); $path_directory = $_SERVER['DOCUMENT_ROOT']."/facebook/user/".(string)($userid)."/profilePhoto/"; var_dump($path_directory); if(!file_exists($path_directory) && !is_dir($path_directory)){ mkdir($path_directory, 0777, true); } move_uploaded_file($_FILES['file']['tmp_name'], $path_directory.$_FILES['file']['name']); var_dump($path_directory); echo "user/$userid/profilePhoto/".$_FILES['file']['name']; } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frank K Hosaka Postado Sexta às 00:34 Denunciar Share Postado Sexta às 00:34 Pela mensagens que você recebeu, quem não está chegando é o arquivo que foi selecionado. Para ajudar melhor, preciso do código load.php, login.php, e do formulário que chama profilePhoto.php Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
mbrainiac
Não sei qual o motivo do código criar 2 pastas:
1 - user/userid/profilePhoto (desejada)
2 - user/profilePhoto (indesejada)
Para carregar a imagem preciso manualmente copiar da 2 para a 1.
O que devo alterar para fazer isso e não gerar a pasta 2?
Foi inserido com sucesso no banco
profile.php (javascript, jquery)
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.