![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 18.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam, napisałem skrypt który obsługuje błedy i dodaje informacje do bazy danych a nastepnie na innej stronie informacje sa odczytywane. Chciałbym was zapytać jak oceniacie mój skrypt i czego w nim brakuje.
Oczywiście brakuje tutaj obslugi błedów co do JS,PHP itd jak mam sformatować zmienne aby nie formatowały kodu JS, PHP itd ![]() Dodawanie informacji do bazy danych
Odczytywanie informacji
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
1) $numerrek = stripslashes($wiersz['numer']); Po co te stripslashes? 2) if(strlen($lokalizacja) > 50) { echo 'Dodawany plik nie może mieć nazwy dłuższej niż 50 znaków'; exit; } I teraz sobie pomysl - masz do wypełnienia formularz, wypełniasz go pół godziny i klikasz ZAPISZ. A na ekranie co? A na ekranie komunikat, że jedno pole ma za dużo znaków. A teraz co? A teraz znowu musisz przez pół godziny wypełniać formularz i modlić się, by tym razem nie było żadnego błędu bo znowu wszystko co wprowadziłeś szlag trafi... -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 18.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
1)stripslashes po to zeby sprowadzic tekst dalej do normalnej formy jak przed dodaniem do bazy danych uzylem funkcji mysql_escape_string
2)
to muszę miec bo mam miejsce tylko na 50 znakow w bazie danych W jaki sposób mam zrobić aby wyświetlalo komunikat a nie usuwało wszystkich wprowadzonych danych?? I co z tym filtrowaniem przed JS? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 23 Dołączył: 23.04.2013 Ostrzeżenie: (0%) ![]() ![]() |
W jaki sposób mam zrobić aby wyświetlalo komunikat a nie usuwało wszystkich wprowadzonych danych?? Najprostsze co mi przychodzi do głowy, to "Say hello to HTML!". ; ) Możesz cofnąć się o jeden krok do tyłu i mieć pewność, że POSTEM przejdzie maksymalnie 50 znaków. "maxlenght" to jedno z rozwiązań, ma jednak jeden błąd, ucina wklejany tekst (jeśli jest dłuższy niż określona długość), tak więc niepełnosprytny internauta może tego nawet nie zauważyć (gdy obetnie mu część nazwy pliku). Możesz się wspomóc "placeholderem" (HTML5), który podkreśli ile znaków ma być (w wypełnianym polu wyświetla tekst, np. maksymalna długość 50 znaków), albo za pomocą "pattern" (HTML5) opiszesz nazwę pliku przy pomocy wyrażeń regularnych (przykładowo upewniając się, że ostatnie cztery znaczki to "kropka_literka_literka_literka"). Powyższe działania dadzą Ci gwarancję, że więcej niż 50 znaków w $lokalizacja nie znajdziesz (jedynie jaskiniowcy używający IE 8 i starszych wersji mogą przez to przejść - ale wtedy atakuj ich JS). Walidację formularzy można także przeprowadzić za pomocą JS - wtedy można nawet wyświetlić jakiś komunikat. Co do wyświetlania komunikatu w PHP - po wciśnięci "submit" i po odpaleniu skryptu PHP do formularza można powiedzieć chyba tylko "goodbye my beloved friend!" - a jak się opuści formularz, to później trzeba jakieś akrobacje przechodzić, aby te dane wróciły (w sumie możesz w pliku z formularzem dorzucić trochę skryptu PHP, który przechwytuje to co wraca ze skryptu dodawania info do bazy danych gdy $lokalizacja > 50, tj. w linijce nr 21. zamiast "exit" robisz powrót do formularza i zwracasz dane przy okazji wyświetlając komunikat). Ogólnie do sprawdzania formularzy bardzo dobrze nadaje się HTML i JS - odsieją większość błędów, a jak ktoś używa IE 8 i later, to niech wypełnia pola drugi raz... w formularzu możesz dodać "jeśli masz IE 8 to będziesz drugi raz wpisywał dane gdy coś pójdzie nie tak - ściągnij sobie prawdziwą wyszukiwarkę!" ; > To oczywiście tylko moje przemyślenia na szybko - na tym forum są świetni programiści, tak więc na pewno ktoś wpadnie na lepszy pomysł. Ten post edytował Dejmien_85 18.05.2013, 00:55:44 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
ad1) Wiem że uzyles mysql_escape_string. Ale to sluzy nie rozwaleniu zapytania a nie dodawaniu dodatkowych slashy ktore potem ci się niby wyświetlają. Stripslashes jest zbedne. A jesli u ciebie jest niezbędne, znaczy że na serwerze masz włączone MAGIC_QUOTES - wyłącz to
ad2) Normalnie. Nie rob EXIT po bledzie, tylko wyswietlaj blad, ale też wyswietlaj formularz gdy jest blad z danymi, które już ktos wprowadzil -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 18.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dobrze, tutaj to rozumiem, tak jak mówisz dorzuce trochę kodu PHP do formularza który będzie zapobiegal usunięcia tego co wprowadził user w razie błędu. Najbardziej jednak chodzi mi o tekst wprowadzany do zmiennej $komentarz, można do niego dodać kawałek kodu JavaScript który doda się do bazy danych a następnie wyświetli na następnej podstronie i rozwali mi stronkę (jakieś przekierowanie czy cos). Jak temu zapobiec aby wprowadzane dane były formatowane w taki sposób żeby nie było możliwe użycia przez jakiegoś szkodliwego użytkownika JavaScriptu or something else
<?php $item = "Zak's Laptop"; $escaped_item = mysql_escape_string($item); printf ("Łańcuch ze znakami unikowymi: %s\n", $escaped_item); ?> Troszkę nie rozumiem, ta funkcja jak widać wstawia znaki ukosnika przed apostrofami, i ja tekst w takiej formie wrzucam do bazy danych (ochrona przed SQL injection tak) a gdy później te dane z bazy danych chce z powrotem wyświetlić to już nie chce tych ukosnikow i używam striplashes żeby te ukosniki usunąć albo tak jak mówisz nie podejmuje żadnego działania w tym kierunku jeśli jest ustawione magic_quotes Popraw mnie jeśli się mylę |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
$item = "Zak's Laptop";
$escaped_item = mysql_escape_string($item); printf ("Łańcuch ze znakami unikowymi: %s\n", $escaped_item); Kurcze, ale ty nie wyświetlaj sobie tego co robi mysql_escape_string - ta funkcja robi tak, by było dobrze przy wkładaniu do bazy. Ty nie patrz ze ona dodaje ukosniki, bo ona ma dodawać ale to tylko dla bazy dodaje. Jak z bazy pobierzesz dane to one już tych ukośników mieć nie będą..... No chyba że masz włączone MAGIC_QUOTES - to wtedy masz podwojnie ukosniki robione i one jak pobierzesz z bazy to będą. Dlatego ci mowie, że masz wyłączyć MAGIC_QUOTES jeśli masz włączone i już potem żadnych stripslashes nie używaj. No już jaśniej się tego nie da napisać. Co do kodu js, to jeśli nie pozwalasz by ktokolwiek ci wkladał jakieś kod html/js to przed wyswietlanieam danych używaj htmlspecialchars() - wowczas nawet jak ktoś ci wstawi js to nic ci nie zrobi. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 18.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dobra czaje dzięki
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.06.2025 - 04:51 |