Avatar billede Kaspercp Nybegynder
14. april 2012 - 16:43 Der er 27 kommentarer og
1 løsning

PHP email til kunden

Hej eksperter.

Jeg er igang med at lave et booking system som skal have en bekræft og afkræft link.

Når vedkommende som styre booking systemet bekræfter en ordre, skal vedkommende som har bestilt ordren modtage en email hvori der selvfølgelig står at ordren er blevet godkendt.

Er der nogen herinde som kan forklare mig og, eller evt hjælpe mig med ovenstående.

Jeg har før lavet mail til en kontakt form, men da det her er den anden vej, har jeg ingen idé om hvordan det lige skal skrues sammen.

"Hvis vi nu siger, at du har bestilt et bord til 2 ved en cafe.
- så skal caféen ind og godkende om der er plads til jer, eller om der ikke er nogen borde ledige.

Det gør de inde i booking systemet, hvor de enten godkender eller afviser ordren.

Hvis de så trykker godkend, så modtager du en email, hvori der selvfølgelig står, at du har fået et bord til 2, eftersom du jo har bestilt dette, og omvendt hvis de afviser, så modtager du en email om at der ikke er pladser til jer.

Det er den email jeg mangler at få lavet, som jeg har problemer med.

Jeg resumere lige:

Emailen som bliver sendt til "dig" når caféen har godkendt eller afvist din bestilling af bord.
Du modtager en mail, når de trykker a eller b.
"

Hvis nogen mangler uddybelse er i selvfølgelig velkommen til at skrive dette.

På forhånd mange tak.
Avatar billede inteeeL Nybegynder
14. april 2012 - 16:48 #1
I formen, hvori restauranten klikker a eller b, skal du blot afsende en mail - nemt nok. :-) Det kræver dog, du kender kundens email, at du har en afsender-email og at du får skrevet noget indhold til mailen. Til afsendelse af mail kan du blot bruge PHP's indbyggede mail-funktion: http://dk.php.net/manual/en/function.mail.php
Avatar billede Kaspercp Nybegynder
14. april 2012 - 16:57 #2
Jeg skal trække mailen fra databasen, via linket accept.php?id=(X)
- og i accept.php skal den php jeg mangler så være.

Men du mener vel, at jeg bare skal lave det som jeg altid har gjort, som hvis det var en kontakt form, dog skal jeg bare ændre "$to = 'mail.xx'" til noget andet ?

Eller hvordan mener du ?
For har nemlig forsøgt det, og aner ikke hvad jeg lige gør forkert.
Avatar billede olebole Juniormester
14. april 2012 - 17:09 #3
<ole>

Vi andre ved endnu mindre om, hvad du har gjort forkert. Hvad har du prøvet? Prøv at vise noget kode

/mvh
</bole>
Avatar billede Kaspercp Nybegynder
14. april 2012 - 17:24 #4
Det helt rigtigt.

Men nedenstående er hvad jeg har i øjeblikket

$sendto = "you@yourdomain.com"; // this is the email address collected form the form
$ccto = ""; //you can cc it to yourself
$subject = "Emne"; // Subject
$message = "Besked" ;
$header = "From: you@yourdomain.com\r\n";
$header .= "Reply-to: you@yourdomain.com\r\n";
// This is the function to send the email
mail($sendto, $subject, $message, $header);


Hva mangler der evt?
- og skal fungere som skrevet i et tidligere indlæg. !
Avatar billede Kaspercp Nybegynder
14. april 2012 - 17:26 #5
Forresten, eftersom det er et <a href="accept.php?id=1">Godkend</a> jeg har lavet den på, skal det jo ikke være noget med submit, og den skal jo sendes til den mail, som kunden af caféen har skrevet ind, da han bestilte bord.
Avatar billede olebole Juniormester
14. april 2012 - 17:32 #6
#4: Hvad du mangler, kommer bl.a. an på, hvilket tegnsæt du anvender.

#5: Når brugeren klikker på linket, henter du bare hans e-mail-adresse fra databasen.
Avatar billede Kaspercp Nybegynder
14. april 2012 - 17:36 #7
Så du mener nedenstående her burde virke ?

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("SET NAMES utf8");
mysql_query("SET character_set_results='utf8&#8242;");

$query = "SELECT * FROM table_name WHERE email='$email'";

$sendto = $email;
$subject = "Emne";
$message = "Besked" ;
$header = "From: you@yourdomain.com\r\n";
$header .= "Reply-to: you@yourdomain.com\r\n";
Avatar billede inteeeL Nybegynder
14. april 2012 - 17:48 #8
Ved bestilling af bord kunne man forestille sig, at kunden her skal indtaste sin email. Husk at tydeliggøre, at det er vigtigt, at denne er korrekt, da tilbagemelding kommer her. Emailen oprettes i databasen.

Du henter emailen, når restauranten godkender ordren. <a href="accept.php?id=1">Godkend</a> - her skal id være tilsvarende kundens id i databasen. Du kan hente emailen sådan her:

$sql = "SELECT email FROM table WHERE id='{$_GET['id']'";

Husk selvfølgelig at validere id'et, ovenstående er bare for at vise, hvordan det kan hentes. Så kan du integrere det i nedenstående to funktioner, som Ole så fint har lavet og vist i tidligere tråde - den sørger for, at tegnsætningen er i orden på dine mails.

<?php

function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $cc='', $bcc='') {
    $from = escapeAddr($from);
    $header = 'From: '.$from.PHP_EOL
            . 'Return-Path: '.$from.PHP_EOL
            . 'Reply-To: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-type: text/plain; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
    if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}

// Eksempel på brug:
mail_utf8('modtager@gmail.com', 'Besked til dig', 'Indhold af mail', 'fra@domain.dk');

?>
Avatar billede olebole Juniormester
14. april 2012 - 17:52 #9
Nej, du har en alt for 'sparsom' header. Prøv denne funktion i stedet:

<?php
function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $cc='', $bcc='') {
    $from = escapeAddr($from);
    $header = 'From: '.$from.PHP_EOL
            . 'Return-Path: '.$from.PHP_EOL
            . 'Reply-To: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-type: text/plain; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
    if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}

// Eksempel på brug:
mail_utf8('modtager@gmail.com', 'Besked til dig', 'Indhold af mail', 'fra@domain.dk');
?>


Dit databasekald giver vel ikke så megen mening. Det virker ikke logisk at bruge en e-mail-adresse til at slå den samme e-mail-adresse op med  *o)

Hvordan dit databasekald skal se ud, kommer an på, hvordan din struktur er. Det kan jeg ikke vide noget om
Avatar billede olebole Juniormester
14. april 2012 - 17:56 #10
@inteeeL: Jeg må vist snart skrive en lille guide omkring den funktion  =)

@Kaspercp: Hvad databasekald og sikkerhed angår, så prøv at kikke på denne guide
Avatar billede Kaspercp Nybegynder
14. april 2012 - 18:03 #11
I see.

Jeg har nu forsøgt at ligge jeres fine koder ind i mit dokument, men jeg modtager stadig ingen email, når jeg godkender ordren.

Jeg har lavet nedenstående nu, men der er muligvis flere problemer her, end jeg regnede med.

Håber i kan komme med en løsning.
[b]
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("SET NAMES utf8");
mysql_query("SET character_set_results='utf8&#8242;");

$query = "SELECT email FROM $tbl_name WHERE id='{$_GET['id']}'";


function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $cc='', $bcc='') {
$to = $email;
$subject = "Emne";
$message = "Besked" ;
$from = escapeAddr($from);
$header = 'From: '.$from.PHP_EOL
            . 'Return-Path: '.$from.PHP_EOL
            . 'Reply-To: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-type: text/plain; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
    if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}

Må desværre konstatere, at jeg er ikke 100% skarp til php.
Avatar billede olebole Juniormester
14. april 2012 - 18:11 #12
Du sender på denne måde:

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("SET NAMES utf8");
mysql_query("SET character_set_results='utf8&#8242;");

$query = "SELECT email FROM $tbl_name WHERE id='{$_GET['id']}'";
$row = mysql_fetch_assoc($query);
$email = $row['email'];

mail_utf8($email, 'Bordbestilling', 'Besked til kunden ...', 'din@email.dk');
Avatar billede Kaspercp Nybegynder
14. april 2012 - 18:26 #13
Så du mener at det jeg har skrevet nedenfor er rigtigt.

<?php

$host="host"; // Host name
$username="username; // Mysql username
$password="password; // Mysql password
$db_name="db_name"; // Database name
$tbl_name="tbl_name"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("SET NAMES utf8");
mysql_query("SET character_set_results='utf8&#8242;");

$query = "SELECT email FROM $tbl_name WHERE id='{$_GET['id']}'";
$row = mysql_fetch_assoc($query);
$email = $row['email'];

mail_utf8($email, 'Bordbestilling', 'Besked til kunden ...', 'no-reply@email.dk');

?>


For har jeg nemlig skrevet ind, og trykker jeg så godkend, så kommer den ind på en blank side, hvor der end ikke er nogen kildekode, hverken hvis jeg forsøger at echo noget ud, og jeg modtager stadig ingen mail /:

Skal bare have det til at virke, så skal alle de fine ting bare tilføjes senere.
Avatar billede olebole Juniormester
14. april 2012 - 18:37 #14
Nej, du skal selvfølgelig også skrive de to funktioner i koden
Avatar billede Kaspercp Nybegynder
14. april 2012 - 18:40 #15
Kan du ikke vise, hvor de skal skrives, så de bliver skrevet rigtigt ind, for aner ikke lige hvordan de skal stå i forhold til det jeg har skrevet pt.

Det ville jeg sætte stor pris på :D
Avatar billede olebole Juniormester
14. april 2012 - 18:50 #16
Du kan bare skrive dem allerøverst
Avatar billede inteeeL Nybegynder
14. april 2012 - 18:51 #17
@Olebole: en guide ville på ingen måder være en dårlig idé :-)

@Kaspercp: En samlet kode kunne se sådan her ud:
<?php

$host="host"; // Host name
$username="username"; // Mysql username
$password="password"; // Mysql password
$db_name="db_name"; // Database name
$tbl_name="tbl_name"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("SET NAMES utf8");
mysql_query("SET character_set_results='utf8&#8242;");

function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $cc='', $bcc='') {
$to = $email;
$subject = "Emne";
$message = "Besked" ;
$from = escapeAddr($from);
$header = 'From: '.$from.PHP_EOL
            . 'Return-Path: '.$from.PHP_EOL
            . 'Reply-To: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-type: text/plain; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
    if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}

$g_id = ( isset( $_GET['id']) && is_numeric( $_GET['id']) ? (int)$_GET['id'] : FALSE);
if( !$g_id) {
    echo 'Der skete en fejl'; // ID'et blev ikke overført korrekt
}
else {
    $query = "SELECT email FROM $tbl_name WHERE id=$g_id";
    $row = mysql_fetch_assoc($query);
    $email = $row['email'];

    mail_utf8($email, 'Bordbestilling', 'Besked til kunden ...', 'no-reply@email.dk');
}

?>

Funktioner skal forekomme før, de kaldes. Dog ville det hjælpe på din struktur, at du havde alle funktioner samlet i en separeret fil, som du inkluderer. Bemærk at jeg har valideret $_GET['id'] for dig, så du ikke glemmer det. :-)
Avatar billede olebole Juniormester
14. april 2012 - 18:57 #18
Vi skal lige have udført query'en  *o)

$query = mysql_query("SELECT email FROM $tbl_name WHERE id=$g_id");
$row = mysql_fetch_assoc($query);
Avatar billede Kaspercp Nybegynder
14. april 2012 - 19:06 #19
Jeg siger tak for koden.
- det hele er nu skrevet ind som i nævnte.


Men af en eller anden årsag virker det stadig ikke, og hvis jeg trykker på godkend, og kigger efter kildekoden er der intet overhovedet
http://www.image-upload.net/di-1BK3.jpg

Har ingen idé om hvad fejlen kan være, man skal selvfølgelig logge på, for at komme ind til det her system, hvor du godkender og afviser, men det burde ikke have noget at sige, og idéen skal jo bare være den som passer til ordren, hvilken den er.

Forstår ikke lige hvad fejlen kan være /:
Avatar billede Kaspercp Nybegynder
14. april 2012 - 19:11 #20
Det er selvfølgelig irrelevant, om der står noget i accept.php når den får en header() tilbage, men jeg modtager bare ikke nogen mail, til den email jeg tester med. som er den som den henter fra databasen.
Avatar billede inteeeL Nybegynder
14. april 2012 - 19:15 #21
Det er jo klart, du udskriver ikke noget, men sender blot en mail. Ret sidste del af koden til følgende:
$g_id = ( isset( $_GET['id']) && is_numeric( $_GET['id']) ? (int)$_GET['id'] : FALSE);
if( !$g_id) {
    echo 'Der skete en fejl'; // ID'et blev ikke overført korrekt
}
else {
    $query = mysql_query("SELECT email FROM $tbl_name WHERE id=$g_id");
    $row = mysql_fetch_assoc($query);
    $email = $row['email'];

    if( mail_utf8($email, 'Bordbestilling', 'Besked til kunden ...', 'no-reply@email.dk')) {
        echo 'Odren er godkendt'; //Mailen er sendt
    }
    else {
        echo 'Der skete en fejl';
    }
}

Når mailen er afsendt vil der på siden stå, at 'Odren er godkendt'.
Avatar billede inteeeL Nybegynder
14. april 2012 - 19:16 #22
Prøv at tjekke, om $email bliver sat og indeholder en gyldig mail:
echo $email;
Avatar billede Kaspercp Nybegynder
14. april 2012 - 19:19 #23
Der kom der noget, men den skriver så bare. "Der skete en fejl", det er så det næste problem.

Det skal jo bare virke og godkende ordren (:
Avatar billede Kaspercp Nybegynder
14. april 2012 - 19:19 #24
Den echo'er den rigtige email, som er i databasen !
Avatar billede olebole Juniormester
14. april 2012 - 19:52 #25
Jeg kan ikke gøre mere uden at sidde ved siden af dig og lave det for dig. Jeg hopper af tråden her
Avatar billede Kaspercp Nybegynder
14. april 2012 - 20:05 #26
Okay, du kan altså ikke finde flere fejl.
- jeg må se om jeg kan finde en løsning selv et sted så.

Projektet skal nemlig være færdig til imorgen, så har lidt travlt (:

Men jeg takker for jeres hjælp, kom da længere end jeg havde regnet med, og ser ud til at være hen af det rigtige (:
Avatar billede inteeeL Nybegynder
14. april 2012 - 20:49 #27
<?php

$host="host"; // Host name
$username="username"; // Mysql username
$password="password"; // Mysql password
$db_name="db_name"; // Database name
$tbl_name="tbl_name"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("SET NAMES utf8");
mysql_query("SET character_set_results='utf8&#8242;");

function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $cc='', $bcc='') {
$from = escapeAddr($from);
$header = 'From: '.$from.PHP_EOL
            . 'Return-Path: '.$from.PHP_EOL
            . 'Reply-To: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-type: text/plain; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
    if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}

$g_id = ( isset( $_GET['id']) && is_numeric( $_GET['id']) ? (int)$_GET['id'] : FALSE);
if( !$g_id) {
    echo 'Der skete en fejl'; // ID'et blev ikke overført korrekt
}
else {
    $query = "SELECT email FROM $tbl_name WHERE id=$g_id";
    $row = mysql_fetch_assoc($query);
    $email = $row['email'];

    if( mail_utf8($email, 'Bordbestilling', 'Besked til kunden ...', 'no-reply@email.dk')) {
        echo 'Ordren er godkendt'; //Mailen blev sendt
    }
    else {
        echo 'Der skete en fejl';
    }
}

?>

Ovenstående kode skulle gerne fungerer. Det er fordi, du har været inde og rode i funktionen. Du havde selv ændret variablerne $to, $subject og $message i starten af funktionen. Og da $email på daværende tidspunkt ikke var en global variabel, havde den ingen mail, at sende til. Det er fjernet i ovenstående kode, så det skulle gerne kunne klare det for dig.

Lige en anden ting.. Jeg kan se, du er ny, og der er noget, du har misforstået i dette forum. "Skriv et svar" betyder ikke, at du svarer på mailen. Det betyder derimod, at du skriver et svar, som kan modtage pointene. I stedet skal du blot skrive en kommentar. Du kan se, at du i checkboksene lige ovenfor kan vælge mellem "Kommentar (til forslag)" og "Svar (til løsninger og pointgivning)". :-)
Avatar billede Kaspercp Nybegynder
14. april 2012 - 21:00 #28
Det takker jeg mange gange for (:
- og det vil jeg lige huske til fremtidigt brug :D
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