2016-04-13 2 views
0

У меня есть эти таблицы, и я хочу получать новости из таблицы новостей, но новости, которые были добавлены после того, как пользователь зарегистрировался в &, он не видел данные. В зависимости от запроса, который показан в скрипте PHP.Запрос TimeStamp в PHP и MySql ОБНОВЛЕНО

Пользователи Когда они регистрируются в системе, они регистрируют свою отметку времени входа в систему. Через некоторое время служба запрашивает сервер о новых данных для этого User_ID и проверяет увиденную таблицу, если новость отсутствует в просмотренной таблице, а текущая метка времени больше, чем зарегистрированная метка времени, тогда новость является новой.

Пользователи Таблица

User_ID | User_Name |User_Login 
------------------------------- 
1  | John  |2016-04-13 16:01:12 
2  | Carl  |2016-04-13 16:13:22 
3  | Tomas  |2016-04-13 16:01:01 
4  | Adam  |2016-04-13 16:04:44 
5  | Nancy  |2016-04-13 16:04:37 

Новости Таблица

News_ID | News_Text  | News_Post_TimeStamp   
---------------------------------------------- 
1  | Hello World | 2016-04-13 16:09:23 
2  | This is My car | 2016-04-13 16:10:24 
3  | I had Ate pizza| 2016-04-13 16:11:40 
4  | Leave Me Alone | 2016-04-13 16:15:30 
5  | C++ Programming| 2016-04-13 16:09:50 

Seen Таблица

ID | User_Id | News_Id 
--------------------------- 
1 | 1  | 2 
2 | 1  | 3 
3 | 4  | 1 
4 | 5  | 3 
5 | 1  | 4 

UPDATE Это мой PHP скрипт Код:

<?php 

require('config.php'); 
$conn = mysqli_connect($servername, $username, $password, $db); 
$query="SELECT * FROM news,users WHERE news.news_id NOT IN (SELECT news_id FROM seen WHERE user_id = '".$_GET['id']."') AND users.user_login<Now() "; 


$result = mysqli_query($conn,$query); 
$rows = array(); 
echo mysqli_error($conn); 

while($row = mysqli_fetch_assoc($result)) { 

    $rows[] = $row; 
} 

echo json_encode($rows); 
?> 

и это формат JSON:

[{"News_id":"1","News_Text":"C++programming","news_post_timestamp":"2016-  04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"1","News_Text":"C++programming","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"2","News_Text":"Pizza","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"2","News_Text":"Pizza","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"3","News_Text":"Android","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"3","News_Text":"Android","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"4","News_Text":"Ahmad","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"4","News_Text":"Ahmad","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"5","News_Text":"Toto","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"5","News_Text":"Toto","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"6","News_Text":"JaVA","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"6","News_Text":"JaVA","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"7","News_Text":"Computer","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"7","News_Text":"Computer","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"8","News_Text":"Test","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"8","News_Text":"Test","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"9","News_Text":"Test","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"9","News_Text":"Test","news_post_timestamp":"2016-04-13 16:09:41","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"},{"News_id":"10","News_Text":"Al Hasasd","news_post_timestamp":"2016-04-13 16:47:44","User_Id":"14","User_Name":"John","user_login":"2016-04-13 16:04:37"},{"News_id":"10","News_Text":"Al Hasasd","news_post_timestamp":"2016-04-13 16:47:44","User_Id":"15","User_Name":"Carl","user_login":"2016-04-13 16:04:37"}] 

Существует дубликат в результатах, если кто-нибудь может сказать мне, как удалить дубликаты?

+0

Примечание. Если '$ _GET ['id']' получен из пользовательского ввода ** не доверенный **, я бы предложил добавить удаление html, прежде чем вставлять его в ваш запрос, чтобы предотвратить инъекции. – KDOT

ответ

0

Ваш SQL должен быть таким (Exemple с user_id 1)

SELECT * 
FROM news n 
WHERE news_id NOT IN (SELECT news_id FROM news_seen WHERE user_id = 1) 
AND News_Post_TimeStamp > (SELECT User_Login FROM user_table WHERE User_ID = 1) 

(адаптировать user_table соответственно)


Но до просто сделать это, вы должны адаптировать свой PHP код, потому что вы делают это приглашение на SQL-инъекцию.

В идеале вы должны использовать parameterized queries.

Но, если ваш USER_ID равен CHAR, поскольку у вас были котировки в вашем запросе, вы можете просто сделать свой код более безопасным, используя эту простую функцию sanitize, которую я добавил в ваш код.

<?php 

require('config.php'); 
$conn = mysqli_connect($servername, $username, $password, $db); 

$userid = sanitize($_GET['id']); 
$query="SELECT * FROM news WHERE news_id NOT IN (SELECT news_id FROM news_seen WHERE user_id = '$userid') AND News_Post_TimeStamp > (SELECT User_Login FROM user_table WHERE User_ID = '$userid')"; 

$result = mysqli_query($conn,$query); 
$rows = array(); 
echo mysqli_error($conn); 

while($row = mysqli_fetch_assoc($result)) { 
    $rows[] = $row; 
} 

echo json_encode($rows); 




function sanitize($data) 
{ 
    // remove whitespaces (not a must though) 
    $data = trim($data); 

    // apply stripslashes if magic_quotes_gpc is enabled 
    if(get_magic_quotes_gpc()) 
    { 
    $data = stripslashes($data); 
    } 

    // a mySQL connection is required before using this function 
    $data = mysql_real_escape_string($data); 

    return $data; 
} 



?> 
+0

Это не работает, оно дает мне пустой массив Json –

+0

Что произойдет, если вы выполните SQL в phpmyadmin? –

Смежные вопросы