Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Formularz dodawania rekordu do bazy, Przy każdym uruchomieniu formularza dodawany jest pusty rekord
Lukasso
post 10.11.2013, 00:00:00
Post #1





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

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


Zmobilizowałem się wreszcie do nauki php od początku.

Stworzyłem formularz dodawania danych do bazy. Po mniejszych i większych perturbacjach udało mi się połączyć z bazą i zapisać w niej dane z formularza.
PROBLEM: po każdym otwarciu strony z formularzem od razu pojawia się komunikat o poprawnym dodaniu rekordu do bazy i rekord taki zostaje dodany, oczywiście pusty, bo pole formularza były puste. Jak temu zapobiec i spowodować dodawanie danych dopiero po naciśnięciu submit? Czy przesyłanie danych w ten sposób jest bezpieczne, czy powinienem mieć w nawyku dodawanie jakiegoś zabezpieczenia? Lepiej to wiedzieć i niech wejdzie w krew na początku nauki. Może jeszcze jakieś uwagi doświadczonych programistów?

Kod:
  1. <?php require ('config.php'); // wstawiamy dane configuracyjne do polaczenia z baza
  2.  
  3. // tworzymy krotkie nazwy zmiennych otrzymanych z formularza
  4. $marka=$_POST['marka'];
  5. $model=$_POST['model'];
  6. $kolor=$_POST['kolor'];
  7. $pojemnosc=$_POST['pojemnosc'];
  8. $paliwo=$_POST['paliwo'];
  9.  
  10. // przekazujemy wartosci zmiennych do odpowiednich pol w bazie danych
  11. // WSTAW DO tabeli test (kolumny w bazie) WARTOSCI (wartosci zmiennych)
  12. $zapytanie = "INSERT INTO test (marka, model, kolor, pojemnosc, paliwo) VALUES ('$marka','$model','$kolor','$pojemnosc','$paliwo')" or die(mysql_error());
  13. // wykonaj zapytanie
  14. $wynik = mysql_query($zapytanie);
  15. // komunikat potwierdzający poprawne zapisanie danych w bazie
  16. if ($wynik) {
  17. echo 'Prawidłowo dodano do bazy danych';
  18. }
  19.  
  20. mysql_close($db);
  21. ?>
  22.  
  23. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  24. <html>
  25. <head>
  26. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  27. <title>Untitled Document</title>
  28. </head>
  29.  
  30. <body>
  31. <h3>DODAJ NOWY SAMOCHÓD DO BAZY</h3>
  32.  
  33. <!-- FORMULARZ HTML WPROWADZANIA DANYCH -->
  34. <form name="form1" method="post" action="samochody-dodaj.php">
  35. marka: <input name="marka" type="text" size="20">
  36. model: <input type="text" name="model" size="20">
  37. kolor: <input type="text" name="kolor" size="20">
  38. pojemność: <input type="text" name="pojemnosc" size="20">
  39. paliwo: <input type="text" name="paliwo" size="20">
  40. <input value="dodaj samochód" type="submit">
  41. </form>
  42. <!-- KONIEC FORMULARZA -->
  43.  
  44. </br>
  45. <a href="samochody.php">ť lista samochodów</a>
  46. </body>
  47. </html>
Go to the top of the page
+Quote Post
jacobson
post 10.11.2013, 00:26:09
Post #2





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

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


musisz sprawdzac czy zmienna $_POST jest pusta jezeli tak to zeby nie wykonywal zapytania, a jak cos sie znajduje w tej zmiennej to wtedy normalnie wykonuje zapytanie smile.gif
Go to the top of the page
+Quote Post
alex19
post 10.11.2013, 00:31:30
Post #3





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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



  1. <?php
  2. If (isset($_POST['marka'])){
  3. require ('config.php'); // wstawiamy dane configuracyjne do polaczenia z baza
  4.  
  5. // tworzymy krotkie nazwy zmiennych otrzymanych z formularza
  6. $marka=$_POST['marka'];
  7. $model=$_POST['model'];
  8. $kolor=$_POST['kolor'];
  9. $pojemnosc=$_POST['pojemnosc'];
  10. $paliwo=$_POST['paliwo'];
  11.  
  12. // przekazujemy wartosci zmiennych do odpowiednich pol w bazie danych
  13. // WSTAW DO tabeli test (kolumny w bazie) WARTOSCI (wartosci zmiennych)
  14. $zapytanie = "INSERT INTO test (marka, model, kolor, pojemnosc, paliwo) VALUES ('$marka','$model','$kolor','$pojemnosc','$paliwo')" or die(mysql_error());
  15. // wykonaj zapytanie
  16. $wynik = mysql_query($zapytanie);
  17. // komunikat potwierdzający poprawne zapisanie danych w bazie
  18. if ($wynik) {
  19. echo 'Prawidłowo dodano do bazy danych';
  20. }
  21.  
  22. mysql_close($db);
  23. }
  24. ?>
  25.  
  26. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  27. <html>
  28. <head>
  29. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  30. <title>Untitled Document</title>
  31. </head>
  32.  
  33. <body>
  34. <h3>DODAJ NOWY SAMOCHÓD DO BAZY</h3>
  35.  
  36. <!-- FORMULARZ HTML WPROWADZANIA DANYCH -->
  37. <form name="form1" method="post" action="samochody-dodaj.php">
  38. marka: <input name="marka" type="text" size="20">
  39. model: <input type="text" name="model" size="20">
  40. kolor: <input type="text" name="kolor" size="20">
  41. pojemność: <input type="text" name="pojemnosc" size="20">
  42. paliwo: <input type="text" name="paliwo" size="20">
  43. <input value="dodaj samochód" type="submit">
  44. </form>
  45. <!-- KONIEC FORMULARZA -->
  46.  
  47. </br>
  48. <a href="samochody.php">ť lista samochodów</a>
  49. </body>
  50. </html>

[/quote]
Go to the top of the page
+Quote Post
Lukasso
post 10.11.2013, 02:56:58
Post #4





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

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


Super. Działa. Czy są jeszcze jakieś inne metody sprawdzenia, które można by tutaj użyć. Podana powyżej działa, ale chyba nie jest podręcznikową. To raczej rozwiązanie praktyczne, prawda?
Go to the top of the page
+Quote Post
alex19
post 10.11.2013, 10:10:34
Post #5





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Nie wiem czy są jakieś metody podręcznikowe czy nie. To chyba jedyny sensowny sposób na sprawdzenie czy można insertować dane do bazy, bo one muszą istnieć, a istnieją jak są zmienne POST.

Można sprawdzić za jednym zamachem wszystkie dane z formularza w tym if, a co za tym idzie wstępnie je zwalidować.

Zauważ że mój kod sprawdza tylko czy formularz został wcześniej wysłany, ale w żaden sposób nie zabezpiecza przed dodaniem pustych danych.
Go to the top of the page
+Quote Post
com
post 11.11.2013, 01:20:41
Post #6





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Polecam zajrzeć do manuala, a nie zadawac tak głupie pytania ( nie ma czegos takiego jak sposób podrecznikowy, a jak tego w "podreczniku" nie ma to masz słaby ten "podrecznik")
isset empty

Biblia php to http://www.php.net/manual/pl/ a nie "podreczniki" smile.gif
Go to the top of the page
+Quote Post
Lukasso
post 13.11.2013, 17:22:57
Post #7





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

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


Cytat
Zauważ że mój kod sprawdza tylko czy formularz został wcześniej wysłany

alex19 - dokładnie o to mi chodziło, dzięki, problem został rozwiązany.
Źle się wyraziłem mówiąc "metoda podręcznikowa" miałem na myśli uniwersalne rozwiązanie, które można zastosować bez modyfikacji w każdym formularzu. Użyłeś wartości ze zmiennej "marka", a zmienna o tej nazwie może nie występować w innym formularzu. W jednej z książek z których się uczę znalazłem rozwiązanie. Działa dokładnie tak jak Twój przykład, tylko zamiast zmiennej "marka" użyto wartości z ukrytego pola "submitted" umieszczonego na końcu formularza. Dzięki temu nie trzeba za każdym razem zmieniać nazwy zmiennej na taką, która jest w danym formularzu. O takie, uniwersalne rozwiązanie mi chodziło. Dzięki za pomoc.

Tak to wygląda (może przyda się komuś, kto się uczy tak jak ja):
  1. if (isset($_POST['submitted'])) {
  2. require ('config.php');

i w formularzu:
  1. <input type="hidden" name="submitted" value="TRUE"/>

Cytat
Polecam zajrzeć do manuala, a nie zadawac tak głupie pytania

com - właśnie zacząłem naukę php praktycznie od "zera". Uważam, że na tym etapie żadne pytanie nie jest głupie. Manual na pewno jest super bazą wiedzy, ale na początku trzeba zrozumieć na czym polega to całe php, bo tylko mając jakąś podstawową wiedzę na ten temat można umiejętnie z manuala korzystać. Dla mnie na to jeszcze za wcześnie. Proponuję, żeby ktoś kto nie ma ochoty pomóc, powstrzymał się od nic nie wnoszących komentarzy. Dzięki za link do "biblii", znam go.
Go to the top of the page
+Quote Post
alex19
post 13.11.2013, 17:55:31
Post #8





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Cytat(Lukasso @ 13.11.2013, 17:22:57 ) *
alex19 - dokładnie o to mi chodziło, dzięki, problem został rozwiązany.
Źle się wyraziłem mówiąc "metoda podręcznikowa" miałem na myśli uniwersalne rozwiązanie, które można zastosować bez modyfikacji w każdym formularzu. Użyłeś wartości ze zmiennej "marka", a zmienna o tej nazwie może nie występować w innym formularzu. W jednej z książek z których się uczę znalazłem rozwiązanie. Działa dokładnie tak jak Twój przykład, tylko zamiast zmiennej "marka" użyto wartości z ukrytego pola "submitted" umieszczonego na końcu formularza. Dzięki temu nie trzeba za każdym razem zmieniać nazwy zmiennej na taką, która jest w danym formularzu. O takie, uniwersalne rozwiązanie mi chodziło. Dzięki za pomoc.


Jak chcesz takim sposobem to mozesz dodac value do samego przycisku "wyslij" smile.gif

"Moja" metoda jest jednak o tyle lepsza, że i tak trzeba dane z formularza odebrac i sprawdzic co przyszlo. Zakładam, że akurat w tym przykładowym formularzu wszystkie dane sa obowiązkowe, więc powinieneś i tak każde z pól formularza sprawdzić czy nie jest nie tyle co "set" jak "empty".
  1. if ( !empty($_POST['pole1']) && !empty($_POST['pole2']) && .... ){
  2. //teraz wiadomo, że nie są puste i można zapisywać do bazy
  3. }
  4.  
Go to the top of the page
+Quote Post
b4rt3kk
post 13.11.2013, 18:01:07
Post #9





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Uniwersalne metody na sprawdzenie czy formularz został wysłany:

1.
  1. if (isset($_POST)) {


2.
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {


Masowe sprawdzenie czy pola nie są puste:
  1. foreach ($_POST as $key => $item)
  2. if ($item == '')
  3. echo $key . ' jest puste!<br/>';


W przypadku nazw tablicowych analogicznie j.w. Oczywiście to tylko podstawy, warto by jeszcze sprawdzić np. czy mail ma odpowiedni format, itd.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
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 Wersja Lo-Fi Aktualny czas: 30.04.2025 - 04:15