Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wyświetlanie obrazków na podstawie danych
Forum PHP.pl > Forum > Przedszkole
dentopolis
mam diagram zębów na stronie:
http://stomatologialabno.pl/gabinet/index.php?page=pacjent
jeżeli pole danych zawiera jedną literę np:w,c lub x to pojawia się odpowiedni obrazek.wszystko wtedy działa. ale jeśli znaków jest więcej czyli np:"w k" już jest problem.jak to rozwiązać?

  1. <?
  2. $rightupperseven= "w k";
  3.  
  4. switch ($rightupperseven) {
  5. case 'c':
  6. echo "<img src='gfx/c.png' class='18' style='width:50px;'>";
  7. break;
  8. case 'w':
  9. echo "<img src='gfx/w.png' class='18' style='width:50px;'>";
  10. break;
  11. case 'x':
  12. echo "";
  13. break;
  14. default:
  15. echo "<img src='gfx/tooth.png' width='50px'>" ;
  16. }
  17.  
  18.  
  19. if (strpos($rightupperseven, 'k') !== false) {
  20. echo "<img src='gfx/crown.png' class='18' style='width:15px;'>";
  21. }
  22. ?>
MadManix
może dopisać
  1. case 'w k':
  2. echo "<img src='gfx/w_k.png' class='18' style='width:50px;'>";
  3. break;
dentopolis
niestety to nie zadziała ponieważ x,c,w to "stany podstawowe" zęba.albo go nie ma,albo jest zdrowy albo do leczenia.ale na tą warstwę chcę nakładać kilka innych (dużo różnych kombinacji) np.ikonkę zmiany zapalnej przy wierzchołku korzenia albo korony na zębie itd.dlatego szukam innego rozwiązania.
404
  1. $rightupperseven= explode(' ', 'w k');
  2. if (empty($rightupperseven)) {
  3. echo "<img src='gfx/tooth.png' width='50px'>" ;
  4. } else {
  5. foreach ($rightupperseven as $foo) {
  6. switch ($foo) {
  7. case 'w':
  8. // ...
  9. break;
  10. }
  11. }
  12. }
dentopolis
jeszcze raz:
w mysql może być wiele możliwości:
"w"
"c okw endo"
"w korona okw"
bardzo dużo tych kombinacji.
skrypt powinien wyszukać w polu danych np."okw" i jeśli jest to wyświetlić okw.png.
analogicznie jeśli jest np."korona" to wyświetlić korona.png

jestem już bardzo blisko rozwiązania:

  1. if (strpos($leftuppertwo, 'w') !== false) {
  2. echo "<img src='gfx/w.png' class='18' style='width:50px;'>";
  3. }
  4.  
  5. if (strpos($leftuppertwo, 'k') !== false) {
  6. echo "<img src='gfx/crown.png' class='18' style='width:15px; position: relative; top: 15; left: -20;'>";
  7. }


teraz tylko problem jest taki że jeśli zmienna zawiera nawet literę to traktuje to jakby znalazł pasujące słowo natomiast "w" ma wyświetlić inny obrazek niż "okw"
404
Twój problem polega na tym, że używasz strpos, które chyba nie wiesz do końca jak działa. strpos znajduje pierwsze wystąpienie zadanego ciągu znaków, dlatego:
  1. $leftuppertwo = 'okw';
  2.  
  3. if (strpos($leftuppertwo, 'k') !== false) {
  4. echo 'foo';
  5. }
  6.  
  7. if (strpos($leftuppertwo, 'w') !== false) {
  8. echo 'bar';
  9. }
  10.  
  11. if (strpos($leftuppertwo, 'okw') !== false) {
  12. echo 'baz';
  13. }
wyświetli: foobarbaz
Czy próbowałeś w ogóle uruchomić kod, który Ci podałem? Na moje on robi dokładnie co potrzebujesz: http://sandbox.onlinephpfunctions.com/code...b0a99df440d286c. Coś się tak uczepił tego strpos? Chyba, że czegoś nie rozumiem...
MadManix
  1. $rightupperseven = "w k okw c x";
  2.  
  3. $tablica = explode(" ",$rightupperseven);
  4. //$tablica[0] = "w";
  5. //$tablica[1] = "k";
  6. //$tablica[2] = "okw";
  7. //$tablica[3] = "c";
  8. //$tablica[4] = "x";
  9.  
  10. $obrazki = "";
  11. for ($i=0;$i<count($tablica);$i++){
  12.  
  13. switch ($tablica[$i]) {
  14. case 'c':
  15. $obrazki = $obrazki."<img src='gfx/c.png' class='18' style='width:50px;'>";
  16. break;
  17.  
  18. case 'w':
  19. $obrazki = $obrazki."<img src='gfx/w.png' class='18' style='width:50px;'>";
  20. break;
  21.  
  22. case 'x':
  23. $obrazki = $obrazki."";
  24. break;
  25.  
  26. case 'k':
  27. $obrazki = $obrazki."<img src='gfx/crown.png' class='18' style='width:15px;'>";
  28. break;
  29.  
  30. case 'okw':
  31. $obrazki = $obrazki."<img src='gfx/okw.png' class='18' style='width:15px;'>";
  32. break;
  33.  
  34. default:
  35. $obrazki = $obrazki."<img src='gfx/tooth.png' width='50px'>" ;
  36. break;
  37. }
  38. }
  39.  
  40. echo $obrazki;



jeżeli nie o to chodzi, to znaczy, że nie rozumiem pytania.
dentopolis
dzięki Panowie.działa diagram elegancko.
a czym może być spowodowane złe kodowanie znaków?
na stronie mam:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
w bazie mam:utf8_general_ci
404
Sprawdź jeszcze kodowanie pliku.
dentopolis
notepad++ utf-8
404
Pamiętaj, że bez BOM. Ewentualnie po połączeniu się z bazą wykonaj
Kod
SET NAMES utf8;
, jeżeli jeszcze tego nie zrobiłeś.
dentopolis
$conn->set_charset("utf8");
działa.dzięki!
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.