![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 4.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mam taki problem:
Użytkownik wskazuje ilosc zdjec do galeri newsa do wgrania na serwer, po czym tworzona jest tablica $_FILES. W jaki sposób dodać zawartość tej tablicy (wielu rekordów) za pomocą jednego zapytania ? tabela news_gal do ktorej wstawic chiałbym wiele rekordów wyglada tak:(id, id_newsa, obraz) oto kod dynamicznego tworzenia ilosci zdjec do wstawienia:
A to kod (błędny) zapytania
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Zrób sobie foreach tej tablicy i w nim INSERT, przy okazji możesz skorzystać z transakcji.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ogólnie możesz zastosować wiele dodawanych wartości w INSERT w SQL przecież (IMG:style_emoticons/default/smile.gif)
Przykład:
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Ładowanie wszystkiego do jednego INSERT'a po przecinku, jest szybsze/wydajniejsze/lepsze, niż oddzielne wykonywanie INSERT'ów bez korzystania z transakcji/z wykorzystaniem transakcji?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
W tym przypadku - sam sobie odpowiedz (IMG:style_emoticons/default/smile.gif)
EDIT: Transakcja tutaj to dodatek - możesz jej równie dobrze użyć w moim zapytaniu lub nie - to już zależy od twórcy - nie to było tematem. Ten post edytował Sephirus 20.02.2013, 08:48:14 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Gdybym wiedział, nie pytałbym (IMG:style_emoticons/default/tongue.gif)
Ale zaryzykuję, że jest równe oddzielnym insertom z wykorzystaniem transakcji? edit: w tym konkretnym przypadku, to nie ma znaczenia pewnie, ale przy większej ilości, to już ma znaczenie, chodzi mi o ten drugi przypadek. Ten post edytował Damonsson 20.02.2013, 08:49:03 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Gdybym wiedział, nie pytałbym Ale zaryzykuję, że jest równe oddzielnym insertom z wykorzystaniem transakcji? Ogólnie tak - zgadzam się z tym, ale tylko jeśli autor zbierze wszystkie zapytania w kupę (w jakiś jeden ciąg - łącznie ze startem transakcji) i je wyśle raz do DB - inaczej wykonywanie oddzielnych zapytań (autor korzysta z mysql_***) będzie mniej wydajne (IMG:style_emoticons/default/smile.gif) EDIT: Dla duuuuużej liczby rekordów to nawet moją metodę trzeba by było dzielić dodając po X rekordów tak by nie przekroczyć maksymalnej długości zapytania. Tu bardziej chodzi o dobry nawyk. Lepiej od razu zrobić coś na zasadzie: Kod pętla() { Tu generuje całe zapytanie SQL z dodawaniem wielu rekordów } Tu wykonuje jedno zapytanie Niż: Kod pętla() { Każdorazowo wykonuje zapytanie } Dla dużej liczby tych plików poszła by masa zapytań, a że autor korzysta z funkcji rodziny mysql_*** to z wydajnością było by to na bakier (IMG:style_emoticons/default/wink.gif) EDIT2: Bo zapomniałem - moja metoda wymusza po prostu takie myślenie (IMG:style_emoticons/default/smile.gif) Ten post edytował Sephirus 20.02.2013, 08:56:40 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 4.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
A co jesli $_FILES['name'] tez jest tablica ? Tzn. w formularzy <select> wybieram wiecej niz 1 zdjecie... Wtedy to wyglada tak:
Co trzeba zmodyfikować w:
Dodać jeszcze jedną pętle foreach ? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
(IMG:style_emoticons/default/smile.gif) EDIT: miałeś mały błąd. Ten post edytował Sephirus 20.02.2013, 09:27:54 |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Ładowanie wszystkiego do jednego INSERT'a po przecinku, jest szybsze/wydajniejsze/lepsze, niż oddzielne wykonywanie INSERT'ów bez korzystania z transakcji/z wykorzystaniem transakcji? Zdecydowanie (przynajmniej w przypadku PostgreSQL). Przy jednym projekcie miałem okazję sprawdzić to na własnej skórze. Multi-insert jest zdecydowanie szybszy. Zależy oczywiście ile danych jest do wstawienia. Różnica będzie rosła wraz z ilością danych do wstawienia. Oczywiście przy ogromnej liczbie danych warto rozważyć zapis danych do pliku i późniejsze LOAD DATA INFILE. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 4.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
A błędne czasem nie jest to ze w panelu phpmyadmin w tablei news_gal w ostatniej kolumnie 'obraz' wyswietla nie nazwe obrazu tylko 'Array' ? Bo to własnie tablice mi dodaje a nie konkretna nazwe pliku.
Oto co mi wywala: Notice: Array to string conversion in E:\xampp\xampp\htdocs\wtz_php\dodaj_zdj_akt.php on line 26 Przypominam, że chciałbym dodać więcej niż jeden plik (obraz). W zakresie 1-10. Ten post edytował babcia_smierc 20.02.2013, 09:55:17 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Na pewno dobrze przepisałeś ten kod?
Skoro $tablica to $_FILES['name'] to w foreach powinno być wszystko ok... |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 4.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem kopiuj wklej i oto co mi wywala:
Notice: Undefined index: name in E:\xampp\xampp\htdocs\wtz_php\dodaj_zdj_akt.php on line 21 Warning: Invalid argument supplied for foreach() in E:\xampp\xampp\htdocs\wtz_php\dodaj_zdj_akt.php on line 25 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 a oto linia 25:
Ten post edytował babcia_smierc 20.02.2013, 10:04:47 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
ajjj takie przeoczenie (IMG:style_emoticons/default/smile.gif) sam mogłeś wpaść na to (IMG:style_emoticons/default/tongue.gif) Zapomnieliśmy obaj o tym że INPUT FILE ma swoją nazwę (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 4.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Działa !
Tylko nie dodaje mi identyfikatora newsa do bazy (id,id_newsa,obraz). Nie wiecie dlaczego ? Ten post edytował babcia_smierc 20.02.2013, 10:18:58 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A odbierasz to ID z parametru GET w ogóle? (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 4.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat $_GET['id'] A jak się nazywa parametr w adresie? (IMG:style_emoticons/default/smile.gif) Co masz w atrybucie ACTION w FORM? (IMG:style_emoticons/default/smile.gif) Chłopie! ;P (IMG:style_emoticons/default/facepalmxd.gif) |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 4.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Problem w tym ze na jednej stornie mam 2 formularze (1 do okreslenia ilosci zdjec która chce sie uploadowac a 2 do wysyłania tych zdjec).
1:
2: |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Przecież możesz to połączyć w jeden (IMG:style_emoticons/default/smile.gif)
Liczbę zdjęć możesz określi po liczbie plików (IMG:style_emoticons/default/wink.gif) Z tym musisz już sobie sam poradzić. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 22:38 |