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

1

I'm a beginner in php and I'm trying to create a website. How do I send 6 images at a time through the form, have each one be sent to the specified folder and write to the database. Name the tables in the database:

nomedarom   imagem_da_rom1   imagem_da_rom2   imagem_da_rom3   imagem_da_rom4   imagem_da_rom5

Name the folders to send each image:

logodarom imagens1 imagens2 imagens3 inagens4 imagens5

File php:

<?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();
       }

   } 
?>
    
asked by anonymous 19.04.2017 / 20:58

1 answer

1

First you need to change this tag:

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

To:

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

Then you need to retrieve 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']);

Note: There is an easier way to retrieve these images with switch for example. I did it that way for you to have a didactic example.

When it comes to files, some considerations are valid:

  • Can the file name be repeated?
  • Which extensions are valid?
  • Is there a maximum size for each file?

It is important that you treat these and other information so that your system has no errors or bugs.

To register in the database has no secret, it is the same way that you registered the other values in the other table, you can use the same PDO that you instantiated 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. Hugs!

    
20.04.2017 / 03:51