Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyszukanie w bazie danych i zamiana na cyfry
Forum PHP.pl > Forum > Przedszkole
redelek
witam,

Wczoraj poprosiłem o pomoc na temat wyszukiwania danych w bazie z sesjami. wszystko działa pięknie.
Mam natomiast tera odwrotny problem. Dla ułatwienia użytkownikom, zamieniłem kody cyfrowe na nazwy.
Problem jest z aktualizacją rekordu , bo z formularza odbiera dane tekstowe np. rodzina_SA. Teraz jak sprawdzić w tabeli rodzina jaki ona ma kod i zamiast nazwy wstawić jej kod.
Gdyby to było jeden wpis to bym sobie poradził, ale może być ich więcej np.
Z formularza odbiera tak dane rodzina_SA;rodzina_AR;rodzina_KB
--kody rodzin w bazie --
rodzina_SA 121314
rodzina_AR 151617
rodzina_KB 181920

Jak to można zrobić ?

Będę wdzięczny za pomoc
nospor
  1. $sql = 'select * from tabela where id in (\''.str_replace(';','\',\'',$zforma).'\')';

nie pamietam tylko czy IN pozwala na przeszykiwanie tekstów. jak pozwala to zadziala to co ci podalem smile.gif
redelek
no właśnie nie działa, bo wczoraj mi pomogło to co podałeś, ale w tym zastosowaniu już nie idzie albo mam źle to zapisane. Zaraz pokażę jak
  1. $sql = 'select * from '.$M_TABEL5.' where `kod_rodziny` in (\''.str_replace(';','\',\'',$kod_rodziny).'\')';
  2. $wynik=mysql_query($sql);
  3. if(mysql_num_rows($wynik) == 0) {
  4. echo "brak rodzin";
  5. }else {
  6.  
  7. while (list($id_kodrodziny, $kod_rodziny, $nazwa_rodziny) = mysql_fetch_array($wynik))
  8. {
  9. echo $kod_rodziny;
  10. }
  11.  
  12. }


wywala mi błąd
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /data/www/pretest/dane.php on line 94
brak rodzin


Hej cały czas walczę i nie mogę nic znaleźć.
Nikt z Państwa nie ma pomysłów jak w SELECT pobrać dane w postaci string i zamienić je na cyfry ?
Nospor pomóż
slimy
Nie wiem czy dobrze zrozumialem problem. Czy masz na mysli pobranie danych o wybranych rodzinach rodzinach, gdzie klucz numeryczny do tabeli z danymi o rodzinie trzeba pobrac z tabeli, ktora zawiera pare wartosci idNumerczyne = idTesktowe? A może coś takiego zadziała: (nie sprawdzalem)

  1. SELECT * FROM Rodziny
  2. INNER JOIN KodyRodzin
  3. ON Rodziny.ID = KodyRodzin.ID
  4. WHERE KodyRodzin.strID = 'kod1' OR KodyRodzin.strID = 'kod2' OR KodyRodzin.strID = 'kod3';




redelek
chodzi o to że z formularza pobieram takie dane rodzina_SA;rodzina_AR;rodzina_KB
Zapytanie ma znaleźć w tabeli z rodzinami ich kody i przypisać je do zmiennej oddzielonej średnikiem.
Czyli po pobraniu nazw rodzin odebranych z formularza ma przypisać do zmiennej w takiej postaci 121314;151617;181920.
Tu jest właśnie problem. Nospor podał fajne rozwiązanie , ale w odwrotną stronę po cyfrach szuka nazw.
mortus
Spróbuj tak dla danych w postaci rodzina_SA;rodzina_AR;rodzina_KB
  1. $sql = "SELECT * FROM $M_TABEL5 WHERE `kod_rodziny` IN ('" . str_replace(';', '\', \'', $kod_rodziny) . "')";
lub tak dla kodów cyfrowych
  1. $sql = "SELECT * FROM $M_TABEL5 WHERE `kod_cyfrowy` IN (" . str_replace(';', ', ', $kod_cyfrowy) . ")";
tylko zmień nazwę kolumny kod_cyfrowy oraz nazwę zmiennej $kod_cyfrowy na odpowiednią. Ważne jest, aby kod cyfrowy w bazie był typu liczbowego.
redelek
hmm, a to nie to samo co podał mi NOSPOR?
Problem w tym że odbieram dane z formularza typu string i chcę by w bazie kody_rodziny wyszukał je po nazwach i przypisał im numerki zamiast nazw
W bazie mam takie dane

--kody rodzin w bazie --
id_kodrodziny kod_rodziny nazwa_rodziny
1 121314 rodzina_SA
2 151617 rodzina_AR
3 181920 rodzina_KB

Dane z formularza pobiera takie
rodzina_SA, rodzina_AR, rodzina_KB,

I teraz daje takie zapytanie

  1. $sql = "select * from $M_TABELA5 where `kod_rodziny` (" . str_replace(';', ', ', $nazwa_rodziny) . ")";
  2. echo '<br />'.$sql.'<br />';
  3. $wynik=mysql_query($sql);
  4.  
  5. while (list($id_kodrodziny, $kod_rodziny, $nazwa_rodziny) = mysql_fetch_array($wynik))
  6. {
  7. echo "Zmienione kody ze string na cyfry: ".$kod_rodziny;
  8. }

Jak wyświetlam sobie zapytanie na stronie to mam taki wynik

Pobrane dane z formularza rodzina_SA, rodzina_AR

select * from pre_kodrodziny where `nazwa_rodziny` (rodzina_SA, rodzina_AR)


Ale poniżej mam taki błąd sad.gif
  1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /data/www/pretest/dane.php on line 100

gdzie linia 100 to
  1. while (list($id_kodrodziny, $kod_rodziny, $nazwa_rodziny) = mysql_fetch_array($wynik))
mortus
No to może inaczej? Jakie dane przekazujesz do zapytania? Poza tym weźmy Twój post z wczoraj z godziny 13:58, czy choćby ten poprzedni i zauważ, że w zapytaniu przeszukujesz kolumnę kod_rodziny w poszukiwaniu nazwy rodziny. Nie ta kolumna, nie te dane. W tej chwili interesuje mnie natomiast to, co kryje się pod zmienną $nazwa_rodziny, jaki dokładnie łańcuch znaków jest tam zapisany?
redelek
string zgodnie z tabelą.
Odbieram string z formularza , ma po tym stringu przeszukać bazę rodzin ( dokładnie po polu nazwa_rodziny ) i pobrać ich kody.

nazwa_rodziny z formularza to string
kod_rodziny w bazie to cyfry

Dodałem błąd mysql i mam taki

  1. Unknown COLUMN 'rodzina_SA' IN 'where clause'
nospor
sprawdzilem, sposob co ci podalem dziala.

twoje zapytanie wyglada tak:
select * from pre_kodrodziny where `nazwa_rodziny` (rodzina_SA, rodzina_AR)

a ma wygladac tak:
select * from pre_kodrodziny where `nazwa_rodziny` in ('rodzina_SA', 'rodzina_AR')

KOd co ci dalem tak wlasnie powinien je tworzyc. Napewno dobrze to odpaliles?
mortus
Nadal się nie rozumiemy. Spróbuję inaczej.
1. Dane przekazywane do zapytania mają postać: rodzina_SA, rodzina_AR, rodzina_KB
  1. // $nazwy_rodzin = 'rodzina_SA, rodzina_AR, rodzina_KB';
  2. $sql = "SELECT * FROM $M_TABELA5 WHERE `nazwa_rodziny` IN ('" . str_replace(', ', '\', \'', $nazwy_rodzin) . "')";
  3. $wynik = mysql_query($sql) or die("Błąd zapytania: " . mysql_error());
  4. $kody_rodzin = '';
  5. while (list($id_kodrodziny, $kod_rodziny, $nazwa_rodziny) = mysql_fetch_array($wynik)) {
  6. $kody_rodzin .= $kod_rodziny . ', ';
  7. // lub $kody_rodzin .= $kod_rodziny . ';';
  8. }
  9. echo $kody_rodzin;

2. Dane przekazywane do zapytania mają postać: rodzina_SA;rodzina_AR;rodzina_KB
  1. // $nazwy_rodzin = 'rodzina_SA;rodzina_AR;rodzina_KB';
  2. $sql = "SELECT * FROM $M_TABELA5 WHERE `nazwa_rodziny` IN ('" . str_replace(';', '\', \'', $nazwy_rodzin) . "')";
  3. $wynik = mysql_query($sql) or die("Błąd zapytania: " . mysql_error());
  4. $kody_rodzin = '';
  5. while (list($id_kodrodziny, $kod_rodziny, $nazwa_rodziny) = mysql_fetch_array($wynik)) {
  6. $kody_rodzin .= $kod_rodziny . ';';
  7. // lub $kody_rodzin .= $kod_rodziny . ', ';
  8. }
  9. echo $kody_rodzin;
redelek
Nospor i Mortus macie rację, jakoś niewidoczne były te pojedyńcze cudysłowy i dlatego nie widział danych.
Dane odbierał rodzina_SA,rodzina_KB, a powinien 'rodzina_SA','rodzina_KB'. Teraz działa jak złoto.

Dzięki za pomoc i sorki za amatorkę smile.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.