0

私の PHP ページでは、URL から一連の変数を抽出し、それらの出力を適切な HTML テーブルにフォーマットしています。前の Web ページで注文されたものに応じて、表の 1 つのセクションを動的に作成する必要があります。最後に、$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);

?>
4

3 に答える 3

3

前に変数に 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> ....";

しかし、ここでのロジックは理解できないと言わざるを得ません。たとえば、列の数など、何かが変更された場合、コードの保守が非常に難しくなる可能性があります。

于 2011-03-25T15:18:03.373 に答える
1

Briedis ポイントは重要かつ必要です。しかし、もっと簡単に言えば、それはwhileループの仕組みではありません

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

for ループのように 3 つの式を配置することはありません。whileループとして保持したい場合は、

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

代わりに for ループを実行することにした場合、3 番目の (通常はインクリメントする) 式の後にセミコロンはありません。

使用するループの方法に関係なく、Briedis が示したように、ストリングからループを取り出す必要があります。のような一時変数を作成するか、ループ本体で$tbody繰り返し連結します。$message

于 2011-03-25T15:27:54.843 に答える
0

私の知る限り、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> ...'
于 2011-03-25T15:22:18.360 に答える