The question asks "add initial value in array" but the right one would be "concatenate value in array items". They are different things.
To make it clearer
$arr = array() // isso aqui é um array
// $arr é um array, mas os valores dentro, não são arrays.
$arr = array(
'foo', // isso aqui não é um array.. é uma string
'bar' // idem
)
Without further ado, let's get down to business,
for ($k = 0; $k < count($arquivo['name']); $k++)
{
$destino = $diretorio."/".$nome.$arquivo['name'][$k];
$imgs = $arquivo['name'];
$array = implode(',', $imgs);
var_dump($array);
$inserir->insert('test', ' img=? ',array($array));
if (move_uploaded_file($arquivo['tmp_name'][$k], $destino))
{
echo "foi";
}
else
{
echo "não foi";
}
}
In this passage, personal opinion, I see a logic error.
You are saving to the database before completing the upload.
What happens if move_uploaded_file()
fails? You run the risk of having data in the database unrelated to an existing file.
I suggest that you reverse, completing the file migration and then saving the data in the database.
Note the term "migration" because it is different from upload. At that point the upload has already been done and the file is on the server. The move_uploaded_file()
function will only move the file to another location. But anyway, that's not the focus here.
for ($k = 0; $k < count($arquivo['name']); $k++) {
$destino = $diretorio."/".$nome.$arquivo['name'][$k];
if (move_uploaded_file($arquivo['tmp_name'][$k], $destino)) {
echo "foi";
$movido[] = $arquivo['name'][$k];
} else {
echo "não foi";
}
}
if (isset($movido) && !empty($movido)) {
var_dump($movido);
$inserir->insert('test', ' img=? ', $movido));
}
If you want to set up unique names, you could do this
$movido[] = $k.'_'.$arquivo['name'][$k];
But this would have to have the same pattern here too:
$destino = $k.'_'.$diretorio."/".$nome.$arquivo['name'][$k];
Otherwise you lose the reference and it becomes meaningless.
Just be aware that this does not guarantee unique names.
In an upcoming upload with a file of the same name, it will have duplicate names anyway.
Something "ideal" in the sense that you would not have to worry about it is to generate a "unique" string or it would hardly repeat itself.
I usually use "date + time" in timestamp format.
It would look like this:
$str = $arquivo['name'][$k];
$extensao = substr($str, strrpos($str, '.')+1); // não confie muito nisso.*
$arquivo_nome = time().'_'.$k.'.'.$extensao;
$movido[] = $arquivo_nome;
$destino = $k.'_'.$diretorio.'/'.$arquivo_nome;
/*
Os nomes dos arquivos será algo como:
2367639897_1.jpg
2367639897_2.jpg
2367639897_3.jpg
*/
/*
O motivo de incrementar os números sequenciais ao timestamp é que a execução é tão rápida que o timestamp se repetirá. Por isso, os números sequenciais concatenados dão uma unicidade.
Esteja ciente que isso também não garante 100%. Num sistema com múltiplos acessos, pode acontecer de 2 ou mais usuários simultaneamente executando o upload e coincidentemente obter o mesmo timestamp.
Caso queira garantir ainda mais a unicidade, poderia concatenar com o ID do usuário logado, o ID de sessão, ou qualquer coisa que seja único daquele usuário mesmo que não esteja logado. Nesse caso só teria duplicidade se uma mesma conta estivesse logada em locais diferentes por pessoas diferentes e executando tudo ao mesmo tempo. A probabilidade é muito remota, porém, possível de acontecer. Enfim, você tem que ir pensando nas diversas possibilidades considerando até onde é viável dentro do contexto do modelo de negócios. Nem sempre precisará elaborar com tanta minuciosidade.
Optionally, if you already have a unique ID related to these images, you can use this ID instead of the timestamp or anything else you prefer. The system is yours, do as you wish.
* /
Important: Be aware that I am oblivious to what is executed in the $inserir::insert()
method. Therefore, I can not foresee any later errors that may occur.
28.08.2016 / 13:17