2012-04-14 13 views
0

ループからフォームフィールドを使用してコメントを投稿すると、ブログの特定のIDはPHPスクリプトに引き継がれません。だからコメントは、それが行くつもりであるブログに割り当てられていません。MySqlのID値がwhileループで失われる

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

をし、2番目の結果から、すべての値を変更します。

<?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); 
?> 
+3

コードを正しくインデントすると、読みやすくなります。 – hakre

答えて

0

変更あなたの第二のループをとして見て...両方のループのために同じ変数($row)を使用してはいけません$row2["COLUMN_NAME"]

また、配列インデックスを引用符で囲むのを忘れないでください...それは動作しますが、通知を作成し、 Eビット難しく

すなわち:私はあなたが達成しようとしていた右のものを理解している場合、すべての後に

<?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); 

$row[username]$row["username"]

これはあなたのコードに少し順序を作ってみるされなければなりませんあなたのスクリプトは良くないですが、2番目のクエリは最初のループの内側にあり、末尾にWHERE blogID={$row["ID"]}を入れてください。

すべてのコメントを1つのクエリで取得したい場合は、それらを並べ替えて、それぞれの "ブログ"に関連するものだけをネストループで取得すると、2番目のクエリでは1行だけが返されます(2回目は既に空です)。

+0

それを修正しようとしました – ozzysmith

+0

スクリプトのインデントを修正し、テーブルの列名を提供してください...あなたがそこで何をしようとしているかを理解することは本当に難しいです –

+0

貼り付けられたスクリプトを見て、あなたの行動の順序が間違っているようだ。 –

1

It'sなぜなら$ row変数をinner while()ループで上書きしているからです。内部変数名を$ rowから$ subに変更すると、動作が期待どおりに機能することがわかります。

関連する問題