Ir para conteúdo

Arquivado

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

Joel F

Guardar valor em array numa superglobal sem sobrescrever é possivel?

Recommended Posts

Ola, pessoal. Eu estou com uma duvida com relação a possibilidade de fazer algo. Bem eu tenho um formulário e possui um campo de upload. Gostaria de fazê-lo funcionar como alguns que vejo na internet em que a pessoa escolhe a foto e clica em enviar. A foto que ela enviou aparece listada perto do campo permitindo que ela vá adicionando arquivos e só realmente finaliza o envio quando a pessoa clica por exemplo no botão de concluir. Para isso eu precisaria de uma variável em php que guarda-se o valor adicionado em um array mas sem sobrescrever com o submit isso é possível?

 

<html>

<input type="file" name="foto[]"/>

<input type="submit" name="mais-foto" value="+"/>// input para adicionar valor;

Essa é só uma das formas que eu tentei. Eu até consigo guardar o array sem problema. Mas sempre acontece do array sobrescrever o anterior. Mesmo que a variável $_post['foto'] esteja como um array quando ela recebe os dados da nova foto ela não adiciona a linha mas sobrescreve a anterior.

<php>

if(isset($_POST['mais-foto'])):

$fotos = $_FILES['foto'];
echo $fotos['name'][0].'<br />';

endif;

Gostaria de saber se fazer algo como isso é possível ou se a cada submit todas as variáveis são sobrescritas independente de serem array.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
$indice = 0;

if(isset($_FILES['mais-fotos'])){
$indice++;
$array[$indice] = $_FILES['name'];
}

Isso aqui é conceitual, não vai funcionar simplesmente assim.

mas vc precisa mudar o seu indice, é a ideia que to passando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

$indice = 0;

if(isset($_FILES['mais-fotos'])){
$indice++;
$array[$indice] = $_FILES['name'];
}

Isso aqui é conceitual, não vai funcionar simplesmente assim.

mas vc precisa mudar o seu indice, é a ideia que to passando.

Obrigado pela resposta, mas ainda não esta dando certo acredito que o problema é que em uma variável normal o valor é apagado ao fim do script. Teria que ser em outra por isso pensei numa superglobal vou postar o código junto com o html talvez fique melhor de visualizar

<td class="input">
<?php
	$i = 0;
	if(isset($_POST['mais-foto'])):
	$i++;	
	$_FILES['img'][$i] = $_FILES['foto'];
        $fotos = $_FILES['img'];
	echo '<pre>';
	print_r($_FILES['img']);
	echo '</pre>'
	foreach ($fotos as $foto) {
		echo $foto['name'][0];
	}					
       endif;
?>
	<input class="border-radius" type="file" id="nomes-auternativos" name="foto[]"/><input type="submit" name="mais-foto" value="+"/>
</td>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta, mas ainda não esta dando certo acredito que o problema é que em uma variável normal o valor é apagado ao fim do script. Teria que ser em outra por isso pensei numa superglobal vou postar o código junto com o html talvez fique melhor de visualizar

Superglobais são just-in-time. Você precisaria armazenar em sessão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Superglobais são just-in-time. Você precisaria armazenar em sessão.

 

Vlw, pela dica mas mesmo assim continua sobrescrevendo veja como ficou o código.

<td class="input">
	<?php
	$sessao = new sessao();
	if(isset($_POST['mais-foto'])):							
		$sessao->guardaFoto($_FILES['foto']);
		$fotos = $sessao->mostraFoto();
		echo '<pre>';
		print_r($fotos);
		echo '</pre>';
		foreach ($fotos as $foto) {
			echo $foto['name'][0];
		}					
		endif;
		?>
   <input class="border-radius" type="file" id="nomes-auternativos" name="foto[]"/><input type="submit" name="mais-foto" value="+"/>
</td>

e na classe sessão a variável que guarda e as funções que setam. Como eu já tinha essa classe apenas adicionei.

private $fotos = array();

public function guardaFoto($foto){
	$this->fotos[] = $foto;
}
		
public function mostraFoto(){
	return $this->fotos;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Superglobais são just-in-time. Você precisaria armazenar em sessão.

Agora funciono da forma que eu gostaria valeu pela dica. Eu apenas mudei a forma em vez de guardar em uma variavel na classe sessao eu indiquei diretamente no código guardei na variável $_SESSION['img'][]. Agora só vou dar uma lida na net para ver se guarda essas informações nessa variável não é uma pratica ruim, se pode dar algum problema, se não vai dar algum problema com a classe que verifica o login afinal está também usa $_SESSION e etc...

Mas vlw.

 

<?php
						
         if(isset($_POST['mais-foto'])):							
	        $_SESSION['img'][] = $_FILES['foto'];
		$fotos = $_SESSION;
		echo '<pre>';
		print_r($fotos);
		echo '</pre>';			
	endif;
?>

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.