Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Arduino - PHP - MYSQL włącznik światła, Idea: klikam w formularzu, który pin mam zamiar włączyć a to przekazuj
sereknr1
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2017

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
sereknr1
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2017

Ostrzeżenie: (0%)
-----


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

Ten post edytował sereknr1 25.04.2017, 07:31:08
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sereknr1
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2017

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sereknr1
post
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2017

Ostrzeżenie: (0%)
-----


O widzisz i znów się czegoś nauczyłem. Wielkie dzięki. Błąd "Table 'homelight.tabeloflight' doesn't exist"
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Komunikat bledu masz teraz wyrazny. Czegos z niego nie rozumiesz?

Jesli nadal nie rozumiesz to znajdz 10 roznic:

tabeloflight
tableoflight
tabelaoflight


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sereknr1
post
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2017

Ostrzeżenie: (0%)
-----


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?

Ten post edytował sereknr1 25.04.2017, 15:14:35
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jak juz wspomniano nie ma sensu tworzyc tabeli dla jednego rekordu z jednym polem. Zapisz to poprostu w pliku i po sprawie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sereknr1
post
Post #11





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2017

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sereknr1
post
Post #13





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2017

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sereknr1
post
Post #15





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2017

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
viking
post
Post #16





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Poprawną składnię znajdziesz zawsze w dokumentacji https://dev.mysql.com/doc/refman/5.7/en/select.html


--------------------
Go to the top of the page
+Quote Post
Puszy
post
Post #17





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


@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.

Ten post edytował Puszy 26.04.2017, 12:29:07
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 14:13