PHP检查返回的所有行中是否存在变量

时间:2013-01-02 01:13:47

标签: php

我想检查一下我搜索的所有表行中是否存在用户ID。

编辑抱歉,我认为这是误导。 我想检查用户是否已阅读某个类别中的所有文章,我有一个论坛前端显示类别,类别内是文章。

在类别屏幕上我想显示一个图像所有文章读取或不读取所有文章,所以我需要循环浏览每个类别的所有文章,这是下面的示例查询正在做的,并检查用户ID存在于ALL返回的行中,如果是,那么如果有一些行缺少用户ID,那么所有文章都已被读取,那么有些文章尚未被阅读

这是我的SQL查询

$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? 我的想法是检查用户是否已阅读所有文章,如果是,则显示READ,如果没有显示UNREAD。

每行的结果类似于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 } ?>

任何帮助将不胜感激。 卡尔

1 个答案:

答案 0 :(得分:1)

首先,忘记mysql_*功能;从PHP 5.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 */
}