我非常接近于解决我从表中获取一些数据的问题,基本上我有一个users表、一个category表和一个join表,这些表的外键分配给了users表中的user_id和cats表中获取的cat_id。
我基本上想显示不同的类别,如果它们已经分配给你,并且在我的数据库中的联接表中,我可以选择一个用户id和猫id,并且它在一行中有自己的id。我面临的问题是在登录时让这些类别显示在用户id上?
这是我到目前为止的代码:
<?php
require ('../db_con.php');
error_reporting(E_ALL);
ini_set('display_errors', '1');
// BUILD AND DISPLAY THE CATEGORY LIST (RICOH BUILD)
function build_cat_list()
{
global $dbc;
$user = $_SESSION['user'];
$q = sprintf("
SELECT
count(*)
FROM
cats
INNER JOIN
user_cat_join
ON
cats.cat_id = user_cat_join.cat_id
WHERE
user_cat_join.user_id = '%s'
",
mysqli_real_escape_string($dbc, $user)
);
$r = mysqli_query ($dbc, $q); // Run the query.
// FETCH AND PRINT ALL THE RECORDS
while ($row = mysqli_fetch_array($r)) {
echo '
<a href="view_cat.php?cat_id='.$row["cat_id"].'">
<div class="indexBox"">
<div class="indexBoxHeader" style="background-color:'.$row["cat_color"].'"><p>'
.$row["cat_icon"].'</p>
</div>
<div class="indexBoxFooter">
<p>'.$row["cat_name"].'</p>
</div>
</div>
</a>';
}
}
?>
目前,它正在运行整个脚本,因为它所做的是构建一个小盒子,盒子上印有图标、背景色和名字。但现在它呈现了盒子,但告诉我有一些未定义的变量,我知道错误意味着什么,但很难克服它?
Notice: Undefined index: cat_id in C:MAMPhtdocsfunctionsfunctions.inc.php on line 36
Notice: Undefined index: cat_color in C:MAMPhtdocsfunctionsfunctions.inc.php on line 38
Notice: Undefined index: cat_icon in C:MAMPhtdocsfunctionsfunctions.inc.php on line 39
Notice: Undefined index: cat_name in C:MAMPhtdocsfunctionsfunctions.inc.php on line 42
当然,上面的变量指的是它实际渲染出盒子的底部。如果我使用count(*)
,它只会向我显示这些未定义的变量,但如果我指定它们,如cat_name、cat_color等,我不会得到任何错误?
更改查询以选择实际要使用的列
$q = sprintf("
SELECT
cats.cat_id,cat_color,cat_icon, cat_name
FROM cats
INNER JOIN user_cat_join
ON cats.cat_id = user_cat_join.cat_id
WHERE user_cat_join.user_id = '%s'
",
mysqli_real_escape_string($dbc, $user) );
最好在这里使用一个事先准备好的语句,但要保持简单!
使用运行查询
$r = mysqli_query($dbc,$q)
or die ("Couldn't execute query: ".mysqli_error($dbc));
这将为您提供查询遇到错误的报告,您可以相应地调整查询
按照RiggsPoly所说的更改查询,并检查$user值是否正确。
根据您的注释,您将向脚本中的查询传递一个与您在phpmyadmin中测试的值不同的值。您代码中的$user可能是:
- 要放入查询中的值错误
- 正确的值,但没有数据
在phpmyadmin中运行查询,并在代码中返回$user值,您就会了解您的情况