Send images to different folders and write each one to a database table using php

Asked

Viewed 145 times

1

I’m a beginner in php and I’m trying to create a website. How do I send 6 images at the same time through the form, have each one sent to the specific folder and save to the database.
Name of tables in the database:

nomedarom imagem_da_rom1 imagem_da_rom2 imagem_da_rom3 imagem_da_rom4 imagem_da_rom5

Name of folders to upload each image:

logodarom imagens1 imagens2 imagens3 inagens4 imagens5

Php file:

<?php
    include_once 'conexao.php';
    include_once 'functions.php';

    if(isset($_POST['cadastrar'])):

        $marca_do_aparelho   = $_POST['marca_do_aparelho'];
        $modelo  = $_POST['modelo'];
        $nome_da_rom  = $_POST['nome_da_rom'];
        $descricao_da_rom  = $_POST['descricao_da_rom'];
        $download  = $_POST['download'];
        date_default_timezone_set('America/Sao_Paulo');
        $data = date('Y-m-d H:i');
        cadastrarComPdo2( $marca_do_aparelho , $modelo,  $nome_da_rom,  $descricao_da_rom,  $download, $data);
        echo "cadastrado com sucesso";
   endif;

   ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Formularios</title>
   </head>
   <body>
      <form  action="" method="post">
         <p> 
            <label for="marca_do_aparelho"> Nome marca do aparelho</label>
            <input type="text" name="marca_do_aparelho" />
         </p>
         <p>
         <p> 
            <label for="modelo">Modelo do aparelho</label>
            <input type="text" name="modelo" />
         </p>
         <p>
            <label for="nome_da_rom">Nome da custom rom</label>
            <input type="text" name="nome_da_rom" />
         </p>
         <p>
            <label>descreva a custom rom</label>
            <textarea name= "descricao_da_rom"></textarea>
         </p>
         <p> 
            <label for="download">Aqui o linkin para download</label>
            <input type="text" name="download" />
         </p>
         <p>
            <label for="logo_da_rom">Logo da rom:</label>
            <input type="file" name="logo_da_rom"
         </p>
         <p>
            <label for="imagem_da_rom1">Primeira imagem da rom:</label>
            <input type="file" name="imagem_da_rom1"
         </p>
         <p>
            <label for="imagem_da_rom2">Segunda imagem da rom:</label>
            <input type="file" name="imagem_da_rom2"
         </p>
         <p>
            <label for="imagem_da_rom3">Terceira imagem da rom:</label>
            <input type="file" name="imagem_da_rom3"
         </p>
         <p>
            <label for="imagem_da_rom4">Quarta imagem da rom:</label>
            <input type="file" name="imagem_da_rom4"
         </p>
         <p>
            <label for="imagem_da_rom5">Quinta imagem da rom:</label>
            <input type="file" name="imagem_da_rom5"
         </p>
         <p>
            <label for="submit"></label>
            <input type="submit" name="cadastrar" value="vai" />
         </p>
      </form>
   </body>
</html>

Second php file:

       try{
           $pdo = conectarComPdo();
           $pdo-> beginTransaction();

           $cadastrar = $pdo ->prepare("INSERT  INTO roms(marca_do_aparelho, modelo, nome_da_rom, descricao_da_rom, download, data)VALUES(:marca_do_aparelho, :modelo, :nome_da_rom, :descricao_da_rom, :download, :data)");
           $cadastrar -> bindValue("marca_do_aparelho", $marca_do_aparelho);
           $cadastrar -> bindValue(":modelo", $modelo);
           $cadastrar -> bindValue(":nome_da_rom", $nome_da_rom);
           $cadastrar -> bindValue(":descricao_da_rom", $descricao_da_rom);
           $cadastrar -> bindValue("download", $download);
           $cadastrar -> bindValue("data", $data);
           $cadastrar -> execute();


           if($cadastrar -> rowCount()== 1):

               echo "cadastrado com sucesso";
           else:

               echo"erro";

           endif;
           $pdo->commit();
       }catch(PDOExcepetion $e){
           echo "erro: ".$e ->getMessage();
           $pdo->rollBack();
       }

   } 
?>

1 answer

0

First you need to change this tag:

<form  action="" method="post">

To:

<form  action="" method="post" enctype="multipart/form-data">

Then you need to rescue these images and move them to the folder:

        /* 
        eu verifico arquivo por arquivo se eles estão vazios, 
        se não estiverem vazios, movo para a pasta correta
        */

    if(!empty($_FILES['logo_da_rom']))
        move_uploaded_file($_FILES['logo_da_rom']['tmp_name'], "nomedarom/".$_FILES['logo_da_rom']['name']);

    if(!empty($_FILES['imagem_da_rom1']))
        move_uploaded_file($_FILES['imagem_da_rom1']['tmp_name'], "imagens1/".$_FILES['imagem_da_rom1']['name']);

    if(!empty($_FILES['imagem_da_rom2']))
        move_uploaded_file($_FILES['imagem_da_rom2']['tmp_name'], "imagens2/".$_FILES['imagem_da_rom2']['name']);

    if(!empty($_FILES['imagem_da_rom3']))
        move_uploaded_file($_FILES['imagem_da_rom3']['tmp_name'], "imagens3/".$_FILES['imagem_da_rom3']['name']);

    if(!empty($_FILES['imagem_da_rom1']))
        move_uploaded_file($_FILES['imagem_da_rom4']['tmp_name'], "imagens4/".$_FILES['imagem_da_rom4']['name']);

    if(!empty($_FILES['imagem_da_rom1']))
        move_uploaded_file($_FILES['imagem_da_rom5']['tmp_name'], "imagens5/".$_FILES['imagem_da_rom5']['name']);

BS.: There is an easier way to recover these images with switch for example. I made this way for you to have a didactic example.

When it comes to files some considerations are valid:

  • File name can be repeated?
  • Which extensions are valid?
  • There is a maximum size for each file?

It is important that you handle this and other information so that your system does not get bugs or bugs.

To register in the bank has no secret, it is the same way you registered the other values in the other table, you can use the same PDO you requested including:

...

$img1 = $_FILES['imagem_da_rom1']['name'];
$img2 = $_FILES['imagem_da_rom2']['name'];
$img3 = $_FILES['imagem_da_rom3']['name'];
$img4 = $_FILES['imagem_da_rom4']['name'];
$img5 = $_FILES['imagem_da_rom5']['name'];


$cadastrarImagem = $pdo ->prepare("INSERT  INTO tabelaImagens(imagem_da_rom1 , imagem_da_rom2, imagem_da_rom3, imagem_da_rom4, imagem_da_rom5   )VALUES(:imagem1, :imagem2, :imagem3, :imagem4, :imagem5)");
           $cadastrarImagem -> bindValue("imagem1", $img1);
  ...

           $cadastrarImagem -> execute();

I hope it helps you. Hug!

Browser other questions tagged

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