vivian s. 0 Denunciar post Postado Abril 6, 2011 Pessoal, encontro buscando na net diversos scripts de envio de dados de formularios em PHP onde é tratado campo por campo do formulario. Só que gostaria de um script que enviasse tudo que tem de campos de uma pagina para um email independente de tratar campo por campo.. que receba de forma organizada e tabelar todos os dados independente do numero de campos, tipo de campos, etc... Assim poderia utilizar o script para varias paginas, onde cada pagina tem forms totalmente diferente uma das outras. Alguem tem como me ajudar pois sou iniciante no php... Com certeza voce tem um script que gosta de usar e tem qualidade no tratamento da formatacao dos dados para o email. obrigada Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Abril 6, 2011 Geralmente isso de 'reutilizar' os códigos é usado no paradigma de orientação a objetos, como você é iniciante não sei se vai lhe ser util, mas tratar campo por campo tem que tratar mesmo, se você tiver 10 formulários com 5 campos cada, mesmo usando uma classe para tratar os campos, você tera que fazer isso. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 6, 2011 Não é necessario tratar Andre, e eu tinha um script em ASP que coletava todos os campos da pagina e montava a tabela que funcionava 100% Em PHP como se faz isso? obrigada Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Abril 6, 2011 Oi Vivian, bom dia. Tu podes fazer isso utilizando foreach, da seguinte forma: <?php foreach ($_POST as $chave => $valor) { if ($chave[0]=='z') { $dados[] = $valor; } } echo implode('<br />', $dados); ?> Todos os campos que tiverem name começando com "z", serão adicionados ao array, e depois é dado o implode/echo. Exemplo: <input name="znome" value="nome da pessoa" /> <input name="zemail" value="email da pessoa" /> <input name="email" value="email da pessoa, que nao vai ser tratado" /> Isso retornaria: nome da pessoa<br />email da pessoa<br /> Para aceitar literalmente todos os campos, basta retirar o IF. Dá pra fazer uma infinidade de coisas seguindo a mesma técnica. Outro exemplo: <?php foreach ($_POST as $chave => $valor) { $$chave = mysql_real_escape_string($valor); } echo 'Nome da pessoa: '.$znome.' - Email da pessoa:'.$zemail.' - Email adicional:'.$email; ?> Isso vai criar as variáveis automaticamente, já com uso da mysql_real_escape_string e seus respectivos valores. Espero que tenhas entendido. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 6, 2011 nossa Matheus, parabens pelas dicas, com este ultimo exemplo onde pego todos os campos, eu posso por exemplo pegar um em especifico como se fosse uma matriz, certo? $peso = $chave[6]; $altura = $chave[7]; $imc = ($peso/$altura*$altura); echo "o seu imc é de acordo com seus dados...".$imc; esta certo meu raciocinio? Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Abril 6, 2011 Não.. você pode fazer melhor que isso. HTML: index.html <form action="x.php" method="post"> <input type="text" name="peso" value="" /> <input type="text" name="altura" value="" /> <input type="submit" value="Enviar" /> </form> PHP: x.php <?php foreach ($_POST as $chave => $valor) { if ($valor!='') { $$chave = $valor; } } echo $imc = ($peso/$altura*$altura); :joia: Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 6, 2011 quer dizer entao que ja vem como variavel o proprio nome dado ao campo no form? e mesmo sendo campo texto consigo fazer calculos com ele? obrigada Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Abril 6, 2011 Desculpa, viajei na maionese entendi coisa errada :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Abril 6, 2011 quer dizer entao que ja vem como variavel o proprio nome dado ao campo no form? O segredo está na criação de variáveis variáveis. :seta: http://www.vivaolinux.com.br/dica/Variaveis-variaveis-em-PHP Explicando melhor: o foreach faz um looping englobando todos os inputs do formulário submetido. Verifica-se então se o valor de cada um é diferente de nada (!=''), e caso verdadeiro, cria-se uma variável nova, chamada $chave (o valor do name), com valor $valor (o value). e mesmo sendo campo texto consigo fazer calculos com ele? Aí já entramos no assunto de tipagens de variáveis do PHP. Mas, resumidamente, você pode sim, como no exemplo que postei ali em cima. :lol: Beijos, Vivian. Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 6, 2011 oi matheus usei o <?php foreach ($_POST as $chave => $valor) { if ($valor!='') { $$chave = $valor; } } echo $imc = ($peso/$altura*$altura); e no form tinha os campos peso por exemplo como name e id=peso porem nao veio as informacoes o que posso ter dado errado? obrigada Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Abril 6, 2011 Antes do laço faça isso abaixo para ver se está tudo ok, ou seja, os valores que estão vindo do form. echo '<pre>'; var_dump($_POST); echo '</pre>'; Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Abril 6, 2011 Oi Vivian. Faça o teste que o André da Silva recomendou, e poste o resultado. Não vejo motivos para não estar funcionando, apesar de eu não ter testado nenhum script. Você chegou a testar o último que eu passei, com exemplo do IMC, copiando exatamente igual? Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 6, 2011 oi amigos... entrei com peso 46 e altura 1.60 e no browser saiu o seguinte: array(2) { ["peso"]=> string(2) "46" ["altura"]=> string(4) "1.60" } 46 duvidas que nao fez o calculo e nao entendi por que string(2) e (4) nao seria (1) e (2) ja que so tem 2 campos neste exemplo? Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Abril 6, 2011 string(2) = 2 caracteres = 4 6 string(4) = 4 caracteres = 1 . 6 0 Agora e aquele 46 ali embaixo? Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 6, 2011 oi, entendi é o tamanho do conteudo do campo inserido no form.. ok... ele interpreta que tudo é string, correto? o 46 é o resultado de : $imc = ($peso/$altura*$altura); nao entendi a logica de nao ter conseguido fazer a conta e ter dado este valor? entao posso utilizar normalmente as variaveis $altura e $peso durante o script, ja que foi nomeado no form? inclusive posso usar como envio por email? Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Abril 6, 2011 É porque você tem que adicionar um parentes em $altura*$altura. Assim primeiro ele multiplica a altura e depois então ele divide o peso pelo resultado de sua multiplicação. $imc = ( $peso/($altura*$altura) ); // Agr ele executa o primeiro parenteses($altura*$altura) para então depois executar o segundo que é a divisão Porque da forma que estava antesele fazia isso: Divida $peso/$altura e depois pegava o resultado desta divisão e multiplicava por $altura novamente, por isso retornava o mesmo valor recebido. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 6, 2011 verdade Andre, funcionou com os parenteses.. agora tento formatar os dados e enviar por email usando o modelo HTML, por exemplo: $correio->load( 'modelo_imc.html' ); //Carregamos o html $body = $correio->transformView(); //Damos um echo no html transformado porem o email chega apenas com as variaveis $imc $altura $peso em vez dos valores no lugar das variaveis. O que pode ter ocorrido? Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 7, 2011 amigos, consegui processar o formulario com este codigo: foreach($_POST as $nome_campo => $valor){ $comando = "\$" . $nome_campo . "='" . $valor . "';"; eval($comando); } porem como no formulario tem campos do tipo checkbox e so é processado se for checado, caso contrario nem aparece o nome do checkbox. ai quando vou substituir a variavel no arquivo html, como ele nao apareceu como POST (isto é nao foi checado) ele nao substitui no arquivo HTML; como resolvo isso? helpp Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Abril 7, 2011 Vivian, não há necessidade alguma de se executar um eval como está sendo feito em seu código. Deixe-o assim: foreach($_POST as $nome_campo => $valor){ $$nome_campo = $valor; } Quando ao checkbox, tu podes verificar se o valor do mesmo é diferente de nada. Se ele foi selecionado, com certeza possui algum valor. Exemplo: if ($name_do_checkbox == '') { echo 'Você não selecionou um checkbox... magoou :('; } Entendeu? :joia: Compartilhar este post Link para o post Compartilhar em outros sites
vivian s. 0 Denunciar post Postado Abril 7, 2011 oi so que o problema que necessito pegar todos os checkbox do formulario mesmo vazios, porem vamos imaginar que não sabemos o nome de todos os checkboxs pois sao varios, pois semão tenho que fazer a listagem o que não é o objetivo, e sim simplificar. tentei dar um var_dump, ou um print_r, ambos so aparecem se realmente forem checados. seguindo no nosso exemplo: <form action="x.php" method="post"> <input type="text" name="peso" value="" /> <input type="text" name="altura" value="" /> <input name="doencas7" type="checkbox" value="Diabetes" /> <input name="doencas2" type="checkbox" value="Colesterol" /> <input type="submit" value="Enviar" /> </form> vamos imaginar que nao sei quantas doencas tem, se for ver teria que listar uns 100 nomes ou mais... e neste exemplo tem os checkbox docenas7 e doencas2. e se for checado apenas o doencas2, so vem que tem o campo doencas2 que é colesterol, mas preciso que venha tambem o campo doencas7 como vazio, pra saber se realmente nao tem a doença e possa substituir no modelo os campos doencas2 e doencas7, senao o email vai assim: seu imc = 24 e suas doencas sao: Colesterol / doencas7 E preciso capturar o nome do campo e o vazio dele tambem. Qual sua sugestao? obrigadaa Compartilhar este post Link para o post Compartilhar em outros sites