0

わかりましたので、ここに行きます..

「 7325823 $topic['is_new']」で構成され、accID が 63426 の場合、7325823|63426 に更新されますが、ページを再度リロードすると、7325823| が削除されます。そのため、63426 しかありません。私はそれを望んでいません。

どうしたの?それを理解することはできません

$accID = userid goes here;

$topic['is_new'] = "72482|81249|8124|42534|...and so on"; // user ids that i get from field in topics table
$list_of_ids = explode('|', $topic['is_new']); 

// lets see if the user has already been here
if (!in_array($accID, $list_of_ids)) {
$in = isset($topic['is_new']) && !in_array($accID, $list_of_ids) ?    $topic['is_new'].'|'.$accID : $topic['is_new'].'|'.$accID; 
} else {
// if he havent, add him to the list
$in = $accID;
}

// yes i know, PDO is better
mysqli_query("UPDATE topics
   SET num_views = num_views+1, is_new = '$in'
   WHERE id = $tid") or die(mysqli_error($link));

これは私が実装しようとしているものです:カスタム php フォーラム - 新しい/未読の投稿を表示する

4

3 に答える 3

0

「彼をリストに追加」コードは、リストに追加するのではなく、新しいユーザー ID でリストを上書きします。さらに、コードの「ユーザーが既にここにいるかどうかを確認する」側は、「if X then Y else Y」という形式です。

次のようなことを試してください:

$list_of_ids = $topic['is_new'] ? explode("|",$topic['is_new']) : array();
// above code ensures that we get an empty array instead of
//                              an array with "" when there are no IDS
if( !in_array($accID,$list_of_ids)) $list_of_ids[] = $accID;

$newIDstring = implode("|",$list_of_ids);
// do something with it.

とはいえ、あなたがしていることは非常に悪い考えです。ただし、プロジェクトについて詳しく知らなければ、何が良いアイデアかはわかりません。

于 2013-06-06T15:32:06.817 に答える
0

あなたの問題はif文にあります:

// lets see if the user has already been here
if (!in_array($accID, $list_of_ids)) {
    //if the user is not in the array, they are added here
    //your if here was returnign the same thing either way, so simplify
    $in = $topic['is_new'].'|'.$accID; 
} else {
    //HERE is your problem ... 
    //if the user is found in the array, you set $in to just the account id and update the database ... 
    //I would think you would not want to do anything here ... 
    //so comment out the next line
    //$in = $accID;
}
于 2013-06-06T15:32:39.583 に答える
0

これは私に飛びつきました、多分それは意図したものです。

$in = isset($topic['is_new']) && !in_array($accID, $list_of_ids) ?    $topic['is_new'].'|'.$accID : $topic['is_new'].'|'.$accID; 

結果は同じです。

? $topic['is_new'].'|'.$accID
: $topic['is_new'].'|'.$accID

ここでの次の(またはメインの)問題は、他に作業が必要です。

次のフローを検討してください。

$topic['is_new'] = '7325823';
$list_of_ids would contain 7325823
!in_array() so it appends it

ページの更新:

$topic['is_new'] = '7325823|63426';
$list_of_ids would contain 7325823, 63326
in_array() === true so $in = $accID

トピックは 63426 に更新されましたか?

于 2013-06-06T15:29:53.313 に答える