PHP检查返回的所有行中是否存在变量
我想检查我搜索的所有表行中是否都存在用户id 对不起,我想我错了。 我想检查用户是否阅读了一个类别中的所有文章,我有一个论坛前端显示的类别和类别内的文章 在分类屏幕上,我想显示一个图像,显示所有文章已阅读或未阅读的所有文章,下面的示例查询就是这样做的,我需要循环遍历每个类别的所有文章,并检查所有返回的行中是否存在用户id如果是,则所有文章都已阅读如果有一些行缺少用户id,则一些文章尚未阅读 这是我的sql查询PHP检查返回的所有行中是否存在变量,php,Php,我想检查我搜索的所有表行中是否都存在用户id 对不起,我想我错了。 我想检查用户是否阅读了一个类别中的所有文章,我有一个论坛前端显示的类别和类别内的文章 在分类屏幕上,我想显示一个图像,显示所有文章已阅读或未阅读的所有文章,下面的示例查询就是这样做的,我需要循环遍历每个类别的所有文章,并检查所有返回的行中是否存在用户id如果是,则所有文章都已阅读如果有一些行缺少用户id,则一些文章尚未阅读 这是我的sql查询 $colname_readposts = "-1"; if (isset($_GET[
$colname_readposts = "-1";
if (isset($_GET['Thread_Category_Article_id'])) {
$colname_readposts = $_GET['Thread_Category_Article_id'];
}
mysql_select_db($database_test, $test);
$query_readposts = sprintf("SELECT Thread_Article_User_Read FROM Thread_Articles WHERE Thread_Category_Article_id = %s", GetSQLValueString($colname_readposts, "int"));
$readposts = mysql_query($query_readposts, $cutthroats) or die(mysql_error());
$row_readposts = mysql_fetch_assoc($readposts);
$totalRows_readposts = mysql_num_rows($readposts);
如何检查返回的所有行是否都包含用户id?
其目的是检查用户是否阅读了所有文章,如果是,则显示已读,如果否,则显示未读
每行的结果类似于0,15,20,37,这是用户查看帖子时输入的id。
我已成功获取了一篇文章的此检查,以显示用户是否阅读了特定文章,但不确定如何检查多篇:
这是我的单件支票:
<?php
$userid = $_SESSION['loggedin_id'];
$userreadlist = $row_readposts['Thread_Article_User_Read'];
$myarray = (explode(',',$userreadlist));
if (in_array($userid,$myarray )){
?>
html image READ
<?php } else { ?>
html image UNREAD
<?php } ?>
html图像读取
html图像未读
任何帮助都将不胜感激。
Carl首先,忘记
mysql.*
函数;从PHP5.5开始,ext/mysql是一个不推荐使用的API,因此使用mysqli或PDO是一个非常好的主意
从我收集的信息来看,你实际上是想看看这些结果中是否有特定用户的id?如果是,请在SQL查询中执行以下操作:
SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s AND UserID = %s
并将用户ID作为第二个参数提供。(语法可能不是100%正确,但应该证明这一点)
如果您的意思是要检查是否存在任何用户的ID,请再次检查;在SQL中执行此操作:
SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s AND UserID IS NOT NULL
这将确保“UserID”的值有效
如果您的解决方案基于以下示例之一,那么自然地将“UserID”替换为您的列名
但是,如果您要从一个表中转储所有结果,并且您需要查看您的用户ID是否存在于某个列中(像您一样!);然后,您可以调整您在单个文章页面上使用的逻辑。这应该给你这样的东西
$userid = $_SESSION['loggedin_id'];
$colname_readposts = "-1";
if (isset($_GET['Thread_Category_Article_id'])) {
$colname_readposts = $_GET['Thread_Category_Article_id'];
}
/* connect to db and run query; CHANGE ME TO SOMETHING NOT DEPRECATED */
mysql_select_db($database_test, $test);
$query_readposts =
sprintf("SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s", GetSQLValueString($colname_readposts, "int"));
$readposts = mysql_query($query_readposts, $cutthroats) or die(mysql_error());
/* loop through all returned items */
while($row = mysql_fetch_assoc($readposts)) {
/* repeat the check you used on an individual
row on the single article page. i.e: */
$userreadlist = $row['Thread_Article_User_Read'];
$myarray = (explode(',',$userreadlist));
if (in_array($userid,$myarray )){
/* user has read */
} else {
/* user hasn't read */
}
}
如果你为一页代码工作,那么它应该在上面工作;对于循环的每一次迭代,您都在一行上工作,就像您在单个页面上一样。如果数据来自同一个表,那么列名等将匹配,它将工作
或者,如果你只是想知道是否有任何未读的帖子,用这个替换循环
/* loop through all returned items */
$read = true;
while($row = mysql_fetch_assoc($readposts)) {
/* repeat the check you used on an individual
row on the single article page. i.e: */
$userreadlist = $row['Thread_Article_User_Read'];
$myarray = (explode(',',$userreadlist));
if (! in_array($userid,$myarray )){
$read = false;
break;
}
}
if( $read ){
/* all pages are read */
} else {
/* there are unread pages */
}
首先,忘记
mysql.*
函数;从PHP5.5开始,ext/mysql是一个不推荐使用的API,因此使用mysqli或PDO是一个非常好的主意
从我收集的信息来看,你实际上是想看看这些结果中是否有特定用户的id?如果是,请在SQL查询中执行以下操作:
SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s AND UserID = %s
并将用户ID作为第二个参数提供。(语法可能不是100%正确,但应该证明这一点)
如果您的意思是要检查是否存在任何用户的ID,请再次检查;在SQL中执行此操作:
SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s AND UserID IS NOT NULL
这将确保“UserID”的值有效
如果您的解决方案基于以下示例之一,那么自然地将“UserID”替换为您的列名
但是,如果您要从一个表中转储所有结果,并且您需要查看您的用户ID是否存在于某个列中(像您一样!);然后,您可以调整您在单个文章页面上使用的逻辑。这应该给你这样的东西
$userid = $_SESSION['loggedin_id'];
$colname_readposts = "-1";
if (isset($_GET['Thread_Category_Article_id'])) {
$colname_readposts = $_GET['Thread_Category_Article_id'];
}
/* connect to db and run query; CHANGE ME TO SOMETHING NOT DEPRECATED */
mysql_select_db($database_test, $test);
$query_readposts =
sprintf("SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s", GetSQLValueString($colname_readposts, "int"));
$readposts = mysql_query($query_readposts, $cutthroats) or die(mysql_error());
/* loop through all returned items */
while($row = mysql_fetch_assoc($readposts)) {
/* repeat the check you used on an individual
row on the single article page. i.e: */
$userreadlist = $row['Thread_Article_User_Read'];
$myarray = (explode(',',$userreadlist));
if (in_array($userid,$myarray )){
/* user has read */
} else {
/* user hasn't read */
}
}
如果你为一页代码工作,那么它应该在上面工作;对于循环的每一次迭代,您都在一行上工作,就像您在单个页面上一样。如果数据来自同一个表,那么列名等将匹配,它将工作
或者,如果你只是想知道是否有任何未读的帖子,用这个替换循环
/* loop through all returned items */
$read = true;
while($row = mysql_fetch_assoc($readposts)) {
/* repeat the check you used on an individual
row on the single article page. i.e: */
$userreadlist = $row['Thread_Article_User_Read'];
$myarray = (explode(',',$userreadlist));
if (! in_array($userid,$myarray )){
$read = false;
break;
}
}
if( $read ){
/* all pages are read */
} else {
/* there are unread pages */
}
您好,Fergus,感谢tho关于折旧的建议我是PHP的业余爱好者,所以我将对此进行研究,我认为这将在将来给我带来问题,应该更新我的代码吗?我还更新了我的问题,因为它的措辞不是很好嘿,卡尔,别担心-我想我已经发布了一些有用的东西。基本上,
mysql\uuu
函数已经慢慢地被淘汰了,而且从最新的PHP版本开始,它们就不受支持了。因此,当最新版本的PHP成为主流时,这最终将成为一个问题。然而,将代码传输到使用中是非常简单的,尽管最终您可能会想看看哪个非常好,并且有一些方便的特性!另外,忘了另一个删除了他的答案的帖子是怎么说的吧——一个额外的逗号对于检查数组中是否有值并没有任何影响。您只需在数组中获得一个额外的项,它是一个空白字符串<代码>“”。无论explode()
返回什么,都可以在数组()中通过
没有问题;Hi Fergus,我测试了它,它可以工作,但它会在循环次数上重复读取或未读取这是我的测试页面这是我阅读的例子,因为我已经阅读了所有帖子Hi Fergus,感谢关于折旧的建议我是PHP的业余爱好者,所以我将对此进行研究,我认为这将导致我在未来的问题,应该更新我的代码?我还更新了我的问题,因为它的措辞不是很好嘿,卡尔,别担心-我想我已经发布了一些有用的东西。基本上,mysql\uuu
函数已经慢慢地被淘汰了,而且从最新的PHP版本开始,它们就不受支持了。因此,当最新版本的PHP成为主流时,这最终将成为一个问题。然而,将代码传输到使用中是非常简单的,尽管最终您可能会想查看