Acabo de construir un carrito de compras en PHP / SQL y cuando el cliente hace un pedido quiero enviarle un correo electrónico con la información de su pedido. Los problemas que tengo es cómo incluir la lista de productos dentro del correo electrónico como una tabla. Intenté usar un bucle foreach que contenía HTML y PHP pero resultó en un error HTTP 500 cuando intenté 'probar' la plantilla en mi navegador.

Así es como se ve mi código:

    <?php 
 $body = "<h1>We're glad to see you $firstName!</h1> <br /><br />
    <p>
    Here is a recap of your next trip:<br /><br />

    You arrive on the <strong>$arrival</strong> and leave on the <strong>$departure</strong>.<br /><br />

    What you ordered:<br />
    </p>
    <table>
      <thead>
        <tr>
          <th>Product</th>
          <th>Quantity</th>
          <th>Total</th>
        </tr>
      </thead>
      <tbody>"; //everything fine until here

    foreach($cartItems as $item) {
     $body .= "<tr><td><a href=\"#\">" . echo $item["name"]; . "</a></td>
     <td><div>" . echo $item["qty"]; . "</div></td>
     <td><span>" . echo "€".$item["subtotal"]; . "</span></td></tr>";
    } //foreach end

    $body .= "</tbody>
    </table>";

    echo $body; 
?>

Sé que las variables $item["#"] funcionan bien porque cuando trato de echo independientemente con un bucle foreach funciona. El problema surge cuando intento de alguna manera concatenar PHP (es decir, echo $item["name"]) dentro de HTML dentro de la variable $body.

Nótese bien Este código es el que uso para probar si funciona en mi navegador. Finalmente, la variable $body será el contenido de $mail->MsgHTML($body).

Gracias por su ayuda! :)

PD: esta es mi primera publicación en este sitio web, ¡díganme si puedo mejorar mi pregunta!

1
krimou32 28 dic. 2016 a las 13:13

3 respuestas

La mejor respuesta
 foreach($cartItems as $item) {
     $body .= "<tr><td><a href=\"#\">" . $item["name"] . "</a></td>
     <td><div>" . $item["qty"] . "</div></td>
     <td><span>" . "€".$item["subtotal"] . "</span></td></tr>";
    }

Eliminar eco de foreach

0
28 dic. 2016 a las 10:20

Puede establecer la variable y luego agregarla a la misma variable usando foreach

<?php     <?php
$body = "<h1>We're glad to see you $firstName!</h1> <br /><br />
<p>
  Here is a recap of your next trip:<br /><br />
  You arrive on the <strong>$arrival</strong> and leave on the     <strong>$departure</strong>.<br /><br />
  What you ordered:<br />
</p>
<table>
    <thead>
        <tr>
            <th>Product</th>
            <th>Quantity</th>
            <th>Total</th>
        </tr>
    </thead>
    <tbody>
";

foreach($cartItems as $item) {
    $body .= "<tr><td><a href=\"#\">" . $item["name"] . "</a></td>
     <td><div>" . $item["qty"] . "</div></td>
     <td><span>€". $item["subtotal"] . "</span></td></tr>";
}
$body .= "</tbody>";
$body .= "</table>";
echo $body;
?>

Mejorando tu código

Es más claro usar HTML y hacer solo el foreach en PHP.

<h1>We're glad to see you $firstName!</h1><br /><br />
<p>
  Here is a recap of your next trip:<br /><br />
  You arrive on the <strong>$arrival</strong> and leave on the <strong>$departure</strong>.<br /><br />
  What you ordered:<br />
</p>
<table>
    <thead>
        <tr>
            <th>Product</th>
            <th>Quantity</th>
            <th>Total</th>
        </tr>
    </thead>
    <tbody>";
    <?php foreach($cartItems as $item): ?>
        <tr>
            <td><a href="#"><?= $item["name"]; ?></a></td>
            <td><div><?= $item["qty"]; ?></div></td>
            <td><span>€ <?= $item["subtotal"]; ?></span></td>
        </tr>
    <?php endforeach; ?>
    </tbody>
</table>
0
Peter 28 dic. 2016 a las 10:37
<?php 
     $body = "<h1>We're glad to see you $firstName!</h1> <br /><br />
    <p>
    Here is a recap of your next trip:<br /><br />

    You arrive on the <strong>$arrival</strong> and leave on the    <strong>$departure</strong>.<br /><br />

    What you ordered:<br />
    </p>
    <table>
      <thead>
        <tr>
          <th>Product</th>
          <th>Quantity</th>
          <th>Total</th>
        </tr>
      </thead>
      <tbody>"; //everything fine until here

    foreach($cartItems as $item) {
     $body .= "<tr><td><a href=''>" .$item["name"]. "</a></td>
     <td><div>" .$item["qty"]. "</div></td>
     <td><span>€".$item["subtotal"]. "</span></td></tr>";
    } //foreach end

    $body .= "</tbody>
    </table>";

    echo $body; 
?>
0
Dreathlord 28 dic. 2016 a las 11:34