mrsexy
@mrsexy
Senior Pomidor

Как ограничить кол-во записей в таблицу и обновление записей в бд из xml на странице через Ajax?

Доброго времени суток!

Задача в состоит в следующем:
1) Нужно ограничить парсинг новостей в N-количестве(последних записей) в базу.
2) Пока не знаю как сделать "switchCase" для замены ссылки xml, при клике на странице RU/ENG к примеру. Чтобы сменить язык ленты.
3) Кнопка обновления статей из БД через Ajax, чтобы не обновлять страницу.

Вот что накалякал сам, в силу своих знаний. Буду рад любой помощи, даже оптимизации кода.

PHP
<?
//.... Подключение к бд 

$xmlURL = "https://bash.im/rss/"; //левая ссылка для примера

$sxml = simplexml_load_file($xmlURL);

foreach($sxml->channel->item as $item) {
  $id = stripcslashes($item);
  $title = stripslashes($item->title);
  $link = stripslashes($item->link);
  $image = stripslashes($item->image);
  $description = stripslashes($item->description);
  $date = stripcslashes($item->pubDate);

  $query = mysqli_query($db, "SELECT COUNT(*) FROM news WHERE id='$title'");
  $item = mysqli_fetch_row($query);
  $total = $item[0];

  if ("$total" == 0) {
    $sql = mysqli_query($db, "INSERT INTO news (id, title, link, image, description, created_at) VALUES('$id', '$title', '$link', '$image', '$description', '$date')");
  } else if ("$total" > 0) {
    $sql2 = mysqli_query($db, "UPDATE news (id, title, link, image, description, created_at) VALUES('$id', '$title', '$link', '$image', '$description', '$date')");
  }
}

?>

HTML
<div class="rss-feed">
<?php
  $sql = mysqli_query($db, 'SELECT `title`, `link`, `description`, `created_at` FROM `news` ORDER BY `created_at` desc LIMIT 5');
  while ($result = mysqli_fetch_array($sql)) {
    echo '<div class="item">';
    echo '<h2><a href='.$result['link'].'>'.$result['title'].'</a></h2>';
    echo '<div class="description">'.$result['description'].'</div>';
    echo '<p class="datetime">'.$result['created_at'].'</p>';
    echo '</div>';
  }
?>
</div>
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ну для начала: $id = stripslashes($item) - это вообще ни к селу, ни к городу.
Тогда уж $id = mysqli_real_escape_string($db, stripslashes($item->title)) хотя бы.
А лучше $id = mysqli_real_escape_string($db, stripslashes($item->guid)). И изменить длину столбца `id` в базе.
И все входные данные пропустить через mysqi_real_escape_string($db, ...);

Далее, меняем на $query = mysqli_query($db, "SELECT COUNT(*) FROM news WHERE id='{$id}'");
И ещё, зачем делать лишний UPDATE записи, которая уже находится в базе, и по логике - полностью идентична новым данным?

А при обращении из AJAX (которого тут не приведено) отдавать только последние XX записей, вот и всё, нет проблем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы