What's new

Tanong ko lang po

loktoy

Eternal Poster
Joined
Oct 20, 2014
Posts
1,166
Solutions
2
Reaction
103
Points
496
Age
30
bakit po yun kapag nirereload ko nauulit yun output.. pero kapag di ko nag reload ok nman pero kapag nag refresh ako o nag reload nauulit po yun output

<form method="post">

<div class="container col-md-6">
Comment:<br>
<input type="hidden" name="id" value="<?php echo $id; ?>">
<textarea name="comment_content" class="form-control" rows="4" cols="50" style="" placeholder=".........Type your comment here........" required></textarea><br>
<input class="w-25" type="submit" name="comment" value ="Reply" style="background-color:#0D52C7;">
</div>
</form>

</br>
<?php

if (isset($_POST['comment'])){
$comment_content = $_POST['comment_content'];
$post_id=$_POST['id'];

mysqli_query($con,"insert into comment (comment,date_posted,user_id,comment_id) values ('$comment_content','".strtotime(date("Y-m-d h:i:sa"))."','$user_id','$post_id')") or die (mysqli_error());

}
?>

<?php
$comment_query = mysqli_query($con,"SELECT * ,UNIX_TIMESTAMP() - date_posted AS TimeSpent FROM comment inner JOIN registration on registration.user_id = comment.user_id where comment_id = '$id' order by date_posted DESC") or die (mysqli_error());
while ($comment_row=mysqli_fetch_array($comment_query)){
$comment_id = $comment_row['id'];
$comment_by = $comment_row['username'];
?>

<br><div class="container col-md-6 bg-body-tertiary border rounded-3"><?php echo $comment_by; ?> - <?php echo $comment_row['comment']; ?>
<br>
<?php
$days = floor($comment_row['TimeSpent'] / (60 * 60 * 24));
$remainder = $comment_row['TimeSpent'] % (60 * 60 * 24);
$hours = floor($remainder / (60 * 60));
$remainder = $remainder % (60 * 60);
$minutes = floor($remainder / 60);
$seconds = $remainder % 60;
if($days > 0)
echo date('F d, Y - H:i:sa', $comment_row['date_posted']);
elseif($days == 0 && $hours == 0 && $minutes == 0)
echo "A few seconds ago";
elseif($days == 0 && $hours == 0)
echo $minutes.' minutes ago';
?>
</div>
<br>
<?php
}
?>
<hr
&nbsp;
<?php
if ($u_id = $id){
?>



<?php }else{ ?>

<?php
} } ?>



</body>
</html>
 
Ang posibleng dahilan kung bakit nauulit ang output kapag nag-refresh o nag-reload ay ang iyong code na pag-save ng comment sa database. Sa iyong code, pag nag-reload ka ng page, ang POST request ay magreresulta sa pag-insert ng parehong comment sa database. Kadalasan, ang solusyon dito ay ang paggamit ng redirect pagkatapos ng pag-insert ng comment upang maiwasan ang pag-re-submit ng form.

Isa pang posibleng dahilan ay ang iyong pagkuha ng mga comment mula sa database. Sa iyong code, ang mga comment ay inilalabas gamit ang while loop. Kung mayroon kang multiple na rows sa database na may parehong comment_id, ang mga ito ay magiging parehong lumilitaw sa output. Kung ito ang nangyayari, maaring gusto mong i-check kung ang comment_id ay nagbabago sa bawat iteration ng loop at i-filter ang mga duplicate na comment.

Narito ang suggested na pag-update ng iyong code:

PHP:
<?php
if (isset($_POST['comment'])){
    $comment_content = $_POST['comment_content'];
    $post_id=$_POST['id'];

    mysqli_query($con,"insert into comment (comment,date_posted,user_id,comment_id) values ('$comment_content','".strtotime(date("Y-m-d h:i:sa"))."','$user_id','$post_id')") or die (mysqli_error());
    
    // Redirect pagkatapos ng pag-insert ng comment
    header("Location: your_page.php");
    exit();
}
?>

<?php 
$comment_query = mysqli_query($con,"SELECT DISTINCT comment_id, comment, UNIX_TIMESTAMP() - date_posted AS TimeSpent, username, date_posted FROM comment INNER JOIN registration ON registration.user_id = comment.user_id WHERE comment_id = '$id' ORDER BY date_posted DESC") or die (mysqli_error());
while ($comment_row=mysqli_fetch_array($comment_query)){
    $comment_id = $comment_row['comment_id'];
    $comment_by = $comment_row['username'];
?>
    
    <br>
    <div class="container col-md-6 bg-body-tertiary border rounded-3">
        <?php echo $comment_by; ?> - <?php echo $comment_row['comment']; ?><br>
        <?php
        $days = floor($comment_row['TimeSpent'] / (60 * 60 * 24));
        $remainder = $comment_row['TimeSpent'] % (60 * 60 * 24);
        $hours = floor($remainder / (60 * 60));
        $remainder = $remainder % (60 * 60);
        $minutes = floor($remainder / 60);
        $seconds = $remainder % 60;
        
        if($days > 0) {
            echo date('F d, Y - H:i:sa', $comment_row['date_posted']);
        } elseif($days == 0 && $hours == 0 && $minutes == 0) {
            echo "A few seconds ago";
        } elseif($days == 0 && $hours == 0) {
            echo $minutes.' minutes ago';
        }
        ?>
    </div>
    <br>
<?php
}
?>

Sa code na ito, nagkaroon ako ng mga pagbabago:

1. Inilagay ang redirect pagkatapos ng pag-insert ng comment para maiwasan ang pag-re-submit ng form.
2. Ginamit ang DISTINCT sa pagkuha ng mga comment upang maiwasan ang mga duplicate na entries sa output.
3. Inilagay ang comment_id sa query upang magamit ito sa pag-filter ng mga duplicate na comment.
4. Ginamit ang header() function para sa pag-redirect.
5. Inalis ang mga hindi kinakailangang PHP tags at syntax errors.
 
Ang posibleng dahilan kung bakit nauulit ang output kapag nag-refresh o nag-reload ay ang iyong code na pag-save ng comment sa database. Sa iyong code, pag nag-reload ka ng page, ang POST request ay magreresulta sa pag-insert ng parehong comment sa database. Kadalasan, ang solusyon dito ay ang paggamit ng redirect pagkatapos ng pag-insert ng comment upang maiwasan ang pag-re-submit ng form.

Isa pang posibleng dahilan ay ang iyong pagkuha ng mga comment mula sa database. Sa iyong code, ang mga comment ay inilalabas gamit ang while loop. Kung mayroon kang multiple na rows sa database na may parehong comment_id, ang mga ito ay magiging parehong lumilitaw sa output. Kung ito ang nangyayari, maaring gusto mong i-check kung ang comment_id ay nagbabago sa bawat iteration ng loop at i-filter ang mga duplicate na comment.

Narito ang suggested na pag-update ng iyong code:

PHP:
<?php
if (isset($_POST['comment'])){
    $comment_content = $_POST['comment_content'];
    $post_id=$_POST['id'];

    mysqli_query($con,"insert into comment (comment,date_posted,user_id,comment_id) values ('$comment_content','".strtotime(date("Y-m-d h:i:sa"))."','$user_id','$post_id')") or die (mysqli_error());
   
    // Redirect pagkatapos ng pag-insert ng comment
    header("Location: your_page.php");
    exit();
}
?>

<?php
$comment_query = mysqli_query($con,"SELECT DISTINCT comment_id, comment, UNIX_TIMESTAMP() - date_posted AS TimeSpent, username, date_posted FROM comment INNER JOIN registration ON registration.user_id = comment.user_id WHERE comment_id = '$id' ORDER BY date_posted DESC") or die (mysqli_error());
while ($comment_row=mysqli_fetch_array($comment_query)){
    $comment_id = $comment_row['comment_id'];
    $comment_by = $comment_row['username'];
?>
   
    <br>
    <div class="container col-md-6 bg-body-tertiary border rounded-3">
        <?php echo $comment_by; ?> - <?php echo $comment_row['comment']; ?><br>
        <?php
        $days = floor($comment_row['TimeSpent'] / (60 * 60 * 24));
        $remainder = $comment_row['TimeSpent'] % (60 * 60 * 24);
        $hours = floor($remainder / (60 * 60));
        $remainder = $remainder % (60 * 60);
        $minutes = floor($remainder / 60);
        $seconds = $remainder % 60;
       
        if($days > 0) {
            echo date('F d, Y - H:i:sa', $comment_row['date_posted']);
        } elseif($days == 0 && $hours == 0 && $minutes == 0) {
            echo "A few seconds ago";
        } elseif($days == 0 && $hours == 0) {
            echo $minutes.' minutes ago';
        }
        ?>
    </div>
    <br>
<?php
}
?>

Sa code na ito, nagkaroon ako ng mga pagbabago:

1. Inilagay ang redirect pagkatapos ng pag-insert ng comment para maiwasan ang pag-re-submit ng form.
2. Ginamit ang DISTINCT sa pagkuha ng mga comment upang maiwasan ang mga duplicate na entries sa output.
3. Inilagay ang comment_id sa query upang magamit ito sa pag-filter ng mga duplicate na comment.
4. Ginamit ang header() function para sa pag-redirect.
5. Inalis ang mga hindi kinakailangang PHP tags at syntax errors.
ganito error ko po

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\Innerjoin\partials\newnav.php:105) in C:\xampp\htdocs\Innerjoin\user\comment.php on line 103
newnav.php code

<div class="dropdown" id="idnav">
<a href="#" class="d-flex align-items-center link-body-emphasis text-decoration-none dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
<img src="../img/eslava.jpg" alt="" width="50" height="45" class=" p-1 me-2 rounded-5">
<strong><?php echo $username; ?></strong>
</a>
<ul class="dropdown-menu text-small shadow" id="idnav">
<li><a class="dropdown-item" href="#"></a></li>
<li><a class="dropdown-item" href="#">Settings</a></li>
<li><a class="dropdown-item" href="#">Edit Profile</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="../user/logout.php">Sign out</a></li>
</ul>
</div>

comment.php code
mysqli_query($con,"insert into comment (comment,date_posted,user_id,comment_id) values ('$comment_content','".strtotime(date("Y-m-d h:i:sa"))."','$user_id','$post_id')") or die (mysqli_error());
header('location: newnav.php');
exit();
}
 
ganito error ko po

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\Innerjoin\partials\newnav.php:105) in C:\xampp\htdocs\Innerjoin\user\comment.php on line 103
newnav.php code

<div class="dropdown" id="idnav">
<a href="#" class="d-flex align-items-center link-body-emphasis text-decoration-none dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
<img src="../img/eslava.jpg" alt="" width="50" height="45" class=" p-1 me-2 rounded-5">
<strong><?php echo $username; ?></strong>
</a>
<ul class="dropdown-menu text-small shadow" id="idnav">
<li><a class="dropdown-item" href="#"></a></li>
<li><a class="dropdown-item" href="#">Settings</a></li>
<li><a class="dropdown-item" href="#">Edit Profile</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="../user/logout.php">Sign out</a></li>
</ul>
</div>

comment.php code
mysqli_query($con,"insert into comment (comment,date_posted,user_id,comment_id) values ('$comment_content','".strtotime(date("Y-m-d h:i:sa"))."','$user_id','$post_id')") or die (mysqli_error());
header('location: newnav.php');
exit();
}
Ang error na "Cannot modify header information - headers already sent" ay nangyayari kapag mayroong output na naipadala na sa browser bago mo pa ma-redirect gamit ang header function. Sa iyong code, ang error ay nagmumula sa output na nanggagaling sa "partials/newnav.php" na file sa line 105.

Para malutas ito, kailangan mong siguraduhin na walang output na ipinapadala sa browser bago mo ma-redirect ang page gamit ang header function. Ito ay dahil ang header function ay nangangailangan ng walang ibang output maliban sa mga HTTP headers.

Maaaring solusyonan mo ang problema sa
 
Ang error na "Cannot modify header information - headers already sent" ay nangyayari kapag mayroong output na naipadala na sa browser bago mo pa ma-redirect gamit ang header function. Sa iyong code, ang error ay nagmumula sa output na nanggagaling sa "partials/newnav.php" na file sa line 105.

Para malutas ito, kailangan mong siguraduhin na walang output na ipinapadala sa browser bago mo ma-redirect ang page gamit ang header function. Ito ay dahil ang header function ay nangangailangan ng walang ibang output maliban sa mga HTTP headers.

Maaaring solusyonan mo ang problema sa
sa ?
 
Ang error na "Cannot modify header information - headers already sent" ay nagmumula sa output na nanggagaling sa "partials/newnav.php" na file sa line 105. Ang error na ito ay nangyayari kapag mayroong output na naipadala na sa browser bago mo pa ma-redirect ang page gamit ang header function.

Para malutas ito, kailangan mong siguraduhin na walang output na ipinapadala sa browser bago mo ma-redirect ang page. Maaaring solusyonan mo ang problema sa pamamagitan ng mga sumusunod na hakbang:

1. Tiyaking wala kang whitespace o espasyo sa simula ng "partials/newnav.php" file bago ang opening PHP tag <?php. Kung mayroon, alisin ito upang iwasan ang output na hindi kailangan.

2. Siguraduhin na wala kang ibang output na nanggagaling sa "partials/newnav.php" file maliban sa PHP code. Hindi dapat magkaroon ng mga HTML, text, o kahit anong output bago ang opening PHP tag o pagkatapos ng closing PHP tag.

3. Kung mayroon kang ibang include o require statements sa "comment.php" na nagrerequire o nag-iinclude ng "partials/newnav.php" file, siguraduhin na wala ring output na nanggagaling sa mga files na iyon bago mo ma-redirect ang page.

4. Kung hindi mo mahanap ang pinagmumulan ng output, maaaring gumamit ka ng output buffering. Ilagay ang ob_start() function sa simula ng "comment.php" file bago ang anumang output at ang ob_end_flush() function bago ang redirect code. Ito ay magbibigay ng temporary na buffer sa output ng script.

Narito ang updated na code ng "comment.php" na naglalaman ng output buffering:

PHP:
<?php
ob_start();

if (isset($_POST['comment'])){
    $comment_content = $_POST['comment_content'];
    $post_id=$_POST['id'];

    mysqli_query($con,"insert into comment (comment,date_posted,user_id,comment_id) values ('$comment_content','".strtotime(date("Y-m-d h:i:sa"))."','$user_id','$post_id')") or die (mysqli_error());
   
    // Redirect pagkatapos ng pag-insert ng comment
    header('Location: newnav.php');
    exit();
}

ob_end_flush();
?>

Subukan ang mga hakbang na ito upang malutas ang "Cannot modify header information - headers already sent" error.
 

Similar threads

Back
Top