Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlenie tablicy jesli jest konkretna zmienna w tej tablicy
Forum PHP.pl > Forum > Przedszkole
shpaque
Witam serdecznie,
kilka lat temu mialem ten sam problem i go ladnie rozwiazaliscie mi tutaj, to bylo dawno sam juz nie pamietam jak tego szukac.

mam tak:
  1. if ($types[$count] == "admin")
  2. {
  3. $x[] = $count;
  4. $countadmin++;
  5. }
  6. if ($types[$count] == "active")
  7. {
  8. $y[] = $count;
  9. $countactive++;
  10. }
  11. if ($types[$count] == "passive")
  12. {
  13. $countpassive++;
  14. }
  15. $count++;
  16. }
  17.  
  18. echo "<div class=\"col-sm-12\">
  19. <h3 class=\"text-center header\">Zarejestrowani <b>Administratorzy</b> (".$countadmin.")</h3>";
  20.  
  21. for ($i = 0; $i < $countadmin; $i++)
  22. {
  23. echo "<div class=\"row table-row\">";
  24. echo "<div class=\"col-sm-2\"><span class=\"span\">".$titles[$i]."</span></div>";
  25. echo "<div class=\"col-sm-5\"><span class=\"span\">".$names[$i]." <b>".$surnames[$i]."</b></span></div>";
  26. echo "<div class=\"col-sm-4\"><span class=\"span\">".$emails[$i]."</span></div>";
  27. echo "<div class=\"col-sm-1 olowek\"><a class=\"edit\" href=\"./admin-edit.php?user=".$emails[$i]."\" title=\"Edytuj Administratora\">✏</a></div>";
  28. echo "</div>";
  29. }
  30. echo "</div>";


i teraz tablica $i przyjmie 0 i 1. to wiemy, ale jak ma wyswietlic prawidlowe pozycje tylko administratorow, czyli tych ktorych $type == "admin"?
SmokAnalog
Ułatw sobie życie i zamiast jedną osobę mieć w czterech tablicach, miej w jednej. Czyli na przykład dla ósmego z kolei usera, zamiast $titles[7], $names[7], $surnames[7], $emails[7] miej to ['title' => ..., 'name' => ..., 'surname' => ..., 'email' => ...].
shpaque
na tej zasadzie?

  1. if ($types[$count] == "admin")
  2. {
  3. $admin = array('title' => $titles[$count], 'name' => $names[$count], 'surname' => $surnames[$count], 'email' => $emails[$count]);
  4. $countadmin++;
  5. }
  6. if ($types[$count] == "active")
  7. {
  8. $y[] = $count;
  9. $countactive++;
  10. }
  11. if ($types[$count] == "passive")
  12. {
  13. $countpassive++;
  14. }
  15. $count++;
  16. }
  17.  
  18. echo "<div class=\"col-sm-12\">
  19. <h3 class=\"text-center header\">Zarejestrowani <b>Administratorzy</b> (".$countadmin.")</h3>";
  20.  
  21. for ($i = 0; $i < $countadmin; $i++)
  22. {
  23. echo "<div class=\"row table-row\">";
  24. echo "<div class=\"col-sm-2\"><span class=\"span\">".$admin['title'][$i]."</span></div>";
  25. echo "<div class=\"col-sm-5\"><span class=\"span\">".$admin['name'][$i]." <b>".$admin['surname'][$i]."</b></span></div>";
  26. echo "<div class=\"col-sm-4\"><span class=\"span\">".$admin['email'][$i]."</span></div>";
  27. echo "<div class=\"col-sm-1 olowek\"><a class=\"edit\" href=\"./admin-edit.php?user=".$admin['email'][$i]."\" title=\"Edytuj Administratora\">✏</a></div>";
  28. echo "</div>";
  29. }
  30. echo "</div>";
SmokAnalog
Zacznijmy od początku. Pokażesz jak pobierasz tych użytkowników?
shpaque
dobra juz to mam - o to chodzilo, tak? smile.gif

  1. if ($types[$count] == "admin")
  2. {
  3. $adtitle[] = $titles[$count];
  4. $adname[] = $names[$count];
  5. $adsurname[] = $surnames[$count];
  6. $ademail[] = $emails[$count];
  7. $countadmin++;
  8. }
  9.  
  10. ...
  11.  
  12. $count++;
  13. }
  14.  
  15. echo "<div class=\"col-sm-12\">
  16. <h3 class=\"text-center header\">Zarejestrowani <b>Administratorzy</b> (".$countadmin.")</h3>";
  17.  
  18. for ($i = 0; $i < $countadmin; $i++)
  19. {
  20. echo "<div class=\"row table-row\">";
  21. echo "<div class=\"col-sm-2\"><span class=\"span\">".$adtitle[$i]."</span></div>";
  22. echo "<div class=\"col-sm-5\"><span class=\"span\">".$adname[$i]." <b>".$adsurname[$i]."</b></span></div>";
  23. echo "<div class=\"col-sm-4\"><span class=\"span\">".$ademail[$i]."</span></div>";
  24. echo "<div class=\"col-sm-1 olowek\"><a class=\"edit\" href=\"./admin-edit.php?user=".$ademail[$i]."\" title=\"Edytuj Administratora\">✏</a></div>";
  25. echo "</div>";
  26. }
  27. echo "</div>";



jesli to jest to o co chodzi - a w tytm momencie dziala bezblednie dla adminow aktywnych i pasywnych -0 teraz szkola dla mnie juz wyzsza - chodzi o zmienną $sections[$count] sekcji jest 10 chcialbym zeby uzytkownicy aktywni (na przyklad) byli wyswietlani sekcjami:

SEKCJA 1

Franek Kimono (user nr 45 na przyklad)
Przemysław Krawężnik (user nr 60)

SEKCJA 2

Michał Anioł (user nr 2)...


chodzi o to zeby jeszcze doddatkowo zrobic podzial na te sekcje
SmokAnalog
Ponawiam pytanie: jak pobierasz tych użytkowników? Bo Twój kod jest po prostu brzydki, kod spaghetti na tablicach. Zrób tak jak mówiłem, czyli niech każdy użytkownik będzie własną tablicą albo obiektem. Wtedy nie potrzebujesz żadnego zliczania liczby użytkowników, tylko z foreach możesz ładnie sobie przeiterować.

Czyli po prostu ponawiam pytanie.
shpaque
tak:

  1. <?php
  2. $types = array();
  3. $titles = array();
  4. $names = array();
  5. $surnames = array();
  6. $sexs = array();
  7. $statuss = array();
  8. $emails = array();
  9. $passwords = array();
  10. $phones = array();
  11. $colleges = array();
  12. $organs = array();
  13. $citys = array();
  14. $sections = array();
  15. $sectiontypes = array();
  16. $invoices = array();
  17. $companys = array();
  18. $addresss = array();
  19. $codes = array();
  20. $ccitys = array();
  21. $nips = array();
  22. $cphones = array();
  23. $payds = array();
  24.  
  25. $database = "./../db/users.csv";
  26. $count = 0;
  27. $countadmin = 0;
  28. $countactive = 0;
  29. $countpassive = 0;
  30.  
  31. $items = file($database);
  32. foreach($items as $line)
  33. {
  34. list($type, $title, $name, $surname, $sex, $status, $email, $password, $phone, $college, $organ, $city, $section, $sectiontype, $invoice, $company, $address, $code, $ccity, $nip, $cphone, $payd) = explode('|', trim($line));
  35.  
  36. array_multisort ($surnames, SORT_ASC, $types, $titles, $names, $sexs, $statuss, $emails, $passwords, $phones, $colleges, $organs, $citys, $sections, $sectiontypes, $invoices, $companys, $addresss, $codes, $ccitys, $nips, $cphones, $payds);
  37.  
  38. $types[$count] = $type;
  39. $titles[$count] = $title;
  40. $names[$count] = $name;
  41. $surnames[$count] = $surname;
  42. $sexs[$count] = $sex;
  43. $statuss[$count] = $status;
  44. $emails[$count] = $email;
  45. $passwords[$count] = $password;
  46. $phones[$count] = $phone;
  47. $colleges[$count] = $college;
  48. $organs[$count] = $organ;
  49. $citys[$count] = $city;
  50. $sections[$count] = $section;
  51. $sectiontypes[$count] = $sectiontype;
  52. $invoices[$count] = $invoice;
  53. $companys[$count] = $company;
  54. $addresss[$count] = $address;
  55. $codes[$count] = $code;
  56. $ccitys[$count] = $ccity;
  57. $nips[$count] = $nip;
  58. $cphones[$count] = $cphone;
  59. $payds[$count] = $payd;
  60.  
  61. if ($types[$count] == "admin")
  62. {
  63. $adtitle[] = $titles[$count];
  64. $adname[] = $names[$count];
  65. $adsurname[] = $surnames[$count];
  66. $ademail[] = $emails[$count];
  67. $countadmin++;
  68. }
  69. if ($types[$count] == "active")
  70. {
  71. $actitle[] = $titles[$count];
  72. $acname[] = $names[$count];
  73. $acsurname[] = $surnames[$count];
  74. $acemail[] = $emails[$count];
  75. $acsection[] = $sections[$count];
  76. $acsectiontype[] = $sectiontypes[$count];
  77. $acinvoice[] = $invoices[$count];
  78. $acpayd[] = $payds[$count];
  79. $countactive++;
  80. }
  81. if ($types[$count] == "passive")
  82. {
  83. $ptitle[] = $titles[$count];
  84. $pname[] = $names[$count];
  85. $psurname[] = $surnames[$count];
  86. $pemail[] = $emails[$count];
  87. $pinvoice[] = $invoices[$count];
  88. $ppayd[] = $payds[$count];
  89. $countpassive++;
  90. }
  91. $count++;
  92. }
  93.  
  94. echo "<div class=\"col-sm-12\">
  95. <h3 class=\"text-center header\">Zarejestrowani <b>Administratorzy</b> (".$countadmin.")</h3>";
  96.  
  97. for ($i = 0; $i < $countadmin; $i++)
  98. {
  99. echo "<div class=\"row table-row\">";
  100. echo "<div class=\"col-sm-2\"><span class=\"span\">".$adtitle[$i]."</span></div>";
  101. echo "<div class=\"col-sm-5\"><span class=\"span\">".$adname[$i]." <b>".$adsurname[$i]."</b></span></div>";
  102. echo "<div class=\"col-sm-4\"><span class=\"span\">".$ademail[$i]."</span></div>";
  103. echo "<div class=\"col-sm-1 olowek\"><a class=\"edit\" href=\"./admin-edit.php?user=".$ademail[$i]."\" title=\"Edytuj Administratora\">✏</a></div>";
  104. echo "</div>";
  105. }
  106. echo "</div>";
SmokAnalog
Padłem na zawał. facepalmxd.gif
shpaque
spodziewalem sie tego smile.gif to teraz mi lopatologicznie powiedz jak to zmienic smile.gif
SmokAnalog
Zacznij od sensownego poskładania użytkowników do kupy:

  1. $columns = [
  2. 'type',
  3. 'title',
  4. 'name',
  5. 'surname',
  6. 'sex',
  7. 'status',
  8. 'email',
  9. 'password',
  10. 'phone',
  11. 'college',
  12. 'organ',
  13. 'city',
  14. 'section',
  15. 'sectiontype',
  16. 'invoice',
  17. 'company',
  18. 'address',
  19. 'code',
  20. 'ccity',
  21. 'nip',
  22. 'cphone',
  23. 'payd',
  24. ];
  25.  
  26. $users = array_map(
  27. function ($record) use ($columns) {
  28. return array_combine($columns, str_getcsv($record, '|'));
  29. },
  30. file('users.csv')
  31. );


Zakładam, że masz w pliku users.csv prawidłowo pooddzielane wartości słomką "|".
shpaque
to wymienic zamiast foreacha z trimem? Tak w pliku csv wszystko ladnie slomka oddzielone
SmokAnalog
Tak, możesz całego tego foreacha wyrzucić. Nie chce mi się wnikać w te zależności, kiedy jakie pole co oznacza, bo widzę że w tych warunkach coś tam ustalasz według typu. Możesz to opisać słowami, to Ci podpowiem jak to elegancko napisać. HTML-a zrób najlepiej w osobnym pliku, albo jak musi być w tym samym, to nie w echo, tylko poza <?php ... ?>.
shpaque
a jak zrobic wtedy multisort? i jak okreslac ify? wkleje cos takiego:

  1. <?php
  2. $columns = [
  3. 'type',
  4. 'title',
  5. 'name',
  6. 'surname',
  7. 'sex',
  8. 'status',
  9. 'email',
  10. 'password',
  11. 'phone',
  12. 'college',
  13. 'organ',
  14. 'city',
  15. 'section',
  16. 'sectiontype',
  17. 'invoice',
  18. 'company',
  19. 'address',
  20. 'code',
  21. 'ccity',
  22. 'nip',
  23. 'cphone',
  24. 'payd',
  25. ];
  26.  
  27. $users = array_map(
  28. function ($record) use ($columns)
  29. {
  30. return array_combine($columns, str_getcsv($record, '|'));
  31. },
  32. file('./../db/users.csv')
  33. );
  34.  
  35. array_multisort ($surnames, SORT_ASC, $types, $titles, $names, $sexs, $statuss, $emails, $passwords, $phones, $colleges, $organs, $citys, $sections, $sectiontypes, $invoices, $companys, $addresss, $codes, $ccitys, $nips, $cphones, $payds);
  36.  
  37.  
  38. $x = 0;
  39.  
  40. if ($users['type'] == "admin")
  41. {
  42. $last = count($users);
  43. $admin = $users[$x];
  44. $x++;
  45. }
SmokAnalog
Zastanów się najpierw jak chcesz posortować, bo to Twoje sortowanie to jakieś bez sensu jest.

Ifów w ogóle nie będziesz potrzebował. Zamiast tego, możesz zrobić coś takiego:

  1. $admins = array_filter($users, function ($user) {
  2. return $user['type'] === 'admin';
  3. });
shpaque
a w jaki sposob ich wtedy zliczyc ilu ich jest do petli? sortowanie klasyczne - chce zeby w tabelce sortowalo a-z nazwiskami (mimo ze wyswietla imie+nazwisko)

  1. <?php
  2. $columns = [
  3. 'type',
  4. 'title',
  5. 'name',
  6. 'surname',
  7. 'sex',
  8. 'status',
  9. 'email',
  10. 'password',
  11. 'phone',
  12. 'college',
  13. 'organ',
  14. 'city',
  15. 'section',
  16. 'sectiontype',
  17. 'invoice',
  18. 'company',
  19. 'address',
  20. 'code',
  21. 'ccity',
  22. 'nip',
  23. 'cphone',
  24. 'payd',
  25. ];
  26.  
  27. $users = array_map(
  28. function ($record) use ($columns)
  29. {
  30. return array_combine($columns, str_getcsv($record, '|'));
  31. },
  32. file('./../db/users.csv')
  33. );
  34.  
  35. $admins = array_filter($users, function ($user) {return $user['type'] === 'admin';});
  36. $actives = array_filter($users, function ($user) {return $user['type'] === 'active';});
  37. $passives = array_filter($users, function ($user) {return $user['type'] === 'passive';});
  38. ?>
  39.  
  40. <table class="tabelka">
  41. <tbody>
  42. <div class="text-center header" style="width: 100% !important;">Zarejestrowani <b>Administratorzy</b> (<?php echo $x; ?>)</div>
  43.  
  44. <?php
  45. for ($i = 0; $i < $x; $i++)
  46. {
  47. echo "<tr class=\"table-row\">
  48. <td width=\"10%\"><span class=\"span\">".$admins['title'][$i]."</span></td>
  49. <td width=\"40%\"><span class=\"span\">".$admins['name'][$i]." <b>".$admins['surname'][$i]."</b></span></td>
  50. <td width=\"40%\"><span class=\"span\">".$admins['email'][$i]."</span></td>
  51. <td class=\"olowek\"><a class=\"edit\" href=\"./admin-edit.php?user=".$admins['email'][$i]."\" title=\"Edytuj Administratora\">✏</a></td>
  52. </tr>";
  53. }
  54. ?>
  55. </tbody>
  56. </table>
SmokAnalog
Do sortowania zaraz dojdziemy. Najpierw HTML, zobacz:

  1. <div class="text-center header" style="width: 100% !important;">Zarejestrowani <b>Administratorzy</b> (<?php echo count($admins) ?>)</div>
  2.  
  3. <table class="tabelka">
  4. <tbody>
  5. <?php foreach ($admins as $admin): ?>
  6. <tr class="table-row">
  7. <td width="10%"><span class="span"><?php echo htmlspecialchars($admin['title']) ?></span></td>
  8. <td width="40%"><span class="span"><?php echo htmlspecialchars($admin['name']) ?> <b><?php echo htmlspecialchars($admin['surname']) ?></b></span></td>
  9. <td width="40%"><span class="span"><?php echo htmlspecialchars($admin['email']) ?></span></td>
  10. <td class="olowek"><a class="edit" href="./admin-edit.php?user=<?php echo urlencode($admin['email']) ?>" title="Edytuj Administratora">✏</a></td>
  11. </tr>
  12. <?php endforeach ?>
  13. </tbody>
  14. </table>


Wywaliłem echo. Poprawiłem też Twoją tabelę, bo miałeś w niej diva, a to błąd.
shpaque
a sredniki po echo?

  1. <?php
  2. $columns = ['type', 'title', 'name', 'surname', 'sex', 'status', 'email', 'password', 'phone', 'college', 'organ', 'city', 'section', 'sectiontype', 'invoice', 'company', 'address', 'code', 'ccity', 'nip', 'cphone', 'payd'];
  3.  
  4. $users = array_map(
  5. function ($record) use ($columns)
  6. {
  7. return array_combine($columns, str_getcsv($record, '|'));
  8. },
  9. file('./../db/users.csv')
  10. );
  11.  
  12. $admins[$x] = array_filter($users, function ($user) {return $user['type'] === 'admin';});
  13. $actives[$y] = array_filter($users, function ($user) {return $user['type'] === 'active';});
  14. $passives[$z] = array_filter($users, function ($user) {return $user['type'] === 'passive';});
  15. ?>
  16.  
  17. <div class="text-center header" style="width: 100% !important;">Zarejestrowani <b>Administratorzy</b> (<?php echo count($admins); ?>)</div>
  18.  
  19. <table class="tabelka">
  20. <tbody>
  21. <?php foreach ($admins as $admin): ?>
  22. <tr class="table-row">
  23. <td width="10%"><span class="span"><?php echo htmlspecialchars($admin['title']) ?></span></td>
  24. <td width="40%"><span class="span"><?php echo htmlspecialchars($admin['name']) ?> <b><?php echo htmlspecialchars($admin['surname']) ?></b></span></td>
  25. <td width="40%"><span class="span"><?php echo htmlspecialchars($admin['email']) ?></span></td>
  26. <td class="olowek"><a class="edit" href="./admin-edit.php?user=<?php echo urlencode($admin['email']) ?>" title="Edytuj Administratora">✏</a></td>
  27. </tr>
  28. <?php endforeach ?>
  29. </tbody>
  30. </table>


mam tak w tym momencie ale mi w ogole wywala... musze zrobic error reporting
SmokAnalog
Średniki po echo możesz wstawić, ja osobiście używając tych wstawek PHP w HTML-u nie używam średników.

Wywala Ci błąd, bo uparcie wstawiasz te indeksy. Już nie potrzebujesz $admins[$x] = ..., tylko po prostu $admins = ...

Zapomnij o $x, $y, $z itd. I w tym tkwi całe piękno ładnie zorganizowanych tablic. Nie babrasz się z indeksami.
shpaque
E_WARNING : type 2 -- file(): open_basedir restriction in effect. File(./../db/users.csv) is not within the allowed path(s): (main/) -- at line 9

E_WARNING : type 2 -- file(./../db/users.csv): failed to open stream: Operation not permitted -- at line 9

E_WARNING : type 2 -- array_map(): Argument #2 should be an array -- at line 9

E_WARNING : type 2 -- array_filter() expects parameter 1 to be array, null given -- at line 12

E_WARNING : type 2 -- array_filter() expects parameter 1 to be array, null given -- at line 13

E_WARNING : type 2 -- array_filter() expects parameter 1 to be array, null given -- at line 14
Zarejestrowani Administratorzy (0)

E_WARNING : type 2 -- Invalid argument supplied for foreach() -- at line 21

czyli problem jest w "file('./../db/users.csv')"
bo jak w php fiddle dalem pelna sciezke juz bylo ok
SmokAnalog
Nie masz uprawnień do odczytywania plików z tamtego folderu. Albo przenieś users.csv wyżej (i nie zapomnij odświeżyć ścieżki w kodzie), albo w php.ini ustaw open_basedir = none.
shpaque
a skad to sie nagle wzielo tak? to przez kod? nigdy nie musialem w ogole dawac php.ini

hhehehe :0 mialem php 5.3 ustawiony na serwerze smile.gif

ok to super dziala smile.gif
co z sortowaniem po nazwisku?
SmokAnalog
No to jeśli chodzi o sortowanie, to ja bym to zrobił tak:

  1. array_column($admins, 'surname'),
  2. SORT_FLAG_CASE | SORT_STRING,
  3. array_column($admins, 'name'),
  4. SORT_FLAG_CASE | SORT_STRING,
  5. $admins
  6. );


Te śmieszne stałe spowodują, że ładnie się posortuje bez względu na wielkość liter. Masz posortowane najpierw wg nazwiska, a potem wg imienia, czyli chyba idealnie.
shpaque
chyba dziala - to jeszcze jedno powiedz:

jak napisac w tym stylu, zeby wyswietlil mi tylko aktywnych ktorzy wybrali sekcje 1 (wartosc zmiennej "s1") w ['section'] - analogicznie sobie poradze i jak ich zliczyc (liczba uzytkownikow aktywnych sekcji 1)
SmokAnalog
Korzystaj po prostu odpowiednio z array_filter. Nie napisałeś dokładnie co chcesz zrobić, więc podam na przykładzie adminów. Jeśli chcesz np. mieć tablicę z adminami z sekcji s1:

  1. $adminsS1 = array_filter($users, function ($user) {
  2. return $user['type'] === 'admin' && $user['section'] === 's1';
  3. });


Albo jak masz już wcześniej $admins, to możesz ponownie przefiltrować:

  1. $adminsS1 = array_filter($admins, function ($admin) {
  2. return $admin['section'] === 's1';
  3. });


Postaraj się zrozumieć przebieg tego kodu, bo teraz masz już bardzo dobry i czytelny kod.

Tak samo z tym sortowaniem - być może lepiej będzie posortować po prostu $users i dopiero później dzielić na adminów i innych. Ponownie: nie wiem co dokładnie chcesz zrobić, więc musisz sam się trochę wysilić. Ja już i tak za dużo zrobiłem za Ciebie.
shpaque
Dziękuję ogromnie! Nie dośc, że ze stoickim spokojem mnie pokierowales, to jeszcze dzięki Tobie skrocilem kod o kilometry!

Poza tym dzięki Tobie zaczynam to rozumieć - faktycznie przy moim "wzorze" jest to pieknie napisany kod
SmokAnalog
To teraz czas na Twoje eksperymentowanie i zastanowienie się czemu zaproponowałem właśnie taki kod. Porównaj ze swoim. Jak będziesz miał pytania, to uderzaj smile.gif

Ja uciekam spać, dobranoc!
shpaque
Dobranoc, dziękuję smile.gif

Jeśli jestes lub ktokolwiek - prosze pomozcie mi jeszcze z jedna rzecza:

mam
  1. $moneys = array_filter($users, function ($user) {return $user['payd'] !== '';});


chodzi o to, że teraz zwraca do tablicy wszystkich ktorzy maja zmienna inna niz pusta (zmienna moze miec wartosc 50 lub 100 - jak to zliczyc zsumowac?

inaczej - wplacac beda po 100 lub 50 - chodzi mi o to zeby zliczyc ile kasy wplynelo
SmokAnalog
Spróbuj sam. Podpowiem Ci, że możesz to zrobić w jednej linii z użyciel array_column i array_sum.

I jak, udało się? smile.gif
shpaque
tak udało się w międzyczasie, dziękuję - kolejne pytanie do tego samego:

dlaczego liczenie wychodzi 0 a nie 1 skoro wszystko z pliku sie zgadza?

  1. $us = array_filter($users, function ($u) {return $u['email'] === $usertoedit;});
  2. $licz = count($us);
nospor
poniewaz dla zadnego
$u['email'] === $usertoedit
nie ma prawdy, nieprawdaz? Po tylu latach nadal uwazasz ze w takim wypadku php winne a nie ty? tongue.gif

Sprawdz co zawieraja DOKLADNIE obie zmienne a bedziesz wiedzial czemu sie roznia

var_dump($['email']);
var_dump($usertoedit);


Swoja droga moglbys w koncu wlaczyc wyswietlanie bledow bo NOTICEami twoj kod wali na kilometr. Od razu bys widzial co masz zle
SmokAnalog
Szpaku, włącz sobie wyświetlanie wszystkich błędów, łącznie z notice i nigdy tego nie wyłączaj. Jeśli pojawia się notice, to trzeba go naprawić.

Funkcje w PHP nie mają dostępu do zmiennych spoza ich zasięgu. Musisz użyć use:

  1. $us = array_filter($users, function ($u) use ($usertoedit) {return $u['email'] === $usertoedit;});
shpaque
nospor - tu dalbym sobie reke uciac ze wszystko gralo i jest - no i jest, problem byl w zapisie wiersza zmiennej $us

dziekuje ponownie wink.gif

chociaz jeszcze - tu chcialem zeby nie tylko zliczyl tabele ale tak jak poprzednio dal mi tabele $us w ktore odpowienidmi rekordami beda $u jak ponizej

  1. $us = array_filter($users, function ($u) use ($usertoedit) {return $u['email'] === $usertoedit;});
  2. $licz = count($us);
  3. if ($licz === 0)
  4. {
  5. echo "<script>alert('Nie ma Uczestnika o takim adresie e-mail! (".$usertoedit.")');</script>";
  6. echo "<script>document.location.href = \"./admin.php\";</script>";
  7. }
  8. echo $u['college'];
nospor
Odnosze nieodparte wrazenie ze zaczunasz sie gubic pomiedzy zmiennymi $us a $u. Moze nadaj im dluzsze, bardziej mowiace nazwy?

przeciez w $us masz to co chcesz. To oprocz zliczania (count) zrob jeszcze wyswietlanie tego co tam masz
shpaque
$u nie dziala i nie daje nic (w pront_r) natomiast print_r($us) daje jakby ytablice w tablicy..questionmark.gif

Array ( [2] => Array ( [type] => active...

moze dam caly wycinek

  1. $usertoedit = $_GET['user'];
  2. $columns = ['type', 'title', 'name', 'surname', 'sex', 'status', 'email', 'password', 'phone', 'college', 'organ', 'city', 'section', 'sectiontype', 'invoice', 'company', 'address', 'code', 'ccity', 'nip', 'cphone', 'payd'];
  3. $users = array_map(
  4. function ($record) use ($columns){
  5. return array_combine($columns, str_getcsv($record, '|'));
  6. },
  7. file('./../db/users.csv')
  8. );
  9.  
  10. $us = array_filter($users, function ($u) use ($usertoedit) {return $u['email'] === $usertoedit;});
  11. $licz = count($us);
  12. if ($licz === 0)
  13. {
  14. echo "<script>alert('Nie ma Uczestnika o takim adresie e-mail! (".$usertoedit.")');</script>";
  15. echo "<script>document.location.href = \"./admin.php\";</script>";
  16. }
  17. print_r($us);
nospor
Wiem, ze $u nie dziala bo $u nie istnieje tam gdzie sie do niej dobierasz. Wiedzialbys jakbys wlaczyl WYSWIETLANIE WSZYSTKICH BLEDOW o co nie raz byles proszony i poraz trzeci juz w tym temacie. Czerpiesz frajde z ignorowania nas? Taki fetysz?

Tak, $us zawiera przefiltrowana tablice $users. NIe jest to magiczna tablica, normalna tablica $users ino ze juz przefiltrowana. Wyswietlasz jej zawartosc tak samo jakbys chcial wyswietlic zawartosc $users
shpaque
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/smusic/ftp/_x-kaf/admin/admin-edit.php:35) in /home/smusic/ftp/_x-kaf/php/admin-edit.php on line 121

Array ( [2] => Array ( [type] => active [title] => dr ... => ) )

Notice: Undefined index: type in /home/smusic/ftp/_x-kaf/php/admin-edit.php on line 154

Notice: Undefined index: title in /home/smusic/ftp/_x-kaf/php/admin-edit.php on line 155

Notice: Undefined index: name in /home/smusic/ftp/_x-kaf/php/admin-edit.php on line 156

tak jak $users czyli jak? Skoro wyfiltrowal mi jednego, to sadzilem ze po to ustawiam $u, zeby pozniej robic $u['title] $u['name'] etc.
nospor
Nie, nie ustawiasz nigdzie $u. $u to jest zmienna lokalna na potrzzeby callback w array_filter (ba, w tym wypadku jest to w ogole nawet argument funkcji). Moglbys zajrzec do manuala i zobaczyc co robi dokladnie i jak dziala array_filter. Przejrzec rowniez przyklady tam podane i postarac sie to zrozumiec. SmokAnalog podal ci gotowe rozwiazania przy uzyciu prostych funkcji a ty nie rozumiesz nawet jak to dziala.

Skoro tablica $users zaweira tylko jeden element i chcesz ten jeden element wyswetlic, to pobierz wpierw ten element, np
$user = reset($us);

a potem wyswietl co tam sobei chcesz, np:
echo $user['college'];

ps: dobrze by bylo bys poprawil te bledy ktore ci sie wyswietlaja gdy juz w koncu je widzisz wink.gif
shpaque
chce zeby wyfiltrowal w tablicy $users konkretna tablice ze zgodnym mailem, a pozniej wyswietlac poszczegolne strongi tej wybranej tablicy - nie zrobie tego jak zresetuje $u ?
nospor
Powinno byc
$user = reset($us);

zrobilem literowke. Na przyszlosc naprawde nadawaj porzadne nazwy zmiennym tongue.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.