Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przypisanie flagi zawodnikowi
Forum PHP.pl > Forum > PHP
Fezq
Witam, tworzę portal, na którym mam zawodników z różnych krajów. Podczas dodawania ich do bazy wybieram z pola "select" z jakiego kraju jest dany pan, w wyniku czego w bazie otrzymuję zapis, np. Kraj="Stany Zjednoczone". Jak zrobić, aby przy wyświetlaniu danego zawodnika, przy jego nazwisku pojawiała się odpowiednia flaga, np. dla Stanów Zjednoczonych mam flagę zapisaną jako "images/flags/1.jpg".

Proszę o pomoc i pozdrawiam.
Giluś
Musisz zrobić np.: jakąś instrukcję switch lub if i wtedy

  1. switch($user['kraj']){
  2. case 'Stany Zjednoczone': $flaga = 1; break;
  3. case 'Polska': $flaga = 2; break;
  4. }

itd, lub od razu przy dodawaniu do bazy danych dodawać id flagi i wtedy:

images/flags/".$flaga.".jpg


Pozdrawiam.
IceManSpy
Powodzenia przy switchu jak będzie np 100 flag smile.gif

Zapisz sobie do zawodnika z jakiego kraju podochodzi albo ID flagi dla niego, a potem wybieraj to z bazy podstawiając pod obrazek. Np:
User:
IMIE: Gienek
KRAJ: Polska
FLAGA_ID: 3

Gdzie id flagi to nazwa pliku graficznego.
Giluś
Ewentualnie można też zrobić bazę danych tych wszystkich państw i flag..

typu: id(int)|name(str)|flaga(int)

i później zapytanie robić WHERE name = $user['flaga']...

Pozdrawiam..
mstraczkowski
Moim skromnym zdaniem pomysł drugi jest najlepszy.
I także polecałbym to rozwiązanie
markonix
Proponuje nazwy trzymać w standardzie ISO (max 3 znaki) typu PL, US itp.
Znacznie lepiej to wygląda, kod kraju idealnie pasuje do wstawienia w ALT bądź TITLE.
Alternatywnie lista krajów (nazwa pliku, id, nazwa kraju) - ale mało elastyczne i nie potrzebne tabele w bazie.
Fezq
Witam ponownie, zdecydowałem się na sposób z przekazywanie ID flagi, jednak tutaj rodzi się moje kolejne pytanie, mianowicie:

W formularza do dodawania zawodników, mam pole:

  1. Kraj: <br/><select name="kraj" width="">
  2. <option>';?><?php include("db/panstwa.php");
  3. $ile = count($tablica);
  4. echo '<option selected="selected">Stany Zjednoczone</option>';
  5. for ($i=1; $i <$ile; $i++)
  6. {
  7. echo '<option>'; echo $tablica[$i]; echo '</option>';
  8. } ?>
  9. <?php echo'</select>


Plik panstwa.php:

  1. <?php $tablica = array(
  2. "1"=>"Abchazja",
  3. "2"=>"Afganistan",
  4. "3"=>"Albania",
  5. "4"=>"Algieria",
  6. "5"=>"Andora",
  7. "6"=>"Angola",
  8. "7"=>"Antigua i Barbuda",
  9. "8"=>"Arabia Saudyjska",
  10. "9"=>"Argentyna",
  11. "10"=>"Armenia",);?>


Uproszczony skrypt zapisu do bazy:

  1. $kraj = mysql_real_escape_string(trim($_POST['kraj'])
  2. $query = @mysql_query("INSERT INTO fighters SET kraj='$kraj'");
  3. if($query)
  4. echo '<tr><td class="tcat3" width="50%">Dane zostały dodane poprawnie
  5. / <a href="" onClick="window.location.href=window.location.href">odśwież stronę</a></td></tr>';
  6. else echo '<tr><td class="tcat4" width="50%">Błąd wprowadzania danych ('.mysql_error().')
  7. / <a href="" onClick="window.location.href=window.location.href">odśwież stronę</a></td></tr>';


Teraz moje pytanie brzmi, jak przesłać przez formularz nie tylko wybrany kraj, ale również jego numer (id), czyli jak podejrzewam parametr "$i". Próbowałem przez ukrytego inputa, ale niestety nic z tego.

Liczę na pomoc i z góry dziękuję.
mstraczkowski
Przykładowo:
  1. echo '<option value="'.$i.'">';
  2. echo $tablica[$i];
  3. echo '</option>';


Teraz w POST, po wysłaniu będziesz posiadać wybrane ID flagi.
Możesz go potem ponownie użyć do określenia nazwy
Giluś
@mstraczkowski - Kolega chce chyba przesłać w Poście od razu ID flagi oraz nazwę państwa, a teraz wyślę tylko ID..

Zrobiłem coś takiego, pewnie można to zrobić inaczej, ale moja opcja wydaje się również dobra..

A wiec tak:

  1. <select name="kraj" width="">
  2. <?php
  3.  
  4. $tablica = array(
  5. "1"=>"Abchazja",
  6. "2"=>"Afganistan",
  7. "3"=>"Albania",
  8. "4"=>"Algieria",
  9. "5"=>"Andora",
  10. "6"=>"Angola",
  11. "7"=>"Antigua i Barbuda",
  12. "8"=>"Arabia Saudyjska",
  13. "9"=>"Argentyna",
  14. "10"=>"Armenia",);
  15. foreach($tablica as $id => $ktos) {
  16. echo '<option value="'.$id.'-s-'.$ktos.'">'.$ktos.'</option>';
  17. }
  18. ?>
  19. </select>


I później odbieranie:

  1. $_POST['kraj'] = explode('-s-' ,$_POST['kraj']);
  2. //$_POST['kraj'][0] - ID z tablicy.
  3. //$_POST['kraj'][1] - Nazwa państwa.
  4.  
  5. // jakieś tam dodawanie...



Pozdrawiam.
mstraczkowski
@up Mam nadzieję, że wiesz o tym że to rozwiązanie nie jest dobrym podejściem i jest mocno naciągane "aby tylko działało" ? smile.gif
Fezq
Dzięki za pomysły.

Giluś ma rację. Chciałbym wysłać nazwę kraju i zapisać dane do tabeli "kraj" oraz od razu odpowiadający danemu państwu identyfikator, który zostałby zapisany do tabeli "id_flaga".

mstraczkowski - a dlaczego uważasz, że podana propozycja nie jest zbyt dobra?
mstraczkowski
Jest naciągana, takie podejście nie jest czytelne dla innych programistów i tak się zwyczajnie nie robi - wprowadza to niepotrzebny chaos w kodzie.
Powinno się programować czysto, bez takich naciągań, między innymi dlatego mówi się, że PHP jest mało elegancki - dlatego że programiści stosują takie dziwne rozwiązania i nie dbają o czytelność kodu.

Jeżeli użyłbyś mojego sposobu otrzymujesz czyste ID flagi kraju, jako że masz już zdefiniowaną tablicę tych flag możesz zrobić sobie tak:

  1. $nazwa_kraju = $tablica[$_POST['id_kraju']];


Otrzymasz wtedy nazwę kraju na podstawie ID.
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.