2013-06-06 6 views
0

Ok так что здесь мы идем ..Не могу понять это

Допустим, $topic['is_new'] состоит из «7325823» и 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)); 

Это то, что я пытаюсь implent: custom php forum - showing new/unread posts

+4

Вы пытаетесь сохранить то, что пользователь просмотрел какой нить, для каждого пользователя и каждого потока? Это 'O (N^M)' пространство, с которым вы имеете дело, которое просто требует неприятностей ... –

+0

У вас есть SQL в нижней части скрипта, где код, который фактически запускает этот SQL? Кроме того, ваш тернарный оператор (начало 'isset ($ topic ...' делает то же самое для обоих случаев, и поэтому является избыточным. – Pudge601

+0

@Kolink, ну у меня очень маленький форум, и я нашел это, и он был похож на хорошее простое решение: http://stackoverflow.com/questions/6374952/custom-php-forum-showing-new-unread-posts?answertab=active#tab-top – Johnny

ответ

0

Ваш код «добавить его в список» перезаписывает список новым идентификатором пользователя, а не добавляет его. Кроме того, ваша сторона «видеть, была ли здесь уже здесь», имеет форму «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. 

Это говорит, что вы делаете, это очень плохая идея. Я не могу сказать вам, что было бы хорошей идеей, не зная больше о вашем проекте.

+0

Я собираюсь отметить этот ответ, потому что он работает так, как я этого хотел. Но я, вероятно, займусь другим. Благодаря! – Johnny

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?

+0

Whataver $ accID (account_id). Если пользователь просматривает поток isnt in is_new я хочу разместить его accID там – Johnny

+0

Прочитайте поток снова, он будет перезаписан, удалите else и переместите sql в if (! In_array, так как вам не нужно его обновлять, если он уже там, правильно? – somedev

0

Ваш вопрос находится в вашем заявлении, если:

// 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; 
} 
Смежные вопросы