Avatar billede 44fire44 Nybegynder
10. januar 2008 - 11:16 Der er 18 kommentarer og
2 løsninger

Printe array ud i mail()-funktion

Hej eksperter - jeg prøver lidt igen med en omformulering

Jeg har laver denne side som skal fungere som en slags bestillings side - http://iceweb.eu/xplayn/vinslottet/bruger_vine.php?id=88888888

Til det formål jeg har givet mine løkker nogle navne og et nummer. Nu vil jeg så gerne have skrevet den data som jeg får printet ud i min løkke ind i min mailform - løkken ser således ud

<?
$num = 0;
while($row = mysql_fetch_assoc($query)) {

    if((!is_null($row['wine_id']))? $value = $row['vin_name']: $value = '');
    if(($num % 2 == 0)?    $farve = 'light': $farve = 'dark');

    echo '<input type="hidden" name="nummer" value="'.$_GET[id].'">';
    echo '<tr class="'.$farve.'">';
    echo '
          <td valign="top">'.$row[vin_type].'</td>
          <td valign="top">'.$row[vin_origin].'</td>
          <td valign="top">'.$row[vin_grape].'</td>
          <td valign="top">'.$row[vin_name].'</td>
          <td valign="top">'.$row[vin_year].'</td>
          <td valign="top">'.$row[vin_price].'</td>';
    echo '<td valign="top">
    <input type="hidden" value="'.$row[vin_type].'" name="vinTYPE['.$row[vin_number].']">
    <input type="hidden" value="'.$row[vin_origin].'" name="vinORIGIN['.$row[vin_number].']">
    <input type="hidden" value="'.$row[vin_grape].'" name="vinGRAPE['.$row[vin_number].']">
    <input type="hidden" value="'.$row[vin_name].'" name="vinNAME['.$row[vin_number].']">
    <input type="hidden" value="'.$row[vin_year].'" name="vinYEAR['.$row[vin_number].']">
    <input type="hidden" value="'.$row[vin_price].'" name="vinPRICE['.$row[vin_number].']">
    <input name="vinID['.$row[vin_number].']" type="text" size="2" value="">';
    echo '</tr>';
$num++;
}
?>

Ja, hvordan tilføjer jeg arrayesne til en mail()-funktion?
Avatar billede snappi-v Nybegynder
11. januar 2008 - 00:30 #1
Øjh, jeg må indrømme jeg ikke er med på hvad du ønsker. Ønsker du overstående output sendt til en e-mail?
Avatar billede fant0mas Nybegynder
11. januar 2008 - 08:10 #2
Jamen den klarer vi lige.
Fjern alle de hidden inputs der, dem skal vi ikke bruge.

Den her er nok, der har vi alle vin id'erne i:
<input name="vinID['.$row[vin_number].']" type="text" size="2" value="">';
Men vi skal vel også lige vide hvem der bestiller vinen:
<input type="hidden" value="'.$_GET[id].'" name="kundenummer">
<?
if(isset($_POST[vinID])){
    $fra = 'Bestilling fra '.$_POST[kundenummer];
    $bestilling = array();
    foreach ($_POST[vinID] as $key  => $value) {
        $query = mysql_query("SELECT vin_number, vin_name FROM vine WHERE vin_number = '$key'");
        $row = mysql_fetch_array($query);
            $bestilling[] = $value.' Stk. '.$row[vin_name];
    }
   
    $besked = implode('<br>', $bestilling);
   
    $to      = 'nobody@example.com';
    $subject = $fra;
    $message = $besked;
    $headers = 'From: webmaster@example.com' . "\r\n" .
        'Reply-To: webmaster@example.com' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
   
    mail($to, $subject, $message, $headers);
}
?>

Så må du selv se om jeg har husket rigtigt med henhold til navne osv.
Avatar billede 44fire44 Nybegynder
11. januar 2008 - 10:53 #3
Der ser jo rigtig godt ud

en lille ting - implode('<br>') bliver bare vist som <br> i mailen, og ikke linieskift - hvordan rettes dette (Har også prøvet med \n uden virkning

en anden ting - er der mulighed for kun at printe de linier hvor der er skrevet noget i input-boksen?
Avatar billede fant0mas Nybegynder
11. januar 2008 - 11:15 #4
Prøv at udskift med:
$bestilling[] = $value.' Stk. '.$row[vin_name].'\r\n';
$besked = implode($bestilling);

Og til at fjerne dem uden værdi: (skal stå lige efter if(isset($_POST[vinID])){)

foreach ($_POST[vinID] as $key => $value) {
  if (is_null($value)) {
    unset($_POST[vinID][$key]);
  }
}
Avatar billede 44fire44 Nybegynder
11. januar 2008 - 11:43 #5
nu har jeg skrevet følgende:

if(isset($_POST[send])){
foreach ($_POST[send] as $key => $value) {
  if (is_null($value)) {
    unset($_POST[vinID][$key]);
  }
}
    $fra = 'Bestilling fra '.$_POST[kundenummer];
    $bestilling = array();
    foreach ($_POST[vinID] as $key  => $value) {
        $query = mysql_query("SELECT vin_number, vin_name FROM vine WHERE vin_number = '$key'");
        $row = mysql_fetch_array($query);
            $bestilling[] = $value.' Stk. '.$row[vin_name].'\r\n';
        $besked = implode($bestilling);

    }
   
    $besked = implode('<br>', $bestilling);
   
    $to      = 'info@get-ready.dk';
    $subject = $fra;
    $message = $besked;
    $headers = 'From: bestilling@domain.dk' . "\r\n" .
        'Reply-To: bestilling@domain.dk' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
   
    mail($to, $subject, $message, $headers);



        Header("Location: tak.html");

   
}

og min mail kommer til at se sådan ud

Emne: Bestilling fra \'.$_GET[id].\'
Mail:
88 Stk. Unduraga\r\n<br>99 Stk. Lambrusco\r\n<br>88 Stk. Test3\r\n<br> Stk. Test1\r\n<br> Stk. Test2\r\n<br> Stk. Testvin nummer 4\r\n
Avatar billede fant0mas Nybegynder
11. januar 2008 - 12:44 #6
Den skal ikke rettes i:

foreach ($_POST[vinID] as $key => $value) {
  if (is_null($value)) {
    unset($_POST[vinID][$key]);
  }
}
Avatar billede fant0mas Nybegynder
11. januar 2008 - 12:48 #7
Du har heller ikke rettet:
$besked = implode('<br>', $bestilling);
til:
$besked = implode($bestilling);
Avatar billede 44fire44 Nybegynder
11. januar 2008 - 13:09 #8
if(isset($_POST[send])){
foreach ($_POST[vinID] as $key => $value) {
  if (is_null($value)) {
    unset($_POST[vinID][$key]);
  }
}
    $fra = 'Bestilling fra '.$_POST[kundenummer];
    $bestilling = array();
    foreach ($_POST[vinID] as $key  => $value) {
        $query = mysql_query("SELECT vin_number, vin_name FROM vine WHERE vin_number = '$key'");
        $row = mysql_fetch_array($query);
            $bestilling[] = $value.' Stk. '.$row[vin_name].'\r\n';
        $besked = implode($bestilling);

    }
   
    $besked = implode('<br>', $bestilling);
   
    $to      = 'info@get-ready.dk';
    $subject = $fra;
    $message = $besked;
    $headers = 'From: bestilling@iceweb.eu' . "\r\n" .
        'Reply-To: bestilling@iceweboeu' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
   
    mail($to, $subject, $message, $headers);



        Header("Location: xxx.php");
}
?>

giver samme resultat... - ingen ændringer
Avatar billede fant0mas Nybegynder
11. januar 2008 - 14:03 #9
Prøv med :

$message = '
<html>
<head>
  <title>Flot pony du har der!</title>
</head>
<body>
<p>'.$besked.'</p>
</body>
</html>
';
Avatar billede 44fire44 Nybegynder
12. januar 2008 - 17:51 #10
Okay, nu har jeg brugt PHPmailer som class
jeg vil gerne have dataen op i en tabel som på de andre sider i mailen også - jeg har prøvet at skrive lidt ind her, men mailen jeg modtager er bare tom

- desuden bliver de poster som er tomme stadig ikke fjernet

if(isset($_POST[send])){
foreach ($_POST[vinID] as $key => $value) {
  if (is_null($value)) {
    unset($_POST[vinID][$key]);
  }
}
    $bestilling = array();
    foreach ($_POST[vinID] as $key  => $value) {
        $query = mysql_query("SELECT vin_number, vin_name FROM vine WHERE vin_number = '$key'");
        $row = mysql_fetch_array($query);
        $bestilling[] = "<tr><td>'.$row[vin_type].'</td><td>'.$row[vin_origin].'</td><td>'.$row[vin_grape].'</td><td>'.$row[vin_name].'</td><td>'.$row[vin_year].'</td><td>'.$row[vin_price].'</td><td>'.$value.'</td></tr>";
    $besked = "<table border=1>";
    $besked = "<tr><td>Type</td><td>Land</td><td>Drue</td><td>Navn</td><td>Årgang</td><td>Pris</td><td>Antal</td></tr>";
    $besked = implode($bestilling);
    $besked = "</table>";

    }

include_once('../class.phpmailer.php');

$mail    = new PHPMailer();

$body    = "
<html>
<head>
<title>
</title>
</head>
<body bgcolor=ffff33>
'.$besked.'
</body>
</html>
";


$body    = eregi_replace("[\]",'',$body);

$mail->From    = "name@yourdomain.com";
$mail->FromName = "Fornavn Efternavn";

$mail->Subject = "Overskrift";

$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$mail->AddAddress("test@test.dk", "John Doe");
$mail->AddAddress("test@test.dk", "John Doe");

if(!$mail->Send()) {
  echo 'Failed to send mail';
} else {
  echo 'Mail sent';
}}

?>
Avatar billede 44fire44 Nybegynder
13. januar 2008 - 14:40 #11
Altså mit ønske er at stille dataen op som den side det bliver sendt fra - og kun de linier hvor der er indtastet noget i <input name="vinID['.$row[vin_number].']" type="text" size="2" value=""> skal vises i den tabel

- men som sagt, så er den mail som jeg sender til mig selv pt. ved hjælp af ovenstående kode, tom
Avatar billede dkfire Nybegynder
13. januar 2008 - 15:09 #12
Du er der næsten, dog mangler du lige lidt endnu :-)
Du skal rette:
  $bestilling = array();
    foreach ($_POST[vinID] as $key  => $value) {
        $query = mysql_query("SELECT vin_number, vin_name FROM vine WHERE vin_number = '$key'");
        $row = mysql_fetch_array($query);
        $bestilling[] = "<tr><td>'.$row[vin_type].'</td><td>'.$row[vin_origin].'</td><td>'.$row[vin_grape].'</td><td>'.$row[vin_name].'</td><td>'.$row[vin_year].'</td><td>'.$row[vin_price].'</td><td>'.$value.'</td></tr>";
    $besked = "<table border=1>";
    $besked = "<tr><td>Type</td><td>Land</td><td>Drue</td><td>Navn</td><td>Årgang</td><td>Pris</td><td>Antal</td></tr>";
    $besked = implode($bestilling);
    $besked = "</table>";

    }
til:
    $besked .= "<table border=1>";
    $besked .= "<tr><td>Type</td><td>Land</td><td>Drue</td><td>Navn</td><td>Årgang</td><td>Pris</td><td>Antal</td></tr>";
    foreach ($_POST[vinID] as $key  => $value) {
        $query = mysql_query("SELECT vin_number, vin_name FROM vine WHERE vin_number = '$key'");
        $row = mysql_fetch_array($query);
        $besked .= "<tr><td>". $row['vin_type'] ."</td><td>". $row['vin_origin'] ."</td><td>". $row['vin_grape'] ."</td><td>". $row['vin_name'] ."</td><td>". $row['vin_year'] ."</td><td>". $row['vin_price'] ."</td><td>". $value ."</td></tr>";
       
    }
    $besked .= "</table>";
Avatar billede 44fire44 Nybegynder
13. januar 2008 - 16:03 #13
kanon! - un får jeg så noget tekst i min mail

men:
1. - nu sender den en mail lige så snart jeg går ind på siden - altså inden jeg sender _POST[send]
2. den smider stadig alle poster ind i mailen - jeg vil kun have dem hvor der er indtastet noget i <input name="vinID['.$row[vin_number].']" type="text" size="2" value="">
Avatar billede dkfire Nybegynder
13. januar 2008 - 16:21 #14
Yes yes, men nu har vi løst første problem :-)
Skriv din kode igen, så tager vi næste problem :-)
Avatar billede 44fire44 Nybegynder
13. januar 2008 - 16:40 #15
if(isset($_POST[send])){
foreach ($_POST[vinID] as $key => $value) {
  if (is_null($value)) {
    unset($_POST[vinID][$key]);
  }
}
    $besked .= "<table border=1>";
    $besked .= "<tr><td>Type</td><td>Land</td><td>Drue</td><td>Navn</td><td>Årgang</td><td>Pris</td><td>Antal</td></tr>";
    foreach ($_POST[vinID] as $key  => $value) {
        $query = mysql_query("SELECT * FROM vine WHERE vin_number = '$key'");
        $row = mysql_fetch_array($query);
        $besked .= "<tr><td>". $row['vin_type'] ."</td><td>". $row['vin_origin'] ."</td><td>". $row['vin_grape'] ."</td><td>". $row['vin_name'] ."</td><td>".

$row['vin_year'] ."</td><td>". $row['vin_price'] ."</td><td>". $value ."</td></tr>";
       
    }
    $besked .= "</table>";

    }

include_once('../class.phpmailer.php');

$mail    = new PHPMailer();

$body    = "
<html>
<head>
<title>
</title>
</head>
<body bgcolor=ffff33>
$besked
</body>
</html>
";


$body    = eregi_replace("[\]",'',$body);

$mail->From    = "name@yourdomain.com";
$mail->FromName = "First Last";

$mail->Subject = "Bestilling fra hjemmesiden";

$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$mail->AddAddress("info@get-ready.dk", "John Doe");
$mail->AddAddress("44fire44@gmail.com", "John Doe");

if(!$mail->Send()) {

  echo 'Failed to send mail';
} else {
  echo 'Mail sent';
}

?>
Avatar billede dkfire Nybegynder
13. januar 2008 - 16:51 #16
Du har lige en } for meget:
$besked .= "</table>";

    }  <<----- SLET

include_once('../class.phpmailer.php');
Avatar billede dkfire Nybegynder
13. januar 2008 - 16:53 #17
ret:
if (is_null($value)) {
til:
if (is_null($value) || $value = "" || empty($value)) {
Avatar billede 44fire44 Nybegynder
13. januar 2008 - 17:09 #18
niice :) -  } skulle så også bare lige flyttes ned til

echo 'Mail sent';
}
    }

så virkede det

Smid er svar, begge - jeg forhøjer points og smider 30 points iretningen af jer begge
Avatar billede dkfire Nybegynder
13. januar 2008 - 17:16 #19
Et svar fra mig, men vent til alle har svaret før du acceptere :-)
Avatar billede fant0mas Nybegynder
13. januar 2008 - 20:05 #20
svar
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