Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapis w bazie kilku wartości z SELECT
Forum PHP.pl > Forum > Przedszkole
user767
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
sadistic_son
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?
user767
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.
nospor
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
user767
  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
nospor
rety....
wyraźnie napisalem:
var_dump($_POST);
czy ja pisze nie wyraźnie?
user767
  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
nospor
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
user767
Użyję implode() i explode() i powiem, jak mi wyszło.
Ulysess
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
user767
  1. $osoby = implode(", ", $Osoby);


everth
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.
nospor
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
everth
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.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.