Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zapis w bazie kilku wartości z SELECT, SELECT multiple
user767
post 22.09.2010, 18:13:12
Post #1





Grupa: Zarejestrowani
Postów: 178
Pomógł: 5
Dołączył: 13.09.2010

Ostrzeżenie: (40%)
XX---


Mam w bazie tabelę osoby, a w niej dane imie i nazwisko.
Przedstawię skrypt, w którym nie wiem jak wpisać, aby zapisało mi kilka wybranych z listy SELECT multiple wartości do bazy. Zapisuje tylko jedną z dwóch wybranych. Pole osoby w bazie do zapisywania do bazy grupy ma postać TEXT.


  1. <fieldset>
  2. <legend>Dane</legend>
  3. <br />Nazwa:<br /><input name="Nazwa" /><br /><br />
  4. Opis:<br /><input name="Opis" type="text" /><br /><br />
  5. Osoby:<br />
  6. <select name="Osoby" type="text" multiple="multiple" size="8" />
  7. <?
  8. mysql_connect('localhost', 'admin', 'pass') or die("Błąd w połączeniu z serwerem!");
  9. mysql_select_db('menadzer') or die("Błąd w połączeniu z bazą danych!");
  10.  
  11. $query="SELECT * FROM osoby";
  12. $wynik=mysql_query($query);
  13.  
  14. if(mysql_num_rows($wynik) > 0) {
  15.  
  16. while($r = mysql_fetch_array($wynik)) {
  17. echo "<option value=\"{$r[2]} {$r[1]}, \"> ".$r[2]." ".$r[1]." </option>"; }
  18. }
  19. else {
  20. echo "<option checked=\"checked\" value=\"brak\">Brak osób w bazie</option>"; }
  21. ?>
  22. </select>
  23. <br /><br />
  24. </fieldset>


1-kolumna imie, 2 - nazwisko z bazy osoby
Go to the top of the page
+Quote Post
sadistic_son
post 22.09.2010, 21:36:12
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat(user767 @ 22.09.2010, 19:13:12 ) *
aby zapisało mi kilka wybranych z listy SELECT multiple wartości do bazy. Zapisuje tylko jedną z dwóch wybranych.
A gdzie w tym skrypcie masz jakikolwiek zapis do bazy?


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
user767
post 22.09.2010, 22:28:39
Post #3





Grupa: Zarejestrowani
Postów: 178
Pomógł: 5
Dołączył: 13.09.2010

Ostrzeżenie: (40%)
XX---


Dałem tylko pole SELECT, dalej to idzie :
  1. <?php
  2.  
  3. mysql_connect('127.0.0.1', 'user', 'pass');
  4. mysql_select_db('menadzer') ;
  5.  
  6. $id = addslashes(trim($_GET['id']));
  7. $nazwa = addslashes(trim($_POST['Nazwa']));
  8. $opis = addslashes(trim($_POST['Opis']));
  9. $osoby = addslashes(trim($_POST['Osoby']));
  10.  
  11.  
  12. $zapytanie = "UPDATE grupy SET id='$id',nazwa='$nazwa',opis='$opis',osoby='$osoby' ";
  13.  
  14. $idzapytania = mysql_query($zapytanie);
  15.  
  16. header("Location: komunikat.html");
  17.  
  18. ?>
  19.  


Teraz coś jest z id jeszcze, GET id='', a POST nie zapisuje id dobrze.

Ten post edytował user767 22.09.2010, 22:38:55
Go to the top of the page
+Quote Post
nospor
post 23.09.2010, 10:05:34
Post #4





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Jak chcesz selectem multiple przekazac kilka wartosci, to nazwa musi byc tablicowa
nie: name="Osoby"
a: name="Osoby[]"

a nastepnie sobie zobacz co zwraca ci post
var_dump($_POST)

Na podstawie tej wiedzy zbuduj teraz poprawne zapytanie smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
user767
post 23.09.2010, 13:08:03
Post #5





Grupa: Zarejestrowani
Postów: 178
Pomógł: 5
Dołączył: 13.09.2010

Ostrzeżenie: (40%)
XX---


  1. <select name="Osoby[]" type="text" multiple="multiple" size="8" />
  2.  
  3. <?
  4.  
  5. mysql_connect('127.0.0.1', 'root', 'krasnal') or die("Błąd w połączeniu z serwerem!");
  6. mysql_select_db('menadzer') or die("Błąd w połączeniu z bazą danych!");
  7.  
  8.  
  9. $query="SELECT * FROM osoby";
  10. $wynik=mysql_query($query);
  11.  
  12. if(mysql_num_rows($wynik) > 0) {
  13.  
  14. while($r = mysql_fetch_array($wynik)) {
  15. echo "<option value=\"{$r[2]} {$r[1]} \"> ".$r[2]." ".$r[1]." </option>"; }
  16. }
  17. else {
  18. echo "<option checked=\"checked\" value=\"brak\">Brak osób w bazie</option>"; }
  19. ?>
  20. </select>


  1. var_dump($_POST['Osoby[]']);
  2. $osoby = addslashes(trim($_POST['Osoby[]']));



NULL

Ten post edytował user767 23.09.2010, 13:09:14
Go to the top of the page
+Quote Post
nospor
post 23.09.2010, 13:10:23
Post #6





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




rety....
wyraźnie napisalem:
var_dump($_POST);
czy ja pisze nie wyraźnie?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
user767
post 23.09.2010, 13:33:57
Post #7





Grupa: Zarejestrowani
Postów: 178
Pomógł: 5
Dołączył: 13.09.2010

Ostrzeżenie: (40%)
XX---


  1. array(4) { ["Nazwa"]=> string(9) "samochody" ["Opis"]=> string(22) "samochody transportowe" ["Osoby"]=> array(1) { [0]=> string(13) "kowalski jan " } ["wyslij"]=> string(9) "Zapisz ?" }


A w bazie: Array

Ten post edytował user767 23.09.2010, 13:40:54
Go to the top of the page
+Quote Post
nospor
post 23.09.2010, 13:42:36
Post #8





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




No, i już widzisz gdzie masz swoje dane smile.gif

Dałeś POMOGL - rozumiem ze juz wszystko jasne?

Cytat
A w bazie: Array
No bo $_POST['Osoby'] to tablica. Jesli traktujesz tablice jak tekst to sie nie dziw ze masz tekst ARRAY. Musisz te tablice przetworzyc FOREACHem, albo IMPLODE


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
user767
post 23.09.2010, 13:55:21
Post #9





Grupa: Zarejestrowani
Postów: 178
Pomógł: 5
Dołączył: 13.09.2010

Ostrzeżenie: (40%)
XX---


Użyję implode() i explode() i powiem, jak mi wyszło.

Ten post edytował user767 23.09.2010, 14:14:36
Go to the top of the page
+Quote Post
Ulysess
post 23.09.2010, 14:15:11
Post #10





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


bo nie takie jest zastosowanie funkcji implode.. implode to odwrotność czyli jak masz tablice => 1,2,3,4,5,6 używając implode
  1. $ciag = implode('|', $tablica);

efektem tego będzie |1|2|3|4|5|6
a jak zastosować co twojego przykładu to pozostawiam już tobie do myślenia snitch.gif
Go to the top of the page
+Quote Post
user767
post 23.09.2010, 14:28:04
Post #11





Grupa: Zarejestrowani
Postów: 178
Pomógł: 5
Dołączył: 13.09.2010

Ostrzeżenie: (40%)
XX---


  1. $osoby = implode(", ", $Osoby);


Go to the top of the page
+Quote Post
everth
post 23.09.2010, 14:34:21
Post #12





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 23.09.2010, 11:05:34 ) *
Jak chcesz selectem multiple przekazac kilka wartosci, to nazwa musi byc tablicowa
nie: name="Osoby"
a: name="Osoby[]"

Trochę OFFTOP - @nospor, ja się nie zgodzę - przynajmniej u mnie PHP automatycznie konwertowało na tablicę jeśli były co najmniej dwa pola o tej samej nazwie.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
nospor
post 23.09.2010, 18:14:00
Post #13





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Cytat
Trochę OFFTOP - @nospor, ja się nie zgodzę - przynajmniej u mnie PHP automatycznie konwertowało na tablicę jeśli były co najmniej dwa pola o tej samej nazwie.
Mission imposible IV winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
everth
post 24.09.2010, 11:13:08
Post #14





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Znów twój punkt - a przysiągłbym że kiedyś spotkałem się z takim zachowaniem blinksmiley.gif, no trudno kolejny kamyczek do koszyka.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 9.05.2025 - 12:45