Jump to content

PHP | MYSQL - criar linha com campos de linhas diferentes


Wionon

Recommended Posts

Boa tarde a todos,

Ver se consigo explicar-me:

Tenho uma tabela de contactos (tbl_contactos) em que tem vários campos, um deles o email_principal.

Faço um SELECT tbl_contactos.email_principal FROM tbl_contactos.

A minha ideia é em PHP/MYSQLI passar as colunas, dos email, mas em linhas em que cada email fica separado por ponto e virgula (;) para posteriormente poder utilizar uma botão, que vai abrir o outlook através a <a href="mailto:$variavel_com_o_emails_todos">ENVIAR EMAIL</a>

 

A minha duvida é como consigo colocar todos os email do SELECT separados por ponto e virgula e passar para a variável para posteriormente remeter para todos os destinatários SELECCIONADOS.

 

Obrigado pela vossa ajudar, se conseguirem.

Vicente

Link to comment
Share on other sites

Viva, 

Se quiseres mesmo usar o resultado vindo da query, podes usar group_concat  podes ler sobre o uso desta função aqui

No entanto, por uma questão de segurança, acho melhor receberes a lista, processas para o caso de existirem emails inválido ou vazios e no fim construir a string final apenas com emails com formato válido

Ex:

<?php

$emails = [
	"abc@gmail.com",
	"",
	"invalid@samething",
	"valid@hotmail.com"
];

// Testa o formato usando função interna filter_var do php
$validEmails = array_map(function ($email){
		return filter_var($email, FILTER_VALIDATE_EMAIL);
	}, $emails);

var_dump($validEmails);

// Com array_filter, todos os valores false são removidos	
$validEmails = array_filter($validEmails);
var_dump($validEmails);

// Cria a string
$to = implode(";", $validEmails);
var_dump($to);

Pode testar este exemplo e trabalhar o mesmo para o que precisas.

Dava para fazer tudo apenas numa linha mas penso que assim será mais descritivo e fácil de acompanhar.

Feito é melhor que perfeito

Link to comment
Share on other sites

  • 1 month later...

Ivo já teste e fica impecável. 

Agora tenho mais um desafio. 

Tenho uma base de dados em mysqli, em que lá tenho uma tabela com varias lista de distribuição. 

Cada lista distribuição tem vários email assoiados.

A minha dificuldade passa por, como é que eu faço primeiro a agregação do email associados a uma lista de distribuição X se mailto só funciona na tag <a> e é chamada quando clico. Ou estou a pensar mal!?

Obrigado pela ajuda desde já.

Vicente

Link to comment
Share on other sites

Viva @Wionon

Sem mais detalhes do projeto ou do objetivo do teu código, fica mais complicado perceber qual a melhor decisão.

 A Tag <a> com opção mailto deve ser uma solução simples, o que estas a explicar já não é simples para uma simples tag.

 

As listas são para o utilizador enviar email? Porque não fazer logo o envio do email pelo servidor? Se fizeres pelo servidor, basta identificar a lista pretendida, e enviar o email.

Feito é melhor que perfeito

Link to comment
Share on other sites

Ok, é uma abordagem pouco convencional, mas podes resolver isso de duas maneiras assim sem pensar muito no assunto.

1ª Faz a listagem de todas as listas de distribuição, em que constróis a lista de links com mailto para cada uma das listas de distribuição, o utilizador clica na que pretende.

2ª Podes criar um caixa de seleção (tag select) com as listas de distribuição como id, e depois num formulário para enviar email a essa lista através de POST passas o id da lista de distribuição e vais buscar os emails dessa lista, e crias o <a mailto=".....">

 

Feito é melhor que perfeito

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.