Avatar billede SonyFreakDK Nybegynder
09. november 2010 - 20:56 Der er 25 kommentarer og
1 løsning

PHP hjælp - mailform til surftown webhotel

Hej alle.

Bær over med mig da jeg lige har oprettet mig her på eksperten.dk (:

Jeg sidder med min php kode - mailmanager. Jeg kan ikke få mailformen til at sende til min email jeg har på webhotellet.

Mailformen ses her: http://vandvand.dk/test/kontakt.php

Hvis i prøver at teste den, får i min fejlside frem.

<?php
class MailManager
{
    private $recepients = array();
    private $from;
    private $message;
    private $subject;
    private $errorMessage;
    private $charset = "iso-8859-1";
   
    public function getErrorMessage()
    {
        return $this->errorMessage;
    }

    public function setSmtp($smtp)
    {
        ini_set("smtp",$smtp);
    }
   
    public function setCharSet($charseto)
    {
        $this->charset = $charset;
    }
   
    public function setPort($port)
    {
        ini_set("smtp_port",$port);
    }

    public function setSender($sender)
    {
        $this->from = $sender;
    }
   
    public function addRecepient($mail, $name = null)
    {
        if($name == null)
        {
            $name = $mail;   
        }
        $this->recepients[$mail] = $name;
    }
   
    public function sendMail()
    {
        // Make sure the user can't cancel after the function has started running
        #set_time_limit(0);
          ignore_user_abort(true);
        foreach($this->recepients as $key => $value)
        {
            if(trim($this->message!="") || trim($this->subject!=""))
            {
                $header = "From: $this->from \n";
                $header.= "Content-type: text/html; charset=$this->charset \n";
                $header.= "MIME-Version: 1.0 \n";

                $tempMessage = str_replace("{NAME}",$value,$this->message);
               
                return mail($key, $this->subject, $tempMessage,$header);
            }
            else
            {
                $this->errorMessage = "Subject or message not set.";
                return false;
            }
           
        }
    }
   
    public function setMessage($message, $subject)
    {
        $this->message = $message;
        $this->subject = $subject;
    }
   
}
?>


Er ikke så skarp til php, og her skal det siges at den er købt.

Dog er jeg ret så sikker på fejlen ligger i denne kode.

Jeg skal have den klar til Teknisk Messe i Horsens her den 17. da dette er et skoleprojekt i Erhvervsøkonomi på HTX.

Håber i er friske på at hjælpe.

På forhånd tak!

Mvh. Kenn Nielsen.
Avatar billede repox Seniormester
10. november 2010 - 09:02 #1
Du bliver nød til at vise den kode der eksekverer dit objekt.
Avatar billede majbom Novice
10. november 2010 - 09:02 #2
du må have noget mere kode - den der bruger ovenstående kode/klasse?
Avatar billede SonyFreakDK Nybegynder
10. november 2010 - 11:16 #3
Den der eksekverer objekter er min action.php.

Den ses herunder:

<?php
function getVar($name)
{
    if(isset($_POST[$name]))
    {
        return $_POST[$name];
    }
    else
    {
        return "";   
    }
}
include("diverse/kontakt.php");
// Sætter $modtger og $afsender

$subjects = file("diverse/subjects.txt");

// Henter nogle felter der er sat via POST
$name = getVar("name");
$client_email = getVar("client_email");
$phone = getVar("phone");
$subject = getVar("subject");
$message = getVar("message");
$spam = getVar("spam");

$spam_hash = hash("whirlpool","exit".$spam); // Ordet "exit" er vores salt til hash'et

$error_messages = array();
$error_found = false;

if($name == "")
{
    $error_found = true;
    $error[] = "Navn mangler.";
}
else if(strlen($name) <= 1)
{
    $error_found = true;
    $error[] = "Navnet er for kort, det skal mindst være på 2 tegn.";
}

if($client_email == "" && $phone =="")
{
    $error_found = true;
    $error[] = "E-mail eller telefonnummer mangler.";
}
else
{
    if($client_email != "")
    {
        if(!eregi('^[A-Z0-9._+-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$', $client_email)) // Regular expression der matcher en email
        {
            $error_found = true;
            $error[] = "E-mailen er ikke i korrekt format, se eksempel til højre for feltet.";
        }
    }

    if($phone != "")
    {
        if(!eregi('^[0-9]{8}$', $phone)) // Regular expression der matcher et 8-cifret telefonnummer
        {
            $error_found = true;
            $error[] = "Telefonnummeret er ikke i korrekt format, det skal være på 8 cifre uden mellemrum.";
        }
    }
}


if($subject == 0)
{
    $error_found = true;
    $error[] = "Emne mangler.";
}
else
{
    $subject = $subjects[$subject]; // Overskriver $subject til at være det, der ligger i array'et (sat i diverse/subjects.txt)
                                    // Sørger for at der kommer tekst ud i mailen frem for at der kun kommer et index nummer
}

if($message == "")
{
    $error_found = true;
    $error[] = "Besked mangler.";
}
else if(strlen($message) <15)
{
    $error_found = true;
    $error[] = "Beskeden er for kort, den skal minimum være 15 tegn.";
}
else if(strlen($message)>1500)
{
    $error_found = true;
    $error[] = "Beskeden er for lang, den må ikke overstige 1500 tegn (inklusiv mellemrum).";
}

if($spam_hash != $_SESSION["cap"])
{
    $error_found = true;
    $error[] = "Spam-beskytteren mangler.";
}

if(!$error_found)
{
    include("MailManager.php");
   
    $mm = new MailManager();
    $mm->setSender($afsender);

    # Mailmanageren sørger selv for at sætte content typen til html, så vi kan lave en lidt lækker opsætningen af mailen
   
    $mail = array();
    $message = nl2br($message);
    $mail[] = "<span style=\"font-family: Leelawadee, Calibri, Arial, Helvetica, sans-serif; font-size:12px;\">";
   
    $mail[] = "Der er kommet en besked via kontaktformularen på VandVand.dk.";

       
    $mail[] = "<p><span style=\"color:#3e79c0; font-style:italic;\">Afsenders navn:</span><br> $name</p>\n";
   
    if($client_email != "")
    {
        $mail[] = "<p><span style=\"color:#3e79c0; font-style:italic;\">Afsenders e-mail:</span><br> $client_email</p>\n";
    }
   
    if($phone != "")
    {
        $mail[] = "<p><span style=\"color:#3e79c0; font-style:italic;\">Afsenders telefonnummer:</span><br> $phone</p>\n";
    }
   
    $mail[] = "<p><span style=\"color:#3e79c0; font-style:italic;\">Afsenders besked:</span><br> $message</p>\n";


   
    $mail[] = "<p>-----------------------------------------------------------------------------------------------------------------------------------------------------<br />
    Denne meddelelse er sendt fra en e-mail-adresse, der kun benyttes til udsendelse af meddelelser. <br>
    Du kan ikke sende e-mails til denne adresse. Tryk derfor <strong><i>ikke</i></strong> 'Svar' i denne meddelelse, <br>
    men opret ny og benyt afsenders e-mail adresse.<br />
    -----------------------------------------------------------------------------------------------------------------------------------------------------</p>";
   
   
    $mail[] = "</span>";
   
    $mail = join("\r\n", $mail);
    $mm->setMessage($mail, $subject);
    $mm->addRecepient($modtager);
   
    if($mm->sendMail())
    {
        header("location: tak.php");// Sender brugeren videre til "Tak"-siden.
    }
    else
    {
        header("location: error.php");// Sender brugeren videre til "Fejl"-siden.
    }
   
   
    // Koden bør aldrig nå hertil, men hvis den gør, så vises der en blank side.
    die("");
}


?>
Avatar billede majbom Novice
10. november 2010 - 11:28 #4
prøv at ret:

header("location: error.php");// Sender brugeren videre til "Fejl"-siden.


til:

header("location: error.php?error=".mm->getErrorMessage());// Sender brugeren videre til "Fejl"-siden.


så skulle du gerne få en fejl-meddelelse med over til "Fejl"-siden
Avatar billede SonyFreakDK Nybegynder
10. november 2010 - 15:18 #5
#4
Dreamviewer siger syntax error ? :s
Avatar billede majbom Novice
10. november 2010 - 18:56 #6
der skal osse et $ foran mm->... jo :)
Avatar billede SonyFreakDK Nybegynder
10. november 2010 - 20:45 #7
Super. Så fik jeg det ordnet og uploadet, men det som #4 siger, sker ikke.

i kan evt. prøve der nu ?

Mvh. Kenn.
Avatar billede SonyFreakDK Nybegynder
10. november 2010 - 23:17 #8
Jeg har fundet ud af at de emner der er listet ikke virker, kun emnet Andet.
Alle mails jeg sender hvor Andet er valgt går fint igennem. alle andre giver fejlsiden.

Hvordan kan løse dette problem ?

Mvh. Kenn.
Avatar billede majbom Novice
11. november 2010 - 09:23 #9
prøv at ret:

header("location: error.php");// Sender brugeren videre til "Fejl"-siden.


til:

//header("location: error.php");// Sender brugeren videre til "Fejl"-siden.
echo "<pre>";
print_r($error);
echo "</pre>";


så skriver den i hvert fald din fejl ud i stedet for at sende dig videre til fejl-siden, hvor du alligevel ikke kan se fejlen i scriptet...
Avatar billede SonyFreakDK Nybegynder
11. november 2010 - 09:48 #10
#9
Ja den skriver så intet.. det er meget mystisk..
Avatar billede majbom Novice
11. november 2010 - 10:05 #11
hvis den kommer til fejlsiden, er det jo fordi at sendMail returnerer false og dermed skal du kunne udlæse fejlen med $mm->getErrorMessage();

prøv lige med:

//header("location: error.php");// Sender brugeren videre til "Fejl"-siden.
echo $mm->getErrorMessage();


det kan jo ikke passe...
Avatar billede SonyFreakDK Nybegynder
11. november 2010 - 11:08 #12
#11
Jeg har nu gjort  som du siger, men den viser bare blank side. det er som om den når til die("")

prøv evt. selv og vælg et emne der ikke er "Andet".

Mvh. Kenn.
Avatar billede majbom Novice
11. november 2010 - 11:30 #13
har du slået fejlmeddelelser til?

kan du ikke udskrive et eller andet simpelt tekst i den if-sætning hvor du har $mm->getErrorMessage(); - for at se om den ikke kommer derind, for det tror jeg den gør... og derfor undrer det mig at den ikke udskriver noget
Avatar billede SonyFreakDK Nybegynder
12. november 2010 - 08:56 #14
Hej.

Får det ikke til at virke.

Tror fejlen ligger i emnet..

Den txt fil, skal den have et speciel chartset? Det er en linux server jeg har.

Kunne man ikke også droppe den txt fil og bare lave <option> i kontakt.php ?

Nu har i koderne der styrer det hele.

Hvad skulle ændres hvis man bare lavede standard <option> ?

Mvh. og på forhånd tak, Kenn.
Avatar billede majbom Novice
12. november 2010 - 17:49 #15
fjern den her:

$subjects = file("diverse/subjects.txt");


og det her:

else
{
    $subject = $subjects[$subject]; // Overskriver $subject til at være det, der ligger i array'et (sat i diverse/subjects.txt)
                                    // Sørger for at der kommer tekst ud i mailen frem for at der kun kommer et index nummer
}


og så skal du have ændret noget i koden hvor din form laves...
Avatar billede SonyFreakDK Nybegynder
09. december 2010 - 11:56 #16
Tak og jeg lukker her.
Kenn.
Avatar billede repox Seniormester
09. december 2010 - 12:01 #17
Endnu en...
Avatar billede SonyFreakDK Nybegynder
09. december 2010 - 12:22 #18
repox
Hej.
Hvad mener du?
Avatar billede repox Seniormester
09. december 2010 - 12:26 #19
Kunne du ikke bruge splazz' hjælp?
Avatar billede SonyFreakDK Nybegynder
09. december 2010 - 12:30 #20
Jeg ville rigtig gerne tildele splazz point, problemet er bare at jeg ikke kan finde accepter knappen nogle steder.
Bær over med mig, jeg er ny og kender ikke systemet.
Fik en mail om jeg stadig havde tråden åben, ville bare lukke den og kiggede i hjælp. Havde glemt denne tråd for længst og vidste ikke man skulle lukke den når man var færdig.
Avatar billede repox Seniormester
09. december 2010 - 12:36 #21
Du kan med fordel læse FAQ'en her:
http://www.eksperten.dk/faq#faq-3 - den beskriver hvad du skal gøre ved folks svar.
Avatar billede SonyFreakDK Nybegynder
09. december 2010 - 12:42 #22
Ja den var da med fordele. Men det er da lidt .. at man skal vente på et svar for at lukke tråden.
Men ok, det husker jeg til en anden gang. :) my bad.
Tak.
Avatar billede majbom Novice
09. december 2010 - 16:37 #23
man skal ikke vente på et svar - som hovedregel ligger hjælpere kommentarer og når der er noget som spørger kan bruge, beder han hjælperen om at ligge et svar, som så kan accepteres (eller det er i hvert fald sådan størstedelen af brugerne i de dele af eksperten jeg bruger, gør).

nu er jeg ikke pointliderlig, skidt med de 30 points, men husk det til en anden gang :)

(jeg synes at det er underligt at brugere der er nye og synes at tingene virker mærkelige / ikke lige forstår konceptet, ikke lige tager og læser FAQ'en...)
Avatar billede majbom Novice
09. december 2010 - 17:50 #24
så kom der styr på sagerne :)

http://www.eksperten.dk/spm/926099
Avatar billede SonyFreakDK Nybegynder
09. december 2010 - 22:16 #25
Jeg kan følge dig.

Men tingene burde laves mere åbenlyste. Det kan lade sig gøre.

Så ville os nye også hurtig være med i konceptet.

Det er nok de færreste der læser FAQ først. Som regel opretter jeg en bruger på et site og ønsker at kunne bruge det fra starten. Det kan man som regel fordi tingene er åbenlyse.

Men pyt, nu er jeg ordenlig igang. :)
Avatar billede majbom Novice
10. december 2010 - 00:43 #26
ja, der burde nok være en kort intro til systemet, så man kunne komme hurtigere i gang.

men velkommen til :)
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