Как мне утвердить ожидающие записи?

Я работаю над веб-сайтом видеохостинга, на котором загруженные пользователями видео (называемые «ответами», поскольку они будут сделаны в ответ на запросы о помощи в создании хобби) помещаются в список ожидания, который веб-администратор может изучить и принять решение. одобрять для публичного просмотра или нет.

Все видеозаписи содержат логический фрагмент данных, называемый «утверждено», для которого установлено значение «истина» («1») или «ложь» («0»).

У меня проблемы с фактическим процессом утверждения. Независимо от того, что я делаю, я никогда не смогу установить статус видео "одобрено".

Вот код, который я написал ...

answer.php (Главная страница видео)

<a class = "btn btn-success btn-lg btn-block" href = "<?php echo url_for('/approve.php?id=' . h(u($answer['id']))); ?>"><i class = "mr-2 fas fa-check fa-2x"></i>Approve</a>

Approve.php

    if (!isset($_GET['id'])) {
      redirect_to(url_for('/pending.php'));
    }
    $id = $_GET['id'];


    if (is_post_request()) {

      $answer = [];
      $answer['id'] = $id;
      $answer['approved'] = $_POST['approved'];

      $result = approve_answer($id);
      $_SESSION['message'] = '<div class = "text-success">The answer was successfully approved and ready for public viewing.</div>';  
      redirect_to(url_for('/pending.php'));

    } else {
      $answer = find_answer_by_id($id);
      $user = find_user_by_id($answer['user_id']);
    }

    ?>
    <?php $page_title = 'Confirm Approval'; ?>
    <?php include(SHARED_PATH . '/public_header.php'); ?>


    <div class = "container my-2">
        <div class = "my-2">
        <a class = "back-link my-2" href = "<?php echo url_for('/answer.php?id=' . h(u($answer['id']))); ?>"><i class = "mr-2 fas fa-arrow-circle-left fa-2x"></i> Back to Answer</a>
        </div>

      <div class = "answer approve">
        <h1>Confirm Approval</h1>
        <p>Are you sure you want to approve this answer?</p>
          <p class = "item"><strong><?php echo h($answer['title']); ?></strong> by <emphasis><?php echo h($user['username']); ?></emphasis></p>
          <p><italics><?php echo h($answer['content']); ?></italics>

        <form action = "<?php echo url_for('/approve.php?id=' . h(u($answer['id']))); ?>" method = "post">
          <div id = "operations">
            <input type = "hidden" name = "approved" value = "1" />
            <input class = "btn btn-success btn-lg btn-block" type = "submit" name = "approved" id = "approved" value = "Confirm" />
          </div>
        </form>
      </div>

    </div><!-- container -->

функция Approve_answer (query_functions.php)

function approve_answer($answer) {
    global $db;

    $errors = validate_answer($answer);
    if (!empty($errors)) {
      return $errors;
    }


    $sql = "UPDATE answers SET ";
    $sql .= "approved='" . db_escape($db, '1') . "', ";
    $sql .= "WHERE id='" . db_escape($db, $answer['id']) . "' ";
    $sql .= "LIMIT 1";

    $result = mysqli_query($db, $sql);
    // For UPDATE statements, $result is true/false
    if ($result) {
      return true;
    } else {
      // UPDATE failed
      echo mysqli_error($db);
      db_disconnect($db);
      exit;
    }

  }

Так где я ошибся?

Я не верю, что вы можете указать LIMIT в таком запросе на обновление, если ID является первичным ключом, вам не нужно ограничение. Вы пытались выполнить запрос непосредственно в своей базе данных, чтобы увидеть какие-либо ошибки?

HelloSpeakman 13.04.2018 12:11

Нет, на самом деле нет.

user9608348 13.04.2018 12:17

Я бы порекомендовал протестировать ваш запрос и проверить, что он доходит до функции, которая выполняет запрос die($sql), я подозреваю, что LIMIT 1, вероятно, нарушает эту функцию.

HelloSpeakman 13.04.2018 12:19

Вы может указываете LIMIT в предложении UPDATE. dev.mysql.com/doc/refman/5.7/en/update.html

kchason 13.04.2018 12:25

Я исправился, но все же рекомендую проверить запрос. Я также заметил, что перед WHERE стоит запятая.

HelloSpeakman 13.04.2018 12:30

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

kchason 13.04.2018 12:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
1 999
2

Ответы 2

Замените приведенный ниже код на запрос.

$sql = "UPDATE answers SET ";
$sql .= "approved='" . db_escape('1') . "', ";
$sql .= "WHERE id='" . db_escape($answer['id']) . "' ";
$sql .= "LIMIT 1";

Какие? db_escape, скорее всего, является настраиваемой функцией, которая здесь не указана. Почему вы удалили переменную обработчика базы данных ($db) из списка аргументов? Как вы тестировали этот код? Это может сработать, но вам нужно объяснить, что это за изменения и почему OP должен их вносить.

kchason 13.04.2018 12:29

Здесь я видел, как использовалась функция db_escape. Что они делают, я не знаю, на самом деле hotexamples.com/examples/-/-/db_escape/…

Kamlesh Solanki 13.04.2018 12:42

Это всего лишь примеры в открытом исходном коде, не обязательно какова функция OP.

kchason 13.04.2018 13:00

Спасибо за ваши ответы. Мне еще предстоит применить ваше решение, так как я не понимаю, почему вы также удалили $ db. Видите ли, хотя это не указано в коде, которым я поделился с вами, $ db - это специальное сокращение для db_connect ();

user9608348 13.04.2018 13:02

Камлеш, я только что попробовал ваше решение и с сожалением должен сказать, что оно не решило мою проблему.

user9608348 13.04.2018 13:06
   if (!isset($_GET['id'])) {
      redirect_to(url_for('/pending.php'));
    }

    if (is_post_request()) {

      $result = approve_answer($_POST['id']);
      $_SESSION['message'] = '<div class = "text-success">The answer was successfully approved and ready for public viewing.</div>';  
      redirect_to(url_for('/pending.php'));

    } else {
      $answer = find_answer_by_id($_GET['id']);
      $user = find_user_by_id($answer['user_id']);
    }

    ?>
    <?php $page_title = 'Confirm Approval'; ?>
    <?php include(SHARED_PATH . '/public_header.php'); ?>


    <div class = "container my-2">
        <div class = "my-2">
        <a class = "back-link my-2" href = "<?php echo url_for('/answer.php?id=' . h(u($answer['id']))); ?>"><i class = "mr-2 fas fa-arrow-circle-left fa-2x"></i> Back to Answer</a>
        </div>

      <div class = "answer approve">
        <h1>Confirm Approval</h1>
        <p>Are you sure you want to approve this answer?</p>
          <p class = "item"><strong><?php echo h($answer['title']); ?></strong> by <emphasis><?php echo h($user['username']); ?></emphasis></p>
          <p><italics><?php echo h($answer['content']); ?></italics>

        <form action = "<?php echo url_for('/approve.php?id=' . h(u($answer['id']))); ?>" method = "post">
          <div id = "operations">
            <input type = "hidden" name = "id" value = "<?php echo $_GET['id']; ?>" />
            <input class = "btn btn-success btn-lg btn-block" type = "submit" name = "approved" id = "approved" value = "Confirm" />
          </div>
        </form>
      </div>

    </div><!-- container -->

Запрос

    $sql = "UPDATE answers SET ";
    $sql .= "approved=1";
    $sql .= "WHERE id='" . db_escape($db, $answer) . "' ";

Вы можете попробовать этот код. Я все еще не уверен, где вы устанавливаете значение для $answer['user_id']? Но это должно решить вашу проблему.

Извините, это тоже не сработало. И, кстати, $ answer ['user_id'] представляет собой идентификационный номер автора видео.

user9608348 13.04.2018 13:26

Я понимаю. Что ж, вам нужно повторить свой запрос и проверить, верен ли окончательный запрос? @BlackNoise

Smit Raval 13.04.2018 13:38

Другие вопросы по теме