Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Erick Plant

como salvar no banco nomes numa array?

Recommended Posts

Tenho um código que faz o upload dinâmico de imagens. Posso salvar quantas imagens quiser, de uma só vez. Até ai me código está funcionando. O problema é que eu gostaria de salvar no banco o nome de cada uma. Coloco pra salvar, mas vai como "array" pra tabela e não o nome da imagem. Como eu poderia fazer para "desmembrar" o array e cadastrar o nome de cada imagem numa mesma tabela do banco? Se alguém tiver uma ideia mais viável, estou aberto a sugestões.

 

Aqui vai uma parte do código:

 

if (isset($_POST['enviar']))
{
   echo 'Arquivos Enviados: ';
   echo '<pre>';

       //dando print só pra verificar se no array estão aparecendo todos os nomes dos arquivos
print_r($_POST['anexos']);

include 'classe.php';

$nome=$_POST['nome'];
$anexo=$_POST['anexos'];

$obj = New Img();
$obj->cadastrar($anexo,$nome);

   echo '</pre>';

 

Aqui é minha classe:

public function cadastrar($anexo,$nome){
$pdo = new PDO("mysql:host=localhost; dbname=teste", "root", "");
$stm = $pdo->prepare("INSERT INTO img(foto,nome)VALUES('$anexo','$nome')");
$stm->execute();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma olhada no

foreach()

 

Se ele está salvando Array, quer dizer que ele é um array bi-dimensional, então tu tem de varrer esse array para poder fazer a inserção.

 

foreach( $meuArray as $key => $val )
{
  $minhaFuncao->insereNoBanco( $val[ "nomeDaChaveQueTemONomeDaImagem" ] );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma olhada no

foreach()

 

Se ele está salvando Array, quer dizer que ele é um array bi-dimensional, então tu tem de varrer esse array para poder fazer a inserção.

 

foreach( $meuArray as $key => $val )
{
  $minhaFuncao->insereNoBanco( $val[ "nomeDaChaveQueTemONomeDaImagem" ] );
}

 

Po, valeu pelo toque, "Gremio10"!

 

Agora está cadastrando, mas com dois problemas:

1 - só está indo a primeira letra do nome da imagem;

2 - cria varias tabelas, de acordo com a quantidade de imagens q eu faço o upload. Imagino que quando eu for buscar a imagem com os demais dados eles se repetirão de acordo com a quantidade cadastrada.

 

 

Alguém tem ideia de como posso sanar esses problemas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim:

 

dentro do foreach, dê um print_r( $key ); e um print_r( $val ); e entre eles coloque a tag <pre>;

 

foreach( $meuArray as $key => $val )
{
  echo "<pre>";
  print_r( $key ); print_r( $val ); exit;
  $minhaFuncao->insereNoBanco( $val[ "nomeDaChaveQueTemONomeDaImagem" ] );
}

 

Vê quais os valores que a key e val vão te retornar, por que pode ser isso que esteja acontecendo, talvez não seja necessário o $key.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim:

 

dentro do foreach, dê um print_r( $key ); e um print_r( $val ); e entre eles coloque a tag <pre>;

 

foreach( $meuArray as $key => $val )
{
  echo "<pre>";
  print_r( $key ); print_r( $val ); exit;
  $minhaFuncao->insereNoBanco( $val[ "nomeDaChaveQueTemONomeDaImagem" ] );
}

 

Vê quais os valores que a key e val vão te retornar, por que pode ser isso que esteja acontecendo, talvez não seja necessário o $key.

 

Então, quando dou o print no $val aparece o nome da imagem, mas só vai pro banco a primeira letra. quando dou o print só na $key, nao aparece o nome, mas vai pro banco só a primeira letra, tbm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na tela quando envio aparece assim:

 

Arquivos Enviados:
Array
(
   [0] => busy-philipps6_2263 (1).jpg.
   [1] => Busy_Philipps-busy-phillips-13.jpg.
)
0 <- Aqui é pra aparecer o print_r($key); 

busy-philipps6_2263 (1).jpg. <- Aqui é pra aparecer o print_r($val); 

Cadastrado com sucesso!

 

Meu código index.php:

<?php
// Quando a ação for para remover anexo
if ($_POST['acao'] == 'removeAnexo')
{
   // Recuperando nome do arquivo
   $arquivo = $_POST['arquivo'];
   // Caminho dos uploads
   $caminho = 'uploads/';
   // Verificando se o arquivo realmente existe
   if (file_exists($caminho . $arquivo) and !empty($arquivo))
       // Removendo arquivo
       unlink($caminho . $arquivo);
   // Finaliza a requisição
   exit;
}

// Se enviado o formulário
if (isset($_POST['enviar']))
{
   echo 'Arquivos Enviados: ';
   echo '<pre>';


print_r($_POST['anexos']);

include 'classe.php';

//$nome=$_POST['nome'];
$anexo=$_POST['anexos'];

$obj = New Img();

	foreach( $anexo as $key => $val )
{

  echo "<pre>";
  print_r($key); 
  print_r($val);
  $obj->cadastrar($val["anexo"]/*,$nome)*/);
exit;
}	
   echo '</pre>';
}
?>

 

Como é pra upar dinamicamente, tem essa parte aqui. que é do upload.php

<?php
// Flag que indica se há erro ou não
$erro = null;
// Quando enviado o formulário
if (isset($_FILES['arquivo']))
{
   // Configurações
   $extensoes = array(".jpg", ".jpeg", ".png");
   $caminho = "uploads/";
   // Recuperando informações do arquivo
   $nome = $_FILES['arquivo']['name'];
   $temp = $_FILES['arquivo']['tmp_name'];
   // Verifica se a extensão é permitida
   if (!in_array(strtolower(strrchr($nome, ".")), $extensoes)) {
	$erro = 'Extensão inválida';
}
   // Se não houver erro
   if (!$erro) {
       // Gerando um nome aleatório para a imagem
       $nomeAleatorio =("$nome.");
       // Movendo arquivo para servidor
       if (!move_uploaded_file($temp, $caminho . $nomeAleatorio))
           $erro = 'Não foi possível anexar o arquivo';
   }
}
?>

 

Aqui vai a minha classe:(claro q só um teste)



<?php
class Img{

public $val;

public function cadastrar($val){
$pdo = new PDO("mysql:host=localhost; dbname=teste", "root", "");
$stm = $pdo->prepare("INSERT INTO img(foto)VALUES('$val')");
$stm->execute();
echo "Cadastrado com sucesso!";
}
}
?>

No banco fica assim:

 

cod: 1 foto: b

cod: 2 foto: b

 

ja q eu upei 2 fotos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em uma única linha ?

 

Isso. Eu to fazendo um projeto em que tenho q upar algumas fotos do mesmo produto. Se ficar assim, se eu upar 4 fotos, por exemplo, com todas as especificações, terei problema quando listar, por exemplo, pq serão muitos dados com todos as especificaçoes repetindo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim:

 

id produto_id nome_da_foto // banco de dados

 

tu diz o id do produto e depois faz uma verificação para cada id do produto tu puxa os nomes das imagens.

 

Vou tentar aqui. ver se entendi a lógica. E muito obrigado, pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.