PHP / MySQL сброс флагов в представлении - PullRequest
0 голосов
/ 18 февраля 2020

Итак, у меня есть приложение, которое я пишу, и оно, по большей части, работает хорошо.

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

Код создает представление из таблицы MySQL, а затем задан ряд вопросов. Это простые вопросы да / нет, и (в зависимости от результата) истинные флаги устанавливаются в ложь. Когда остается только один истинный флаг, он загружает страницу, которая должна отображать карточку с информацией о оставленном символе.

Да / нет выполняет итерацию представления и изменяет флаги так, как должно , Однако, когда остается один символ, он сбрасывает все флаги обратно в true и отображает все символы вместо одного. Это должно быть как-то связано с MySQL, но я не вижу, что это может быть.

Ниже приведен класс results.class. php, в котором находится метод finalResult.

<?php

class result
{
    protected $Conn;

    public function __construct($Conn)
    {
        $this->Conn = $Conn;

    }

    public function dropResult()
    {
        $drop = "DROP VIEW if EXISTS result;";
        $stmt = $this->Conn->prepare($drop);
        $stmt->execute(array());
    }

    public function createResult()
    {
        $view = "CREATE VIEW result AS SELECT id, flag, name, image, quote FROM person;";
        $stmt = $this->Conn->prepare($view);
        $stmt->execute(array());
        return $view;
    }

    public function resetFlag()
    {
        $update = "UPDATE person SET flag = true";
        $stmt = $this->Conn->prepare($update);
        $stmt->execute(array());

        }

    public function selectResult()
    {
        $select= "SELECT id, flag from result";
        $stmt = $this->Conn->prepare($select);
        $stmt->execute(array());
        $select = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $select;
    }
    Public function iterateResult($id)
    {
        $changeFlag = "UPDATE result SET flag = false WHERE  id= :id";
        $stmt = $this->Conn->prepare($changeFlag);
        $stmt->execute(array(':id' => $id));

    }
    public function countResult()
    {
        $flag = "SELECT flag from result WHERE flag = true";
        $stmt = $this->Conn->prepare($flag);
        $stmt->execute(array());
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public function finalResult()
    {
        $characterResult = "SELECT name, image, quote FROM result WHERE flag = true;";
        $stmt = $this->Conn->prepare($characterResult);
        $stmt->execute(array());
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

}


?>

И вот результаты. php код

<?php
$result = new result($Conn);
$dropResult = $result->dropResult();
$createResult = $result->createResult();
$resetFlag = $result ->resetFlag();
$finalCharacter = $result->finalResult();
$smarty->assign('result', $finalCharacter);

?>

Я уверен, что это что-то действительно простое, но я просто не вижу здесь дерево для деревьев , Любые советы?

PS ... Изначально у меня был метод selectResult в качестве метода, который вызывался для $ finalCharacter, поэтому я создал новый метод из чистого отчаяния !!!

1 Ответ

0 голосов
/ 18 февраля 2020

Исправлено. Оказывается, у меня был метод resetFlag в ДВУХ контроллерах, поэтому метод использовался на странице результатов и устанавливал флаги на 1. Удалил вызов метода на странице результатов и Боб - ваш дядя. Спасибо за помощь ... очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...