pala2222
17.04.2010, 14:35:55
witam
Jakiś czas temu stworzyłem temat w którym dostałem odpowiedzi na moje pytania, ale został on skasowany i nie pamiętam co tam było.
jak zapisać w PHP aby stworzyć tabele z polem w którym by był automatycznie dodawany czas dodania rekordu?
blooregard
17.04.2010, 15:12:18
Pole w bazie musi mieć ustawione NOT NULL DEFAULT 'to co ma byc tam dodawane'
pala2222
17.04.2010, 20:02:12
Dziękuje
Czy jest możliwość aby po dodaniu rekordu w zwrocie dostać jego id?
np
$zapytanie="dodanie jakiegoś rekordu"
i żeby w zmiennej wynik znajdował się jego id.
Jest mi to potrzebne bo będę chciał połączyć kilka tabeli ze sobą.
przynależnością, że tab2 należy do tab2 i będzie posiadało w jakieś tabeli jego id
myślałem nad tym
http://www.kess.snug.pl/?sid=10&pid=50bo to pokazuje ostatnio dodany rekord(zgadza się?), ale jeśli się coś zatnie i będzie większy ruch dodawania rekordów to mogę uzyskać czego innego id
Może macie jakiś inny pomysł
Mchl
17.04.2010, 20:08:13
pala2222
17.04.2010, 20:25:16
znalazłem tafunkcje, ale czy ona jest bezpieczna? bo ona pokazuje ostatnio dodany rekord
bo jeżeli sporo osób dodaje rekordów tym, samym czasie i jeśli coś się przytnie lub coś podobnego, to w tedy uzyskam nie swój id
Mchl
18.04.2010, 13:16:56
Uzyskasz zawsze ID ostatniego rekordu wstawionego w bieżącym połączeniu. Uważaj tylko na INESRTy z wieloma wierszami, bo wtedy dostaniesz id pierwszego wstawionego wiersza.
pala2222
18.04.2010, 18:20:58
Cytat(Mchl @ 18.04.2010, 14:16:56 )

Uzyskasz zawsze ID ostatniego rekordu wstawionego w bieżącym połączeniu.wtedy dostaniesz id pierwszego wstawionego wiersza.
Możesz jaśniej?
lub podaj najlepiej jakiś przykład
Mchl
18.04.2010, 21:13:54
pala2222
19.04.2010, 18:24:46
Jest możliwość, aby zapisać zapytanie sql przez naku ' przy dodawaniu rekordu, ponieważ mam problem nie związany z php.
"INSERT INTO `sql` (`id`, `nazwa`) VALUES (NULL,'chodzi o tą cześć')"
Mchl
19.04.2010, 18:59:52
Co?
pala2222
19.04.2010, 19:26:51
ok już wiem w czym problem(chyba)
jak zrobić, aby dla jednej zmiennej było wyłączone Magic_quotes
bo nie chce aby do znaku ' było dodawane \ czyli \'
bo mam problem bo jak przekazuję zmienną do post to dodaje mi \ przed ' a ja tego nie chce.
to co mam zrobić?
Mchl
19.04.2010, 19:37:47
Kod
if(get_magic_quotes_gpc()) {
$zmienna = stripslashes($_POST['zmienna']);
} else {
$zmienna = $_POST['zmienna'];
}
$zmienna = mysql_real_escape_string($zmienna);
pala2222
19.04.2010, 20:03:42
wielkie dzięki
to co podałeś to całkowicie nie działa
zadziałało jak przez przypadek usunąłem tą linijkę
to jest coś ważnego?
byś mógł dodać jakiś krotki komentarz do warunku tego ifa co on robi
Mchl
19.04.2010, 20:33:22
get_magic_quotes_gpc() sprawdza, czy magic_quotes są włączone. Jeśli tak, to stripslashes() usuwane są wszystkie dodane przez nie \.
Na koniec mysql_real_escape_string poprawnie zabezpiecza wszelkie znaki specjalne.
I teraz pytani: co takiego chcesz zrobić, że mysql_real_escape_string Ci przeszkadza? Jak wygląda Twoje zapytanie i co do niego chcesz wstawić?
pala2222
19.04.2010, 20:46:05
przesyłam przez post coś takiego
$a='kotek','167','4534', 'bla') '
i to wklejam
$zapytanie="INSERT INTO `sql` (`id`, `czas`,`nazwa`,`numer`,`kod`,`liczba`) VALUES (NULL,NULL,".$a;
no i
i bez tej ostatniej linijki działa, a z dodaje \
Mchl
19.04.2010, 20:58:38
Bardzo niedobry pomysł z punktu widzenia bezpieczeństwa. Powinieneś przesłać te wartości albo jako osobne zmienne, albo w tablicy, i w samym PHP odpowiednio je obrobić.
pala2222
19.04.2010, 21:19:13
bo ja to wysyłam przez curl w c++
i zależy mi żeby to szło jak najszybciej, mam tam takich zmiennych z 40 i gdybym każde z osobna tak wysyłał to zajmie to dużo więcej czasu w porównaniu z tym jak to umieśćże w jednej zmiennej POST i potem to ewentualnie podzielę.
masz może jakiś pomysł, żeby to jakoś jakoś zabezpieczyć bez przesyłania tego wszystkiego z osobna?
tam nie będzie jakiś tajnych danych ale nie chce, zęby ktoś narobił mi szkód
Mchl
19.04.2010, 22:13:55
A dlaczego miałoby być wolniej? Jedna "duża" zmienna, czy 40 "małych" i tak wszystkie idą w ramach jednego żądania...
Jak już chcesz w jednej, wysyłaj samą listę przedzieloną przecinkami.
Kod
//$_POST['zmienna'] = "kotek,167,4534, bla"
if(get_magic_quotes_gpc()) {
$zmienna = stripslashes($_POST['zmienna']);
} else {
$zmienna = $_POST['zmienna'];
}
$vars = explode(',',$zmienna);
foreach($vars AS $key => $value) {
$vars['$key'] = "'".mysql_real_escape_string($value)."'";
}
$values = implode(',',$vars);
$sql = "INSERT INTO `sql` (`nazwa`,`numer`,`kod`,`liczba`) VALUES ($values)";
pala2222
20.04.2010, 15:55:43
nie za bardzo to działa bo nie dodaje tych znaków prim
Mchl
20.04.2010, 15:58:22
Masz ustawione wyświetlanie błędów?
pala2222
20.04.2010, 16:09:42
tak testuje na cba żeby u siebie czegoś nie skopać przez przypadek w bazie danych
ten twój kod nie wstawia znaków prim, znaczy wstawia ale w słowie bla i je podwaja czyli jest bla,'bla'
Mchl
20.04.2010, 17:27:36
Zgadza się. Mój błąd:
Kod
foreach($vars AS $key => $value) {
$vars[$key] = "'".mysql_real_escape_string($value)."'";
}
pala2222
20.04.2010, 19:17:33
wielkie dzięki.
A byś mógł tak krótko napisać dlaczego tak sięrobi i jakie mogą być przesto kłopoty?
ale przecież to właściwie nic nie zmienia?
jak to działa w sposób bezpieczeństwa(bo programistyczne wiem jak działa ten kod)
mozęsz napisać na co jeszcze uważać?
z takich oczywistych rzeczy, zęby nie było żadnej wtopy
Mchl
20.04.2010, 19:32:17
Wszystko przez to:
http://en.wikipedia.org/wiki/SQL_injectionmagic_quotes miał być "cudownym" sposobem na zabezpieczenie się przed takimi atakami, ale z natury swojej takim być nie może (bo każdy system bazodanowy ma swoje własne znaki specjalne). Stąd też w nowszych wersjach PHP odchodzi się od stosowania magic_quotes. Nadal jednak na na wielu serwerach jest on włączony, stąd konieczność wykrywania i 'odczyniania' tego co zrobił (a robi tyle, że puszcza addslashes() na wszystkich zmiennych GET,POST,COOKIE i niektórych SERVER i FILES).
Jak już mamy zmienną w takiej postaci, w jakiej rzeczywiście wprowadził ją użytkownik, przepuszczamy ją przez właściwą funkcję zabezpieczającą. Dla MySQL jest to mysql_real_escape_string().
pala2222
21.04.2010, 19:13:32
co by było lepsze
zrobienie dodatkowych kolumn dla części rekordów, czy umieszczenie danych w jednej dodatkowej kolumnie?
podam to na przykładzie:
Załóżmy, że moja baza danych zawiera pojazdy i 1/5 z nich to auta, które zawierają dodatkowe dane abs, kolor nadwozia,paliwo,rodzaj nadwozia.
i co jest lepiej zrobić?
Stworzyć specjalnie da nich 4 kolumny w bazie z tymi wartościami, czy dodać jedną "inne" z której by też korzystały też inne pojazdy.
w tej kolumnie by były wpisywane wartości po /.
Teraz wyszukiwanie auta o Kolorze czerwonym by było poprzez %czerwony% w kolumnie "inne"
wiesz o co mi chodzi?
to jest dość bezpieczne i dobre rozwiązanie?
Mchl
21.04.2010, 19:32:50
To jest rozwiązanie, którego będziesz żałował. Lepiej zrobić listę EAV.
http://explainextended.com/2010/04/02/mult...-vs-not-exists/
pala2222
24.04.2010, 16:37:34
mam w planach szukajkę

by służyła tylko do szukania po tytułach
taką, że jak wypiszę call of duty 2
to najpierw wyskoczy mi
call of duty 2
potem wszystkie tytuły zawierające call of duty
i na końcu wszystkie z call lub duty
(ale tak żeby się nie powtarzało)
w cześniej się o to pytałem na forum i napisano mi, żeby zainteresował się FULL TEXT SEARCHING
naskrobałem takie coś, ale nic nie wypisuje a rekordy zawierają w kolumnie nazwa rekordy call of duty
$zapytanie="SELECT nazwa FROM gry WHERE MATCH (nazwa) AGAINST ('call of duty')";
echo "<td>".$wiersz['nazwa']."</td>"; }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.