0

ループからフォーム フィールドを使用してコメントを投稿すると、ブログの特定の ID が php スクリプトに引き継がれません。そのため、コメントは本来のブログに割り当てられません。

<?php
$conn = mysql_connect("localhost", "ooze", "");
mysql_select_db ("ooze");
$result = mysql_query ("select * from blog") or die(mysql_error());
$result2 = mysql_query ("select * from blog, blogcomment where blog.ID = blogcomment.blogID") or die(mysql_error());
$i = 1;  
while($row = mysql_fetch_array($result))
{
echo "<h1>$row[title]</h1>";
echo "<p class ='second'>$row[blog_content]</p> "; 
echo "<p class='meta'>Posted by .... &nbsp;&bull;&nbsp; $row[date] &nbsp;&bull;&nbsp; <a href='#' onclick=\"toggle_visibility('something$i'); return false\">Comments</a><div id='something$i' style='display: none;'>";    
$i++;
while($row = mysql_fetch_array($result2))
{
echo "<p class='third' >$row[commentdate] &nbsp;&bull;&nbsp; $row[username]</p><p>said:</p> <p>$row[comment]</p>";
}
if ( isset ($_SESSION["gatekeeper"])) {
echo '<form method="post" name="result_'.$row["ID"].'" action="postcomment.php"><input name="ID" type = "hidden" value = "'.$row["ID"].'" /><input name="comment" id="comment" type="text" style="margin-left:20px;"/><input type="submit" value="Add comment" /></form>';
} 
else { 
echo '<p class="third"><a href="register.html">Signup </a>to post a comment</p>';
}
echo "</div>";
}
mysql_close($conn);
?>
4

2 に答える 2

1

$row 変数を内側の while() ループで上書きしているためです。内部変数名を $row から $sub に変更すると、期待どおりに動作することがわかります。

于 2012-04-14T14:56:42.757 に答える
0

$row両方のループに同じ変数 ( ) を使用しないでください...

2 番目のループを次のように変更します。

 while($row2 = mysql_fetch_array($result2)){...}

2 番目の結果のすべての値を次のように変更します。$row2["COLUMN_NAME"]

また、配列インデックスを引用符で囲むことを忘れないでください...動作しますが、通知が作成され、サーバーの動作が少し難しくなります

すなわち:$row[username]あるべきです$row["username"]

これは、コードを少し整理するための試みです。

<?php
$conn = mysql_connect("localhost", "ooze", "");
mysql_select_db ("ooze");
$result = mysql_query ("select * from blog") or die(mysql_error());
$result2 = mysql_query ("select * from blog, blogcomment where blog.ID = blogcomment.blogID") or die(mysql_error());
$i = 1;  
while($row = mysql_fetch_array($result)){
    echo <<<str
    <h1>{$row["title"]}</h1>
    <p class ='second'>{$row["blog_content"]}</p> 
    <p class='meta'>Posted by .... &nbsp;&bull;&nbsp; {$row["date"]} &nbsp;&bull;&nbsp; <a href='#' onclick=\"toggle_visibility('something{$i}'); return false\">Comments</a><div id='something{$i}' style='display: none;'>
str;

    $i++;
    while($comment = mysql_fetch_array($result2)){
         echo "<p class='third' >{$comment["commentdate"]} &nbsp;&bull;&nbsp; {$comment["username"]}</p><p>said:</p> <p>{$comment["comment"]}</p>";
    }
    if ( isset ($_SESSION["gatekeeper"])) {
        echo '<form method="post" name="result_'.$row["ID"].'" action="postcomment.php"><input name="ID" type = "hidden" value = "'.$row["ID"].'" /><input name="comment" id="comment" type="text" style="margin-left:20px;"/><input type="submit" value="Add comment" /></form>';
    } 
    else { 
        echo '<p class="third"><a href="register.html">Signup </a>to post a comment</p>';
    }
    echo "</div>";
}
mysql_close($conn);

結局のところ、あなたが達成しようとしていたことを正しく理解していれば、スクリプトが良くないというよりも、2番目のクエリは最初のループ内にありWHERE blogID={$row["ID"]}、最後に a を含める必要があります

1 つのクエリですべてのコメントを取得したい場合 - それは良いことですが、ネストされたループでそれらを取得するときに、それらを配置してから各「ブログ」に関連するもののみを表示する必要があります - 2 番目のクエリは行のみを提供しますもの(2回目-すでに空になるため)

于 2012-04-14T14:54:31.150 に答える