Почему неправильно работает условие?

Собственно есть новости на сайте, которые имеют краткое содержание и полное. Обращаюсь к полной новости следующим образом:

www.site.ru/?news=1

Сделал проверку на существование такого id в базе, которая работает нормально до тех пор, пока не удалить какую-либо новость из базы (абсолютно любую)! Начинает срабатывать условие при открытии любой полной новости
else{
echo "Нет такой новости!";
}

Код:

$get_news = (int)$_GET['news'];
$get_news = mysql_real_escape_string($get_news);
$title = $_POST['title'];
$description = $_POST['description'];
$full_description = $_POST['full_description'];
$id = $_POST['id'];




if($_POST['edit']){
        $query = mysql_query("UPDATE news SET title='$title',description='$description',full_description='$full_description' WHERE id='$id'");
        $error = "Новость успешно отредактирована!";
    }
    
    
if($_POST['delete']){
    $query = mysql_query("DELETE FROM news WHERE id=".$_POST['id']."");
}

if($_GET['edit']){
    $query = mysql_query("SELECT * FROM news WHERE id=".$_GET['edit']."");
    $row = mysql_fetch_assoc($query);
    
    echo '
        <h1>Редактирование новости</h1>
        '.$error.'
        <form method="POST">
        <input type="hidden" name="id" value="'.$row['id'].'"/>
        <input type="text" name="title" placeholder="Название новости" value="'.$row['title'].'" /><br />
        <textarea name="description" placeholder="Описание новости">'.$row['description'].'</textarea><br />
        <textarea name="full_description" placeholder="Полное описание новости">'.$row['full_description'].'</textarea><br />
        <input type="submit" name="edit" value="Сохранить" style="display:inline-block"/>
        </form>
        <form action="/">
        <input type="submit" value="Отмена" style="display:inline-block"/>
        </form>

        ';
}


if(!$get_news){
    $query = "SELECT * FROM news";
    
    $result = mysql_query($query);

    while($row = mysql_fetch_assoc($result)){
        echo '
        <a href="/?news='.$row['id'].'">'.$row['title'].'</a> (<a href="/?edit='.$row['id'].'">Редактировать</a> / 
        <form method="POST">
        <input type="hidden" name="id" value="'.$row[id].'"/>
        <input type="submit" name="delete" value="Удалить"/>
        </form>) <br><br>
        '.$row['description'].'<br><br>
        ';
    }
}
else{
  $query = mysql_query("SELECT COUNT(*) FROM news");
  $row = mysql_fetch_row($query);
    
if($get_news <= $row[0]){
   
    $query = mysql_query("SELECT * FROM news WHERE id='".$get_news."'");
    $row = mysql_fetch_assoc($query);
    
    echo '
        <div style="text-align: center; width: 800px;">
        <div>'.$row['title'].'</div>
        <div>'.$row['full_description'].'</div>
        </div>
    ';
}
else{
    echo "Нет такой новости!";
}  
}
  • Вопрос задан
  • 2214 просмотров
Пригласить эксперта
Ответы на вопрос 2
Satanpit
@Satanpit
Front-end developer
Интересная у вас проверка на существование, Вы id новости сравниваете с количеством всех статей :)
$query = mysql_query("SELECT COUNT(*) FROM news WHERE id='".$get_news."'"");
а проверять так if($row[0] > 0)

Но зачем Вам это, Вы можете проверять результат непосредственно этого запроса:
"SELECT * FROM news WHERE id='".$get_news."'"
а не делать отдельный запрос COUNT(*), в этом нет никакого смысла.
А еще очень советую Вам использовать PDO.
Ответ написан
by25
@by25
Веб-разработчик
Всегда нужно фильтровать параметры. У вас тут полно SQL-инъекций.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы