Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Arduino - PHP - MYSQL włącznik światła
Forum PHP.pl > Forum > Przedszkole
sereknr1
Witam, jestem w trakcie konstruowania podwalin strony dzięki której będę mógł wł/wył światło. Wymyśliłem sobie, że poprzez formularz będę sprawdzał stan wł lub wył. Stworzyłem w phpmyadmin odpowiednią bazę która zawiera następujące tabele: id - primary key, timeline - timestamp, Pin_1, Pin_2, Pin_3, Pin_4 - varchar. Stworzyłem pilik connect.php
Kod
<?php

$user = "root";
$pass = "";
$host = "localhost";

    $connect = mysql_connect($host,$user,$pass);
    $selectdb = mysql_select_db('homelight', $connect);
    
    if($connect)
    {
        
    echo "Połączono z bazą Home Light";
    } else{
        
        echo "Brak połączenia z bazą Home Light";
    }
?>


plik rewrite.php
Kod
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Przetowrzenie żądania</title>
    </head>
<body>
<h1>Oświetlenie</h1>
<h2>Włączam oświetlenie na pinach:</h2>
<?php

    include("connect.php");
        
        $Pin_1 = $_POST['Pin_1'];
        $Pin_2 = $_POST['Pin_2'];
        $Pin_3 = $_POST['Pin_3'];
        $Pin_4 = $_POST['Pin_4'];
        
        $control = 1;
        $on = "On";
        $off = "Off";
        
        if($control = $Pin_1){
            $Pin_1 = $on;
            echo 'Pin 1: ' .$Pin_1. '<br />';
        }
        else{
            $Pin_1 = $off;    
            echo 'Pin 1: ' .$Pin_1. '<br />';
        }
        
        if($control = $Pin_2){
            $Pin_2 = $on;
            echo 'Pin 2: ' .$Pin_2. '<br />';
        }
        else{
            $Pin_2 = $off;
            echo 'Pin 2: ' .$Pin_2. '<br />';
        }
        
        if($control = $Pin_3){
            $Pin_3 = $on;
            echo 'Pin 3: ' .$Pin_3. '<br />';
        }
        else{
            $Pin_3 = $off;
            echo 'Pin 3: ' .$Pin_3. '<br />';
        }
        
        if($control = $Pin_4){
            $Pin_4 = $on;
            echo 'Pin 4: ' .$Pin_4. '<br />';
        }
        else{
            $Pin_4 = $off;
            echo 'Pin 4: ' .$Pin_4. '<br />';
        }
        
$sql_insert = "insert into tableoflight (Pin_1,Pin_2,Pin_3,Pin_4) values ('$Pin_1','$Pin_2','$Pin_3','$Pin_4')";

    mysql_query($sql_insert);

        if($sql_insert)
        {
            echo "Rewrite is sucesfull";
        }else{
            echo "Rewrite is not connected. Error";
        }
?>

<a href="index.php">wstecz</a>

</body>
</html>


no i plik index.php który będę przerabiał gdyż łączę się w nim z bazą 4 razy co jest zupełnie bez sensu
Kod
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Home Light</title>
</head>

<body>

<form action="rewrite.php" method=post>
    <table border="1" cellspacing="2" cellpadding="5">
        <tr bgcolor="red">
            <td width="150">Światło:</td>
            <td width="15">Przekaźnik:</td>
            <td width="35">Status:</td>
        </tr>
    
        <tr>
            <td>Pin 1</td>
            <td align="center"><input type="radio" name="Pin_1" size="3"></td>
<?php

    include("connect.php");
        //SELECT MAX(id) FROM tabelaoflight || select * from tableoflight ||mysqli_fetch_assoc
        $resultad = mysql_query("select * from tableoflight");
        
            while($linha = mysql_fetch_array($resultad))
            {
                echo '<td>'.$linha["Pin_1"]. '</td>';
            
            }
?>
        </tr>
        <tr>
            <td>Pin 2</td>
            <td align="center"><input type="radio" name="Pin_2" size="3"></td>
<?php

    include("connect.php");
        //SELECT MAX(id) FROM tabelaoflight || select * from tableoflight
        $resultad = mysql_query("select * from tableoflight");
        
            while($linha = mysql_fetch_array($resultad))
            {
                echo '<td>'.$linha["Pin_2"]. '</td>';
            }
?>
        </tr>
        
        <tr>
            <td>Pin 3</td>
            <td align="center"><input type="radio" name="Pin_3" size="3"></td>
<?php

    include("connect.php");
        //SELECT MAX(id) FROM tabelaoflight || select * from tableoflight
        $resultad = mysql_query("select * from tableoflight");
        
            while($linha = mysql_fetch_array($resultad))
            {
                echo '<td>'.$linha["Pin_3"]. '</td>';
            }
?>
        </tr>
        
        <tr>
            <td>Pin 4</td>
            <td align="center"><input type="radio" name="Pin_4" size="3"></td>
<?php

    include("connect.php");
        //SELECT MAX(id) FROM tabelaoflight || select * from tableoflight
        $resultad = mysql_query("select * from tableoflight");
        
            while($linha = mysql_fetch_array($resultad))
            {
                echo '<td>'.$linha["Pin_4"]. '</td>';
            }
?>
        </tr>
        
        <tr>
        <td colspan="2" align="center"><input type="submit" value="Włącz"></td>
        </tr>
        
    </table>
</form>
</body>
</html>

Idea: klikam w formularzu, który pin mam zamiar włączyć a to przekazuje dane do BD która zapisuje aktualny stan i po kliknięciu wstecz chce uzyskać status pinu. Wymyśliłem, aby wg. id wyświetlić stan, tylko nie wiem jak wybrać jeden najaktualniejszy rekord z BD? Czy ktoś mógłby mi podpowiedzieć jak to ogarnąć? Próbowałem poprzez zapytanie: select max(id) from tableoflight jednak zwraca mi błąd. Zaczynam się bawić PHP i MYSQL w związku z powyższym proszę o wyrozumiałaś. Pozdrawiam!
Pyton_000
1. BD nie jest Ci tu praktycznie potrzebna, wystarczy plik z aktualnymi wartościami.
2. Skoro uparłeś się na BD to po co Ci kolejne rekordy ze stanami pinów?
3. Jeśli już bym się bawił w piny to wszystkie piny trzymałbym w 1 polu jako wartość varchar(4) np. 0010, 1011 itd. Wtedy masz informację o wszystkich pinach w 1 polu, a dodanie ew. kolejnego to żaden problem, po prostu dodajesz na koniec kolejną wartość 0/1
sereknr1
Wiem, że można to zrobić na pliku jednak tak jak wspomniałem na razie chciałbym to zrobić na BD i zobaczyć jak to się będzie sprawowało. Pyton_000 nadaje w BD wartość varchar 4 i jak wskazać odpowiednie miejsce w rekordzie gdzie dane wysłane z formularza będą się zapisywały według Twojego schemat (np. 0011)? Czy w DB istnieje możliwość skonstruowania tak rekordu aby nie tworzył się nowy wpis tylko nadpisywał by on wartości w pierwszym?

Dlaczego po wpisaniu w konsoli phpmyadmin polecenia select min(pin_1) from tabeloflight zapytanie działa prawidłowo natomiast po przeniesieniu do pliku php zwraca błąd Notice: Undefined index: Pin_1 in C:\xampp\htdocs\HomeLight\mysql.php on line 9
nospor
Na przyszlosc pokazuj kod php jesli masz z nim problemy. Masz szczescie ze chodzile na podyplomowe "Wrozbita - poczatek" to moge poprawic ci twoj kod

nie:
select min(pin_1) from tabeloflight

a:
select min(pin_1) as Pin_1 from tabeloflight
sereknr1
Kod
<?php

    include("connect.php");
        //SELECT MAX(id) FROM tabelaoflight || select * from tableoflight ||mysqli_fetch_assoc
        $resultad = mysql_query("select min(pin_1) as Pin_1 from tabeloflight ") or die ("Błędna komenda");

            while($linha = mysql_fetch_assoc($resultad))
            {
                echo ' '.$linha["Pin_1"].', ';
            
            }
?>

teraz dla odmiany błędna komenda
nospor
To moze dla odmiany wyswietlaj bledy bazy danych zamiast nic nie mowiacych komunikatow?

nie:
or die ("Błędna komenda");

a:or die (mysql_error());

ps: przenosze
sereknr1
O widzisz i znów się czegoś nauczyłem. Wielkie dzięki. Błąd "Table 'homelight.tabeloflight' doesn't exist"
nospor
Komunikat bledu masz teraz wyrazny. Czegos z niego nie rozumiesz?

Jesli nadal nie rozumiesz to znajdz 10 roznic:

tabeloflight
tableoflight
tabelaoflight
sereknr1
Heh wielkie dzięki kolego, nie wiem jak to się stało ale może po prostu za długo siedzie już dziś i nie dostrzegam różnic. Chyba sobie na dziś odpuszczę. Mógłbyś mi wytłumaczyć w jaki sposób trzymać w 1 polu wartości przesłane z formularza zapisane w wartość varchar(4) np. 0010, 1011 itd i w jaki sposób odwołać się z powrotem do nich w php? W jaki sposób mogę dodać kolejne zmienne do zapytania select min(Pin_1) as Pin_1 from tableoflight?
nospor
Jak juz wspomniano nie ma sensu tworzyc tabeli dla jednego rekordu z jednym polem. Zapisz to poprostu w pliku i po sprawie
sereknr1
No może faktycznie to będzie lepszy pomysł. A tak już dla mojej wiedzy w jaki sposób mogę dodać kolejne zmienne do zapytania select min(Pin_1) as Pin_1 from tableoflight?
nospor
Jakie kolejne zmienne? O przecinkach nie slyszal? Tak, tak w zapytaniach mozna uzywac przecinkow

select pole1, pole2, pole3 from tabela.
Ale nie wiem czy o to ci chodzilo, bo to sa pola a nie zmienne wink.gif
sereknr1
Kod
<?php

    include("connect.php");

        $resultad = mysql_query("select min(Pin_1,Pin_2) as Pin_1,Pin_2 from tableoflight") or die (mysql_error());

            while($linha = mysql_fetch_assoc($resultad))
            {
                echo ' '.$linha["Pin_1,Pin_2"].', ';
            
            }
?>


W ten sposób chyba nie bo wywala taki błąd: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Pin_2) as Pin_1,Pin_2 from tableoflight' at line 1
nospor
Moze jednak wpierw jakies podstawy z mysql, potem branie sie za to?

select min(Pin_1) as Pin_1,min(Pin_2) as Pin_2 from tableoflight

Forum naprawde nie sluzy do wyjasniania tak prostych kwestii
sereknr1
Dzięki kolego za pomoc, powiem Ci tak przeglądałem google od prawej do lewej od góry do dołu wszędzie napotykałem się na składnię typu: select max/min(costam) from xxx, wciąż wywalało błąd nie wiem czy to zapytanie jest poprawne czy po prostu kiedyś było poprawne ale w nowym phpmyadmin jest już ono przestarzałe. Jeszcze raz wielkie dzięki za pomoc!
viking
Poprawną składnię znajdziesz zawsze w dokumentacji https://dev.mysql.com/doc/refman/5.7/en/select.html
Puszy
@sereknr1

Ewentualnie korzystaj z klienta SQL, jeżeli masz licencję to polecam PHPStorma jeżeli szukasz freeware to np HeidiSQL, jest tam konsola i będziesz widział co jest nie tak.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.