Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Ścieżka pliku jako zmienna
Forum PHP.pl > Forum > PHP
shpaque
Witam znów serdecznie; mam tym razem taki problem /pewnie jak zwykle prosty ale mnie juz trafia szlag/ biggrin.gif .
  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. "Content-Type: text/plain; charset=UTF-8";
  6. $error_message = "";
  7. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  8. {
  9. $action = isset($_POST['action']) ? $_POST['action'] : '';
  10. $database = './../.db/data.db';
  11. $success_page = './nok.php';
  12.  
  13. if (!file_exists($database))
  14. {
  15. echo 'Nie odnaleziono bazy danych!';
  16. }
  17.  
  18. if ($action == 'dodaj')
  19. {
  20. $newkod = $_POST['kod'];
  21. $newopis = $_POST['opis'];
  22. $newcena = $_POST['cena'];
  23. $newfileupload =
  24.  
  25. $items = file($database);
  26. foreach($items as $line)
  27. {
  28. list($zdjecie, $kod, $opis, $cena, $status) = explode('|', trim($line));
  29. if ($newkod == $kod)
  30. {
  31. $error_message = 'Wygenerowany kod już istnieje! Odśwież formularz w celu wygenerowania nowego kodu.';
  32. break;
  33. }
  34. }
  35. if (empty($error_message))
  36. {
  37. $file = fopen($database, 'a');
  38. fwrite($file, $newkod);
  39. fwrite($file, '.jpg|');
  40. fwrite($file, $newkod);
  41. fwrite($file, '|');
  42. fwrite($file, $newopis);
  43. fwrite($file, '|');
  44. fwrite($file, $newcena);
  45. fwrite($file, '|1');
  46. fwrite($file, "\r\n");
  47. fclose($file);
  48. header('Location: '.$success_page);
  49. }
  50. }
  51. }
  52. ?>


chodzi mi o linijke
  1. $database = './../.db/data.db';
- jesli jest stala sciezka - wszystko gra; tyle że ja mam ok 10 plików *.db i chcialbym w zaleznosci od wartosci zmiennej zebypodmieniał wartosc pliku bazowego - tyle ze to nie dziala!

Najpierw zrobilem tak
na poczatku strony
  1. <?php
  2. $category = $_GET['category'];
  3. $generate = rand(0000000, 9999999);
  4. $cat = '';
  5. $text = '';
  6. $dbase = '';
  7. if ($category == balony)
  8. {
  9. $cat = "BA";
  10. $text = "Balony";
  11. $dbase = "./../db/balony.db";
  12. }
  13. else if ($category == ceramika)
  14. {
  15. $cat = "CE";
  16. $text = "Ceramika";
  17. $dbase = "./../db/ceramika.db";
  18. }
i tak dalej = więc zmienna $dbase przybiera rozne wartosci, tyle ze jesli pozniej zrobie
  1. $database = $dbase;
to nic nie pobiera... jak to rozwiazac?
Fifi209
Popraw warunki, bo stringi trzymamy w ' lub "
mortus
Nie prościej byłoby zrobić po prostu tak:
  1. if(isset($_GET['category']) && $_GET['category'] != '') {
  2. $dbName = $_GET['category'].'.db';
  3. $dbDirectory = './../db/';
  4. $dbPath = $dbDirectory.$dbName;
  5. // reszta skryptu
  6. } else {
  7. // coś jest nie tak, więc trzeba ten błąd obsłużyć
  8. }

lub tym podobnie.
Poza tym spójrz, jak dokonujesz porównań:
  1. if ($category == balony) {
  2. // ...
  3. } else if ($category == ceramika) {
  4. // ...
  5. }

Warunki nigdy nie są spełnione, bo porównujesz zmienne z niezdefiniowanymi stałymi (powinno być 'balony', 'ceramika'), a co za tym idzie zmienna $database przyjmuje wartość zmiennej $dbase, która to z kolei jest pustym łańcuchem znaków.
W rozwiązaniu problemu mogło pomóc włączenie wyświetlania i raportowania wszystkich błędów w tym pliku/skrypcie.
shpaque
no tak tyle że kiedy zmienna $category przybiera rozne wartości - wszystkie zmienne w klamrze przybieraja okreslone wartosci - wiec tutaj dziala; problem polegal tylko na pliku $database poniewaz jesli dostawał cos innego niz konkretna sciezke w '' to wariowal...
mortus
A na jakiej zasadzie są tworzone te zmienne? Jeśli $cat to dwie pierwsze litery zamienione na duże, a $text to nazwa pisana z dużej litery, to możesz to zrobić tak:
  1. if(isset($_GET['category']) && $_GET['category'] != '') {
  2. $dbName = $_GET['category'].'.db';
  3. $dbDirectory = './../db/';
  4. $dbPath = $dbDirectory.$dbName;
  5. $cat = strtoupper(substr($_GET['category'], 0, 2));
  6. $text = ucfirst($_GET['category']);
  7. // reszta skryptu
  8. } else {
  9. // coś jest nie tak, więc trzeba ten błąd obsłużyć
  10. }

A jeśli istnieją jakieś szczególne przypadki, to lepiej użyć switch():
  1. if(isset($_GET['category']) && $_GET['category'] != '') {
  2. $dbName = $_GET['category'].'.db';
  3. $dbDirectory = './../db/';
  4. $dbPath = $dbDirectory.$dbName;
  5. switch($_GET['category']) {
  6. 'dziwnie_nazwana_kategoria':
  7. $cat = 'DZI';
  8. $text = 'DziwnieNazwanaKategoria';
  9. break;
  10. default:
  11. $cat = strtoupper(substr($_GET['category'], 0, 2));
  12. $text = ucfirst($_GET['category']);
  13. }
  14. } else {
  15. // coś jest nie tak, więc trzeba ten błąd obsłużyć
  16. }


Cytat
no tak tyle że kiedy zmienna $category przybiera rozne wartości - wszystkie zmienne w klamrze przybieraja okreslone wartosci - wiec tutaj dziala; problem polegal tylko na pliku $database poniewaz jesli dostawał cos innego niz konkretna sciezke w '' to wariowal...

Szczerze wątpię, że Ci to działało, chyba że popełniłeś błąd podczas przepisywania skryptu tutaj na forum. Myślę jednak, że to po prostu nie działało i dlatego zmienna $database nie była tym, czym powinna być. Zresztą co za problem zrobić tak:
  1. $database = $dbase;
  2. var_dump($database);
luck
Ja bym to zrobił np. tak:
  1. $cfg = array(
  2. 'balony' => array(
  3. 'cat' => 'BA',
  4. 'text' => 'Balony',
  5. 'dbase' => '../db/balony.db'
  6. ),
  7. 'ceramika' => array(
  8. 'cat' => 'CE',
  9. 'text' => 'Ceramika',
  10. 'dbase' => '../db/ceramika.db'
  11. )
  12. );
  13.  
  14. if(isset($_GET['category']) && isset($cfg[$_GET['category']])) {
  15. $dbcfg = $cfg[$_GET['category']];
  16. $cat = $dbcfg['cat'];
  17. $text = $dbcfg['text'];
  18. $dbase = $dbcfg['dbase'];
  19. } else {
  20. /* Nie wybrano prawidlowej kategorii: powrot na strone glowna, wyswietlenie bledu, itp... */
  21. }

I mam nadzieję, że nie umieszczasz tego kodu w warunku:
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST')
bo oczywiście wtedy żaden z podanych tu przykładów nie zadziała.
shpaque
no wlasnioe rzecz w tym (zapomnialem nadmienic) ze to wszystko nie jest w warunku POST ale $database tak... Wiec moze jedyny problem tkwi w tym zeby jakos ta zmienna przerzucic do warunku post?
mortus
Cytat(luck @ 14.09.2011, 19:28:51 ) *
I mam nadzieję, że nie umieszczasz tego kodu w warunku:
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST')
bo oczywiście wtedy żaden z podanych tu przykładów nie zadziała.

A to niby dlaczego? Prosty test:
[PHP] plik.php - pobierz, plaintext
  1. <?php
  2. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  3. echo $_GET['zmienna'];
  4. }
  5. ?>
  6. <form action="?zmienna=sto" method="post">
  7. <input type="hidden" name="action" value="check" />
  8. <input type="submit" value="Check" />
  9. </form>
[PHP] plik.php - pobierz, plaintext


@shpaque Pokaż cały aktualny kod, bo nikt zgadywał nie będzie, co jest źle.
shpaque
Na prośbę przesyłam cały kod:
  1. <?php
  2. $category = $_GET['category'];
  3. $generate = rand(0000000, 9999999);
  4. $cat = '';
  5. $text = '';
  6. $dbase = '';
  7. if ($category == balony)
  8. {
  9. $cat = "BA";
  10. $text = "Balony";
  11. $dbase = "balony.db";
  12. }
  13. else if ($category == ceramika)
  14. {
  15. $cat = "CE";
  16. $text = "Ceramika";
  17. $dbase = "ceramika.db";
  18. }
  19. else if ($category == dekoracje)
  20. {
  21. $cat = "DE";
  22. $text = "Dekoracje";
  23. $dbase = "dekoracje.db";
  24. }
  25. else if ($category == doniczki)
  26. {
  27. $cat = "DO";
  28. $text = "Doniczki";
  29. $dbase = "doniczki.db";
  30. }
  31. else if ($category == figurki)
  32. {
  33. $cat = "FI";
  34. $text = "Figurki";
  35. $dbase = "figurki.db";
  36. }
  37. else if ($category == karnety)
  38. {
  39. $cat = "KO";
  40. $text = "Karnety okolicznościowe";
  41. $dbase = "karnety.db";
  42. }
  43. else if ($category == opakowania)
  44. {
  45. $cat = "OP";
  46. $text = "Opakowania prezentowe";
  47. $dbase = "opakowania.db";
  48. }
  49. else if ($category == slonie)
  50. {
  51. $cat = "SE";
  52. $text = "Słonie";
  53. $dbase = "slonie.db";
  54. }
  55. else if ($category == szklo)
  56. {
  57. $cat = "SKL";
  58. $text = "Szkło";
  59. $dbase = "szklo.db";
  60. }
  61. else if ($category == swiece)
  62. {
  63. $cat = "SW";
  64. $text = "Świece";
  65. $dbase = "swiece.db";
  66. }
  67. else if ($category == swieczniki)
  68. {
  69. $cat = "SWC";
  70. $text = "Świeczniki";
  71. $dbase = "swieczniki.db";
  72. }
  73. else if ($category == wazony)
  74. {
  75. $cat = "WA";
  76. $text = "Wazony";
  77. $dbase = "wazony.db";
  78. }
  79. else if ($category == znicze)
  80. {
  81. $cat = "ZN";
  82. $text = "Znicze";
  83. $dbase = "znicze.db";
  84. }
  85. else if ($category == bozenarodzenie)
  86. {
  87. $cat = "AB";
  88. $text = "Artykuły bożonarodzeniowe";
  89. $dbase = "bozenarodzenie.db";
  90. }
  91. else if ($category == wielkanoc)
  92. {
  93. $cat = "AW";
  94. $text = "Artykuły wielkanocne";
  95. $dbase = "wielkanoc.db";
  96. }
  97. else if ($category == walentynki)
  98. {
  99. $cat = "AWA";
  100. $text = "Artykuły walentynkowe";
  101. $dbase = "walentynki.db";
  102. }
  103. else if ($category == rozne)
  104. {
  105. $cat = "AS";
  106. $text = "Artykuły sezonowe różne";
  107. $dbase = "rozne.db";
  108. }
  109. else if ($category == grosze)
  110. {
  111. $cat = "AT";
  112. $text = "Artykuły poniżej 1,89 PLN";
  113. $dbase = "grosze.db";
  114. }
  115. else
  116. {
  117. $cat = "XX";
  118. $text = "Musisz wybrać kategorię!";
  119. $dbase = "";
  120. }
  121. ?>
  122. <?php
  123.  
  124. ini_set('display_errors', 1);
  125.  
  126. "Content-Type: text/plain; charset=UTF-8";
  127. $error_message = "";
  128.  
  129. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  130. {
  131. $action = isset($_POST['action']) ? $_POST['action'] : '';
  132. $database = './../db/'.$dbase.'';
  133. $success_page = './nok.php';
  134.  
  135. if (!file_exists($database))
  136. {
  137. echo 'Nie odnaleziono bazy danych!';
  138. }
  139.  
  140. if ($action == 'dodaj')
  141. {
  142. $newkod = $_POST['kod'];
  143. $newopis = $_POST['opis'];
  144. $newcena = $_POST['cena'];
  145.  
  146. $items = file($database);
  147. foreach($items as $line)
  148. {
  149. list($zdjecie, $kod, $opis, $cena, $status) = explode('|', trim($line));
  150. if ($newkod == $kod)
  151. {
  152. $error_message = 'Wygenerowany kod już istnieje! Odśwież formularz w celu wygenerowania nowego kodu.';
  153. break;
  154. }
  155. }
  156. if (empty($error_message))
  157. {
  158. $file = fopen($database, 'a');
  159. fwrite($file, $newkod);
  160. fwrite($file, '.jpg|');
  161. fwrite($file, $newkod);
  162. fwrite($file, '|');
  163. fwrite($file, $newopis);
  164. fwrite($file, '|');
  165. fwrite($file, $newcena);
  166. fwrite($file, '|1');
  167. fwrite($file, "\r\n");
  168. fclose($file);
  169.  
  170. header('Location: '.$success_page);
  171. }
  172. }
  173. }
  174. ?>


dodam tylko ze WSZYSTKO dziala bez zarzutu oprocz tej sciezki
@mortus - test nie zadzialal...
mortus
To teraz przenieś linie 124 i 125 na sam początek (linia 2). A czym w ogóle jest linia 127? Usuń ją. Co to za liczba 0000000 w rand()? Powinno być po prostu 0.

Cytat
@mortus - test nie zadzialal...

To chyba korzystasz z innego PHP-a niż ja.
shpaque
Dzięki za pomoc - już poradziłem sobie razem z wskazówkami z Twojej strony smile.gif (zrobiłem tak, żeby formularz w postaci hidden przemycil informacje do tablicy post... i wszystko gra... Teraz pozostał mi ostatni dla mnie zupełnie niezrozumialy problem - ale to w innym temacie... Dzięki. Poniżej daję kod, ktory działa w całości

  1. <?php
  2. $category = $_GET['category'];
  3. $generate = rand(0, 9999999);
  4. $cat = '';
  5. $text = '';
  6. if ($category == balony)
  7. {
  8. $cat = "BA";
  9. $text = "Balony";
  10. }
  11. else if ($category == ceramika)
  12. {
  13. $cat = "CE";
  14. $text = "Ceramika";
  15. }
  16. else if ($category == dekoracje)
  17. {
  18. $cat = "DE";
  19. $text = "Dekoracje";
  20. }
  21. else if ($category == doniczki)
  22. {
  23. $cat = "DO";
  24. $text = "Doniczki";
  25. }
  26. else if ($category == drewno)
  27. {
  28. $cat = "DR";
  29. $text = "Drewno";
  30. }
  31. else if ($category == figurki)
  32. {
  33. $cat = "FI";
  34. $text = "Figurki";
  35. }
  36. else if ($category == karnety)
  37. {
  38. $cat = "KO";
  39. $text = "Karnety okolicznościowe";
  40. }
  41. else if ($category == opakowania)
  42. {
  43. $cat = "OP";
  44. $text = "Opakowania prezentowe";
  45. }
  46. else if ($category == slonie)
  47. {
  48. $cat = "SE";
  49. $text = "Słonie";
  50. }
  51. else if ($category == szklo)
  52. {
  53. $cat = "SKL";
  54. $text = "Szkło";
  55. }
  56. else if ($category == swiece)
  57. {
  58. $cat = "SW";
  59. $text = "Świece";
  60. }
  61. else if ($category == swieczniki)
  62. {
  63. $cat = "SWC";
  64. $text = "Świeczniki";
  65. }
  66. else if ($category == wazony)
  67. {
  68. $cat = "WA";
  69. $text = "Wazony";
  70. }
  71. else if ($category == znicze)
  72. {
  73. $cat = "ZN";
  74. $text = "Znicze";
  75. }
  76. else if ($category == bozenarodzenie)
  77. {
  78. $cat = "AB";
  79. $text = "Artykuły bożonarodzeniowe";
  80. }
  81. else if ($category == wielkanoc)
  82. {
  83. $cat = "AW";
  84. $text = "Artykuły wielkanocne";
  85. }
  86. else if ($category == walentynki)
  87. {
  88. $cat = "AWA";
  89. $text = "Artykuły walentynkowe";
  90. }
  91. else if ($category == rozne)
  92. {
  93. $cat = "AS";
  94. $text = "Artykuły sezonowe różne";
  95. }
  96. else if ($category == grosze)
  97. {
  98. $cat = "AT";
  99. $text = "Artykuły poniżej 1,89 PLN";
  100. }
  101. else
  102. {
  103. $cat = "XX";
  104. $text = "Musisz wybrać kategorię!";
  105. }
  106. ?>
  107. <?php
  108.  
  109. $error_message = "";
  110.  
  111. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  112. {
  113. $action = isset($_POST['action']) ? $_POST['action'] : '';
  114. $kategoria = $_POST['kategoria'];
  115. $dbasename = $_POST['dbasename'];
  116. $database = './../db/'.$dbasename.'';
  117. $success_page = './nok.php';
  118.  
  119. if (!file_exists($database))
  120. {
  121. echo 'Nie odnaleziono bazy danych!';
  122. }
  123.  
  124. if ($action == 'dodaj')
  125. {
  126. $newkod = $_POST['kod'];
  127. $newopis = $_POST['opis'];
  128. $newcena = $_POST['cena'];
  129.  
  130. $items = file($database);
  131. foreach($items as $line)
  132. {
  133. list($zdjecie, $kod, $opis, $cena, $status) = explode('|', trim($line));
  134. if ($newkod == $kod)
  135. {
  136. $error_message = 'Wygenerowany kod już istnieje! Odśwież formularz w celu wygenerowania nowego kodu.';
  137. break;
  138. }
  139. }
  140. if (empty($error_message))
  141. {
  142. $file = fopen($database, 'a');
  143. fwrite($file, $newkod);
  144. fwrite($file, '.jpg|');
  145. fwrite($file, $newkod);
  146. fwrite($file, '|');
  147. fwrite($file, $newopis);
  148. fwrite($file, '|');
  149. fwrite($file, $newcena);
  150. fwrite($file, '|1');
  151. fwrite($file, "\r\n");
  152. fclose($file);
  153. header('Location: '.$success_page);
  154. }
  155. }
  156. }
  157. ?>


a pozniej w formularzu takie wpisy:
  1. <form name="dodaj" method="post" action="<?php echo basename(__FILE__); ?>" enctype="multipart/form-data" accept-charset="UTF-8" id="nowyForm1">
  2. <input type="hidden" name="action" value="dodaj"/>
  3. <input type="hidden" name="dbasename" value="<?php echo $category; echo '.db'; ?>"/>
  4. <input type="hidden" name="kategoria" value="<?php echo $text; ?>"/>


i wszystko gra od strony wpisu w baze danych... Dzieki
mortus
Tyle, że teraz linie od 1 do 106 włącznie nie są Ci potrzebne.

edit:
Stosuj konkatenacje:
  1. <input type="hidden" name="dbasename" value="<?php echo $category.'.db'; ?>"/>
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.