Смешанная сумка HTML и PHP - PullRequest
       26

Смешанная сумка HTML и PHP

0 голосов
/ 25 марта 2011

На моей странице PHP я извлекаю из URL несколько переменных и форматирую их вывод в красивую таблицу HTML.Один раздел в таблице должен быть создан динамически, в зависимости от того, что было заказано на предыдущей веб-странице.Наконец, я использую функцию $ mail для отправки HTML-таблицы со всей информацией получателю электронной почты.

Таблица отлично работает, за исключением динамического раздела с циклом while.Компилятор запутался, потому что мой синтаксис неправильный.Я подозреваю, что это потому, что мой код находится внутри переменной $ message '...'.Любой совет?

<?php
// Extracting the variables from URL
$params = $_SERVER['QUERY_STRING'];

// Placing the variables into $array
$array=array();
parse_str($params,$array);

// Identifying the length of the main array and creating an array of KEYS
$keys = array_keys($array);
$keysCount = count($keys);

// And creating an array of corresponding values
$values = array_values($array);

$to = "steve@dutchlandfrozenfoods.com";
$subject = "NEW EUROCLASSIC ORDER";
$message = '
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>EuroClassic Fine Family of Pastries - Ordering</title>
</HEAD>
<BODY bgcolor="#F0EFEE">
<table id="hor-minimalist-b" summary="Customer Information">
<thead>
    <tr>
        <th scope="col">Customer Contact:</th>
        <th scope="col">Shipping To:</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>' . $values[0] . '</td>
        <td>' . $values[1] . '</td>
    </tr>
    <tr>
        <td>' . $values[2] . '</td>
        <td>' . $values[3] . '</td>
    </tr>
    <tr>
        <td>' . $values[4] . '</td>
        <td>' . $values[5] . '</td>
    </tr>
    <tr>
        <td></td>
        <td>' . $values[6] . '</td>
    </tr>
</tbody>
</table>

<table id="hor-minimalist-b" summary="Order Details">
<thead>
    <tr>
        <th scope="col">Product:</th>
        <th scope="col">Item Code:</th>
        <th scope="col">Quantity:</th>
        <th scope="col">Ext Price:</th>
    </tr>
</thead>
<tbody>
while ($i = 13; $i < $keysCount-3; $i = $i+2;) 
{
    <tr>
    <td>' . $values[$i] . '</td>
    $i = $i+1;
    <td>' . $values[$i] . '</td>
    $i = $i+1;
    <td>' . $values[$i] . '</td>
    $i = $i+1;
    <td>' . $values[$i] . '</td>
    </tr>
}   
</tbody>
</table>

</BODY>
</HTML>
';

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "To:Steve <steve@dutchlandfrozenfoods.com>\r\n";

mail($to, $subject, $message, $headers);

?>

Ответы [ 3 ]

3 голосов
/ 25 марта 2011

Подготовьте tbody в переменной раньше.

$tbody = '';
while ($i = 13; $i < $keysCount-3; $i = $i+2;) {
    $tbody .= '<tr><td>' . $values[$i] . '</td>';
    $i = $i+1;
    $tbody .= '<td>' . $values[$i] . '</td>';
    $i = $i+1;
    $tbody .= '<td>' . $values[$i] . '</td>';
    $i = $i+1;
    $tbody .= '<td>' . $values[$i] . '</td></tr>';
}  

А потом:

$message  = "...<tbody>" . $tbody . "</tbody> ....";

Но я должен сказать, что логика здесь не понятна, и если что-то изменится, например, число столбцов, код может стать довольно сложным для обслуживания.

1 голос
/ 25 марта 2011

Briedis point важен и необходим. но проще - это не то, как работает цикл while

while(exp)
{
    //body runs while exp remains true
}

Вы не помещаете туда три выражения, как в цикле for. Если вы хотите сохранить его как цикл while, выполните

$i = 13
while($i < $keysCount-3)
{
    //body, with necessary increments
}

И если вместо этого вы решите сделать цикл for, после третьего (как правило, возрастающего) выражения не ставится точка с запятой

Какой бы метод цикла вы не использовали, вам нужно вынуть его из строки, как указано Briedis. либо создайте временную переменную, такую ​​как $tbody, либо несколько раз объедините с $message в теле цикла.

0 голосов
/ 25 марта 2011

Насколько я знаю, вы не можете одновременно вызывать функцию PHP и устанавливать ее равной переменной.вам нужно будет сделать что-то похожее на следующее:

'... <tbody>';

while ($i = 13; $i < $keysCount-3; $i = $i+2;)
{
$message = '<tr><td>' . $values[$i] . '</td>';
$i = $i+1;
$message = '<td>' . $values[$i] . '</td>';
$i = $i+1;
$message = '<td>' . $values[$i] . '</td>';
$i = $i+1;
$message = '<td>' . $values[$i] . '</td></tr>';
}

$message = '</tbody> ...'
...