Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][php] wrzucanie danych ze zmiennej do bazy
Forum PHP.pl > Forum > Przedszkole
katta1992
Witam

Rozpoczynam swoją zabawę z PHP i MySQL od pisania bazy danych na informatyce, dostałam trochę teorii, a reszta to owoc googlowania i wyciągania wniosków, więc bardzo prawdopodobne jest, że napiszę tu jakieś głupoty ;p

Chcę wykonać następujący manewr: pobrać dane z bazy (1 tabela, 2 kolumny: imię i nazwisko), umieścić je w formularzu typu select, ale na jednej liście (to zresztą zrobiłam), następnie pobrać dane, które wybierze użytkownik z tej listy i zapisać je w innej tabelce w bazie.
Nic prostszego, tylko że pracuję na 2 kolumnach, więc dane pobrane z listy to imię i nazwisko razem, zapisane pod jedną zmienną - a ja potrzebuję odszukać potem id tych danych, które w bazie nadal są zapisane osobno.
Jak to rozwiązać?
pyro
A nie można do tej tabeli dodać jednej kolumny `id` przed dwoma pozostałymi jako klucz podstawowy z atrybutem auto_increment?
katta1992
No mam w każdej tabelce id z AI. Tylko kiedy pobieram ze zmiennej dane "Jan Kowalski", to baza "nie wie", że to jest to samo co "1" "Jan" "Kowalski".
piotrooo89
do value wpisujesz ID danego rekordu. i kurcze troche to zagmatwałaś bo nie wiem czy dobrze zrozumiałem.
katta1992
okej, to wytłumaczę jeszcze raz winksmiley.jpg

Mam w tabelce w 3 kolumnach dane czytelnika. ID: 1, imię: Jan, nazwisko: Kowalski.
Pobieram dane 'imię' i 'nazwisko' do formularza select, i mam na rozwijanej liście różne opcje, w tym "Jan Kowalski". Opcja zapisana jest pod zmienną, której nazwę wpisuję w atrybucie name.
Użytkownik wybiera tą opcję i klika na przycisk formularza, który ma za zadanie sprawdzić, jakie id ma pan Kowalski. Z tym, że dane odczytane z formularza ("Jan Kowalski") są inne niż dane w bazie ("Jan" "Kowalski").
Jaśniej? smile.gif
piotrooo89
szczerze nie jaśniej wogóle... w bazie rekord imie Jan nazwisko Kowalski identyfikowany jest za pomocą ID 1 i to właśnie to musisz mieć w

  1. <option value="1">Jan Kowalski</option>


i teraz gdy użytkownik wybierze tego Jana to w baza będzie wiedziała że Jan Kowalski ma ID 1, nie wiem co tu jeszcze można powiedzieć.
pyro
@katta1992 tak jak powiedział Piotr, formularz wyśle dane z selecta, które znajdują się w atrybucie value. Ten atrybut value będzie wartością, którą powinnaś szukać w bazie danych (kolumna `id`).

  1. <option value="1">Jan Kowalski</option


  1. $result = mysql_query('SELECT * FROM tabela WHERE id = '.intval($_POST['id']))
Ulysess
pobierz jeszcze id i wyświetl ją w value . przy wysyłaniu danych przez formularz dajesz takie zapytanie

  1. $zapytanie = "SELECT `imie`,`nazwisko` FROM `nazwa_tabeli` WHERE `id`='$_POST['nazwa_name']' LIMIT 1";
  2. $wykonano_zapytanie= mysql_query($zapytanie) or die(mysql_error());
  3. $wynik = mysql_num_rows($wykonano);
  4.  

jeżeli zmienna $wynik tzn że taki rekord w bazie istnieje
InosU31
mi sie wydaje ze jak juz pobierzesz dane do formularza:

[PHP] pobierz, plaintext
  1. <select name="imie_nazwisko">
  2. <option value="$imie $nazwisko"> $imie $nazwisko
  3. </select>
[PHP] pobierz, plaintext
to pozniej musisz je rozlaczyc np:

[PHP] pobierz, plaintext
  1. $_rozlaczone = explode(" ", $_POST['imie_nazwisko']); // w tym miejscu rozbijasz dane - chyba sie da podac w nawiasach spacje - nie wiem czy nie trzeba uzyc jakiegos magicznego znaczka
  2. foreach ($_rozlaczone as $_dane => $_rekord)
  3. {
  4. $t1 = $_rekord[0]; // imie
  5. $t2 = $_rekord[1]; // nazwisko
  6. global $t1;
  7. global $t2;
  8. }
[PHP] pobierz, plaintext

i wrzucasz do bazy jako imie = t1

Sprobuj, ja tak rozlanczalem date ale odwrotnie jak ty czyli dane pobrane z bazy musialem rozlaczyc tam gdzie jest znak spacji ja mialem pauze a pozniej umieszcalem w select ;-)

Ps. nie wiem cyz to bedzie dizlalo bo u mnie troche jest to inaczej ale pokombinuj z tym foreach - te dane t1 i t2 dalem jako globalne zeby mozna bylo uzyc ich poza foreach.

pozdrawiam
katta1992
kod wygląda w skrócie tak:
  1. $imie="SELECT `imie` FROM `czytelnicy`;
  2. $query1=mysql_query($imie);
  3.  
  4. $nazwisko="SELECT `nazwisko` FROM `czytelnicy`;
  5. $query2=mysql_query($nazwisko);
  6.  
  7. while(($wynik1=mysql_fetch_row($query1))&&($wynik2=mysql_fetch_row($query2)))
  8. {
  9. echo "<select name="czytelnik"><option>".$wynik1[0].$wynik2[0]."</option></select>;
  10. }; // w rezultacie otrzymuję rozwijaną listę z imieniem i nazwiskiem
  11.  
  12. $czytelnik=$_POST[`czytelnik`]


i teraz w zmiennej czytelnik mam "Jan Kowalski", a takiej danej w bazie nie ma - przynajmniej nie w jednej kolumnie - więc nie mogę odszukać teraz, jakie id ma ten, kogo nazwisko jest zapisane w zmiennej czytelnik.
Jeśli i teraz nie wiesz, o co mi chodzi, to zmienię koncepcję i zrezygnuję z tego winksmiley.jpg)
piotrooo89
o mój boże czego w tych szkołach uczą...

  1. $imie="SELECT * FROM czytelnicy";
  2. $query=mysql_query($imie);
  3.  
  4. while(($wynik=mysql_fetch_array($query))
  5. {
  6. echo '<select name="czytelnik"><option value="'.$wynik['id'].'">'.$wynik['nazwisko'].' '.$wynik['imie'].'</option></select>;
  7. }; // w rezultacie otrzymuję rozwijaną listę z imieniem i nazwiskiem


no i teraz masz w zmiennej (a tak naprawdę tablicy super globalnej POST) ID tego janka kowalskiego. czegóż Ci więcej do szczęścia trzeba? smile.gif
katta1992
Okej, nauczycielem nie zostanę, bo nie umiem tłumaczyć o co mi chodzi ;D

Nadal nie widzę rozwiązania, ale posiedzę nad tym jeszcze, piszę w PHP od 4 dni, więc proszę o wyrozumiałość smile.gif)

Dziękuję za pomoc, pozdrawiam
pyro
@inosU31, takie rozwiązanie jest długie, zbędne, a nawet bym powiedział błędne, panie
Cytat(InosU31 @ 28.01.2010, 22:21:02 ) *
rozlanczalem


tongue.gif

@katta1992, twój kod powinien być bardziej w tym stylu:

  1. $result = mysql_query('SELECT * FROM `czytelnicy`');
  2. echo '<form action="" method="post">';
  3. echo '<select name="czytelnik">';
  4. while($row = mysql_fetch_assoc($result))
  5. {
  6. echo '<option value="'.$row['id'].'">'.$row['imie'].''.$row['nazwisko'].'</option>';
  7. }
  8. echo '</select>';
  9. echo '</form>';


I teraz jak wyślesz ten formularz to w tablicy POST będzie id czytelnika, z którym możesz robić na bazie, co tylko chcesz.
piotrooo89
@pyro przy *_fetch_row nie można odnosić się asocjacyjnie tylko wyliczeniowo, taka mała uwaga winksmiley.jpg
pyro
Cytat(piotrooo89 @ 28.01.2010, 22:35:43 ) *
@pyro przy *_fetch_row nie można odnosić się asocjacyjnie tylko wyliczeniowo, taka mała uwaga winksmiley.jpg


Racja, dzięki, zagapiłem się i zacząłem pisać nazwami zamiast liczbami. Efekt szybkiego pisania. Przeoczenie poprawiłem.
InosU31
pyro zasugerowalem sie pierwszym postem katta1992 w ktorym pisala ze chce wrzucic te dane do drugiej tabeli - moze za dlugo siedze przed kompem i zle cos zrozumialem - a dopiero teraz zauwazylem o co jej chodzilo;-)

co do bledow to daruj sobie ... robie bledy i bede je robic - polonista i tak nie bede;P


pozdrawiam
piotrooo89
Cytat(InosU31 @ 28.01.2010, 22:39:18 ) *
co do bledow to daruj sobie ... robie bledy i bede je robic - polonista i tak nie bede;P


ale jakaś znajomość (chodź choć podstawowa) nikt Ci nie każe być drugim prof. Miodkiem.

bo mi firefox źle poprawia sad.gif
pyro
Cytat(piotrooo89 @ 28.01.2010, 22:41:35 ) *
ale jakaś znajomość (chodź podstawowa) nikt Ci nie każe być drugim prof. Miodkiem.


Sorry za mały off-topic, ale to dosyć zabawne:

Cytat(piotrooo89 @ 28.01.2010, 22:41:35 ) *
(chodź podstawowa)


Jak to mówią... trafił swój na swego tongue.gif
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.