Ir para conteúdo

Arquivado

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

RollySantos

Elaborar forma de envio de formulario em foreach

Recommended Posts

Olá, tudo bem?

 

Consegui montar o código que pega os nomes dos arquivos de imagem de determinada pasta e imprima na tela para mim.

O projeto é um selecionador de imagens, em que o cliente vai escolher quais imagens deseja imprimir e ao clicar em enviar, vou receber o nome dos arquivos.

Porém, o código de seleção de imagem já está funcionando como eu quero, mas, não estou conseguindo fazer o código php de destino.

 

Segue o código completo e funcionando do sistema de seleção:

<style  type="text/css">
body {
   margin:0;
}
</style>
<?php
//listar todos arquivos de uma pasta e colocar em uma array
function PegaNomes($dirPath)
            {
                $files = scandir($dirPath);
                foreach ($files as $key => $file)
                {
                    if ($file == '..' || $file == '.' || !preg_match("/-295x250\.jpg$/i", $file))
                    {
                        unset($files[$key]);
                        continue;
                    }
                    $currentDirPath = $dirPath."\\".$file;
                    if(is_dir($currentDirPath))
                    {
                        $dirName = $file;
                        $file = array($dirName);
                        $file[] = GetDirectoriesAndFiles($currentDirPath);
                        unset ($files[$key]);
                        $files[$key] = $file;
                    }
                }
                return $files;
            }
?>

<center>
    <?php
	$Diretorio = "site/wp-content/uploads/2016/06"; //Nome ou endereço da pasta que se encontra as imagens que desejo exibir
    $imagens = PegaNomes($Diretorio);
	$contador = 0;
    ?>
    <form action='destino.php' method='POST'>
    <?php foreach ($imagens as $id =>$image): ?>
      <img src="<?php echo $Diretorio ?>/<?php echo $image ?>">
      <label><input type="checkbox" name="imagens[<?php echo $id ?>]" value="<?php echo $image ?>"></label>
      <?php $contador ++; ?>
      
      <?php if ($contador >= 3) { ?>
		  	<br>
            <?php $contador = 0; ?>
		   <?php } ?>
      
    <?php endforeach ?>
    <br /><label>Quantidade de fotos escolhidas: <input type="text" name="result" id="result" value="0" /></label>
    
    <br /><input type="submit" name="botao_enviar" value="Enviar">
    </form>
</center>




<script>
var itens = document.querySelectorAll("label input");
var resultado = document.getElementById("result");
for ( i = 0,  soma = 0; i < itens.length ; i++){
    itens[i].onchange = function(){
    	if (this.checked==true) {
    	    soma = soma + 1;
    	}
        else {
            soma = soma - 1;
        }
        resultado.setAttribute("value",soma)
    }  
}
</script>

E aqui o código que comecei a fazer de envio. Porém o que não estou conseguindo raciocinar é como foi fazer o loop para capturar o $_POST['']; com o nome do arquivo.

<?php

$emaildestinatario = 'contato@rolly.com.br';

$emailremetente=	trim("rolly.santos@live.com");


$foto=	$_POST[''];

$mensagemHTML = '<P>Fotos selecionadas</P>
<p> </p>

<hr>';
$assunto.= "Solicitaçao de Orçamento";
$headers = "MIME-Version: 1.1\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "From: $emailremetente\r\n"; // remetente
$headers .= "Return-Path: $emaildestinatario \r\n"; // return-path
$envio = mail($emaildestinatario, $assunto, $mensagemHTML, $headers); 
 
if($envio)echo "<script>location.href='http://rolly.com.br/site/orcamento-sucesso/'</script>";
?>	

Alguem poderia me dar uma ajuda de como poderia ser feito este $_POST[''];?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de ler a seguinte matéria, porém, não entendi como vou usar os dados extraidos e colocando no html do txto de e-mail.

 

 

 

Quem não se viu na horrível tarefa de receber uma data de dados de um formulário, atribuindo uma por uma todas as variáveis em PHP? Isso fazia-se com linhas como estas:

$nome = $_POST["nome"];
$idade = $_POST["idade"];
$cidade = $_POST["cidade"];
....


Se o formulário tivesse 10 elementos não seria muito chato escrever as 10 linha de código, mas se fossem 50 ou 100 a situação seria muito menos agradável. O código que vamos ver a seguir tornará problema mais fácil.

foreach($_POST as $nome_campo => $valor){
$comando = "\$" . $nome_campo . "='" . $valor . "';";
eval($comando);
}


Realiza-se um loop foreach que vai recorrendo cada um dos elementos POST. Em cada iteração, vão-se acedendo a todos os elementos do POST e vão-se guardando em $nome_campo o nome do campo recebido para o formulário e em $valor, o valor que se tinha introduzido no formulário.

Tudo o anterior deduz-se da primeira linha. As seguintes em cada iteração, cada uma dos comandos que deveríamos ter escrito manualmente. Isto é, na variável comando guardaremos uma linha de código PHP que realiza a declaração da variável do formulário dentro de PHP e a sua inicialização com o valor que se tinha escrito.

Na seguinte linha, onde está a função eval(), executa-se a sentença gerada no passo anterior. A função eval() de PHP executa o conteúdo de uma cadeia de caracteres como se fosse um comando de PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vasculhando o imasters, encontrei algo interessante.

Que eu poderia usar o seguinte:

foreach ($_POST as $campo => $valor) {

$$campo = $valor;

}

Em que vou capturar todos os campos POST que me é enviado da página anterior, só que o meu problema ainda está sendo como vou imprimir esses campos na tela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui...

 

consegui resolver parte do código.

Em que, como o foreach de exibição de imagens é uma array.

Puxei a array e transformei em uma variável.

 

Agora, o que não consigo é imprimir a array no e-mail.

<?php
$emaildestinatario = 'contato@rolly.com.br';
$emailremetente= trim("rolly.santos@live.com");

$escolhidas = $_POST['imagens'];
//escolhidas é uma array que tem todos os nomes que preciso exibir na mensagem enviada para o email.
//print_r ($escolhidas);
//se eu der um print_r, vou ver todos os nomes do que escolhi.
//Pra ver o print_r funcionando acesse o link http://rolly.com.br/escolhe.php

$mensagemHTML = '<P>Fotos selecionadas</P>
<p> Quero exibir os dados da array aqui  </p>
<hr>';

$assunto.= "Fotos selecionadas";
$headers = "MIME-Version: 1.1\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "From: $emailremetente\r\n"; // remetente
$headers .= "Return-Path: $emaildestinatario \r\n"; // return-path
$envio = mail($emaildestinatario, $assunto, $mensagemHTML, $headers); 
 
if($envio)
echo "<script>location.href='http://rolly.com.br/site/orcamento-sucesso/'</script>";
else
echo "erro ao enviar";
?>	

Alguem poderia me ajudar a imprimir os dados da array no corpo da mensagem enviada ao e-mail?

Ja tentei foreach, mas nada imprimi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei em colocar algo tipo assim:

$TotalDados = count($escolhidas);
$i=0;

$mensagemHTML = '<P>Fotos selecionadas</P>
<p>  </p>'.for($i=0;$i<$TotalDados;$i++)
{
    echo $escolhidas;
};

Mas n"ao aceita o for.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Quando você quer fazer um loop em um array, utilize o foreach, que é específico para array.


Tenta assim:



$informacoesImagens = "";
if(!empty($_POST['imagens']) && is_array($_POST['imagens'])){
foreach($_POST['imagens'] as $id => $imagem){
$informacoesImagens .= "{$id} - {$imagem}<br>";
}
}

$mensagemHTML = "
<p>Fotos selecionadas</p>
<p>{$informacoesImagens}</p>
<hr>
";

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.