Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 17:53 Der er 12 kommentarer og
1 løsning

Elementært problem - billige point!

Hej jeg har et problem med et mail() script.

Jeg har en form, hvor indholdet af dette skal kobles sammen med et stykke html ligefør den sendes afsted via mail().

Links i form-indholdet vil imidlertid ikke virke, idet de parses med \" foran ...

What to do?
Avatar billede jaw Nybegynder
04. oktober 2006 - 17:55 #1
Prøv at smide stripslashes(..) omkring.
Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 18:05 #2
Det har tilsyneladende ikke den store effekt?
Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 18:10 #3
Koden, hvor mail sendes afsted, ser sådan ud:

addslashes($emne);
$indhold = ereg_replace("\n", "<br>", $indhold);
stripslashes($indhold);

$content = "<p>&nbsp;</p>
<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"10\" bgcolor=\"#EFEDE5\" align=\"center\">
  <tr>
    <td><p><img src=\"http://www.Y.dk/gfx/nyhedsbrev/logo.gif\" width=\"600\" height=\"91\"></p>
    <p style=\"font-family: arial, verdana, tahoma, geneva; color: #990000; font-size: 14px\"><b>$emne</b></p>
    <p style=\"font-family: arial, verdana, tahoma, geneva; color: #000000; font-size: 12px; line-height: 150%\">$indhold</p>
    <p style=\"font-family: arial, verdana, tahoma, geneva; color: #990000; font-size: 14px\"><b>Y.dk</b></p></td>
  </tr>
</table>
<p>&nbsp;</p>";

$testers = "X <x@hotmail.com>";
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Y <redaktion@Y.dk>' . "\r\n";
$headers .= 'Return-Path: Y <redaktion@Y.dk>' . "\r\n";
mail("$testers", $emne, $content, $headers);
print "<p><b><font color=\"green\">Testbrevet er sendt til: $testers</font></b></p><p>&nbsp;</p>";
Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 18:12 #4
Og $indhold bliver bare sendt afsted til ovenstående via en form.

Det går altså galt, når jeg sender links eller ".

Så kommer der slash foran " ved links, men ikke den øvrige html.
Avatar billede jaw Nybegynder
04. oktober 2006 - 18:17 #5
Har du prøvet at udskrive med echo $indhold; og taget et kig i kildekoden fra din browser og set hvordan det ser ud?

Og så er nl2br($indhold) altså mindre ressourcekrævende end det regulære udtryk du laver...
Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 18:24 #6
Når jeg skriver echo $indhold viser den fx:

<A HREF=\"http://www.ob.dk\" TARGET=\"_BLANK\">

Selvom jeg ikke har added slash?
Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 18:27 #7
- Og tak i øvrigt for tippet med nl2br($indhold) ... ;-)
Avatar billede jaw Nybegynder
04. oktober 2006 - 18:31 #8
Selv tak da :)

Hvordan ser din form egentlig ud?
Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 18:46 #9
print "<form name=\"send\" method=\"post\" action=\"?action=send\">
    <select name=\"type\">
      <option value=\"test\" selected>Testmail</option>
      <option value=\"real\">Rundsending til alle abonnenter</option>
    </select>
    <p>&nbsp;</p>
    <p><b>Emne</b></p>
    <p><input type=\"text\" name=\"emne\" size=\"40\"></p>
    <p>&nbsp;</p>
    <table width=\"100\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
      <tr>
        <td><b>Indhold</b></td>
        <td style=\"padding-bottom: 2px\"><div align=\"right\"><input type=\"button\" value=\"Link\" onClick=\"link();\" style=\"color: blue; text-decoration: underline; font-size: 9px;\" title=\"Markér tekst, som du vil lave til et link, og tryk her\"> <input type=\"button\" value=\"Fed\" onClick=\"fed()\" style=\"font-weight: bold; font-size: 9px;\" title=\"Markér tekst, som du vil lave fed, og tryk her\" class=hand></div></td>
      <tr>
        <td colspan=\"2\" style=\"padding-bottom: 2px\"><textarea name=\"indhold\" cols=\"70\" rows=\"15\" onSelect=\"storeCaret(this);\" onClick=\"storeCaret(this);\" onKeyUp=\"storeCaret(this);\"></textarea></td>
      </tr>
    </table>
    <p>&nbsp;</p>
    <p>Tryk kun én gang på send-knappen og afvent - det kan nemlig godt tage lidt tid at sende brevet.</p>
    <p>&nbsp;</p>
    <p><input type=\"submit\" name=\"Submit\" value=\"Send\" onClick=\"return checkFields(this.form)\"></p>
    </form>";
Avatar billede jaw Nybegynder
04. oktober 2006 - 18:53 #10
Hm, må indrømme jeg ikke lige kan gennemskue hvor fejlen/problemet opstår. Er det muligt at man kan se siden "live" et sted, så jeg selv kan teste det?
Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 19:00 #11
Here goes:



<?php
include("_top.php");
if ($logged_in_ln == "true" && $bruger_level == 1){

$action = $_GET['action'];
$id = $_GET['id'];
$emne = $_POST['emne'];
$indhold = $_POST['indhold'];
$type = $_POST['type'];

print "<p class=overskrift>Administration af nyhedsbrev</p><p>&nbsp;</p>";

if ($action != "oversigt") print "<p><a href=\"?action=oversigt\">Oversigt over abonnenter</a><p>";
if ($action != "skriv") print "<p><a href=\"?action=skriv\">Skriv nyhedsbrev</a><p>";
print "<p>&nbsp;</p>";

if ($action == "send") {

// ################# S E N D ##############################################################
   
    addslashes($emne);
    nl2br($indhold);

    $content = "<p>&nbsp;</p>
    <table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"10\" bgcolor=\"#EFEDE5\" align=\"center\">
      <tr>
        <td><p><img src=\"http://www.Hjemmeside.dk/gfx/nyhedsbrev/logo.gif\" width=\"600\" height=\"91\"></p>
        <p style=\"font-family: arial, verdana, tahoma, geneva; color: #990000; font-size: 14px\"><b>$emne</b></p>
        <p style=\"font-family: arial, verdana, tahoma, geneva; color: #000000; font-size: 12px; line-height: 150%\">$indhold</p>
        <p style=\"font-family: arial, verdana, tahoma, geneva; color: #990000; font-size: 14px\"><b>Hjemmeside.dk</b></p></td>
      </tr>
    </table>
    <p>&nbsp;</p>";

    if ($type == "real"){
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: Hjemmeside <redaktion@Hjemmeside.dk>' . "\r\n";
        $headers .= 'Return-Path: Hjemmeside <redaktion@Hjemmeside.dk>' . "\r\n";
        $result = mysql_query("SELECT navn, email FROM nyhedsbrev");
        $number = mysql_num_rows($result);
        if ($number > 0){
            while($row = mysql_fetch_array($result)){
                mail("$row[navn] <$row[email]>", $emne, $content, $headers);
                }
            print "<p><b><font color=\"green\">Nyhedsbrevet er sendt!</font></b></p><p>&nbsp;</p>";
            }
        }
    if ($type == "test"){
        $testers = "Hr 1 <mail1@hotmail.com>, Hr 2 <mail2@hotmail.dk>";
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: Hjemmeside <redaktion@Hjemmeside.dk>' . "\r\n";
        $headers .= 'Return-Path: Hjemmeside <redaktion@Hjemmeside.dk>' . "\r\n";
        mail("$testers", $emne, $content, $headers);
        print "<p><b><font color=\"green\">Testbrevet er sendt til: $testers</font></b></p><p>&nbsp;</p>";
        }
    }

if ($action == "delete"){
   
// ################# S L E T ##############################################################
   
    mysql_query("DELETE FROM nyhedsbrev WHERE id = '$id'");
    print "<p><font color=red><b>'Abonnenten er slettet!</b></font></p><p>&nbsp;</p>";
    }

if ($action == "oversigt" || $action == "delete"){

// ################# O V E R S I G T ##############################################################

    $result = mysql_query("SELECT * FROM nyhedsbrev ORDER BY id DESC");
    $number = mysql_num_rows($result);
    if ($number > 0){
        print "
    <script type=\"text/javascript\">
    function slet() {
        if (confirm(\"Vil du slette abonnenten?\"))return true;
        else return false;
        }
    </script>
    <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
      <tr>
        <td><b>Navn</b></td>
        <td><b>Email</b></td>
        <td><b>Oprettet</b></td>
        <td><b>Slet</b></td>
      </tr>";
        while($row = mysql_fetch_array($result)) print "
            <td>$row[navn]</td>
            <td>$row[email]</td>
            <td>" . date("d-m Y", $row[dato]) . "</td>
            <td><a href=\"?action=delete&id=$row[id]\" onclick=\"return slet()\">Slet</a></td></tr>";
          print "</table>";
          }
    }

if ($action == "skriv") {
   
    // ################# S K R I V ##############################################################
   
?>
<SCRIPT>
<!--
cb = "";
function link(){
    sel = document.selection.createRange();
    if (sel.text != "") hr = prompt("LINKADRESSE:","http://www."); //Du kan skifte "http://" ud med sel.text hvis adressen automatisk skal være den markerede tekst!
    else hr = "";
    if (hr != "http://www." && hr != "" && hr != null && sel.text != ""){
        html="<A HREF=\"" + hr + "\" TARGET=\"_BLANK\">";
        html+=sel.text.charAt(sel.text.length-1)==' '? sel.text.substring( 0, sel.text.length-1 ) : sel.text ;
        html+="</A>";
        insertAtCaret(document.send.indhold,html);
    }
}
function fed(){
    sel = document.selection.createRange();
    if (sel.text != ""){
        html="<B>";
        html+=sel.text.charAt(sel.text.length-1)==' '? sel.text.substring( 0, sel.text.length-1 ) : sel.text ;
        html+="</B>";
        insertAtCaret(document.send.indhold,html);
    }
}
function storeCaret(textEl){
    if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}
function insertAtCaret(textEl, text){
    if (textEl.createTextRange && textEl.caretPos){
        var caretPos = textEl.caretPos;
        caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
    } else textEl.value  = text;
}

function checkFields(theform){ //theform er en form
if (!empty(theform.emne.value)||!empty(theform.indhold.value))return false;
else return true;
}
function empty(field){ //field er en streng
    if(!field){
        alert("Du mangler at indtaste en værdi i en eller flere af de krævede felter (Emne & indhold)");
        return false;
        }
    else return true;
}
//-->
</SCRIPT>
<?php
    print "<form name=\"send\" method=\"post\" action=\"?action=send\">
    <select name=\"type\">
      <option value=\"test\" selected>Testmail</option>
      <option value=\"real\">Rundsending til alle abonnenter</option>
    </select>
    <p>&nbsp;</p>
    <p><b>Emne</b></p>
    <p><input type=\"text\" name=\"emne\" size=\"40\"></p>
    <p>&nbsp;</p>
    <table width=\"100\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
      <tr>
        <td><b>Indhold</b></td>
        <td style=\"padding-bottom: 2px\"><div align=\"right\"><input type=\"button\" value=\"Link\" onClick=\"link();\" style=\"color: blue; text-decoration: underline; font-size: 9px;\" title=\"Markér tekst, som du vil lave til et link, og tryk her\"> <input type=\"button\" value=\"Fed\" onClick=\"fed()\" style=\"font-weight: bold; font-size: 9px;\" title=\"Markér tekst, som du vil lave fed, og tryk her\" class=hand></div></td>
      <tr>
        <td colspan=\"2\" style=\"padding-bottom: 2px\"><textarea name=\"indhold\" cols=\"70\" rows=\"15\" onSelect=\"storeCaret(this);\" onClick=\"storeCaret(this);\" onKeyUp=\"storeCaret(this);\"></textarea></td>
      </tr>
    </table>
    <p>&nbsp;</p>
    <p>Tryk kun én gang på send-knappen og afvent - det kan nemlig godt tage lidt tid at sende brevet.</p>
    <p>&nbsp;</p>
    <p><input type=\"submit\" name=\"Submit\" value=\"Send\" onClick=\"return checkFields(this.form)\"></p>
    </form>";
    }

} else print "<p><b>Du har ikke adgang til administrationen. Log in <a href=\"/admin\">her</a>.</b></p>";
include("_bund.php");
?>
Avatar billede jaw Nybegynder
04. oktober 2006 - 19:11 #12
Jeg kan stadig ikke fremprovokere den fejl. Det ser for mig ud til, at det måske er noget af dit javascript der laver noget rod. Hvad gør link-knappen?

Da jeg spurgte, mente jeg egentlig om siden lå på en adresse, så jeg selv kunne teste den. Koden giver mig jo ikke 100% det samme som du har, da jeg mangler nogle includes og noget javascript...
Avatar billede bob_dylan Nybegynder
04. oktober 2006 - 21:35 #13
Jeg har valgt at reformulere og skære længere ind til benet i følgende spørgsmål. Svar endelig, hvis du kan her: http://www.eksperten.dk/spm/736619
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester