How to make a form that accepts photo upload and save to the database

3

I created a database named Form and table with the following information

contatos (id int A.I, nome varchar(30), idade int(2), foto(blob)

I made that default form:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
   <form name="CadastroAlunos" type="text" method="post" enctype="multipart/form-data" action="upload.php">

  Nome: <input type="text" name="NomeAluno"></br>
  Idade: <input type="text" name="IdadeAluno"></br>
  Foto: <input type="file" name="image" /></br>
    <input type="submit" value="Enviar" name="envia" />
  </form>

</body>
</html>

UPLOAD.PHP

<?php
     include_once 'conexao.php';

     $nome = $_POST['NomeAluno'];

     $idade = $_POST['IdadeAluno'];

     $foto = $_FILES['image'];

     move_uploaded_file ( string $foto , string $novoDestino );

     $sql = "INSERT INTO contatos (nome, idade, foto) values ('$nome', '$idade', $novoDestino");
?>

How do I save the photo along with the information in the form?

    
asked by anonymous 02.10.2015 / 14:42

2 answers

3

Use the BLOB type for the foto column that will receive the contents of input type="file" .

Your PHP code for insertion into the database would look something like this:

<?php
include_once 'conexao.php';

$nome = $_POST['NomeAluno'];
$idade = $_POST['IdadeAluno'];

$imagem = $_FILES['image']['tmp_name']; 
$tamanho = $_FILES['image']['size']; 
//$tipo = $_FILES['image']['type']; 
//$nomeImagem = $_FILES['image']['name'];

if ( $imagem != "none" ) { 
    $fp = fopen($imagem, "rb"); 
    $conteudo = fread($fp, $tamanho); 
    $conteudo = addslashes($conteudo); 
    fclose($fp); 

    $sql = "INSERT INTO contatos (nome, idade, foto) values ('$nome', '$idade', '$conteudo')";

    mysqli_query($conexao, $sql) or die("Algo deu errado ao inserir o registro. Tente novamente."); 

    echo 'Registro inserido com sucesso!'; 

    //header('Location: index.php'); 

    if(mysqli_affected_rows($conexao) > 0) 
        print "A imagem foi salva na base de dados."; 
    else 
        print "Não foi possível salvar a imagem na base de dados."; 

} else 
    print "Não foi possível carregar a imagem.";
?>
    
02.10.2015 / 15:35
2

I think it's more advisable to save the image path in the database, I would do it this way:

<?php
include_once 'conexao.php';

$nome = $_POST['NomeAluno'];

$idade = $_POST['IdadeAluno'];

$foto = $_FILES['image']['tmp_name'];

$tamanho_permitido = 1024000; //1 MB
$pasta = 'uploads';

if (!empty($foto)){
    $file = getimagesize($foto);

    //TESTA O TAMANHO DO ARQUIVO
    if($_FILES['image']['size'] > $tamanho_permitido){
        echo "erro - arquivo muito grande";
        exit();
    }

    //TESTA A EXTENSÃO DO ARQUIVO
    if(!preg_match('/^image\/(?:gif|jpg|jpeg|png)$/i', $file['mime'])){
        echo "erro - extensão não permitida";
        exit();
    }

    //CAPTURA A EXTENSÃO DO ARQUIVO
    $extensao = str_ireplace("/", "", strchr($file['mime'], "/"));

    //MONTA O CAMINHO DO NOVO DESTINO
    $novoDestino = "{$pasta}/foto_arquivo_".uniqid('', true) . '.' . $extensao;  
    move_uploaded_file ($foto , $novoDestino );

} 


$sql = "INSERT INTO contatos (nome, idade, foto) values ('$nome', '$idade', $novoDestino";

echo $sql;
?>
    
02.10.2015 / 20:02