Avatar billede frexxit Juniormester
14. november 2014 - 16:42 Der er 9 kommentarer og
1 løsning

Email faktura linjer i php

Hej, Først og fremmest så undskyld for kodningen, jeg er stadig ny :D


jeg har et lille system som gerne skulle sende en faktura afsted i en email.

Den sender mail osv, men hvis kunden har bestilt mere end 1 vare, kommer der kun den første ordre linje frem på mailen.
Anyone?
Hvis det (som det helt sikekrt kan) kan gøres mere smart, så gerne hjælp mig her :D

$invoice_info = $mysqli->query("SELECT * FROM retail_order WHERE order_id = '".$_POST[order_uni]."' Group by order_id");
while($invoice = $invoice_info->fetch_object())
                {
   
$message5 = '

                <table width="930" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#FFFFFF">
  <tr>
    <td align="center"><table width="900" border="0" cellspacing="0" cellpadding="0">
                  <tr>
        <td align="left" height="35"><b>Product:</b></td>
        <td align="left"><b>';
                   
               
                          $invoice_prod_name = $mysqli->query("SELECT * FROM chili_products WHERE id = '".$invoice->prod_id."'");
while($invoice_prods_name = $invoice_prod_name->fetch_object())
                {
                    $message6 =  $invoice_prods_name->product_name;
                }
              $message7 =
              '</b></td>
      </tr>
      <tr>
        <td colspan="2" align="center"><table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="17%" style="border-bottom:solid black 1px;"><b>Color</b></td>
            <td width="17%" style="border-bottom:solid black 1px;"><b>Size</b></td>
            <td width="17%" style="border-bottom:solid black 1px;"><b>Model</b></td>
            <td width="17%" style="border-bottom:solid black 1px;"><b>Qty</b></td>
            </tr>';
           
           
           
//HER STARTER FAKTURA LINJERNE

                            $query = "SELECT * FROM retail_order WHERE order_id = '".$_POST[order_uni]."'";
    $result = mysql_query($query)
    or die(mysql_error());
    while ($row = mysql_fetch_array($result)) {
        $message8 = "        <tr>";
        $message9 = "            <td>".$row[color]."</td>";
        $message10 = "            <td>".$row[size]."</td>";
        $message11 = "            <td>".$row[model]."</td>";
        $message12 = "            <td>".$row[amount]."</td>";
        $message13 = "        </tr>";
    }
// HER SLUTTER FAKTURA LINJERNE




        $message14 = "
        </table></td>
      </tr>
    </table></td>
  </tr>
</table>
";

                }
$mail->Body= $message5.$message6.$message7.$message8.$message9.$message10.
$message11.$message12.$message13.$message14.$message15;
Avatar billede michael_stim Ekspert
14. november 2014 - 16:53 #1
Du behøver kun at bruge én variabel:

$body = "";
//start på script...

$query = "SELECT * FROM retail_order WHERE order_id = '".$_POST[order_uni]."'";
    $result = mysql_query($query)
    or die(mysql_error());
    while ($row = mysql_fetch_array($result)) {
        $body .= "<tr>";//Læg mærke til punktummet, hvilket betyder at vi concatenerer variabelen
        $body .= "<td>".$row[color]."</td>";
        $body .= "<td>".$row[size]."</td>";
        $body .= "<td>".$row[model]."</td>";
        $body .= "<td>".$row[amount]."</td>";
        $body .= "</tr>";
    }
//resten af scriptet
$mail->Body = $body



Håber du forstår.
Avatar billede michael_stim Ekspert
14. november 2014 - 16:56 #2
PS.

Så bruger du mysqli-api'et længst oppe, hvilket er det korrekte, men det gamle mysql i det kald jeg lavede et eksempel på. Mysql i PHP er ved at være udfaset.
Avatar billede Slater Ekspert
14. november 2014 - 17:32 #3
Selvom det ikke er hvad du spørger om, vil jeg lige nævne det alligevel. ALDRIG bruge brugerinput ($_GET, $_POST, $_COOKIE, osv) direkte i SQL-strenge. Det er ekstremt usikkert. De skal renses først eller bedre: bruges som parametre i en prepared statement i stedet.
Avatar billede frexxit Juniormester
14. november 2014 - 17:37 #4
Hej. tak for svaret, hjalp bare ikke, den smider stadig kun den første ordre linje ind på mailen :(
den laver ikke en loop i det.
Avatar billede showsource Seniormester
15. november 2014 - 07:51 #5
Udover de andre kommentarer:

Du kan nok lave et array til at gemme ordrer inden email.
Bruger #1 ex.

$body = array();
//start på script...

$query = "SELECT * FROM retail_order WHERE order_id = '".$_POST[order_uni]."'";
    $result = mysql_query($query)
    or die(mysql_error());
    while ($row = mysql_fetch_array($result)) {
        $body[] = "<tr>";//Læg mærke til punktummet, hvilket betyder at vi concatenerer variabelen
        $body[] = "<td>".$row[color]."</td>";
        $body[] = "<td>".$row[size]."</td>";
        $body[] = "<td>".$row[model]."</td>";
        $body[] = "<td>".$row[amount]."</td>";
        $body[] = "</tr>";
    }
//resten af scriptet
$mail->Body = implode("\r\n", $body);

Helt og aldeles utestet.
Avatar billede frexxit Juniormester
19. november 2014 - 15:01 #6
Hej tak for hjælpen, får det ikke til at virke. :) men smid et svar, har fundet på en anden måde at gøre det på
Avatar billede michael_stim Ekspert
19. november 2014 - 15:59 #7
Hvilken anden måde?

Samler ikke på point, ellers tak.
Avatar billede frexxit Juniormester
19. november 2014 - 20:29 #8
Har fået en programmør til at lave en komplet side til mig med alt jeg vil have. så ved ikke hvordan.

vil du smide et svar eller skal jeg selv lukke den  ?
Avatar billede michael_stim Ekspert
27. november 2014 - 08:56 #9
Luk selv, se #7.
Avatar billede frexxit Juniormester
18. december 2014 - 18:03 #10
okay, muligheden skulle du have :)
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