-4

PHP の foreach 関数を使用するようにコードを編集する際に問題が発生しています。以下の「transactiondata」div は、テーブルからトランザクション情報を取得するために使用されています。foreach() を使用して、テーブルの各行に新しい div セクションを作成したいと考えています。ただし、div を編集して foreach() を含めると、大量のエラーが発生したため、正方形 1 に戻ります。これを達成するための最良の方法は何ですか?

<?php
include('cn.php');
session_start();

$userUsername = $_SESSION['loggedInUser'];

$sql = "SELECT * FROM transactions WHERE
    UserID = '" . $userUsername . "'";
$result = mysql_query($sql, $cn) or
    die(mysql_error($cn));
$row = mysql_fetch_assoc($result);

$RequestBody = $row['RequestBody'];
$ResponseBody = $row['ResponseBody'];

parse_str($RequestBody);
parse_str($ResponseBody);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $userUsername; ?>'s Profile - Test 2013</title>
<style>
    .userstatustext 
    {
        position: absolute;
        top: 0px; 
        right: 5px;
    }
    .transactiondata
    {
        position: absolute;
        padding: 5px;
        top: 170px;
        left: 75px;
        width: 900px;
        height: 400px;
        overflow-x: hidden;
        background: #B2B2B2;
        border: 1px solid black;
        word-break: break-all; 
        word-wrap: break-word;
    }
</style>    
</head>
<body>
    <table border="0" cellpadding="10">
      <tr>
        <td>
          <img src="../images/api_rat.png">
        </td>
        <td>
          <h1>Transactions - Test 2013</h1>
        </td>
      </tr>
    </table>
<div class="userstatustext">
    <h5>Welcome, <?php echo $userUsername; ?>!</h5>
    <h5><a href="logout.php">[LOGOUT]</a></h5>
</div>
<h3>Your most recent transactions:</h3>
<div class="transactiondata">
<p><h4>Timestamp: </h4><?php echo date("F j, Y g:i a", strtotime($TIMESTAMP));  ?></p>
<p><h4>Payment Status: </h4><?php echo $ACK; ?></p>
<?php 
if(isset($CORRELATIONID))
{
    echo "<p><h4>Correlation ID: </h4></p>";
    echo $CORRELATIONID; 
}
?>
<?php
if(isset($TRANSACTIONID))
{
    echo "<p><h4>Transaction ID: </h4></p>";
    echo $TRANSACTIONID; 
}
?>
<p><h4>Errors Returned (if any): </h4> 
    <a href="https://www.testsite.com/test/search.php?query=<?php echo $ERRORCODE; ?>&search=Search">
        <?php echo $ERRORCODE; ?>
    </a>
</p>
<p><h4>Request Body: </h4><?php echo $RequestBody; ?></p> 
<p><h4>Response Body: </h4><?php echo $ResponseBody; ?></p>
</div>
</body>
</html>
4

2 に答える 2

1

foreach の代わりに while() を使用する必要があるため、結果があれば $row 変数にフェッチできます。

このように、クエリで見つかった各行に対して、mysql_fetch_assoc を使用してその行を $row 変数に取得し、その変数をテーブルの各列の配列としてスレッド化します。

これに合わせてコードを修正しました

<?php
include('cn.php');
session_start();

$userUsername = $_SESSION['loggedInUser'];

$sql = "SELECT * FROM transactions WHERE
    UserID = '" . $userUsername . "'";
$result = mysql_query($sql, $cn) or
    die(mysql_error($cn));

$RequestBody = $row['RequestBody'];
$ResponseBody = $row['ResponseBody'];

parse_str($RequestBody);
parse_str($ResponseBody);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $userUsername; ?>'s Profile - Test 2013</title>
<style>
    .userstatustext 
    {
        position: absolute;
        top: 0px; 
        right: 5px;
    }
    .transactiondata
    {
        position: absolute;
        padding: 5px;
        top: 170px;
        left: 75px;
        width: 900px;
        height: 400px;
        overflow-x: hidden;
        background: #B2B2B2;
        border: 1px solid black;
        word-break: break-all; 
        word-wrap: break-word;
    }
</style>    
</head>
<body>
    <table border="0" cellpadding="10">
      <tr>
        <td>
          <img src="../images/api_rat.png">
        </td>
        <td>
          <h1>Transactions - Test 2013</h1>
        </td>
      </tr>
    </table>
<div class="userstatustext">
    <h5>Welcome, <?php echo $userUsername; ?>!</h5>
    <h5><a href="logout.php">[LOGOUT]</a></h5>
</div>
<h3>Your most recent transactions:</h3>
<div class="transactiondata">

<?php 
while ($row = mysql_fetch_assoc($result))
 {
?>
<p><h4>Timestamp: </h4><?php echo date("F j, Y g:i a", strtotime($row['TIMESTAMP']));  ?></p>
<p><h4>Payment Status: </h4><?php echo $row['ACK']; ?></p>
<?php 
    if(isset($row['CORRELATIONID']))
    {
        echo "<p><h4>Correlation ID: </h4></p>";
        echo $row['CORRELATIONID']; 
    }
    if(isset($row['TRANSACTIONID']))
    {
        echo "<p><h4>Transaction ID: </h4></p>";
        echo $row['TRANSACTIONID']; 
    }
}
?>
<p><h4>Errors Returned (if any): </h4> 
    <a href="https://www.testsite.com/test/search.php?query=<?php echo $ERRORCODE; ?>&search=Search">
        <?php echo $ERRORCODE; ?>
    </a>
</p>
<p><h4>Request Body: </h4><?php echo $RequestBody; ?></p> 
<p><h4>Response Body: </h4><?php echo $ResponseBody; ?></p>
</div>
</body>
</html>

これであなたの質問が解決することを願っています

于 2013-01-24T15:31:43.103 に答える
1

Probably You would like to output every row returned by the query.

Therefore use while instead of desired foreach:

while($row = mysql_fetch_assoc($result)) {
    // DO YOUR STUFF HERE
}

I would also recommend not to use mysql_* functions as they are deprecated now but to use PDO or at least mysqli_* instead.

于 2013-01-24T15:29:28.307 に答える