我用php / mysql创建一个简单的留言板。用户输入他们的名字和消息,javascript立即显示消息,php / mysql将其存储在数据库中。页面加载时,它应该以格式化列表显示数据库中的所有消息。
然而,似乎我的php只是任意显示一些消息。它们按照正确的时间顺序排列,但有些缺失,只显示其中的4个。手动查看数据库中的条目,我可以看到发布的消息确实存储在他们的表中。它们并非全部显示。奇怪的。
显示消息的HTML / PHP:
<?php
$records = getMessages(); //see getMessages() function below
$names = $records["names"];
$messages = $records["messages"];
$dates = $records["dates"];
for($i = count($records); $i > 0; $i--){ ?>
<div class="message">
<p class="message_txt"><?php echo $messages[$i];?></p>
<div>
<div class="message_name">
<?php echo $names[$i];?>
</div>
<div class="message_date">
<small>
<?php
echo "Posted on ";
echo date("F j, Y",strtotime($dates[$i]));
?>
</small>
</div>
</div>
</div>
<?php } ?>
继承上面的getMessages()函数:
function getMessages(){
$conn = connect("wedding");
$ids;
$names;
$messages;
$dates;
$get_messages_query = "SELECT id, name, message, date
FROM messages;";
$get_messages_result = mysql_query($get_messages_query,$conn) or die(mysql_error());
$i = 0;
while($row = mysql_fetch_array($get_messages_result)){
$ids[$i] = $row["id"];
$names[$i] = $row["name"];
$messages[$i] = $row["message"];
$dates[$i] = $row["date"];
$i++;
}
$entries = array("ids" => $ids,
"names" => $names,
"messages" => $messages,
"dates" => $dates
);
return $entries;
}
这是输出:
<div class="message">
<p class="message_txt">Yo this is a message</p>
<div>
<div class="message_name">Bob</div>
<div class="message_date"><small>Posted on September 18, 2010</small></div>
</div>
</div>
<div class="message">
<p class="message_txt">This is a message another</p>
<div>
<div class="message_name">Andrew</div>
<div class="message_date"><small>Posted on September 6, 2010</small></div>
</div>
</div>
<div class="message">
<p class="message_txt">And another message</p>
<div>
<div class="message_name">Andrew</div>
<div class="message_date"><small>Posted on September 6, 2010</small></div>
</div>
</div>
<div class="message">
<p class="message_txt">This is a message</p>
<div>
<div class="message_name">Andrew</div>
<div class="message_date"><small>Posted on August 27, 2010</small></div>
</div>
</div>
我不确定这里发生了什么。看起来很简单。我想这可能是我看不到的一些小的愚蠢错误......但是我看不到它。
任何帮助都将不胜感激。
答案 0 :(得分:0)
原因是你只是明确地循环到4:
for($i = count($records);
记录是包含4个数组的变量(ids,名称,消息,日期)。每个数组都可能包含正确数量的消息,但您在records
上限制了循环。
下次的其他注意事项:
修改您的SQL语句以明确地订购这些记录。您可能会按照预期的顺序看到它们,但如果您没有明确说明您希望的顺序,则不能保证任何RDBMS。也许:SELECT ... FROM... ORDER BY date DESC
?
for
循环从底部开始。结合明确的ORDER BY
,请考虑使用
for($i = 0; i<=count($records); $i++)
echo
输出每个数组的计数(名称,消息,日期)。这是否符合您对数据库查询的期望?
答案 1 :(得分:0)
我建议在getMessages()函数中添加2个var_dump()函数(或fb()(如果使用FirePHP),以查看发生了什么。
function getMessages(){
$conn = connect("wedding");
$ids;
$names;
$messages;
$dates;
$get_messages_query = "SELECT id, name, message, date
FROM messages;";
$get_messages_result = mysql_query($get_messages_query,$conn) or die(mysql_error());
$i = 0;
while($row = mysql_fetch_array($get_messages_result)){
$ids[$i] = $row["id"];
$names[$i] = $row["name"];
$messages[$i] = $row["message"];
$dates[$i] = $row["date"];
$i++;var_dump($i);
}
$entries = array("ids" => $ids,
"names" => $names,
"messages" => $messages,
"dates" => $dates
); var_dump($entries);
return $entries;
}