![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Chcę zrobić proste zaplecze administracyjne tak żeby dodawać na stronie artykuły (rekordy do tabeli"artykuly") z poziomu strony a nie poprzez phpMyAdmin. Zrobiłem formularz w form.php, w którym wszystko będę dodawał:
W pliku admin.php sprawdziłem czy wszystko poprawnie się wyświetla bez dodawania tego do bazy danych, przy poniższym kodzie jest wszystko okej:
Ale gdy chcę żeby teraz te dane dodało mi do BD, to zamiast pięknie się wczytać i dodać je, wywala mi błąd 500 i nic się nie wczytuje. Próbowałem to dodać na dwa sposoby (poniżej już bez tego wcześniejszego wyświetlania, same fragmenty z mysql): Pierwszy z INSERT INTO tabela VALUES wartosci:
Oraz drugi wykorzystując INSERT INTO tabela SET wartosc1='a' wartosc2='b':
Co jest nie tak? Może przeoczyłem jakiś nawias albo cudzysłów/apostrof, ale sprawdzałem to kilka razy. Próbowałem też dawać /" zamiast ', próbowałem bez apostrofów, ale nadal to samo... |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Nie możesz w ten sposób wstawiać zmiennych w zapytanie:
Po pierwsze:
zamykasz zmienne pomiędzy apostrofami Po drugie:
Lub jeśli nie chcesz przepisywać zmiennych zbuduj w ten sposób zapytanie:
Ten post edytował b4rt3kk 4.09.2012, 12:30:45 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zobacz dokładnie dlaczego zwracany jest błąd 500. Serwer powinien podać w logach szczegółową informację. Tak to wróżenie z fusów. Możesz też od razu wywalić te wszystkie mysql_* i poczytać o PDO oraz SQL Injection.
Ten post edytował viking 4.09.2012, 12:29:34 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
b4rt3kk,
wielkie dzięki (IMG:style_emoticons/default/smile.gif) po samym dodaniu apostrofów czyli
nadal było to samo, kiedy użyłem już samego '$tytul' to owszem, admin.php został i wszystko wyświetliło się poprawnie, ale nic nie zostało dodanego do bazy. Ta zmienna na pewno jest równa wartości z tablicy? Co do ostatniego sposobu - działa perfecto! viking, ten błąd jest chyba wywalany wtedy kiedy mam jakiś błąd w kodzie, bo już parę razy tak miałem, ale wolałem też i to dodać. W każdym razie przeglądarka wyświetla mi komunikat: Cytat Błąd HTTP 500 (Internal Server Error): Napotkano nieoczekiwaną sytuację przy próbie zrealizowania żądania przez serwer.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Jeśli uprzednio nie dokonasz przepisania wartości z tablicy $_POST na zmienne, np. $tytul no to oczywiście będą one puste i nic nie wstawisz do bazy. (IMG:style_emoticons/default/smile.gif) Ja osobiście preferuje taki sposób, bo łatwo się pogubić w masie kropek i apostrofów.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Można bezpośrednio wrzucić element tablicy $_POST do zapytania, choćby tak :
albo tak :
Jednak drugi przypadek jest niezabezpieczony przed sqlInjection. Na początek dobrym pomysłem może być użycie sprintf |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
viking, ten błąd jest chyba wywalany wtedy kiedy mam jakiś błąd w kodzie, bo już parę razy tak miałem, ale wolałem też i to dodać. W każdym razie przeglądarka wyświetla mi komunikat: To ja wiem. Tylko jeśli zajrzysz w logi serwera zobaczysz że będzie tam pewnie błąd składni near something. Musisz nauczyć się czytać błędy bo daleko nie pociągniesz w programowaniu. I zamiast polecanych tu udziwnień naprawdę zainteresuj się bindowaniem parametrów bo a) jest to bezpieczne, b) rozszerzenie mysql wyleci z przyszłych wersji PHP, c) jak uczyć się to porządnie. Aktualnie twój kod jest podatny na byle włamanie. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
b4rt3kk,
no tak, ale dałem ciała z tym (IMG:style_emoticons/default/wink.gif) teraz to uzupełniłem:
ale nadal jest tak samo, najwyżej potem jeszcze pogrzebię. peter13135, dzięki, ale moja obecna znajomość php jest właśnie na poziomie przedszkolnym i też niezbyt rozumiem skąd ` i nawiasy klamrowe, a tak w ciemno nie chcę kombinować. Kiedyś jeszcze do tego fragmentu wrócę jak znajdę chwilkę, kiedyś może być przydatny (IMG:style_emoticons/default/smile.gif) viking, dzięki za rady, o bindowaniu też poczytam. A w jaki sposób te logi sprawdzić? Ten post edytował kurys 4.09.2012, 14:07:57 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
W zależności od tego gdzie zainstalowałeś serwer. Nic nie napisałeś więc ciężko powiedzieć. Pod linuksem standardowo szukaj w /var/log, pod win w ścieżce instalacji httpd-error.log czy coś takiego w folderze zapewne logs. Na początku skryptu daj:
Tworzenie potworów w stylu $a =$b; powtarzane x100 nie ma sensu bo tylko pamięć zapychasz. Albo poprawnie zamykaj stringi ', " albo \", \' albo jeszcze przykład ze sprintf z dokumentacji http://www.php.net/manual/en/function.mysql-query.php i obowiazkowo mysql_real_escape_string() |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ok, mam taki opis błędu:
Cytat [:error] [pid 17992:tid 1060] [client ::1:36856] PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) w linii 37, czyli:
Tylko nie wiem dlaczego " nie powinno tam być... |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Przepisz to na:
Albo jeszcze lepiej w PDO:
http://wwwgo.pl/article/10/php_data_object...luge_baz_danych |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.09.2025 - 01:51 |