webForumDet fria alternativet

problem med mailformulär

36 svar · 850 visningar · startad av Rickard

RickardMedlem sedan maj 2001287 inlägg
#1

Halloj!

Sitter å försöker pilla på ett mailformulär som kan skicka mail till fler än en mailadress.
Hittade ett script av pedda i scriptarkivet och började pilla där i.

Problemet är nu bara att jag vill försöka via en databas att hämta inlaggda mailadresser där ifrån och få dom att stå i fältet "Din adress"

$thanks = "mail.php?func=ThanksMessage&namn=$namn";        // url to thankspage
[B]$yourmail = [email]mail@mail.mail[/email] ; [/B]       // Your mailadress
$credit = 0;        // 1 = give me credit for the script, 0 = no credit :(
$showcc = 0;        // 1 = show the cc field, 0 = don't show it
$showbcc = 0;        // 1 = show the bcc field, 0 = don't show it

Detta försöker jag åstadkomma med en tämligen simpel kod:

<?
$lank = mysql_connect ("localhost","user","pass");
mysql_select_db ("newsletter");
// Hämta rader och skriv ut
$sql = "SELECT * FROM maildatabase ORDER BY id ASC";
$result = mysql_query($sql);
while($rad = mysql_fetch_array($result)) {
?>
<?=$rad["mail"]?> ,
<?
}
?>

Vad jag undrar är hur jag kan få svaret från det scriptet att hamna i $yourmail i mailformuläret.
Har någon en aning om hur jag skall gå tillväga?
Svaret från maildatabase.php kan skådas på följande adress:
http://82.182.89.126/~noratx/newsletter/maildatabase.php

hoppas någon vet hur jag skall gå tillväga. =)

PeddaMedlem sedan juni 20006 032 inlägg
#2

För att skicka meddelandet till flera så brukar man använda:

$yourmail = "mail1@domän.com" . ", " ; // notera kommatecknet på första posten!
$yourmail .= "mail2@domän.com";

Hur man löser det mot en databas orkar jag inte lista ut nu, men det kanske är en liten hjälp på vägen. ;)

RickardMedlem sedan maj 2001287 inlägg
#3

heh, jadu. Nu är det ju så att jag tänkte använda det ungefär som ett nyhetsbrev.
Å då blir det aningens jobbigt att gå in i phpfilen varje gång man skall lägga till en mailadress..
Därav databasen...
Men jag tror att jag har lösningen på tungan.. =)

edit:
Det var jag inte als.
Så förslag mottages med glädje. =)

Vad jag försökte göra var att lägga in databas scriptet helt enkelt i mail.php i dom här krokarna:

function Send() {
global $bgcolor, $textcolor, $tablecolor, $border, $bordercolor, $namn, $epost, $meddelande, $subject, $yourmail, $thanks, $from, $email, $back, $errorname, $errormail, $errormessage, $ccmail, $bccmail, $sendermessage;
$date = "".date("Y-m-d (H:i)")." - IP: ".$_SERVER["REMOTE_ADDR"] ."\n";
$header .= "From: \"".addslashes($namn)."\" <".$epost.">\r\n";
$header .= "Reply-To: <".$epost.">\n";
$headers .= "To:  <".$yourmail.">\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\n";
$header .= "X-Sender: <".$yourmail.">\n";
$header .= "X-Mailer: PHP4\n";
$header .= "X-Priority: 3\n"; //1 UrgentMessage, 3 Normal
$header .= "Return-Path: <".$epost.">\n";
$header .= "Cc: ".$ccmail."\r\n";
$header .= "Bcc: ".$bccmail."\r\n";

Genom att ändra:
$headers .= "To: <".$yourmail.">\r\n";
till
$headers .= "To: <".$rad=["mail"].">\r\n";
Men det gick inget vidare, det fick jag parse error på.

MeleaMedlem sedan juli 20033 147 inlägg
#4

Såhär hade jag gjort

$lank = mysql_connect ("localhost","user","pass");
mysql_select_db ("newsletter");
// Hämta rader och skriv ut
$sql = "SELECT * FROM maildatabase ORDER BY id ASC";
$result = mysql_query($sql);
while($rad = mysql_fetch_array($result)) {
	$message = "<html>
	<head>
	</head>
	<body>Textarea formuläret här, allt text dvs.</body>
	</html>";

	$headers  = "MIME-Version: 1.0\r\n";
	$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

	$avsandare = $rad['mail'];
	$headers .= "From: [email]dinmail@dinmail.se[/email]\r\n";
	$headers .= "Reply-To: $avsandare;

	mail($avsandare, "rubriken i mailet", $message, $headers);
}
RickardMedlem sedan maj 2001287 inlägg
#5

Jag förstår inte riktigt vad jag skulle uppnå med det, jag är inte så jättebra på PHP, så jag ser inte direkt något samband med mina frågor i ditt svar malea.

MeleaMedlem sedan juli 20033 147 inlägg
#6

Kolla min redigering.

RickardMedlem sedan maj 2001287 inlägg
#7

Melea: hmm.. ok, det SER ju rätt ut iallafall..
Men har du tittat i peddas script?
För jag hittar inte vart jag skall lägga in det där...
Något textarea formulär finns inte just där eftersom det där bara är headers typ...
Det är inte meningen att man skall fylla i mailadresser för han öht. i det scriptet då det till en början är ett feedback formulär för att skicka till en enda mailadress.

Det funkar dock om man i " $yourmail = mail@mail.mail ; "
skriver ex: " $yourmail = mail1@mail.se , mail2@mail.se , mail3@mail.se ; " osv osv.. allt separerat med ett komma och blanksteg.

Därav att maildatabase.php lägger upp just mailadresserna från databasen på just det viset.

Så det jag egentligen vill uppnå ät att $yourmail hämtar sitt värde från $rad["mail"] i maildatabse.php

RickardMedlem sedan maj 2001287 inlägg
#8

Jag försökte med den här varianten:

$thanks = "mail.php?func=ThanksMessage&namn=$namn";        // url to thankspage ([url]http://www.yourdomain.com/thanks.php[/url]), or mail.php?func=ThanksMessage&namn=$namn for standard message.
$lank = mysql_connect ("localhost","user","pass");
mysql_select_db ("newsletter");
// Hämta rader och skriv ut
$sql = "SELECT * FROM maildatabase ORDER BY id ASC";
$result = mysql_query($sql);
while($rad = mysql_fetch_array($result)) {

$yourmail = "$rad['mail']";        // Your mailadress
}

Men då fick jag detta felet

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /home/noratx/public_html/newsletter/mail.php on line 30

Line30 = $yourmail = "$rad['mail']"; // Your mailadress

RickardMedlem sedan maj 2001287 inlägg
#9

Ok.. jag fick det att funka nu...
tog bort " " framför och bakom "$rad['mail']"; så funkade det.

Nu fick jag dock ytterligare ett problem...

Warning: Cannot add header information - headers already sent by (output started at /home/noratx/public_html/newsletter/mail.php:2) in /home/noratx/public_html/newsletter/mail.php on line 147

Lite kod för att kunna felsöka:

} else if (eregi("^[a-z0-9]+([_\.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\.[a-z]{2,}$", $epost)) {
        // Send the mail
        mail ($yourmail, $subject, $totmessage, $header);
        header("Location: $thanks");
        } else {
                include("jams_header.php");
                echo "$errormail<br><br><a href=\"javascript:history.back()\">$back</a>";
                include("jams_footer.php");
        }
}

Line 147 är som ni säkert förstår:
header("Location: $thanks");

InsiderMedlem sedan jan. 2000978 inlägg
#10

Skriv ut tackmeddelandet på samma sida istället för på $thanks - sidan.
Du kontroller om mailet har blivit skickat och då skriver du ut ett meddelande.

Jag tror den lösningen är enklast.
Det kan hända att det inte funkar att använda 'header' direkt efter mail()...

RickardMedlem sedan maj 2001287 inlägg
#11

Ok.
Det skumma är att det funkade innan jag la till databasfunktionen.

Nu tampas jag dock med ett lite annat problem som uppkom i samband.
Den hämtar alla mailadresser, MEN, den lägger dom efter varandra utan något kommatecken...
dvs:
mail1@mail.semail2@mail.semail3@mail.se
istället för:
mail1@mail.se , mail2@mail.se , mail3@mail.se

Koden ser ut som såhär:
$lank = mysql_connect ("localhost","user","pass");
mysql_select_db ("newsletter");
// Hämta rader och skriv ut
$sql = "SELECT * FROM maildatabase ORDER BY id ASC";
$result = mysql_query($sql);
while($rad = mysql_fetch_array($result)) {

$yourmail = $rad['mail'] // Your mailadress
}

Jag försökte också lägga till ett fält i databasen för att få dit kommat
$marker = $rad['komma']
la jag efter $yourmail
men då får jag parse error på den raden.

I det fältet i databasen ligger " . " ett blanksteg, ett komma och ytterligare ett blanksteg.

InsiderMedlem sedan jan. 2000978 inlägg
#12

Istället för att skicka samma mail till flera avsändare, så kan du ju skicka ett mail till varje avsändare, som i Melea's exempel ovan.

Du skickar alltså mailet i loopen.
Det blir ju sak samma och så slipper du strula med dina kommatecken.

RickardMedlem sedan maj 2001287 inlägg
#13

Mjo, jag vet dock bara inte hur jag skall lösa den funktionen så som meala har beskrivit det.
Som sagt, jag är inte direkt jättebra på PHP

MeleaMedlem sedan juli 20033 147 inlägg
#14

Okej, ska försöka förklara mig bättre :)

Om du gör ett formulär, typ detta:

<form action="[b]skicka_massmail.php[/b]" method="post">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td width="100"><b>Rubrik</b></td>
<td><input type="text" name="rubrik" size="30"></td>
</tr>
<tr>
<td>& nbsp;</td>
<td><textarea name="meddelande" cols="50" rows="14"></textarea></td>
</tr>
<tr>
<td>& nbsp;</td>
<td><input type="submit" value="Kontakta alla" ></td>
</tr>
</table>

Och sen lägger in min kod i filen skicka_massmail.php:

<?
$lank = mysql_connect ("localhost","user","pass");
mysql_select_db ("newsletter");
// Hämta rader och skriv ut
$sql = "SELECT * FROM maildatabase ORDER BY id ASC";
$result = mysql_query($sql);
while($rad = mysql_fetch_array($result)) {
    $message = "<html>
    <head>
    </head>
    <body>nl2br($_POST[meddelande])</body>
    </html>";

    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

    $avsandare = "din@email.se";
    $headers .= "From: $avsandare";
    $headers .= "Reply-To: $avsandare;

    mail($rad[mail], $_POST[rubrik], $message, $headers);
}
?>

Så borde det fungera...

InsiderMedlem sedan jan. 2000978 inlägg
#15
function send($mejl) {
//massa kod
$headers .= "To:  <".$mejl.">\r\n";
//Mera kod
}

while($rad = mysql_fetch_array($result)) {
$yourmail = $rad['mail'] // Your mailadress
send($yourmail);
}

Förstår du principen?

/Red -> Nu gjorde han på ett annat sätt. Men det funkar lika bra.

RickardMedlem sedan maj 2001287 inlägg
#16

Sorry, såg inte als att melea hade skrivit ett nytt, skall försöka med det så skall vi se vad det leder till. =)

edit igen då så slipper jag posta ett nytt inlägg...

Det där funkade klockrent, nu skall jag bara försöka bygga ut det med liknande funktioner som tidigare script, samt även skickas iväg till en header location...

Dock vart något lite skumt...

$message = "\<html\>
\<head\>
\</head\>
\<body\>nl2br($\_POST\[meddelande\])\</body\>
\</html\>";

Den skickar med "nl2br" i klartext i meddelandet, hur löser man det så den gör vad den skall å inte skickas i klartext? =)

RickardMedlem sedan maj 2001287 inlägg
#17

Ytterligare en fundering...

Jag tänkte även ta å spara samtliga utskick i en databas...
Hur glr jag för att få den att spara i en databas när jag klickar på skicka knappen?

Kod för att spara kan jag knåpa ihop själv tror jag, frågan är bara hur jag får den att spara allt efter att den skickat mailet.. =)

en liten edit här med då: =)

$lank = mysql_connect ("localhost","user","pass");
$databas = mysql_select_db("newsletter");
$sql="INSERT INTO saved_letters(date-time,subject,mail,message)
VALUES('$date-time','$subject','$mail','$message')";
mysql_query("$sql");
mysql_close ($lank);

Kan jag klistra in den koden längst ner så det sparas lite sådär automagiskt, eller behöver jag göra en separat funktion för det?
Och i så fall, hur gör jag den funktionen? =)

RickardMedlem sedan maj 2001287 inlägg
#18

Halloj...
Nu börjar jag få ordning på allt så som jag vill ha det.. utom en sak.
Som tidigare nämnde jag ju att jag vills epara alla mail som skickats i en databas, å det har jag lyckats med, så när som på en sak...

Mottagarnas mailadresser vill inte sparas.

Jag har tittat å tittat å försökt och försökt, utan att lyckas.
Lade till en ny variabel för mail för att testa, men inte tusan funkade det heller...

Jag bifogar större delen av koden så kanske någon kan se vad felet är... hoppas jag iaf.. för nu börjar jag snart bli tokig.. =)

$lank = mysql_connect ("localhost","user","pass");
mysql_select_db ("newsletter");
// Hämta rader och skriv ut
$sql = "SELECT * FROM maildatabase ORDER BY id ASC";
$result = mysql_query($sql);
while($rad = mysql_fetch_array($result)) {
    $message = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n
<HTML><BODY bgcolor=\"$bgcolor\"><table width=\"80%\" bgcolor=\"$tablecolor\" text=\"$textcolor\" border=\"$border\" bordercolor=\"$bordercolor\" align=\"center\" cellpadding=\"60\" cellspacing=\"0\"><tr><td>\n
$_POST[meddelande]
</td></tr></table></BODY></HTML>\n";

    header("Location: $thanks");

    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

    $avsandare = "do_not_answear@mail.se";
    $headers .= "From: $avsandare";

    mail($rad[mail], $_POST[rubrik], $message, $headers);

}

$mail2 = $rad["mail"];
$datum = date("Y-m-d H:i:s");
$lank2 = mysql_connect ("localhost","user","pass");
$databas2 = mysql_select_db("newsletter");
$sql2="INSERT INTO saved_letters(datum,rubrik,mail,message)
VALUES('$datum','$rubrik','$mail2','$message')";
mysql_query("$sql2");
mysql_close ($lank2);

?>
PeddaMedlem sedan juni 20006 032 inlägg
#19

Eftersom du loopar mailen så måste du även ha sql satsen där du lägger in i databasen i loopen.
Annars så loopar du ut mailen, och sedan försöker du lägga in i databasen.

RickardMedlem sedan maj 2001287 inlägg
#20

Ok, men är inte då risken att den sparar allt lika många gånger som mailadresser då?
Eftersom scriptet just nu skickar samma mail flera gånger?

edit:
Har du lust å bra knåpa ihop hur tusan jag skall lösa det?
För så som jag trode att man löste det genom att loopa fram mail igen gick tydligen inte als..

141 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)