2012-04-14 2 views
0

Когда я отправляю комментарии, используя поле формы из цикла, конкретный идентификатор блога не переносится на скрипт php. Таким образом, комментарий не присваивается блогу, куда он должен идти.Значение идентификатора из MySql теряется во время цикла

<?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) для обеих петель ...

изменить ваш второй цикл выглядеть так:

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

и изменить все значения из второго результата $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); 

в конце концов, если я понял право, что вы пытаетесь достичь - чем ваш скрипт не подходит, второй запрос должен быть внутри первого цикла и содержать WHERE blogID={$row["ID"]} в конце

, если вы предпочитаете получать все комментарии в одном запросе - это хорошо, но вам нужно измените их, а затем покажите только релевантные для каждого «блога», когда вы выберете их во вложенном цикле - второй запрос даст вам только строки (потому что во второй раз - он будет уже пустым)

+0

попробовал это, не исправил его – ozzysmith

+0

исправить отступы своего сценария и предоставить имена столбцов таблиц ... очень сложно понять, что вы пытались там сделать –

+0

взглянуть на скрипт, который я вставил, и заметить что я говорю после .. похоже, что ваш порядок действий неправильный –

1

Это потому что вы переписываете переменную $ row внутренним циклом while(). Измените имя внутренней переменной от $ row до $ sub, и вы увидите, что поведение работает так, как ожидалось.

Смежные вопросы