Как одобрить ожидающие записи в PHP & amp; MySql?

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

Все видеозаписи имеют логический фрагмент данных, называемый «утвержденный», который имеет значение «истина» («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;
}

}

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

Изменить: мне наконец-то удалось решить проблему самостоятельно. Как?
В approve.php, Я забыл добавить важный код, чтобы он работал.

if(is_post_request()) {

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

$result = approve_answer($answer);
if($result === true) {
$_SESSION['message'] = 'The answer was successfully approved and ready for public viewing.';
redirect_to(url_for('/pending.php'));
} else {
$errors = $result;
var_dump($errors);
}

} else {

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

?>

Самое важное, что благодаря совету от Smit Raval я повторил полученную ошибку, и оказалось, что, оставляя функцию validate_answer в другой моей функции Approve_answer, я не смог обработать утверждение, потому что оставил два других поля (которые были имейте в виду, что они были «оставлены пустыми».

Вот код для функции для вашего разъяснения.

  function validate_answer($answer) {
$errors = [];

// title
if(is_blank($answer['title'])) {
$errors[] = "Title cannot be blank.";
} elseif(!has_length($answer['title'], ['min' => 2, 'max' => 50])) {
$errors[] = "Title must be between 2 and 50 characters.";
}

// summary
if(is_blank($answer['content'])) {
$errors[] = "Content cannot be blank.";
} elseif(!has_length($answer['content'], ['min' => 2, 'max' => 255])) {
$errors[] = "Content must be between 2 and 255 characters.";
}

return $errors;
}

Поэтому я очистил основную функцию следующим образом …

function approve_answer($answer) {
global $db;

$sql = "UPDATE answers SET ";
$sql .= "approved='" . db_escape($db, $answer['approved']) . "' ";
$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;
}

}

И как я установил статус подтверждения? Как это.

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

0

Решение

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

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

Другие решения

   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'] ? Но это должно решить вашу проблему.

1

По вопросам рекламы [email protected]