webForumDet fria alternativet

kopia till flera mottagare via checkbox i formmail

PHP

10 svar · 1 002 visningar · startad av Fratello

Medlem sedan nov. 20095 inlägg
Frågan#1

Hej alla hjälpsamma och kloka vänner!
Ber om hjälp igen.

Först har jag en filtrering från databas

$result = mysql_query("SELECT * FROM medlemar WHERE ".$avdelning." ='ja' order by rand()" ) or die(mysql_error());

?>
<?php while($row = mysql_fetch_array( $result )) { ?>

Varje resultat har en checkbox och meningen är att där ska man välja vilka man vill skicka e-post kopia till (via formulär som finns längre ner på sidan).

...echo'<input name=" " type="checkbox" id="" value=""/>'...

Jag gissar att varje checkbox måste ha ett unikt namn typ:

input name="epost $row['medlem']" type="checkbox" id="" value="$row['epost']", men det verkar inte funka med denna kod.

Hur gör man? Och hur får man sedan valda adresser till $cc i formmail.php

/---------formmail-----------

<?php
// startar sessioner
session_start();
// ämnesrubrik som visas när mailet tas emot
$subject = "";
// e-postadress som formulärinnhållet ska skicka till
$to = "";

$cc =

// om submitknappen använts bearbetas informationen i formulärfälten
if(isset($_POST['submit'])){

// kontrollerar om magic_quotes_gpc är aktiverat
// och lagrar information från formuläret
// som används i meddelandet och validering av fältinnehåll
if(get_magic_quotes_gpc()){
$name = stripslashes(trim($_POST["name"]));
$email = stripslashes(trim($_POST["email"]));
$message = stripslashes(trim($_POST["message"]));
}
else{
$name = $_POST["name"];
$email = $_POST["email"];
$message = $_POST["message"];
}
// startar sessioner
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['message'] = $message;

// validering och kontroll av angiven information i formulärfält
$validate1 = '<script>alert("Information saknas i ett obligatoriskt formulärfält. \n Ange ditt NAMN innan du skickar formuläret igen!");</script>';
$validate2 = '<script>alert("Information saknas i ett obligatoriskt formulärfält. \n Ange din E-POSTADRESS innan du skickar formuläret igen!");</script>';
$validate3 = '<script>alert("Information saknas i ett obligatoriskt formulärfält. \n Ange ditt MEDDELANDE innan du skickar formuläret igen!");</script>';
$validate4 = '<script>alert("Du har angivit en felaktig epostadress! \nAnge epostadressen igen.");</script>';
$validate_formmail = '<script>alert("Du försöker använda vårt Formmail vilket bara är tillåtet från vår webplats!");</script>';
$validate_captcha = '<script>alert("Du har angivit fel kontrollkod! Ange exakt samma tecken som visas i kodbilden. \n\nDen verifieringsbild du ser är en sk Captcha (robotfälla) som används för att förhindra att formuläret används av spamprogram (spamrobotar).");</script>';

// kontrollerar om alla formulärfält är ifyllda
if (empty($name)) {
echo $validate1;
echo '<script>history.back(1);</script>';
exit;}
if (empty($email)) {
echo $validate2;
echo '<script>history.back(1);</script>';
exit;}
if (empty($message)) {
echo $validate3;
echo '<script>history.back(1);</script>';
exit;}

// kontrollerar om epostadressen är korrekt angiven
if(!preg_match("/^[a-z0-9\å\ä\ö\ü\%._-]+@[a-z0-9\å\ä\ö\ü\%.-]+\.[a-z]{2,6}$/i", $email)) {
echo $validate4;
echo '<script>history.back(1);</script>';
exit;}

/*(ta bort denna kommentering om du vill aktivera funktionen)
//kontrollera om scriptet anropas från ditt formulär
if (($_SERVER['HTTP_REFERER']!= "http://www.dinadress.se/kontaktform.php")
&& ($_SERVER['HTTP_REFERER']!= "http://dinadress.se/kontaktform.php")) {
echo $validate_formmail;
echo '<script>history.back(1);</script>';
exit;}
*/

// kontrollerar om CAPTCHA-koden är korrekt
if($_SESSION['captcha_kod'] != md5($_POST['captcha_kod'])) {
echo $validate_captcha;
echo '<script>history.back(1);</script>';
exit;}

else {
// om formuläret är korrekt ifyllt skickas informationen
if (mail($to,$cc, $subject, $message ,"From: $email")) {
// avslutar sessionen för captcha-bilden
unset($_SESSION['captcha_kod']);
// visar bekräftelsesidan
header("Location: bekraftelse.php");
}
else
echo "Det gick inte att skicka ditt meddelande";
}
}
?>
/---------------Tack i förhand--------------------

/Vinko

Medlem sedan juni 20006 031 inlägg
#2

Skapa en array för epost adresserna

$i = 0;
while($row = mysql_fetch_array( $result )) {
     echo "<input type=\"checkbox\" name=\"epost[$i]\" value=\"$row['epost']\" />"; // och lite radbrytningar mm
     $i++;
}

Sen kör du implode() på din array för att få en komma separerad sträng som du lägger i cc.

Otestat, men det borde fungera

Medlem sedan nov. 20095 inlägg
#3

Tack Pedda,
då har jag fixat sintaxfel i koden... men hur ska se ut koden med implode?
Hur lägger man value in array?

if (!isset($_POST['epost[$i]'])) {
$kopia= implode(", ", vad?) '

--------- i formmail.php---------
$cc =$kopia

Tacksam för svar!

Medlem sedan juni 20006 031 inlägg
#4

Du kan ju först kolla om några checkboxar var ikryssade om du vill.

if(count($_POST['epost'] > 0)) {
     $kopia= implode(", ",  $_POST['epost']);
}
Medlem sedan nov. 20095 inlägg
#5

Tack Pedda för all din hjälp,
men, tyvärr, får jag det inte att funka.
Kan inte testa mailet för har inte det installerat.
Testar så här, men visas det ingenting på skärmen när jag checkar boxarna
...
echo'<input type="checkbox" name="upit_'.$row['kundnummer'].'" value="'.$row['epost'].'"/>'?></td>
<?php

	if (isset($\_POST\['upit\_'.$row\['kundnummer'\].''\])) {
	
 $kopia= implode(",", $\_POST\['upit\_'.$row\['kundnummer'\].''\]);}
 foreach ($kopia as $varde)
  echo $värde;

Vår är felet??? :(

Medlem sedan juni 20006 031 inlägg
#6

Felet är att du ger dina checkboxar unika namn med upit_'.$row['kundnummer'], och då får du ingen array.

I mitt exempel använde jag en räknare ($i) för varje objekt i arrayen.

Medlem sedan juni 20006 031 inlägg
#7

Testa den här koden så förstår du nog hur jag menar:

<form name="f_test" action="" method="post">
<?php
$i = 0;

while($i < 10) {
	$crapstring = rand();
	echo "<label><input type='checkbox' name='foo[$i]' value='$crapstring'>$crapstring</label><br />";
	$i++;
}
?>
<input type="submit" value="Go..." name="s_form">
</form>
<?php
if(isset($_POST['s_form'])) {
	print_r ($_POST['foo']);
}
?>
Medlem sedan nov. 20095 inlägg
#8

Tack igen!

Nu ficka jag det att funka (med print_r...)
Felet var väl att mina checkboxar låg utanför formuläret.
Räcker det nu om jag i formmail.php lägger
$cc = $_POST['foo'], eller måste jag köra implode?

Medlem sedan juni 20006 031 inlägg
#9

Nej, du måste köra implode() också.

$cc = implode(", ", $_POST['foo']);
Medlem sedan nov. 20095 inlägg
#10

Jätte tack, Pedda!

Medlem sedan juni 20006 031 inlägg
#11

Fratello skrev:

Jätte tack, Pedda!

Inga problem, och välkommen till wF i efterhand. :)

Använd gärna länken "Markera som lösning" vid det inlägg som löste frågan så tråden hamnar bland lösta trådar och andra med samma problem hittar lösningen.

276 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
136 ms — ändringar (db)