Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

PHP i MySQL - dodawanie danych do bazy

kecajs 26 Sty 2013 23:42 2118 10
  • #1 26 Sty 2013 23:42
    kecajs
    Poziom 17  

    Witam,
    mam przygotowany formularz, w którym wprowadzam dana, które są następnie metodą POST przesyłane do bazy danych. Ma to wykonać plik o nazwie "dodaj_mecz.php".
    Zawartość tego pliku jest następująca:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Problem polega na tym, że po naciśnięciu przycisku "Zapisz" od razu otrzymuję informację, że "Nie podano wszystkich potrzebnych danych...". Dostęp do bazy - user root, hasła brak - dane dostępne lokalnie. Nazwa bazy danych "zaklady_pilka_nozna", nazwa tabeli: "main".
    Mam wrażenie, że problem jest z formatowaniem danych przed dodaniem ich do bazy (addslashes) i zapewne przy zmiennych $data i $godz - nie jestem pewny, czy ma to tak być. Ale może się mylę.
    Pozdrawiam

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. Proszę to poprawić! - arnoldziq

    0 10
  • Pomocny post
    #2 26 Sty 2013 23:58
    marcinj12
    Poziom 40  

    $HTTP_POST_VARS to jakaś przestarzała składnia, zamiast tego od dawna stosuje się $_POST. Skoro dostajsz komunitkat który sam sobie wpisałeś, to znaczy że spełniony jest warunek IF - rozbij ten sługi IF na pojedyncze ze stosowną informacją (albo zrób var_dump($_POST)) i będziesz wiedział, który z nich jest pusty...
    Swoją drogą - to addslashes możesz już robić od razu na samej górze, przy przepisywaniu do zmiennych z tablicy $_POST. Zachęcam też do użycia mysqli i parametrów w zapytaniu.

    0
  • #3 27 Sty 2013 00:25
    kecajs
    Poziom 17  

    A czy "input type" z formularza może mieć coś wspólnego z tym problemem? W każdym "input type" mam wstawione text, mimo, że mam tam datę, godzinę i liczby z dwoma miejscami po przecinku.

    0
  • #4 27 Sty 2013 00:42
    marcinj12
    Poziom 40  

    W pierwszej kolejności zrób to co pisałem - sprawdź IFem każdą zmienną z osobna.

    0
  • Pomocny post
    #5 27 Sty 2013 00:51
    adamz74
    Poziom 30  

    Oczywiście, że może.

    Generalnie zakłada się, że potencjalny Użytkownik jest albo włamywaczem albo idiotą (bez obrazy) i wszystko to, co może wpisać w formularz jest potencjalnie niebezpieczne. Wszystkie dane przesyłane od Użytkownika aplikacji powinny być sprawdzone pod względem typu i zawartości, tj. jeśli ma być to liczba, to sprawdzasz czy jest to liczba z zakładanego zakresu, czy data czy jest datą, itd.

    Jeśli chodzi o tekst, to musisz odpowiednio pozamieniać wszystkie znali specjalne i w przypadku bazy mysql, lepiej jest użyć funkcji mysql_real_escape_string a nie addslashes.

    Pozdr!

    0
  • Pomocny post
    #6 27 Sty 2013 01:54
    paluch_gda
    Poziom 16  

    a ja tu widzę małego zonka przy warunku !$staw_X - wielkość znaków

    0
  • #7 27 Sty 2013 11:46
    kecajs
    Poziom 17  

    paluch_gda napisał:
    a ja tu widzę małego zonka przy warunku !$staw_X - wielkość znaków

    i to było właśnie przyczyną tego komunikatu.
    Teraz nie pojawia się żaden komunikat i nie są dodawane dane do bazy. Coś znowu skopałem...

    Dodano po 2 [minuty]:

    adamz74 napisał:
    Oczywiście, że może.

    Jeśli chodzi o tekst, to musisz odpowiednio pozamieniać wszystkie znali specjalne i w przypadku bazy mysql, lepiej jest użyć funkcji mysql_real_escape_string a nie addslashes.

    A jeżeli mam datę, godzinę i liczby z dokładnością do dwóch miejsc po przecinku, to co mam zastosować? Do liczb będzie dobre "doubleval"?

    0
  • Pomocny post
    #8 27 Sty 2013 16:32
    paluch_gda
    Poziom 16  

    zrób sobie echo $zapytanie i będziesz miał dokładną konstukcję zapytania jaki przesyłasz do bazy. Do pola daty i czasu masz bodajże typ pola DATETIME albo jakoś tak.

    0
  • #9 27 Sty 2013 16:45
    kecajs
    Poziom 17  

    paluch_gda napisał:
    zrób sobie echo $zapytanie i będziesz miał dokładną konstukcję zapytania jaki przesyłasz do bazy.

    zrobiłem
    Kod: php
    Zaloguj się, aby zobaczyć kod
    i nie pojawiło się nic

    0
  • Pomocny post
    #10 27 Sty 2013 17:19
    adamz74
    Poziom 30  

    Nie ma jednej metody i jest cała grupa funkcji, które mogą być użyte do sprawdzenia co zostało wprowadzone.

    W przypadku liczb, możesz na początku użyć is_numeric do sprawdzenia, czy jest to liczba. Następnie użyć floatval i ew. na koniec sformatować za pomocą number_format.

    Z datą i czasem jest większy problem. Są rożne konwencje zapisu i wszystkie poprawne. W związku z tym, po stronie formularza, najlepiej zrezygnować z możliwości samodzielnego wpisywania na rzecz rozwijanego kalendarza lub pól do wyboru a po stronie skryptu najprościej użyć strtotime.

    0
  • #11 16 Mar 2013 00:43
    kecajs
    Poziom 17  

    Problem rozwiązany, temat zamykam.
    Dzięki za pomoc, pozdrawiam.

    0