Ir para conteúdo
Fórum Script Brasil
  • 0

PHP JQuery cria 2 pastas profilePhoto para imagens


mbrainiac

Pergunta

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?

profilePhoto.png.4bf08ed0b92e31ec5b4f308fe0d75174.png

Foi inserido com sucesso no banco 

profilePicDB.thumb.png.2cd9245203c8b76d98eb6004cfc306e3.pngprofile.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();

                }

                })





            }



        })

 

 

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 1

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.';
}
?>

 

Link para o comentário
Compartilhar em outros sites

  • 0
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

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

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

image.png.03a35413d89af238cc0661a00a29be26.png

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.';

}

 

Link para o comentário
Compartilhar em outros sites

  • 1

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 1

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 por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0
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

imagem_2024-10-27_145734107.png

Link para o comentário
Compartilhar em outros sites

  • 1

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

 

Captura de tela 2024-10-27 163919.png

Captura de tela 2024-10-27 164009.png

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0

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

 

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.';

    }

}

?> 


 

Link para o comentário
Compartilhar em outros sites

  • 0

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'];

}




?>

 

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...