我正在尝试根据存储在2个MYSQL表中的内容创建用户评级系统。
一个表称为“图像标记”,另一个表称为“标记”。
我想检查“authorid”行,这两个表中的行相同,它根据用户的“authorid”存储一个数字。
我希望根据表格“markers”和“imagemarkers”中“authorid”中找到特定用户ID号的次数来显示特定图像。
这是在页面顶部声明:
$theID = $_GET['id'];
我到目前为止的代码是:
<? $img0 = "<img src='../webimages/0star.png'>";
$img1 = "<img src='../webimages/1star.png'>";
$img2 = "<img src='../webimages/2star.png'>";
$img3 = "<img src='../webimages/3star.png'>";
$img4 = "<img src='../webimages/4star.png'>";
$img5 = "<img src='../webimages/5star.png'>"; ?>
<? $result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = $theID");
$rows = mysql_num_rows($result3); ?>
<?php
while($row = mysql_fetch_array($result3)){
if ($result3 > 1) {
echo "$img1";
} elseif ($result3 == 5) {
echo "$img2";
} elseif ($result3 == 10) {
echo "$img3";
} elseif ($result3 == 20) {
echo "$img4";
} elseif ($result3 == 30) {
echo "$img5";
} else {
echo "$img0";
}
?>
<? } ?>
我的mysql表行“authorid”存储为INT,11,并允许null勾选。
我得到的错误是:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource....
请帮我解决这个问题。 非常感谢你的时间。
更新,这是我的新代码,当它显示'$ img3'时,它仍然显示'$ img0':
<? $img0 = "<img src='../webimages/0star.png'>";
$img1 = "<img src='../webimages/1star.png'>";
$img2 = "<img src='../webimages/2star.png'>";
$img3 = "<img src='../webimages/3star.png'>";
$img4 = "<img src='../webimages/4star.png'>";
$img5 = "<img src='../webimages/5star.png'>"; ?>
<? $row[0] = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '". (int)$theID."'");
if ($row[0] > 1) {
echo "$img1";
} elseif ($row[0] > 5) {
echo "$img2";
} elseif ($row[0] > 10) {
echo "$img3";
} elseif ($row[0] > 20) {
echo "$img4";
} elseif ($row[0] > 30) {
echo "$img5";
} else {
echo "$img0";
}
?>
我正在计算特定用户编号显示的位置,并匹配'authorid'行中的'theID',来自两个表的imagemarkers'和'markers'。用户正在将其他数据存储在数据库中,并且通过存储,这将根据他们填写的形式填写“标记”和“图像标记”中的“authorid”行来存储信息。
我希望这可以帮助你理解我想要做的事情。
答案 0 :(得分:0)
在$theID
周围添加单引号,同时确保$ theID在整数前面检查为整数或位置(int):
$result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '".(int)$theID."'");
如果错误仍然发生,请替换为此,并查看您获得的错误:
$result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '".(int)$theID."'") or die(mysql_error());
因为$result3
不是mysql_num_rows的有效结果资源
答案 1 :(得分:0)
<?
$result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid=".(int)$theID.")";
$rows = mysql_num_rows($result3);
?>
答案 2 :(得分:0)
首先,如果两个表中都存在'authorid'行,则应在查询中指定,您指的是哪一个:
$theID = intval($_GET['id']); // to avoid SQL-injections
$result3 = mysql_query("SELECT * FROM `markers` m, `imagemarkers` im WHERE m.authorid = $theID AND im.authorid = $theID");
// m and im are just table-aliases for brevity, you can use whatever names you like
其次,在“while”循环中将$ result3替换为$ row [0]:
if ($row[0] > 1) { ...
最后,逻辑有问题。
你能解释一下完整的数据库结构,除了authorid之外还有哪些列?