我收到了以下代码:
<?php
require('connect.php');
if(isset($_GET['region'])) {
$region = mysql_real_escape_string($_GET['region']);
if ($region == "eu") {
$rows = mysql_fetch_array(mysql_query("SELECT * FROM `daily_leaderboard_eu`"));
} elseif ($region == "na") {
$rows = mysql_fetch_array(mysql_query("SELECT * FROM `daily_leaderboard_na`"));
}
} else {
$rows = mysql_fetch_array(mysql_query("SELECT * FROM `daily_leaderboard_eu`"));
}
?>
<table>
<tr>
<td>Rank</td>
<td>Points</td>
</tr>
<tr>
<?
if(empty($rows)){
echo '<td colspan="5">We are unable to provide data at the moment!</td>';
} else {
foreach($rows as $row){?>
<td><?=$row['rank']?></td>
<td><?=$row['points']?></td>
<?}
}
?>
</tr>
</table>
代码应该获取整个daily_leaderboard_X
表,然后将数据呈现在一个简单的表中。然而,由于我收到以下错误,它无法正常工作:
警告:第29行/home/bbb/public_html/pvp/index.php中的非法字符串偏移'排名'
5
警告:第30行/home/bbb/public_html/pvp/index.php中的非法字符串偏移'点'
5
图片:http://i.gyazo.com/b1ec034e7d0d906fb81c8175300f288c.png
有人可以指出我的错误以及如何解决它吗?
答案 0 :(得分:1)
当你这样做时
$rows = mysql_fetch_array(mysql_query("SELECT * FROM `daily_leaderboard_eu`"));
您正在从查询结果中选择一行。然后当你这样做
foreach($rows as $row){?>
您正在迭代行中的值。所以当你这样做时
$row['rank']
$row
不是一个数组,它是一个字符串,所以PHP期待一个数字索引。这就是为什么你看到&#34;警告:非法字符串偏移&#34;。您可以通过将查询与提取分开来解决此问题,因此在顶部您只需
$rows = mysql_query("SELECT * FROM `daily_leaderboard_eu`");
然后,您可以将foreach循环更改为while循环,并一次获取一行。
while ($row = mysql_fetch_array($rows)) {?>
然后$row
实际上是一个数组并按预期工作。
答案 1 :(得分:0)
据说这里有一个错字:
哪里&#34;点&#34;和&#34;排名&#34;不正确的值。
这就是你避免这种麻烦的方法:
if(isset($_GET['region'])) {
$region = mysql_real_escape_string($_GET['region']);
if ($region == "eu") {
$sql = "SELECT `rank`,`points` FROM `daily_leaderboard_eu`");
}
elseif ($region == "na") {
$sql = mysql_query("SELECT `rank`,`points` FROM `daily_leaderboard_na`");
}
else {
$sql = "SELECT `rank`,`points` FROM `daily_leaderboard_eu`");
}
$results = mysql_query($sql);
$rows = mysql_num_rows($results);
if($rows == 1)){
echo '<p>We are unable to provide data at the moment!</p>';
}
else {
echo '<table><tr><td>Rank</td><td>Points</td></tr><tr>';
while($row = mysql_fetch_array($results,MYSQL_NUM));
echo "<td>$row[0]</td><td>$row[1]</td>";
}
echo '</tr></table>';
}
}