我对“高级PHP”很新,我不断遇到PHP标题的错误。
<?php
$getTrans = dbquery("SELECT * FROM cms_transactions WHERE userid = '".USER_ID."' AND pin = '0' ORDER BY date DESC LIMIT 50");
$oe = 1;
while($transaction = mysql_fetch_assoc($getTrans)){
if ($oe == 2)
{
$oe = 1;
}
else
{
$oe = 2;
}
$oDate = strtotime($transaction['date']);
$sDate = date("<b>l, j - F, o</b> g:ha",$oDate);
echo'
<tr style=" background-color: ' . (($oe == 2) ? '#e2e2e2' : '#fff') . ';">
<td>'.$transaction['id'].'</td>
<td>'.$transaction['descr'].'</td>
<td>'.$transaction['credits'].' deducted</td>
<td>'.$transaction['amount'].' deducted</td>
<td>'.$transaction['vip_points'].' deducted</td>
<td>'.$sDate.'</td>
<td><input type="submit" value="+ Pin" name="'.$transaction['id'].'" /></td>
</tr>
';
$trans = $transaction['id'];
if(isset($_POST["$trans"])){
dbquery("UPDATE cms_transactions SET pin = '1' WHERE id = '".$trans."' AND userid = '".USER_ID."' LIMIT 1");
header("Location: ".WWW."/identity/transactions");
}
}
if(mysql_num_rows($getTrans) == 0){
echo '<div class="error" id="black">You have no recent Transactions</div>';
}
?>
我一直在/ identity / transactions的底部收到PHP Header错误。
我意识到我遇到了问题,因为“页面已经加载了内容”,并且必须在页面开头使用PHP标头。 我发布的以下代码段是一个包含的文件;在主文件中。
主要问题是,我正在寻找一种方法将内容与“后端”php工作分开。
例如:
主PHP文件包含所有代码,include();文件有“内容”一面。
这有可能吗?如果你能给出一个例子,那就太好了!
如果您不清楚,请告诉我。
EDIT;这是整个文件:
<table class="information-table" style="margin-top:-5px;">
<tr>
<td style="text-shadow:none;">
<a class="new-button" href="<?php echo WWW ; ?>/account/logout"><b>Log out</b><i></i></a>
<div id="back-link" style="color:#fff;">
<a href="<?php echo WWW ; ?>/identity/avatars" style="color:#fff;">My Avatars</a> » <a href="<?php echo WWW ; ?>/identity/settings" style="color:#fff;">Account Settings</a> » Transactions
</div>
</td></tr>
</table>
<div id="column1" class="column" style="width:960px;margin-right:10px;">
<h1>Account Transactions:</h1>
<h3>Pinned Transactions:</h3>
<i>Pinning a transaction is useful if you have a transaction that is important; that you might need in the future!</i>
<p>
<table>
<thead>
<tr><td>ID</td><td>Description</td><td>Credits</td><td>Pixels</td><td>Stars</td><td>Purchase Date</td><td></td></tr>
</thead>
<tbody>
<form method="post">
<?php
$getTrans = dbquery("SELECT * FROM cms_transactions WHERE userid = '".USER_ID."' AND pin = '1' ORDER BY date DESC LIMIT 100");
$oe = 1;
while($transaction = mysql_fetch_assoc($getTrans)){
if ($oe == 2)
{
$oe = 1;
}
else
{
$oe = 2;
}
$oDate = strtotime($transaction['date']);
$sDate = date("<b>l, j - F, o</b> g:ha",$oDate);
$transs = $transaction['id'];
if(isset($_POST["un$transs"])){
dbquery("UPDATE cms_transactions SET pin = '0' WHERE id = '".$transs."' AND userid = '".USER_ID."' LIMIT 1");
header("Location: ".WWW."/identity/transactions");
}
echo'
<tr style=" background-color: ' . (($oe == 2) ? '#e2e2e2' : '#fff') . ';">
<td>'.$transaction['id'].'</td>
<td>'.$transaction['descr'].'</td>
<td>'.$transaction['credits'].' deducted</td>
<td>'.$transaction['amount'].' deducted</td>
<td>'.$transaction['vip_points'].' deducted</td>
<td>'.$sDate.'</td>
<td><input type="submit" value="- Pin" name="un'.$transaction['id'].'" /></td>
</tr>
';
}
if(mysql_num_rows($getTrans) == 0){
echo '<div class="error" id="black">You have no Pinned Transactions</div>';
}
?>
</form>
</tbody>
</table>
</p>
<h3>Recent Transactions</h3>
<p>
<table>
<thead>
<tr><td>ID</td><td>Description</td><td>Credits</td><td>Pixels</td><td>Stars</td><td>Purchase Date</td><td></td></tr>
</thead>
<tbody>
<form method="post">
<?php
$getTrans = dbquery("SELECT * FROM cms_transactions WHERE userid = '".USER_ID."' AND pin = '0' ORDER BY date DESC LIMIT 50");
$oe = 1;
while($transaction = mysql_fetch_assoc($getTrans)){
if ($oe == 2)
{
$oe = 1;
}
else
{
$oe = 2;
}
$oDate = strtotime($transaction['date']);
$sDate = date("<b>l, j - F, o</b> g:ha",$oDate);
$trans = $transaction['id'];
if(isset($_POST["$trans"])){
dbquery("UPDATE cms_transactions SET pin = '1' WHERE id = '".$trans."' AND userid = '".USER_ID."' LIMIT 1");
header("Location: ".WWW."/identity/transactions");
}
echo'
<tr style=" background-color: ' . (($oe == 2) ? '#e2e2e2' : '#fff') . ';">
<td>'.$transaction['id'].'</td>
<td>'.$transaction['descr'].'</td>
<td>'.$transaction['credits'].' deducted</td>
<td>'.$transaction['amount'].' deducted</td>
<td>'.$transaction['vip_points'].' deducted</td>
<td>'.$sDate.'</td>
<td><input type="submit" value="+ Pin" name="'.$transaction['id'].'" /></td>
</tr>
';
}
if(mysql_num_rows($getTrans) == 0){
echo '<div class="error" id="black">You have no recent Transactions</div>';
}
?>
</form>
</tbody>
</table>
</p>
</div>
<style>
td {
padding:10px;
}
tbody td {
text-shadow:0 1px 0 #fff;
}
thead td {
font-weight:bold;
text-align:center;
}
</style>
答案 0 :(得分:0)
在这种情况下,您可以使用Output buffering来阻止已发送的标头:
ob_start();
$getTrans = dbquery("SELECT * FROM cms_transactions WHERE userid = '".USER_ID."' AND pin = '0' ORDER BY date DESC LIMIT 50");
$oe = 1;
while($transaction = mysql_fetch_assoc($getTrans)){
if ($oe == 2)
{
$oe = 1;
}
else
{
$oe = 2;
}
$oDate = strtotime($transaction['date']);
$sDate = date("<b>l, j - F, o</b> g:ha",$oDate);
echo'
<tr style=" background-color: ' . (($oe == 2) ? '#e2e2e2' : '#fff') . ';">
<td>'.$transaction['id'].'</td>
<td>'.$transaction['descr'].'</td>
<td>'.$transaction['credits'].' deducted</td>
<td>'.$transaction['amount'].' deducted</td>
<td>'.$transaction['vip_points'].' deducted</td>
<td>'.$sDate.'</td>
<td><input type="submit" value="+ Pin" name="'.$transaction['id'].'" /></td>
</tr>
';
$trans = $transaction['id'];
if(isset($_POST["$trans"])){
dbquery("UPDATE cms_transactions SET pin = '1' WHERE id = '".$trans."' AND userid = '".USER_ID."' LIMIT 1");
header("Location: ".WWW."/identity/transactions");
}
}
if(mysql_num_rows($getTrans) == 0){
echo '<div class="error" id="black">You have no recent Transactions</div>';
}
ob_end_clean();
答案 1 :(得分:0)
我在重构代码方面遇到了麻烦,将所有处理放在页面顶部,底部的演示文稿(使得您遇到的错误更不容易发生)。
<?php
// I always do most of my PHP processing before any presentation stuff
// Makes for more manageble code
// Init the Variables
// Transaction Arrays
$pinned_transactions = array();
$unpinned_transactions = array();
// Interaction Variables
$ids = array();
$action = false;
// Check for Unpin/Pin Request
if( isset( $_POST['unpin'] ) && count( $_POST['unpin'] ) ){
// There is a request to Unpin a Transaction
$ids = array_keys( $_POST['unpin'] );
$action = 0;
}elseif( isset( $_POST['pin'] ) && count( $_POST['pin'] ) ){
// There is a request to Pin a Transaction
$ids = array_keys( $_POST['pin'] );
$action = 1;
}
// There was some kind of Pin/Unpin Request
if( count( $ids ) ){
// Process the Change
dbquery( 'UPDATE cms_transactions SET pin = '.(int) $action.' WHERE id IN( '.implode( ',' , $ids ).' ) AND userid = '.(int) USER_ID );
// Set the Redirect
$redirect_to = WWW.'/identity/transactions';
// Use Headers, if we can
if( !headers_sent() )
header( 'Location: '.$redirect_to );
// Outputting a javascript Redirect (as a fallback)
// along with a link (if javascript is off).
echo '<script type="text/javascript">document.location.href = "'.$redirect_ro.'";</script>';
echo '<a href="'.$redirect_to.'">Click here to continue</a>';
die();
}
// Perform a Query for Pinned Transactions
$getTrans = dbquery( 'SELECT * FROM cms_transactions WHERE userid = '.(int) USER_ID.' AND pin = 1 ORDER BY date DESC LIMIT 100' );
while( $t = mysql_fetch_assoc( $getTrans ) ){
$oDate = strtotime( $t['date'] );
$sDate = date( "<b>l, j - F, o</b> g:ha" , $oDate );
$t['date'] = $sDate;
$pinned_transactions[] = $t;
}
// Perform a Query for Unpinned Transactions
$getTrans = dbquery( "SELECT * FROM cms_transactions WHERE userid = '".USER_ID."' AND pin = '0' ORDER BY date DESC LIMIT 50" );
while( $t = mysql_fetch_assoc( $getTrans ) ){
$oDate = strtotime( $t['date'] );
$sDate = date( "<b>l, j - F, o</b> g:ha" , $oDate );
$t['date'] = $sDate;
$unpinned_transactions[] = $t;
}
?><table class="information-table" style="margin-top:-5px;">
<tr>
<td style="text-shadow:none;">
<a class="new-button" href="<?php echo WWW; ?>/account/logout"><b>Log out</b><i></i></a>
<div id="back-link" style="color:#fff;">
<a href="<?php echo WWW; ?>/identity/avatars" style="color:#fff;">My Avatars</a> » <a href="<?php echo WWW; ?>/identity/settings" style="color:#fff;">Account Settings</a> » Transactions
</div>
</td>
</tr>
</table>
<div id="column1" class="column" style="width:960px;margin-right:10px;">
<h1>Account Transactions:</h1>
<h3>Pinned Transactions:</h3>
<i>Pinning a transaction is useful if you have a transaction that is important; that you might need in the future!</i>
<p>
<?php if( count( $pinned_transactions ) ){ ?>
<form method="post">
<table>
<thead>
<tr><td>ID</td><td>Description</td><td>Credits</td><td>Pixels</td><td>Stars</td><td>Purchase Date</td><td></td></tr>
</thead>
<tbody>
<?php foreach( $pinned_transactions as $k => $r ){ ?>
<tr class="<?php echo ( $k%2 ? 'odd' : 'even' ); ?>">
<td><?php echo $transaction['id']; ?></td>
<td><?php echo $transaction['descr']; ?></td>
<td><?php echo $transaction['credits']; ?> deducted</td>
<td><?php echo $transaction['amount']; ?> deducted</td>
<td><?php echo $transaction['vip_points']; ?> deducted</td>
<td><?php echo $transaction['date']; ?></td>
<td><input type="submit" value="- Pin" name="unpin[<?php echo $transaction['id']; ?>]" /></td>
</tr>
<?php } ?>
</tbody>
</table>
</form>
<?php }else{ ?>
<div class="error" id="black">You have no Pinned Transactions</div>
<?php } ?>
</p>
<h3>Recent Transactions</h3>
<p>
<?php if( count( $unpinned_transactions ) ){ ?>
<form method="post">
<table>
<thead>
<tr><td>ID</td><td>Description</td><td>Credits</td><td>Pixels</td><td>Stars</td><td>Purchase Date</td><td></td></tr>
</thead>
<tbody>
<?php foreach( $unpinned_transactions as $k => $r ){ ?>
<tr class="<?php echo ( $k%2 ? 'odd' : 'even' ); ?>">
<td><?php echo $transaction['id']; ?></td>
<td><?php echo $transaction['descr']; ?></td>
<td><?php echo $transaction['credits']; ?> deducted</td>
<td><?php echo $transaction['amount']; ?> deducted</td>
<td><?php echo $transaction['vip_points']; ?> deducted</td>
<td><?php echo $transaction['date']; ?></td>
<td><input type="submit" value="- Pin" name="pin[<?php echo $transaction['id']; ?>]" /></td>
</tr>
<?php } ?>
</tbody>
</table>
</form>
<?php }else{ ?>
<div class="error" id="black">You have no recent Transactions</div>
<?php } ?>
</p>
</div>
<style>
td {
padding:10px;
}
// Odd and Even Rows
tr.odd {
background-color:#FFFFFF;
}
tr.even {
background-color:#E2E2E2;
}
tbody td {
text-shadow:0 1px 0 #fff;
}
thead td {
font-weight:bold;
text-align:center;
}
</style>