• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie działa wstawianie danych do bazy przez formularz z PHP

Object Storage Arubacloud
0 głosów
499 wizyt
pytanie zadane 30 lipca 2022 w PHP przez XxThorusxX Użytkownik (500 p.)

Cześć. Dla przypomnienia PHP chcę napisać formularz, z którego dane chcę wstawić do bazy danych. Po kliknięciu przycisku submit, formularz się czyści, a żadne dane nie są wstawiane. Poniżej dodam fragment kodu, który ma za zadanie wstawiać te dane do bazy i formularz. Z góry dzięki za pomoc :)

 

HTML:

<form action="data.php" method="POST">
                Data rozpoczęcia pracy: <input type="date" name="data"> <br>
                Godzina rozpoczęcia pracy: <input type="text" name="start">  <br>
                Godzina zakończenia pracy: <input type="text" name="koniec">  <br>
                Godzin przepracowanych: <input type="number" name="godziny">   <br>
                Ilość zgód: <input type="number" name="zgody">   <br>
                Wynagrodzenie: <input type="text" name="wynagrodzenie">  <br>
                <input type="submit" value="Wyślij" name = "send">
            </form>


PHP: (tutaj dodam, że połączenie z bazą jest już realizowane w sekcji <head> html'a. Połączenie na pewno działa, gdyż instrukcja SELECT w innej sekcji strony działa poprawnie, tylko tu jest problem.  Dodam jeszcze, że zmienna $day powinna być jako data, tak jak w bazie danych

<?php
                    if(isset($_POST["data"]) && isset($POST["start"]) && isset($_POST["koniec"]) && isset($_POST["godziny"]) && isset($_POST["zgody"]) && isset($_POST["wynagrodzenie"]) && isset($_POST["send"]))
                    {
                        $day = date('Y-m-d', strtotime($_POST["data"]));
                        $start = $_POST["start"];
                        $end = $_POST["koniec"];
                        $hours = $_POST["godziny"];
                        $accepts = $_POST["zgody"];
                        $salary = $_POST["wynagrodzenie"];

                        $query = "INSERT INTO `Praca`(`Data pracy`, `Godzina rozpoczęcia`, `Godzina zakończenia`, `Godzin przepracowanych`, `Ilość zgód`, `Wynagrodzenie`) VALUES ('$data','$start','$end, '$hours','$accepts','$salary')";

                        $result = mysqli_query($connect, $query);
                        
                        mysqli_close($connect);
                    }
                    
                ?>

 

komentarz 30 lipca 2022 przez Velta Maniak (52,370 p.)

W zapytaniu uciekł Ci apostrof zamykający przy wywołaniu zmiennej end. Warto to poprawić. ;p

komentarz 30 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
Poprawione, aczkolwiek dalej nie działa :c

Co jeszcze może być nie tak?

2 odpowiedzi

+1 głos
odpowiedź 30 lipca 2022 przez Wiciorny Ekspert (270,370 p.)

Insertujesz tutaj zmienna $data, a nie day 
 

 $query = "INSERT INTO `Praca`(`Data pracy`, `Godzina rozpoczęcia`, `Godzina zakończenia`, `Godzin przepracowanych`, `Ilość zgód`, `Wynagrodzenie`) VALUES ('$data','$start','$end, '$hours','$accepts','$salary')";

A masz coś takiego. 

 $day = date('Y-m-d', strtotime($_POST["data"]));
// a w insercie
 VALUES ('$data','$start','$end, '$hours','$accepts','$salary')";

 

komentarz 30 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
Poprawione, ale dalej nic
komentarz 30 lipca 2022 przez Wiciorny Ekspert (270,370 p.)
mozesz coś więcej jakiś błąd?... bo podejrzewam, że zapytanie
komentarz 30 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
W VS Code nie pokazuje mi błędu, to samo na stronie. Wszystko ładnie wyświetla, wrzucam screena na imgur nawet: https://imgur.com/a/Ruhwf2C
komentarz 30 lipca 2022 przez Wiciorny Ekspert (270,370 p.)

użyj przy nazwach kolumn użyj ` , a nie pojedynczego cudzysłowu,

jesteś pewny, że twoje tabele mają polskie znaki ? 

tabela nie powinna mieć apostrofów/
`Praca`

"INSERT INTO `Praca`
...
powinno byc 
"INSERT INTO Praca

 

komentarz 30 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
Przy nazwach kolumn są ` `, więc to raczej nie to. Tabela ma polskie znaki, kodowanie jest na utf-8mb4_polish_ci
komentarz 30 lipca 2022 przez Wiciorny Ekspert (270,370 p.)
edycja 31 lipca 2022 przez Wiciorny

tak ale TABELA ma znaki, a nie powinna ich mieć
"INSERT INTO Praca... to wyrażenie sql u Ciebie jest `Praca`
 

"INSERT INTO `Praca`
...

powinno byc

"INSERT INTO Praca

 

0 głosów
odpowiedź 30 lipca 2022 przez VBService Ekspert (253,520 p.)

Sprawdź, czy masz poprawnie utworzonego insert-a

<?php
                    if(isset($_POST["data"]) && isset($POST["start"]) && isset($_POST["koniec"]) && isset($_POST["godziny"]) && isset($_POST["zgody"]) && isset($_POST["wynagrodzenie"]) && isset($_POST["send"]))
                    {
                        $day = date('Y-m-d', strtotime($_POST["data"]));
                        $start = $_POST["start"];
                        $end = $_POST["koniec"];
                        $hours = $_POST["godziny"];
                        $accepts = $_POST["zgody"];
                        $salary = $_POST["wynagrodzenie"];
 
                        $query = "INSERT INTO `Praca`(`Data pracy`, `Godzina rozpoczęcia`, `Godzina zakończenia`, `Godzin przepracowanych`, `Ilość zgód`, `Wynagrodzenie`) VALUES ('$day','$start','$end', '$hours','$accepts','$salary')";
                        echo $query;
                        
                        //$result = mysqli_query($connect, $query);
                         
                        //mysqli_close($connect);
                    }
                     
                ?>

 

skopiuj wyświetlony kod i "ręcznie" sprawdź w phpMyAdmin, zobacz jaki kod błędu "wyrzuci".

komentarz 30 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
Wklepałem to zapytanie, zmienne przerobiłem na jakieś inne dane i weszło normalnie
komentarz 30 lipca 2022 przez VBService Ekspert (253,520 p.)
Nie zmieniaj na inne dane tylko takie jakie wygeneruje Twój kod php (dane z formularza).
komentarz 31 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
O to chodziło? https://imgur.com/a/mx5QfO7
komentarz 31 lipca 2022 przez Wiciorny Ekspert (270,370 p.)

w kodzie masz zapisane to co juz wyzej pisałem 

INSERT INTO `PRACA` a nie INSERT INTO PRACA

praca jest tabela, wiec tutaj nie potrzebnie dodales znaki `

komentarz 31 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
Usunąłem je właśnie
komentarz 31 lipca 2022 przez VBService Ekspert (253,520 p.)

Backtick-y w nazwach tabel i kolumn nie przeszkadzają.

"Uruchom" stronę wypełnij formularz i skopiuj kod ten co wyświetli 12 linia do phpMyAdmin.

<?php
                    if(isset($_POST["data"]) && isset($POST["start"]) && isset($_POST["koniec"]) && isset($_POST["godziny"]) && isset($_POST["zgody"]) && isset($_POST["wynagrodzenie"]) && isset($_POST["send"]))
                    {
                        $day = date('Y-m-d', strtotime($_POST["data"]));
                        $start = $_POST["start"];
                        $end = $_POST["koniec"];
                        $hours = $_POST["godziny"];
                        $accepts = $_POST["zgody"];
                        $salary = $_POST["wynagrodzenie"];
  
                        $query = "INSERT INTO `Praca`(`Data pracy`, `Godzina rozpoczęcia`, `Godzina zakończenia`, `Godzin przepracowanych`, `Ilość zgód`, `Wynagrodzenie`) VALUES ('$day','$start','$end', '$hours','$accepts','$salary')";
                        echo $query;
                         
                        //$result = mysqli_query($connect, $query);
                          
                        //mysqli_close($connect);
                    }
                      
                ?>

 

komentarz 31 lipca 2022 przez VBService Ekspert (253,520 p.)
komentarz 31 lipca 2022 przez Wiciorny Ekspert (270,370 p.)
tak ale to jest indykacja** jezus co ja tu napisalem XD i generalnie jesli to nie jest slowo kluczowe dla mysql to nie powinno sie tego stosowac, ergo przy mapowaniach i wykorzystywaniu ORM nie przejdzie zapytanie
komentarz 31 lipca 2022 przez XxThorusxX Użytkownik (500 p.)

@VBService, albo jestem zrąbany i czegoś nie kumam, albo to ewidentnie coś z kodem jest nie tak. Dałem "echo $query" jak pisałeś, ale przed ani po wysłaniu formularza nic się nie wyświetla oprócz rekordów z bazy pod formularzem

komentarz 31 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
Czemu przeczytałem "inwokacja"? XDD

W zapytaniu nie ma raczej żadnych słów kluczowych z tego co widzę
komentarz 31 lipca 2022 przez VBService Ekspert (253,520 p.)

Wstaw ten kod do data.php

Uruchom stronę, wypełnij formularz, naciśnij Wyślij i zobacz co zwróci var_dump dal $_POST.

Sprawdź tak

<?php
                    var_dump($_POST);

                    if(isset($_POST["data"]) && isset($POST["start"]) && isset($_POST["koniec"]) && isset($_POST["godziny"]) && isset($_POST["zgody"]) && isset($_POST["wynagrodzenie"]) && isset($_POST["send"]))
                    {
                        $day = date('Y-m-d', strtotime($_POST["data"]));
                        $start = $_POST["start"];
                        $end = $_POST["koniec"];
                        $hours = $_POST["godziny"];
                        $accepts = $_POST["zgody"];
                        $salary = $_POST["wynagrodzenie"];
   
                        $query = "INSERT INTO Praca (`Data pracy`, `Godzina rozpoczęcia`, `Godzina zakończenia`, `Godzin przepracowanych`, `Ilość zgód`, `Wynagrodzenie`) VALUES ('$day','$start','$end', '$hours','$accepts','$salary')";
                        echo $query;
                          
                        //$result = mysqli_query($connect, $query);
                           
                        //mysqli_close($connect);
                    }
                       
                ?>

 

komentarz 31 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
1
komentarz 31 lipca 2022 przez VBService Ekspert (253,520 p.)

Ach, tu jest jeszcze błąd laugh

isset($POST["start"]) => isset($_POST["start"])

<?php
                    var_dump($_POST);
 
                    if(isset($_POST["data"]) && isset($POST["start"]) && isset($_POST["koniec"]) && isset($_POST["godziny"]) && isset($_POST["zgody"]) && isset($_POST["wynagrodzenie"]) && isset($_POST["send"]))
                    {
                        $day = date('Y-m-d', strtotime($_POST["data"]));
                        $start = $_POST["start"];
                        $end = $_POST["koniec"];
                        $hours = $_POST["godziny"];
                        $accepts = $_POST["zgody"];
                        $salary = $_POST["wynagrodzenie"];
    
                        $query = "INSERT INTO Praca (`Data pracy`, `Godzina rozpoczęcia`, `Godzina zakończenia`, `Godzin przepracowanych`, `Ilość zgód`, `Wynagrodzenie`) VALUES ('$day','$start','$end', '$hours','$accepts','$salary')";
                        echo $query;
                           
                        //$result = mysqli_query($connect, $query);
                            
                        //mysqli_close($connect);
                    }
                        
                ?>

 

komentarz 31 lipca 2022 przez VBService Ekspert (253,520 p.)

To jest przykład co "wyrzuca" echo

1
komentarz 31 lipca 2022 przez XxThorusxX Użytkownik (500 p.)
Poprawione i... Zadziałało w końcu, wstawia już dane do bazy :D Dzięki wielkie za pomoc :D Taki drobny błąd, a taki kosztowny xD

Podobne pytania

0 głosów
1 odpowiedź 1,446 wizyt
pytanie zadane 21 stycznia 2016 w SQL, bazy danych przez Malolacik De Nowicjusz (190 p.)
0 głosów
1 odpowiedź 179 wizyt
0 głosów
1 odpowiedź 136 wizyt
pytanie zadane 31 października 2016 w PHP przez Q_Nick Mądrala (5,010 p.)

92,596 zapytań

141,446 odpowiedzi

319,720 komentarzy

61,981 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...