Ciao,
penso che qualcosa di questo genere possa funzionare:
<legend>Seleziona Utenti per invio Mail</legend>
<p>
<label class="block">Utenti:</label>
<p></p>
<?php
if ($result = $mysqli->query("SELECT nome, user_id FROM utenti"))
{
while ($row = $result->fetch_assoc())
{
echo '<input id="utente_'. $row['user_id'].'" class="wrong" type="checkbox" name="utente[]" value="'. $row['user_id'].'">';
echo '<label for="utente_'. $row['user_id'].'">', $row['nome'] ,'</label>';
}
}
?>
<input id="oltre" class="wrong" type="hidden" value="oltre" name="oltre">
</p>
e poi:
//preparo un messaggio a vuoto per gli errori
$ok_ko="";
$visibilità = "hidden";
if (!empty($_POST['utente']))
$utenti = array_filter(array_map('intval', $_POST['utente']));
if (empty($utenti))
{
$ok_ko.="Scegli il nome.<br /> ";
echo "$ok_ko";
echo "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
if (empty($_POST['text_mail']))
{
$ok_ko.="Scrivi qualcosa.<br />";
echo "$ok_ko";
echo "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
//Se la variabile NON è VUOTA lasci ogli errori
if ($ok_ko != "")
{
$visibilità = "visibile";
echo"<div style=\"visibility:$visibilità;\" class=\"ok_ko\"></div>";
// Altrimenti se è VUOTA lascio e proseguo
}
else
{
$ok_ko ="";
}
if (empty($ok_ko))
{
$_SESSION['text_mail'] = $mysqli->real_escape_string(trim($_POST['text_mail']));
require_once('phpmailer/PHPMailerAutoload.php');
$marconcini = "mail1@gmail.com";
$biblionet = "mail2@gmail.com";
$mail = new PHPMailer();
$mail->IsSMTP(); // attiva l'invio tramiteSMTP
$mail->isHTML(true); //Attivo invio come html
$mail->SMTPDebug = 0; //0 Senza debug, se voglio i dettagli metto 4
//$mail->Debugoutput = "error_log"; // scrive messaggi di errore nel log di PHP, si può lasciare sempre
$mail->Host = "smtp.gmail.com"; // ok PHPmailer
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Username = "mail@gmail.com";
$mail->Password = "pass";
/*Messagio in php o html usato come allegto*/
$body = file_get_contents('mail_pubblicita.php'); // testo del messaggio in formato html
// Mail che riceveranno solo gli utenti selezionati del form
if ($result = $mysqli->query("SELECT * FROM utenti WHERE user_id IN (" . implode(',', $utenti) . ")"))
{
while ($row = $result->fetch_assoc())
{
$nome = $row['nome'];
$email = $row['email'];
// ----- impostazione dei destinatari
$mail->ClearAllRecipients( );
$mail->AddAddress($email, $nome);
}
}
else
{
Errore: $mysqli->ErrorInfo;
}
//$mail->AddAddress ($email,$nome); //Mail che riceverà l'utente registrato
$mail->From = ($biblionet); //Inserire la mail di Andrea che apparirà come mail del mittente
$mail->FromName = ("Biblionet San Maurizio"); // Nome che apparirà come Mittente al cliente
//$mail->WordWrap = 50;
$mail->AddReplyTo($marconcini , 'Andrea ');
$mail->AddReplyTo($biblionet , 'Biblionet San Maurizio');
$mail->Subject = ("Novità dalla Biblionet");
$mail->AltBody = "Per visualizzare questo messaggio utilizza un programma adatto e che legga le mail in HTML!"; // Opzionale, da testare
$mail->Body = $body;
Il principio è che quello che tu inviavi con:
'<input id="utente" class="wrong" type="checkbox" name="utente">';
era un singolo valore, non un array di valori come serve a te, per fare ciò devi usare:
'<input id="utente_'. $row['user_id'].'" class="wrong" type="checkbox" name="utente[]" value="'. $row['user_id'].'">';
Inoltre il tag "label" non ha un attributo "value", quello deve essere associato sempre all'input. La label al massimo ha il "for" per collegarla all'input relativo.