Niedziałający if PHP

0

Cześć, szybkie pytanie. Dlaczego nie działa mi ten kod? Szukam i szukam i nie mogę znaleźć błędu. Z bazą się łączy, w bazie są dane. Kolumna Stan ma wartość 1. Wywala się if tak jakby nie czytał to co jest w kolumnie Stan i nie sprawdzał warunku.

<?php
include 'connect.php';

$sql = "SELECT Obszar, Poziom, Pomieszczenie, Nazwa, DataGodzina from swiatlo where Nr = 1";
$stan = "SELECT Stan from swiatlo WHERE Nr = 1";
$res = $conn-> query($stan);
$result = $conn-> query($sql);
if ($result->num_rows > 0) {
    while($row = $result-> fetch_assoc()){

        if($res == 0){
            echo "<tr><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td><button class=\"btn btn-success\">ON</button></td></tr>";
        }
        else if ($res == 1){
            echo "<tr><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td><button class=\"btn btn-danger\">OFF</button></td></tr>";
        }
    }
    echo "</table></div>";
}
else{
    echo "0";
}

?>
3

$res to nie jest liczba, więc nie będzie nigdy 0. Jak już coś to $res->fetch_assoc()['Stan'].

0

A jeszcze jedno pytanie. W jaki sposób mogę updatować rekordy za pomocą kliknięcia Buttona ON lub OFF? Klikając button ON chcę wysłać wartość 1 to do kolumny Stan oraz datę zaminy tej wartości.

<html>
<head>
    <title>Inteligentny dom</title>
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
</head>
<body>
<!--NAV MENU-->

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <a class="navbar-brand" href="#">Inteligentny dom interfejs</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#basicExampleNav"
    aria-controls="basicExampleNav" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="basicExampleNav">
    <ul class="navbar-nav ml-auto text-center">
    <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown"
            aria-haspopup="true" aria-expanded="false">Światło</a>
        <div class="dropdown-menu dropdown-primary text-center" aria-labelledby="navbarDropdownMenuLink">
            <a class="dropdown-item" href="index.php">Poziom 1 (wizualizacja)</a>
            <a class="dropdown-item" href="swiatlo2.php">Poziom 2 (konfiguracja)</a>
        </div>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Gniazdka</a>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Temperatura</a>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Brama garażowa</a>
        </li>
    </ul>
    </div>
</nav>
<!--NAV MENU-->

<div class="table_data table-responsive">   
    <table id="mytable" class="table table-bordered">
        <thead>
            <tr>
            <th scope="col">Obszar</th>
            <th scope="col">Poziom</th>
            <th scope="col">Pomieszczenie</th>
            <th scope="col">Nazwa</th>
            <th class="bg-warning"scope="col">Zmiana stanu portu
            <select class="filter select" data-col="2">
                        <option value="">Pokaż wszystkie</option>
                        <option value="1">ON</option>
                        <option value="2">OFF</option>
                </select>
            </th>
            </tr>
        </thead>
        <tbody id="tbody">

        </tbody>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script type="text/javascript">
        $(document).ready(function() {
            setInterval(function () {
                $('#tbody').load('fetching-data-generator.php');
            }, 2000);
        });
    </script>
    <script src="sorting.js"></script>

</body>

</html>
<?php
include 'connect.php';

$sql = "SELECT Obszar, Poziom, Pomieszczenie, Nazwa from swiatlo";
$stan = "SELECT Stan from swiatlo";
$res = $conn-> query($stan);
$result = $conn-> query($sql);
if ($result->num_rows > 0) {
    while($row = $result-> fetch_assoc()){

        if($res->fetch_assoc()['Stan'] == 0){
            echo "<tr><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td><button class=\"btn btn-success\">ON</button></td></tr>";
        }
        else {
            echo "<tr><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td><button class=\"btn btn-danger\">OFF</button></td></tr>";
        }
    }
    echo "</table></div>";
}
else{
    echo "0";
}

?>

screenshot-20201203105029.png

screenshot-20201203105051.png

Z góry dzięki!!

1

Powinieneś stworzyć plik/controller/zasób PHP (nie wiem jak to masz u siebie), który przyjmuje parameter który jest nową wartością oraz id (u Ciebie pewnie 1) i robi SQL'owy UPDATE.
Następnie powinieneś jakoś wywołać ten plik/zasób ze swojego widoku, albo wysłać formularz albo Ajax.

0

Hmm ok znalzłem właśnie taki snippet kod, czy taki by zadział? Rozumiem, że Buttony muszę osadzić w <form>

$('.button').click(function() {
  $.ajax({
    type: "POST",
    url: "some.php",
    data: { name: "John" }
  }).done(function( msg ) {
    alert( "Data Saved: " + msg );
  });
});
<?php
    function abc($name){
        // update query
    }
?>
1
klawikos napisał(a):

Hmm ok znalzłem właśnie taki snippet kod, czy taki by zadział? Rozumiem, że Buttony muszę osadzić w <form>

Nie, jedno albo drugie. <form> potrzebujesz jeśli chcesz submitować formularz i przeładowawć stronę. Używając Ajaxa nie musisz nic zmieniać.

To wygląda ok:

$('.button').click(function() {
  $.ajax({
    type: "POST",
    url: "some.php",
    data: { name: "John" }
  }).done(function( msg ) {
    alert( "Data Saved: " + msg );
  });
});

To nie zadziała, tak po prostu.

<?php
    function abc($name){
        // update query
    }
?>

Prędzej:

<?php
$name = $_POST['name'];

albo

<?php
    function abc($name){
        // update query
    }

    abc($_POST['name']);
0

Poprawiłem troche kod i dodalem testowy button, ale po kliknieciu buttonu nic sie nie dzieje. W czy moze byc problem?

<html>
<head>
    <title>Inteligentny dom</title>
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
</head>
<body>
<!--NAV MENU-->

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <a class="navbar-brand" href="#">Inteligentny dom interfejs</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#basicExampleNav"
    aria-controls="basicExampleNav" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="basicExampleNav">
    <ul class="navbar-nav ml-auto text-center">
    <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown"
            aria-haspopup="true" aria-expanded="false">Światło</a>
        <div class="dropdown-menu dropdown-primary text-center" aria-labelledby="navbarDropdownMenuLink">
            <a class="dropdown-item" href="index.php">Poziom 1 (wizualizacja)</a>
            <a class="dropdown-item" href="swiatlo2.php">Poziom 2 (konfiguracja)</a>
        </div>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Gniazdka</a>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Temperatura</a>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Brama garażowa</a>
        </li>
    </ul>
    </div>
</nav>
<!--NAV MENU-->

<div class="table_data table-responsive">   
    <table id="mytable" class="table table-bordered">
        <thead>
            <tr>
            <th scope="col">Obszar</th>
            <th scope="col">Poziom</th>
            <th scope="col">Pomieszczenie</th>
            <th scope="col">Nazwa</th>
            <th class="bg-warning"scope="col">Zmiana stanu portu
            <select class="filter select" data-col="2">
                        <option value="">Pokaż wszystkie</option>
                        <option value="1">ON</option>
                        <option value="2">OFF</option>
                </select>
            </th>
            </tr>
        </thead>
        <tbody id="tbody">
            <button class="btn" name="button" value="1">VALUE 1</button>
        </tbody>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script type="text/javascript">
        $(document).ready(function() {
            $('.btn').click(function(){
                var button = $(this).val();
                $.ajax({ 
                url: "query.php",
                type: "POST",
                data: {
                    button: button,
                },
                success: function (data) {
                    alert(button);
                }
            }); 
        });

            setInterval(function () {
                $('#tbody').load('fetching-data-generator.php');
            }, 2000);
        });

    </script>
</body>

</html>
<?php
include 'connect.php';
$stan = 1;
if(isset($_POST['button'])){
    $stan = $_POST['button'];
    $udpate = "UPDATE swiatlo SET Stan = $stan WHERE Nr = 1";
    $queryupt = mysqli_query($conn, $update);

}else{
    echo "err";
}

?>
1
klawikos napisał(a):

Poprawiłem troche kod i dodalem testowy button, ale po kliknieciu buttonu nic sie nie dzieje.

To że nic nie zauważasz, nie znaczy że nic się nie dzieje. Musisz ustalić Cz $() łapie przycisk, czy zapina się event handler, czy handler odpala kiedy klikasz w przycisk, czy handler próbuje zrobić request, czy request trafia do servera/backendu, czy zwraca poprawny wynik (chociaż u Ciebie to i tak jest "" albo "err").

W czy moze byc problem?

Otwórz narzędzia developerskie w swojej przeglądarce i zobacz co się dzieje w Console oraz Network.

0

Poprawiłem, już przycisk działa, tylko w dziwny sposób - klikam w button, ale klikać parę razy zanim zaskoczy button. Pewnie przez setInterval, tylko nwm jak umieścić te funkcję, aby działało poprawnie. Mógłby ktoś spojrzeć na ten kod?
index.php

<html>
<head>
    <title>Inteligentny dom</title>
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
</head>
<body>
<!--NAV MENU-->

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <a class="navbar-brand" href="#">Inteligentny dom interfejs</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#basicExampleNav"
    aria-controls="basicExampleNav" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="basicExampleNav">
    <ul class="navbar-nav ml-auto text-center">
    <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown"
            aria-haspopup="true" aria-expanded="false">Światło</a>
        <div class="dropdown-menu dropdown-primary text-center" aria-labelledby="navbarDropdownMenuLink">
            <a class="dropdown-item" href="index.php">Poziom 1 (wizualizacja)</a>
            <a class="dropdown-item" href="swiatlo2.php">Poziom 2 (konfiguracja)</a>
        </div>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Gniazdka</a>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Temperatura</a>
        </li>
        <li class="nav-item">
        <a class="nav-link" href="#">Brama garażowa</a>
        </li>
    </ul>
    </div>
</nav>
<!--NAV MENU-->

<div class="table_data table-responsive">   
    <table id="mytable" class="table table-bordered">
        <thead>
            <tr>
            <th scope="col">Obszar</th>
            <th scope="col">Poziom</th>
            <th scope="col">Pomieszczenie</th>
            <th scope="col">Nazwa</th>
            <th class="bg-warning"scope="col">Zmiana stanu portu
            <select class="filter select" data-col="2">
                        <option value="">Pokaż wszystkie</option>
                        <option value="1">ON</option>
                        <option value="2">OFF</option>
                </select>
            </th>
            </tr>
        </thead>
        <tbody id="tbody">
            <button class="btn">CLICK</button>
        </tbody>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script type="text/javascript">
        $(document).ready(function() {
            setInterval(function () {
                $('#tbody').load('fetching-data-generator.php');
            }, 2000);
        });

        function myFunction(){
            $('.btn').click(function() {
            var button = $(this).val();
            $.ajax({
                type: "POST",
                url: 'query.php',
                data: {button},
                success: function(){
                console.log("ok");
                }
                }); 
            }); 
        }
    </script>
</body>

</html>

query.php

<?php
    include 'connect.php';

    if(isset($_POST["button"])){
            $stan = "SELECT Stan FROM swiatlo WHERE Nr = 1";
            $res = $conn-> query($stan);
            $stan2 = (int) !$res;
            $upt = "UPDATE swiatlo SET Stan = $stan2 WHERE Nr = 1";
            $conn->query($upt);
    }

?>

fetching-data-generator.php

<?php
include 'connect.php';

$sql = "SELECT Obszar, Poziom, Pomieszczenie, Nazwa from swiatlo";
$stan = "SELECT Stan from swiatlo";
$res = $conn-> query($stan);
$result = $conn-> query($sql);
if ($result->num_rows > 0) {
    while($row = $result-> fetch_assoc()){

        if($res->fetch_assoc()['Stan'] == 0){
            echo "<tr><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td><img src=\"off.svg\" class=\"light\" style=\"width:40px;\"><button class=\"btn btn-success\">ON</button></td></tr>";
        }
        else {
            echo "<tr><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td><img src=\"on.svg\" class=\"light\" style=\"width:40px;\"><button onclick = \"myFunction()\" class=\"btn btn-danger\">OFF</button></td></tr>";
        }
    }
    echo "</table></div>";
}
else{
    echo "0";
}

?>
2

A dlaczego w ogóle używasz do tego setInterval? Co chcesz osiągnąć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0