Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zamiana nazwy warunkowa
Forum PHP.pl > Forum > Przedszkole
Gość1231231
Cześć. Mam problem, ponieważ wyciągam z bazy kolumne i chciałbym teraz zamienić.

Wyciągam $r['categories'] - oznacza to numer kategorii.

Chciałbym teraz warunkowo dopisąć, że jeśli ten wyciągnięty numer kategorii ($r['categories']) wynosi 22, to wyświetli się 'kategorianr1'.

Kombinowałem z str_replace, ale mi coś nie wyszło. Tak wyglądały moje kombinacje:

  1. if ($r['categories'] == '22';)
  2. {
  3. $tekst_oryginalny = "22";
  4. $co_zmieniamy = "22";
  5. $na_co_zmieniamy = "kategorianr1";
  6. $tekst_zmieniony = str_replace($co_zmieniamy,$na_co_zmieniamy,$tekst_oryginalny);
  7. }
  8. else
  9. {
  10. }


Bardzo proszę o pomoc.
b4rt3kk
A w jakim celu to zamieniasz? Tylko po to żeby wyświetlić czy chcesz zapisać do bazy?

Nie prościej tak?

  1. if ($r['categories'] == '22') echo 'kategorianr1';


I już się wyświetla tekst, który chciałeś, nie konieczne są żadne zamiany. Poza tym masz średnik w ifie.

A jeśli już się upierasz przy str_replace:

  1. if ($r['categories'] == '22') $foo = str_replace('22', 'kategorianr1', $r['categories']);
  2. echo $foo // zwróci zamieniony ciąg
Gość
chce wyświetlić zamiast '22' - 'kategorianr1'. Wyświetlam to tylko po to, żeby wyświetlić. A to powyższe nie spełnia tego warunku niestety, bo już podobnie próbowałem.
b4rt3kk
Daj:

  1. var_dump($r['categories']);


widać, nie jest to 22, albo masz tam białe znaki.

  1. ($r['categories'] == '22')


Jest to porównywanie ciągów, a nie liczb, muszą być one zgodne ze sobą, jeśli jest spacja, enter czy tabulator to już nie są. A skoro warunek nie zachodzi to znaczy, że coś z wartością $r['categories'] jest nie tak.

  1. if ($r['categories'] == '22') echo 'kategorianr1'; else echo var_dump($r['categories']);
Gość
  1. if ($r['categories'] == '21') echo 'kategorianr1'; else {};

takie coś jest ok, ale chciałbym, aby nie zamieniało TYLKO tam, gdzie jest TYLKO 21, bo niektóre rekordy mają postać:
"19,20,21,22" i chciałbym, żeby to 21 też zamienił i wtedy wyglądałoby: "19,20,kategorianr1,22". Jak to zrobić? Wstawienie % przed '21' nie pomaga, chyba że źle wstawiłem
b4rt3kk
No i się dziwisz, że warunek się nie wykonuje... Jeśli ciąg ma postać: "19,20,21,22", to nie dajesz żadnych ifów, wystarczy:

  1. echo str_replace('21', 'kategorianr1', $r['categories']);


I to tyle, cała filozofia.

Gość
Działa, próbowałem zrobić jeszcze tak:
  1. if ($r['categories']==46) {echo str_replace('46', 'Bransoletki', $r['categories']);}
  2. if ($r['categories']==54) {echo str_replace('54', 'Broszki', $r['categories']);}
  3. if ($r['categories']==4) {echo str_replace('4', 'Kolczyki', $r['categories']);}
  4. if ($r['categories']==5) {echo str_replace('5', 'Naszyjniki', $r['categories']);}
  5. if ($r['categories']==6) {echo str_replace('6', 'Pierścionki', $r['categories']);}
  6. if ($r['categories']==7) {echo str_replace('7', 'Biżuteria ślubna', $r['categories']);}
  7. if ($r['categories']==8) {echo str_replace('8', 'Biżuteria męska i uniseks', $r['categories']);}
  8. if ($r['categories']==9) {echo str_replace('9', 'Ozdoby do włosów', $r['categories']);}
  9. if ($r['categories']==45) {echo str_replace('45', 'złote/pozłacane', $r['categories']);}
  10. if ($r['categories']==44) {echo str_replace('44', 'srebrne/posrebrzane', $r['categories']);}
  11. if ($r['categories']==43) {echo str_replace('43', 'z perełkami', $r['categories']);}
  12. if ($r['categories']==42) {echo str_replace('42', 'z cyrkoniami', $r['categories']);}
  13. if ($r['categories']==41) {echo str_replace('41', 'z emalią (cloisonné)', $r['categories']);}
  14. if ($r['categories']==40) {echo str_replace('40', 'typu charms', $r['categories']);}
  15. if ($r['categories']==39) {echo str_replace('39', 'uniseks', $r['categories']);}
  16. if ($r['categories']==37) {echo str_replace('37', 'srebrne/posrebrzane', $r['categories']);}
  17. if ($r['categories']==36) {echo str_replace('36', 'złote/pozłacane', $r['categories']);}
  18. if ($r['categories']==35) {echo str_replace('35', 'srebrne/posrebrzane', $r['categories']);}
  19. if ($r['categories']==34) {echo str_replace('34', 'z perłami', $r['categories']);}
  20. if ($r['categories']==33) {echo str_replace('33', 'z cyrkoniami', $r['categories']);}
  21. if ($r['categories']==32) {echo str_replace('32', 'z emalią/ cloisonné', $r['categories']);}
  22. if ($r['categories']==31) {echo str_replace('31', 'uniseks', $r['categories']);}
  23. if ($r['categories']==30) {echo str_replace('30', 'złote/pozłacane', $r['categories']);}
  24. if ($r['categories']==29) {echo str_replace('29', 'srebrne/posrebrzane', $r['categories']);}
  25. if ($r['categories']==28) {echo str_replace('28', 'z perłami', $r['categories']);}
  26. if ($r['categories']==27) {echo str_replace('27', 'z cyrkoniami', $r['categories']);}
  27. if ($r['categories']==26) {echo str_replace('26', 'z emalią/ cloisonné', $r['categories']);}
  28. if ($r['categories']==25) {echo str_replace('25', 'na rzemyku/sznurku', $r['categories']);}
  29. if ($r['categories']==24) {echo str_replace('24', 'łańcuszki', $r['categories']);}
  30. if ($r['categories']==23) {echo str_replace('23', 'uniseks', $r['categories']);}
  31. if ($r['categories']==22) {echo str_replace('22', 'złote/pozłacane', $r['categories']);}
  32. if ($r['categories']==21) {echo str_replace('21', 'srebrne/posrebrzane', $r['categories']);}
  33. if ($r['categories']==20) {echo str_replace('20', 'z perłami', $r['categories']);}
  34. if ($r['categories']==19) {echo str_replace('19', 'z cyrkoniami', $r['categories']);}
  35. if ($r['categories']==18) {echo str_replace('18', 'uniseks', $r['categories']);}
  36. if ($r['categories']==17) {echo str_replace('17', 'z perłami', $r['categories']);}
  37. if ($r['categories']==16) {echo str_replace('16', 'z cyrkoniami', $r['categories']);}
  38. if ($r['categories']==15) {echo str_replace('15', 'bransoletki', $r['categories']);}
  39. if ($r['categories']==14) {echo str_replace('14', 'pierścionki', $r['categories']);}
  40. if ($r['categories']==13) {echo str_replace('13', 'naszyjniki', $r['categories']);}
  41. if ($r['categories']==12) {echo str_replace('12', 'spinki', $r['categories']);}
  42. if ($r['categories']==11) {echo str_replace('11', 'opaski', $r['categories']);}
  43. if ($r['categories']==10) {echo str_replace('10', 'gumki', $r['categories']);}
  44. if ($r['categories']==47) {echo str_replace('47', 'złote/pozłacane', $r['categories']);}
  45. if ($r['categories']==48) {echo str_replace('48', 'srebrne/posrebrzane', $r['categories']);}
  46. if ($r['categories']==49) {echo str_replace('49', 'z perełkami', $r['categories']);}
  47. if ($r['categories']==50) {echo str_replace('50', 'z cyrkoniami', $r['categories']);}
  48. if ($r['categories']==51) {echo str_replace('51', 'z emalią/ cloisonné', $r['categories']);}
  49. if ($r['categories']==52) {echo str_replace('52', 'typu charms', $r['categories']);}
  50. if ($r['categories']==53) {echo str_replace('53', 'uniseks', $r['categories']);}
  51. if ($r['categories']==55) {echo str_replace('55', 'złote/pozłacane', $r['categories']);}
  52. if ($r['categories']==56) {echo str_replace('56', 'srebrne/posrebrzane', $r['categories']);}

tylko ze nie chwyta. wstawia nazwe, ale dodaje do tego zwykłe numerki jeszcze, jeśli kilka kategorii występuje obok siebie. Jak to połączyć?
Gość
  1. echo str_replace('46', 'Bransoletki', $r['categories']);
  2. echo str_replace('54', 'Broszki', $r['categories']);
  3. echo str_replace('4', 'Kolczyki', $r['categories']);
  4. echo str_replace('5', 'Naszyjniki', $r['categories']);
  5. echo str_replace('6', 'Pierścionki', $r['categories']);
  6. echo str_replace('7', 'Biżuteria ślubna', $r['categories']);
  7. echo str_replace('8', 'Biżuteria męska i uniseks', $r['categories']);
  8. echo str_replace('9', 'Ozdoby do włosów', $r['categories']);
  9. echo str_replace('45', 'złote/pozłacane', $r['categories']);
  10. echo str_replace('44', 'srebrne/posrebrzane', $r['categories']);
  11. echo str_replace('43', 'z perełkami', $r['categories']);
  12. echo str_replace('42', 'z cyrkoniami', $r['categories']);
  13. echo str_replace('41', 'z emalią (cloisonné)', $r['categories']);
  14. echo str_replace('40', 'typu charms', $r['categories']);
  15. echo str_replace('39', 'uniseks', $r['categories']);
  16. echo str_replace('37', 'srebrne/posrebrzane', $r['categories']);
  17. echo str_replace('36', 'złote/pozłacane', $r['categories']);
  18. echo str_replace('35', 'srebrne/posrebrzane', $r['categories']);
  19. echo str_replace('34', 'z perłami', $r['categories']);
  20. echo str_replace('33', 'z cyrkoniami', $r['categories']);
  21. echo str_replace('32', 'z emalią/ cloisonné', $r['categories']);
  22. echo str_replace('31', 'uniseks', $r['categories']);
  23. echo str_replace('30', 'złote/pozłacane', $r['categories']);
  24. echo str_replace('29', 'srebrne/posrebrzane', $r['categories']);
  25. echo str_replace('28', 'z perłami', $r['categories']);
  26. echo str_replace('27', 'z cyrkoniami', $r['categories']);
  27. echo str_replace('26', 'z emalią/ cloisonné', $r['categories']);
  28. echo str_replace('25', 'na rzemyku/sznurku', $r['categories']);
  29. echo str_replace('24', 'łańcuszki', $r['categories']);
  30. echo str_replace('23', 'uniseks', $r['categories']);
  31. echo str_replace('22', 'złote/pozłacane', $r['categories']);
  32. echo str_replace('21', 'srebrne/posrebrzane', $r['categories']);
  33. echo str_replace('20', 'z perłami', $r['categories']);
  34. echo str_replace('19', 'z cyrkoniami', $r['categories']);
  35. echo str_replace('18', 'uniseks', $r['categories']);
  36. echo str_replace('17', 'z perłami', $r['categories']);
  37. echo str_replace('16', 'z cyrkoniami', $r['categories']);
  38. echo str_replace('15', 'bransoletki', $r['categories']);
  39. echo str_replace('14', 'pierścionki', $r['categories']);
  40. echo str_replace('13', 'naszyjniki', $r['categories']);
  41. echo str_replace('12', 'spinki', $r['categories']);
  42. echo str_replace('11', 'opaski', $r['categories']);
  43. echo str_replace('10', 'gumki', $r['categories']);
  44. echo str_replace('47', 'złote/pozłacane', $r['categories']);
  45. echo str_replace('48', 'srebrne/posrebrzane', $r['categories']);
  46. echo str_replace('49', 'z perełkami', $r['categories']);
  47. echo str_replace('50', 'z cyrkoniami', $r['categories']);
  48. echo str_replace('51', 'z emalią/ cloisonné', $r['categories']);
  49. echo str_replace('52', 'typu charms', $r['categories']);
  50. echo str_replace('53', 'uniseks', $r['categories']);
  51. echo str_replace('55', 'złote/pozłacane', $r['categories']);
  52. echo str_replace('56', 'srebrne/posrebrzane', $r['categories']);

a takim sposobem dodaje jakieś dziwne numerki do kategorii. wypisuje wszystko, ale jako 'spacje' wstawia duże ciągi jakichś numerków
Gość
nie, ten powyższy sposób rozwala to wszystko. to z ifami działa, ale wyświetla tylko 1 kategorie nawet jak jest ich z 4
b4rt3kk
Lepiej pokaż jak wygląda skrypt cały, bo z tego nie jestem w stanie zrozumieć co tu się dzieje.
Gość
  1. <?php header('Content-Type: application/xml');
  2. echo'<?xml version="1.0" encoding="UTF-8"?>
  3. <!DOCTYPE nokaut SYSTEM "http://www.nokaut.pl/integracja/nokaut.dtd">
  4. <nokaut generator="sote" ver="5.0">
  5. <offers>';
  6. $dbhost = "localhost";
  7. $dbuser = "root";
  8. $dbpass = "";
  9. $dbname = "opencart";
  10.  
  11. $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database");
  12. mysql_select_db($dbname);
  13. $sql = "SET CHARSET utf8";
  14. $wynik = mysql_query("SELECT * FROM products")
  15. or die('Błąd zapytania');
  16.  
  17.  
  18.  
  19.  
  20. if(mysql_num_rows($wynik) > 0) {
  21. while($r = mysql_fetch_assoc($wynik)) {
  22.  
  23.  
  24.  
  25.  
  26. echo '<offer>';
  27. echo "<id>".$r['product_id']."</id>";
  28. echo "<name><![CDATA[".$r['name']."]]></name>";
  29.  
  30.  
  31. echo "<description><![CDATA[".$r['description']."]]></description>";
  32. echo "<url><![CDATA[".$r['price']."]]></url>";
  33. echo "<image><![CDATA[http://alq-art.pl/image/cache/";
  34.  
  35. echo substr($r['image_name'], 0, -4);
  36.  
  37. echo"-250x250.jpg]]></image>";
  38. echo "<price>".$r['price']." zł</price>";
  39.  
  40. echo "<category><![CDATA[";
  41. if ($r['categories']==46) {echo str_replace('46', 'Bransoletki', $r['categories']);}
  42. if ($r['categories']==54) {echo str_replace('54', 'Broszki', $r['categories']);}
  43. if ($r['categories']==4) {echo str_replace('4', 'Kolczyki', $r['categories']);}
  44. if ($r['categories']==5) {echo str_replace('5', 'Naszyjniki', $r['categories']);}
  45. if ($r['categories']==6) {echo str_replace('6', 'Pierścionki', $r['categories']);}
  46. if ($r['categories']==7) {echo str_replace('7', 'Bizuteria%20slubna', $r['categories']);}
  47. if ($r['categories']==8) {echo str_replace('8', 'Bizuteria%20meska%20i%20uniseks', $r['categories']);}
  48. if ($r['categories']==9) {echo str_replace('9', 'Ozdoby%20do%20wlosow', $r['categories']);}
  49. if ($r['categories']==45) {echo str_replace('45', 'złote/pozłacane', $r['categories']);}
  50. if ($r['categories']==44) {echo str_replace('44', 'srebrne/posrebrzane', $r['categories']);}
  51. if ($r['categories']==43) {echo str_replace('43', 'z-perelkami', $r['categories']);}
  52. if ($r['categories']==42) {echo str_replace('42', 'z-cyrkoniami', $r['categories']);}
  53. if ($r['categories']==41) {echo str_replace('41', 'z-emalia-cloisonne', $r['categories']);}
  54. if ($r['categories']==40) {echo str_replace('40', 'typu charms', $r['categories']);}
  55. if ($r['categories']==39) {echo str_replace('39', 'uniseks', $r['categories']);}
  56. if ($r['categories']==37) {echo str_replace('37', 'srebrne/posrebrzane', $r['categories']);}
  57. if ($r['categories']==36) {echo str_replace('36', 'złote/pozłacane', $r['categories']);}
  58. if ($r['categories']==35) {echo str_replace('35', 'srebrne/posrebrzane', $r['categories']);}
  59. if ($r['categories']==34) {echo str_replace('34', 'z-perłami', $r['categories']);}
  60. if ($r['categories']==33) {echo str_replace('33', 'z-cyrkoniami', $r['categories']);}
  61. if ($r['categories']==32) {echo str_replace('32', 'z-emalia-cloisonne', $r['categories']);}
  62. if ($r['categories']==31) {echo str_replace('31', 'uniseks', $r['categories']);}
  63. if ($r['categories']==30) {echo str_replace('30', 'złote/pozłacane', $r['categories']);}
  64. if ($r['categories']==29) {echo str_replace('29', 'srebrne/posrebrzane', $r['categories']);}
  65. if ($r['categories']==28) {echo str_replace('28', 'z-perłami', $r['categories']);}
  66. if ($r['categories']==27) {echo str_replace('27', 'z-cyrkoniami', $r['categories']);}
  67. if ($r['categories']==26) {echo str_replace('26', 'z-emalia-cloisonne', $r['categories']);}
  68. if ($r['categories']==25) {echo str_replace('25', 'na rzemyku/sznurku', $r['categories']);}
  69. if ($r['categories']==24) {echo str_replace('24', 'łańcuszki', $r['categories']);}
  70. if ($r['categories']==23) {echo str_replace('23', 'uniseks', $r['categories']);}
  71. if ($r['categories']==22) {echo str_replace('22', 'złote/pozłacane', $r['categories']);}
  72. if ($r['categories']==21) {echo str_replace('21', 'srebrne/posrebrzane', $r['categories']);}
  73. if ($r['categories']==20) {echo str_replace('20', 'z-perłami', $r['categories']);}
  74. if ($r['categories']==19) {echo str_replace('19', 'z-cyrkoniami', $r['categories']);}
  75. if ($r['categories']==18) {echo str_replace('18', 'uniseks', $r['categories']);}
  76. if ($r['categories']==17) {echo str_replace('17', 'z-perłami', $r['categories']);}
  77. if ($r['categories']==16) {echo str_replace('16', 'z-cyrkoniami', $r['categories']);}
  78. if ($r['categories']==15) {echo str_replace('15', 'bransoletki', $r['categories']);}
  79. if ($r['categories']==14) {echo str_replace('14', 'pierścionki', $r['categories']);}
  80. if ($r['categories']==13) {echo str_replace('13', 'naszyjniki', $r['categories']);}
  81. if ($r['categories']==12) {echo str_replace('12', 'spinki', $r['categories']);}
  82. if ($r['categories']==11) {echo str_replace('11', 'opaski', $r['categories']);}
  83. if ($r['categories']==10) {echo str_replace('10', 'gumki', $r['categories']);}
  84. if ($r['categories']==47) {echo str_replace('47', 'złote/pozłacane', $r['categories']);}
  85. if ($r['categories']==48) {echo str_replace('48', 'srebrne/posrebrzane', $r['categories']);}
  86. if ($r['categories']==49) {echo str_replace('49', 'z-perelkami', $r['categories']);}
  87. if ($r['categories']==50) {echo str_replace('50', 'z-cyrkoniami', $r['categories']);}
  88. if ($r['categories']==51) {echo str_replace('51', 'z-emalia-cloisonne', $r['categories']);}
  89. if ($r['categories']==52) {echo str_replace('52', 'typu charms', $r['categories']);}
  90. if ($r['categories']==53) {echo str_replace('53', 'uniseks', $r['categories']);}
  91. if ($r['categories']==55) {echo str_replace('55', 'złote/pozłacane', $r['categories']);}
  92. if ($r['categories']==56) {echo str_replace('56', 'srebrne/posrebrzane', $r['categories']);}
  93.  
  94.  
  95. echo"]]></category>";
  96.  
  97.  
  98.  
  99. echo '</offer>';
  100.  
  101. }
  102. }
  103.  
  104. ?><?php echo '</offers></nokaut>'; ?>
b4rt3kk
Już łapię, jeszcze tylko mi powiedz, jak wygląda zawartość poszczególnych komórek w kolumnie 'categories'. Czy jest to pojedyncza liczba, czy też kilka liczb? Np. oddzielonych przecinkami? Podaj kilka przykładowych zawartości z tych komórek.
Gość
jest to np jedna liczba '22' albo '22,23,24'.
a jeszcze dałoby radę te przecinki zamienić na '/'?
b4rt3kk
Zrób tak:

  1. $replacements = array(
  2. '46' => 'bransoletki',
  3. '54' => 'broszki',
  4. '4' => 'kolczyki',
  5. // i tak dalej, wypisujesz po kolej, co ma zamieniać na co
  6. );


Teraz czas na zamianę:

  1. $tmp = explode(',', $r['categories']);
  2. $name = $r['categories'];
  3. if (sizeof($tmp)>1) {
  4. foreach ($tmp as $value) if (array_key_exists($value, $replacements)) $name = str_replace($value, $replacements[$value], $name);
  5. } else {
  6. if (array_key_exists($name, $replacements)) $name = str_replace($name, $replacements[$name], $name);
  7. }
  8. echo $name;
Gość
jest lepiej, ale jeszcze te przecinki jakby się jakoś dało, bo wciąż wyświetla w taki sposób:
  1. z-cyrkoniami,z-perłami,złote/pozłacane

a powinno:
  1. z-cyrkoniami/z-perłami/złote/pozłacane
b4rt3kk
Na samym końcu:

  1. echo str_replace(',', ' / ', $name);
d3ut3r
Po pierwsze to źle zaprojektowałeś bazę danych i teraz za to płacisz tongue.gif, przechowywanie kategorii w formacie: kat1,kat2,kat3 to zaprzeczenie relacyjności MySQL. Skoro jednak nie możesz już tego zmienić to moim zdaniem krócej byłoby zrobić tak:

  1. $r['categories']='1,2,3,4';
  2.  
  3. $cats=array(
  4. ','=>'/', //to tylko po to żeby nie było przecinków
  5. '1'=>'kategoria 1',
  6. '2'=>'kategoria 2',
  7. '3'=>'kategoria 3',
  8. '4'=>'kategoria 4'
  9. );
  10.  
  11. echo str_replace(array_keys($cats),array_values($cats),$r['categories']);


powinieneś dostać oczekiwany rezultat
Gość
nie ja zaprojektowałem baze danych. ja tylko musze sie w tym g... babrać
pomogło, ale wciąż w niektorych rekordach jest "z-cyrkoniami,z-perłami,złote/pozłacanez-cyrkoniami/z-perłami/złote/pozłacane" nie wiedzieć dlaczego
Gość
ok, zrobione biggrin.gif dzieki za pomoc echo name tzreba bylo wywalic
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.