Send several files in a form

Asked

Viewed 72 times

1

how to make this code send more than one image in different inputs

<form name="myForm" method="POST" action="back_img.php" enctype="multipart/form-data">
                    <input type="hidden" name="id" id="id" value="<?php echo $result['id'];?>">
                    <input name="arquivo" id="arquivo" type="file"><br><input name="arquivo1" id="arquivo" type="file">


Alter

<?php
include '../conexao_banco.php';
// verifica se foi enviado um arquivo 
if(isset($_FILES['arquivo']['name']) && $_FILES["arquivo"]["error"] == 0)
{


    echo "Este arquivo é do tipo: <strong>" . $_FILES['arquivo']['type'] . "</strong><br />";

    $arquivo_tmp = $_FILES['arquivo']['tmp_name'];
    $nome = $_FILES['arquivo']['name'];


    // Pega a extensao
    $extensao = strrchr($nome, '.');

    // Converte a extensao para mimusculo
    $extensao = strtolower($extensao);

    // Somente imagens, .jpg;.jpeg;.gif;.png
    // Aqui eu enfilero as extesões permitidas e separo por ';'
    // Isso server apenas para eu poder pesquisar dentro desta String
    if(strstr('.jpg;.jpeg;.gif;.png', $extensao))
    {
        // Cria um nome único para esta imagem
        // Evita que duplique as imagens no servidor.
        $novoNome = md5(microtime()) . '.' . $extensao;

        // Concatena a pasta com o nome
        $destino = '../img_usuario/' . $novoNome;  

        // tenta mover o arquivo para o destino
        if( @move_uploaded_file( $arquivo_tmp, $destino  ))
        {
            echo "Arquivo salvo com sucesso em : <strong>" . $destino . "</strong><br />";
            echo "<img src=\"" . $destino . "\" />";

          try {
            $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
            // set the PDO error mode to exception
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            // prepare sql and bind parameters
            $stmt = $conn->prepare("UPDATE user SET arquivo=:arquivo WHERE id=:id;");

            $stmt->bindParam(':arquivo', $novoNome);
            $stmt->bindParam(':id', $_POST['id']);
            $stmt->execute();

            echo '<script type="text/javascript"> alert("Imagem Alterada Com Sucesso"); self.location.href="pag_user.php";</script>'; 
            exit;
            }
        catch(PDOException $e)
            {
            echo "Ops... Erro no servidor: ".$e->getMessage();
            }



        }
        else
            echo "Erro ao salvar o arquivo. Aparentemente você não tem permissão de escrita.<br />";
    }
    else
        echo "Você poderá enviar apenas arquivos \"*.jpg;*.jpeg;*.gif;*.png\"<br />";
}
else
{
    header('Location: pag_user.php');
}

?>

2 answers

0

You can access the various uploads through a foreach, or if you prefer, manually access (Example: $_FILES['arquivo'], $_FILES['arquivo1']...)

If you want to do a foreach, you can do something like:

    foreach ($_FILES as $file) {
         $arquivo_tmp = $file['tmp_name']; // equivale a $_FILES['arquivo']['tmp_name'];
    //resto do código

    }

0

You can put the attribute multiple in his input to select more than one file in a single input, thus

<form name="myForm" method="POST" action="back_img.php" enctype="multipart/form-data">
                    <input type="hidden" name="id" id="id" value="<?php echo $result['id'];?>">
                    <input name="arquivo" id="arquivo" type="file" multiple>

This way you can select more than one file in the same input. Just be careful with the size of the files to be sent so as not to exceed the amount allowed according to your hosting.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.