Как отобразить сообщение, если найдена пустая строка с использованием num_rows, объектно-ориентированная процедура, в таблице mysql? - PullRequest
0 голосов
/ 11 марта 2020

Хорошо, у меня есть таблица MySQL с 3 столбцами (город, цвет, голоса). У меня есть таблица HTML с цветами, некоторые из этих цветов не существуют в таблице MySQL. Я пытаюсь отобразить «0», если нет совпадения. Я получаю "" в консоли, когда цвет не существует, но я хочу отобразить "0" в таблице HTML для этих цветов. Есть идеи?

Пока у меня есть php:

$co = $_REQUEST['color'];

$sql = "SELECT SUM(votes) AS sum FROM Votes WHERE color = '$co'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo $row["sum"];
    }
} else {
    echo 0;
}

, а это вызов ajax:

<script>
$(document).ready(function(){
    $('#red').on('click', function() {
        var colorId = $(this).attr("id");

        $.ajax({
            "url": "tables.php", 
            "data": {"color" : colorId}, 
            success: function(response) {
                $("#redr").html(response);
                console.log(response);
            }
        });
    });

    $('#orange').on('click', function() {
        var colorId = $(this).attr("id");

        $.ajax({
            "url": "tables.php", 
            "data": {"color" : colorId}, 
            success: function(response) {
                $("#oranger").html(response);
                console.log(response);
            }
        });
    });

    $('#green').on('click', function() {
        var colorId = $(this).attr("id");
        $.ajax({
            "url": "tables.php", 
            "data": {"color" : colorId}, 
            success: function(response) {
                $("#greenr").html(response);
                console.log(response);
            }
        });
    });

    $('#indigo').on('click', function() {
        var colorId = $(this).attr("id");
        $.ajax({
            "url": "tables.php", 
            "data": {"color" : colorId}, 
            success: function(response) {
                $("#indigor").html(response);
                console.log(response);
            }
        });
    });


    $('#yellow').on('click', function() {
        var colorId = $(this).attr("id");
        $.ajax({
            "url": "tables.php", 
            "data": {"color" : colorId},
            success: function(response) {
                $("#yellowr").html(response);
                console.log(response);
            }
        });
    });

    $('#blue').on('click', function() {
        var colorId = $(this).attr("id");

        $.ajax({
            "url": "tables.php", 
            "data": {"color" : colorId}, 
            success: function(response) {
                $("#bluer").html(response);
                console.log(response);
            }
        });
    });

    $('#total').on('click', function() {
        var sumofval = 0;
        $(".val").each(function () {
            if ($(this).text() !== '') {
                sumofval = sumofval + parseInt($(this).text());
            }
            $('#totalr').text(sumofval);
            console.log(sumofval);
        });
    });

});
</script>

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Просто проверьте результат вашего запроса, прежде чем возвращать значение.

Запрос SUM () всегда будет возвращать строку и только одну строку, поэтому вы должны проверить результат, а затем, если он нулевой (нет значения для суммы) выводит ноль, в противном случае выводит число из суммы ()

$sql = "SELECT SUM(votes) AS sum FROM Votes WHERE color = ?";
$stmt = $conn->prepare($sql);
// assumed `color` was a string column, 
// if its integer is `'i'` instead of `'s'`
$stmt->bind_param('s', $_REQUEST['color']);
$stmt->execute();

$res = $stmt->get_result();

$row = $res->fetch_assoc();

echo $row['sum'] == '' ? 0 : $row['sum'];

Примечание. Я также изменил ваш код, чтобы использовать подготовленный запрос со связанными значениями. Это гораздо более безопасно, чем механизм объединенного значения, который вы использовали, чтобы избежать SQL Атака с использованием инъекций

0 голосов
/ 11 марта 2020

Попробуйте использовать это.

$('#red').on('click', function() {
  var colorId = $(this).attr("id");

  $.ajax({"url": "tables.php", "data": {"color" : colorId}, success: function(response) {
    response = Number(response)
    response = response.toFixed(0)
    $("#redr").text(response);
    console.log(response);
  });
});

Используется .text() вместо .html(). И это превращает возможный пустой ответ от вашей веб-конечной точки php в фактическое число.

Я использовал две строки кода для этого из-за научного проекта в средней школе Редмонда, известного как Inte rnet Explorer. Вот что делают эти строки:

Возможно, в обратный вызов ajax можно ввести, что response является действительным числом, или текстовой строкой, содержащей число, или пустой текстовой строкой, или нулевым значением. response = Number(response) заставляет его быть числом. В пустых или нулевых случаях число выходит на ноль.

Вторая строка response = response.toFixed(0) преобразует число обратно в текстовую строку с нулевыми цифрами после десятичной точки.

Затем, давая эта текстовая строка для .text(response) помещает ее на вашу веб-страницу в соответствующем месте.

Если бы не Inte rnet Explorer, вы могли бы сделать

... .text(Number(response).toFixed(0)) 

все в одном линия. Но IE не может справиться с использованием метода .toFixed() ни с чем, кроме фактически объявленной переменной. Кроме того, дополнительные строки немного легче объяснить.

Pro tip Всегда делайте отступ в своем коде.

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