Avatar billede jkn83 Praktikant
04. november 2010 - 11:38 Der er 15 kommentarer og
2 løsninger

send mail med MySQL data i message...

Jeg har lavet en lille print side, som viser de nuværende bestillinger af sandwich. Disse bestillinger gør det nemt for os at få en bestilling igennem hos Nadias som er vores Sandwich leverandør... Nu ligger landet så sådan at bestillings listen bliver længere og længere i stil med at det bliver mere og mere kendt.

Så vi fik sparket en aftale på benene som gjorde de fik sat en mail addy til rådighed som vi kunne sende vores bestillinger på, da vi er blevet "stor kunde" hos dem og kan få den slags frynsegoder :P

Koden nedenunder er vores print.php side som viser bestillingerne, og har mail koden til hvordan det skal sendes til Nadias...

Men skidtet fungerer ikke :/ Den sender en mail, men den sender ikke inputs fra mysql med i mailen. Nogen der kan se årsagen til dette?

Koden:
<?php
session_start();
include 'connect.php';

    $userid = $_SESSION["userid"];
    $q = mysql_query("SELECT * FROM users WHERE user_id='$userid'")or die(mysql_error());
    $n = mysql_num_rows($q);
    $res = mysql_fetch_assoc($q);
   
    if($res["admin"] == 1)
    {
        echo 'Nadias bestilling til porthusgade 1. Bestilling lavet d. '; echo date("d/m-Y");
        echo '<p />';
        $q2 = mysql_query("SELECT * FROM Bestillinger ORDER BY userid2 ASC")or die(mysql_error());
        while($r = mysql_fetch_assoc($q2))
        {
            echo '<b>'.$r["userid2"].' - '.$r["Navn"].'</b>: '.$r["Brod"].' med '.$r["Fyld"].' og '.$r["Dressing"].'. Ekstra: '.$r["Ekstra"].'.<br />';
        }
        echo "<br />Antal bestillinger lavet:<br />";
        $qlist = mysql_query("SELECT brod, COUNT(Navn) FROM Bestillinger GROUP BY brod")or die(mysql_error());
        while($row = mysql_fetch_array($qlist)){
            echo "- <b>". $row['COUNT(Navn)'] ." ". $row['brod'] ."</b> i ordre.";
            echo "<br />";
        }
        if(isset($_POST["print"]))
        //if "email" is filled out, send email
          {
              //send email
            $to = "deus83@gmail.com";
            $subject = "Bestilling til Porthusgade";
            $message = '<b>'.$r["userid2"].' - '.$r["Navn"].'</b>: '.$r["Brod"].' med '.$r["Fyld"].' og '.$r["Dressing"].'. Ekstra: '.$r["Ekstra"].'.<br />';
            $from = "sendermail@mail.com";
            mail($to,$subject,$message);
              echo "</ p>Mailen er sendt";
          }
        else
        //hvis der ikke er sendt "print" til $_post skal den vise knappen...
          {
              echo '<form method="post" action="' . $_SERVER['php_self'] . '">
              <input type="submit" value="Send mail til Nadias" name="print">
              </form>';
        }
    }
    else
    {
        echo 'Ingen administrative rettigheder';
    }
?>



Og sådan ser mailen så ud når det er man modtager den (beskeden):
<b> - </b>:  med  og . Ekstra: .<br />
Avatar billede majbom Novice
04. november 2010 - 11:56 #1
i stedet for at echo dit udtræk fra databasen skal du smide det i en variabel:

$message = "";
if($res["admin"] == 1)
    {
        $message .= 'Nadias bestilling til porthusgade 1. Bestilling lavet d. '; echo date("d/m-Y");
        $message .= '<p />';
        $q2 = mysql_query("SELECT * FROM Bestillinger ORDER BY userid2 ASC")or die(mysql_error());
        while($r = mysql_fetch_assoc($q2))
        {
            $message .= '<b>'.$r["userid2"].' - '.$r["Navn"].'</b>: '.$r["Brod"].' med '.$r["Fyld"].' og '.$r["Dressing"].'. Ekstra: '.$r["Ekstra"].'.<br />';
        }
...


i stedet for at lave din $message som du gør nu....
04. november 2010 - 12:00 #2
for din orientering, jeg sidder selv og boevler med email med bestillinger, saa hvis jeg loeser denne vil det uden tvivl hjaelpe mig selv.  Saa jeg gaar i gang.  Jeg skal afsted om lidt, saa det varer nok et par timer.  Hvis i mellemtiden andre har loesninger saa vil jeg laere af dem ogsaa.
04. november 2010 - 12:00 #3
spazz var der allerede mens jeg skrev denne, saa der er mere at studere.
Avatar billede jkn83 Praktikant
04. november 2010 - 12:12 #4
Syntes ikke det hjalp meget, tværtimod...

Før jeg ændrer den ser en lille hurtig ordre jeg smed ind, sådan ud (på print siden):

Nadias bestilling til porthusgade 1. Bestilling lavet d. 04/11-2010
1 - Andersson: Chillistykke med pepperoni og rød peber og creme fraiche. Ekstra: Jalapenos.
8 - Kristoffer: Chillistykke med pepperoni og rød peber og creme fraiche. Ekstra: løg jalapenos.
22 - Heine: Grov large med kylling og bacon og karry dressing. Ekstra: -tomat.
24 - Peter D: Chillistykke med pastrami og chili dressing. Ekstra: +pesto +salt & peber.
29 - Martin Søegaard: Grov large med roastbeef og remoulade. Ekstra: Intet valgt.
41 - Jacob Klit: Chillistykke med kylling og bacon og ingen dressing. Ekstra: - dressing og tomat.
46 - Jesper Jokumsen: Chillistykke med hjemmelavet tunsalat og ingen dressing. Ekstra: Intet valgt.
52 - Thomas Pilgaard: Grov large med kylling og bacon og karry dressing. Ekstra: Intet valgt.

Antal bestillinger lavet:
- 5 Chillistykke i ordre.
- 3 Grov large i ordre.



Efter jeg ændrede koden til det ovenstående, ser det sådan ud:
04/11-2010
Antal bestillinger lavet:
- 5 Chillistykke i ordre.
- 3 Grov large i ordre


Jeg er med på hvad du mener med at det skal være i en variabel, men kan ikke lige få den vendt til en fungerende løsning...
Avatar billede majbom Novice
04. november 2010 - 12:41 #5
hvordan ser koden ud nu?

smid den evt på pastebin.com og lig linket her...
Avatar billede jkn83 Praktikant
04. november 2010 - 13:14 #6
Avatar billede webweaver Praktikant
04. november 2010 - 13:23 #7
Gør det nogen forskel, hvis du har en header med i mailen?

Du har en from adresse. Men du har den ikke med i din mail funktion. Prøv,

mail($to, $subject, $message, $from);
Avatar billede jkn83 Praktikant
04. november 2010 - 14:46 #8
from adressen legede jeg lidt med da den vil skrive "postmaster@ domæne navn.dk" som afsender... Så from fik ingen decideret virkning...

Ændrer intet om jeg sætter den i eller ej desværre :/
04. november 2010 - 16:19 #9
jkn83, jeg fik det til at virke!  splazz, det betyder maaske at jeg ogsaa kan goere fremskridt paa en anden traad, du ved hvilken.  jkn83 og splazz, undskyld at jeg misbruger dette spoergsmaal som oevelse paa et lignende men mere kompleks problem jeg selv har.

For test lavede jeg den tabel jeg viser nedenfor og fyldte de data i du viser i $4.  Saa omskrev jeg din kode som vist nedenfor.  Jeg skipper test for 'admin' og, som foreslaaet i #1 bygger en variabel $message op i stedet for en synlig side.

Saa modtager jeg en email med denne tekst:

Nadias bestilling til porthusgade 1
1 - Andersson: Chili med pepperoni og creme.  Ekstra: Jalapenos
8 - Kristoffer: Chili med pepperoni og creme.  Ekstra: loeg
22 - Heine: Grov med kylling og karry.  Ekstra: tomat
24 - Peter: Chili med pastrami og chili.  Ekstra: pesto
29 - Martin: Grov med roastbeef og remoulade.  Ekstra: intet
41 - Jacob: Chili med kylling og ingen.  Ekstra: dressing
46 - Jesper: Chili med tunsalat og ingen.  Ekstra: intet
52 - Thomas: Chili med kylling og karry.  Ekstra: intet

Antal bestillinger lavet:
- 6 Chili i ordre
- 2 Grov i ordre

Der forenkler jeg ogsaa saasom at skippe fed skrift, men den indeholder, tror jeg, de noedvendige informationer.

Her er min kode.  Skift email adressen ud med din egen og proev den saa:

<html>
<head>
<title>jkn83</title>
</head>
<body>
<?php
require("connect.php");
$message = "";
$message .= "Nadias bestilling til porthusgade 1 \r\n";
$q2 = mysql_query("SELECT * FROM jkn83 ORDER BY userid2 ASC")or die(mysql_error());
while($r = mysql_fetch_assoc($q2))
{
  $userid2 = $r['userid2'];
  $Navn = $r['Navn'];
  $Brod = $r['Brod'];
  $Fyld = $r['Fyld'];
  $Dressing = $r['Dressing'];
  $Ekstra = $r['Ekstra'];
  $message .= "$userid2 - $Navn: $Brod med $Fyld og $Dressing.  Ekstra: $Ekstra \r\n";
}
$message .= "\r\nAntal bestillinger lavet:\r\n";
$qlist = mysql_query("SELECT Brod, COUNT(Navn) AS antal FROM jkn83 GROUP BY brod")or die(mysql_error());
while($row = mysql_fetch_array($qlist))
{
  $Brod = $row['Brod'];
  $antal = $row['antal'];
  $message .= " - $antal $Brod i ordre \r\n";
}
if(isset($_POST["print"])) //if "email" is filled out, send email
{
  $to = "christian.jorgensen@skynet.be";
  $subject = "Bestilling til Porthusgade 1";
  mail($to,$subject,$message);
  echo "</ p>Mailen er sendt";
}
else
//hvis der ikke er sendt "print" til $_post skal den vise knappen...
{
  echo "<form method='post' action=''>";
  echo "<input type='submit' value='Send mail til Nadias' name='print'>";
  echo "</form>";
}
?>
</body>
</html>

og her er saa tabellen med data:

CREATE TABLE jkn83(userid2 INT, Navn VARCHAR(10), Brod VARCHAR(10), Fyld VARCHAR(10), Dressing VARCHAR(10), Ekstra VARCHAR(10));

INSERT INTO jkn83 VALUES(1, 'Andersson', 'Chili', 'pepperoni', 'creme', 'Jalapenos');
INSERT INTO jkn83 VALUES(8, 'Kristoffer', 'Chili', 'pepperoni', 'creme', 'loeg');
INSERT INTO jkn83 VALUES(22, 'Heine', 'Grov', 'kylling', 'karry', 'tomat');
INSERT INTO jkn83 VALUES(24, 'Peter', 'Chili', 'pastrami', 'chili', 'pesto');
INSERT INTO jkn83 VALUES(29, 'Martin', 'Grov', 'roastbeef', 'remoulade', 'intet');
INSERT INTO jkn83 VALUES(41, 'Jacob', 'Chili', 'kylling', 'ingen', 'dressing');
INSERT INTO jkn83 VALUES(46, 'Jesper', 'Chili', 'tunsalat', 'ingen', 'intet');
INSERT INTO jkn83 VALUES(52, 'Thomas', 'Chili', 'kylling', 'karry', 'intet');
Avatar billede majbom Novice
04. november 2010 - 16:48 #10
-> jkn83 - du roder osse noget rundt i det!
det du skal sende i mailen skal smides ind i din $message - du roder med både echo og $message...

men kig på christians kommentar - det er en visuel forklaring af det jeg prøvede at forklare dig :)

-> christian - det var godt du fik fat i den, så kan vi måske komme videre i den anden tråd? ;)
Avatar billede jkn83 Praktikant
04. november 2010 - 22:11 #11
@Christian_Belgien - Smukt :) Smider du svar ?

Valgte dog at undlade at lave nyt table :D
rettede lidt i den til den passede mit behov og tilføjede så stadig et echo så den viser selve ordren på print.php

Siden bliver brugt som et hurtigt udprint til at lokalisere sandwich og hvem der skulle have hvad... Og eventuelle fejl i ordrene...

@splazz - Måske, sådan er vi jo så forskellige ;) Havde vi alle forstået koden fuldt ud, var der jo ikke en grund til vi sad her :P

har stadig problemer med headers (from), men det må vi tage en anden gang hvis det bliver en kritisk del :)

Færdig kode ser nu sådan ud:
http://pastebin.com/E5e9nVqP
Avatar billede majbom Novice
04. november 2010 - 22:23 #12
-> jkn83 - det var nu heller ikke ment sådan, det virkede bare som om at du satte min kodestump ind uden at rette resten og det var nok min fejl at jeg ikke fik forklaret at du skulle rette resten selv :)

men godt christian fik det lavet, så lærte han også lidt :)
04. november 2010 - 22:29 #13
Svar fra mig.  Det var godt vi fik det til at virke, og ved at bakse med spoergsmaalet foroegede jeg min egen forstaaelse for den slags problemer.

Men -- jeg ville nok ikke have kunnet goere det uden #1 fra splazz, saa jeg foreslaar at vi deler points.
Avatar billede majbom Novice
04. november 2010 - 22:40 #14
jeg smider lige et svar inden jeg hopper i seng så, så må du (jkn83) vælge om jeg skal have points eller ej :)

nat nat
Avatar billede majbom Novice
04. november 2010 - 22:40 #15
.
Avatar billede jkn83 Praktikant
05. november 2010 - 06:26 #16
Point uddelt til jer begge :)
Avatar billede majbom Novice
05. november 2010 - 09:05 #17
jeg takker :)
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