Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] zdalne checked :)
Forum PHP.pl > Forum > Przedszkole
shpaque
  1. document.getElementsByName('type').value('<?php echo $u['type']; ?>').checked = true;


chodzi mi o to zeby podczas ladowania pobral wartosc value dla (radio, pozniej select i checkbox i tak dalej) i "kliknal" tam gdzie trzeba checked
nospor
I jak sie ma do tego kod, ktory pokazales?
shpaque
dobra to tak

  1. $(document).ready(function() {
  2. document.getElementsByName('type').value('<?php echo $u['type']; ?>').checked = true;
  3. });


co nie dziala?

wczesniej jest:

  1. <div class="form-group">
  2. <label>Forma uczestnictwa w konferencji*</label><br>
  3. <label class="radio-inline"><input type="radio" name="type" value="active" onclick="showActive()"><b>Uczestnik Aktywny</b> (czynny)</label>
  4. <label class="radio-inline"><input type="radio" name="type" value="passive" onclick="hideActive()"><b>Uczestnik Bierny</b> (słuchacz)</label>
  5. <label class="radio-inline"><input type="radio" name="type" value="admin" onclick="hideActive()">Administrator</label>
  6. </div>
Pyton_000
A co mówi konsola developerska przeglądarki?
shpaque
document.getElementsByName(...).value is not a function

nospor
I jak widzisz w komunikacie bledu getElementsByName() nie posiada funkcji value()

A czemu nie zrobisz tego jak czlowiek i w php podczas generowania tego html nie ustawisz wlasciwego checked?
shpaque
zrobilem tak na samym poczatku, ale nic to nie daje - bo mimo, ze checked jest wtedy faktycznie klikniete, nie uruchamia sie funkcja onclck przy tym checknietym elemencie
shpaque
dobra wrocilem do najleposzej metody czyli php - jak teraz ucurchomic te funkcje pod kadym ifem?

  1. <?php
  2. if ($u['type'] === "active")
  3. {
  4. echo '
  5. <label class="radio-inline"><input type="radio" name="type" value="active" onclick="showActive()" checked><b>Uczestnik Aktywny</b> (czynny)</label>
  6. <label class="radio-inline"><input type="radio" name="type" value="passive" onclick="hideActive()"><b>Uczestnik Bierny</b> (słuchacz)</label>
  7. <label class="radio-inline"><input type="radio" name="type" value="admin" onclick="hideActive()">Administrator</label>
  8. ';
  9. echo "<script>showActive();</script>";
  10. }
  11. if ($u['type'] === "passive")
  12. {
  13. echo '
  14. <label class="radio-inline"><input type="radio" name="type" value="active" onclick="showActive()"><b>Uczestnik Aktywny</b> (czynny)</label>
  15. <label class="radio-inline"><input type="radio" name="type" value="passive" onclick="hideActive()" checked><b>Uczestnik Bierny</b> (słuchacz)</label>
  16. <label class="radio-inline"><input type="radio" name="type" value="admin" onclick="hideActive()">Administrator</label>
  17. ';
  18. echo "<script>hideActive();</script>";
  19. }
  20. if ($u['type'] === "admin")
  21. {
  22. echo '
  23. <label class="radio-inline"><input type="radio" name="type" value="active" onclick="showActive()"><b>Uczestnik Aktywny</b> (czynny)</label>
  24. <label class="radio-inline"><input type="radio" name="type" value="passive" onclick="hideActive()"><b>Uczestnik Bierny</b> (słuchacz)</label>
  25. <label class="radio-inline"><input type="radio" name="type" value="admin" onclick="hideActive()" checked>Administrator</label>
  26. ';
  27. echo "<script>hideActive();</script>";
  28. }
  29. ?>
nospor
Tak na marginesie:
poczytaj na google: jak nie duplikowac kodu

co do problemu
A czy przypadkiem funkcje ala showActive() nie dzialaja na kodzie html, ktory jest wygenerowany troszke nizej? jesli tak to chyba nie oczekujesz ze zadzaialaja?

ALbo przenies to na sam koniec html albo obejmij kodem js, ktory spowoduje ze sie odpala po zaladowaniu calego html
shpaque
wszystkie funkcje w skrypcie sa zdefiniowane przed kodem wlasnie...
SmokAnalog
Poza tym trochę bez sensu robić albo showActive(), albo hideActive() w zależności od warunku. Czyli ci aktywni użytkownicy nie są domyślnie ani widoczni, ani niewidoczni? Czyli jacy? Półprzezroczyści? tongue.gif
shpaque
  1. function showActive()
  2. {
  3. $('#row-active').fadeIn(400);
  4. $('#session, #sposob').prop('required', true);
  5. }
  6.  
  7. function hideActive()
  8. {
  9. $('#row-active').fadeOut(400);
  10. $('#session, #sposob').prop('required', false);
  11. }


nie po prostu dla aktywnych pojawiaja sie dodatkowe pola do wypelnienia
nospor
Cytat
wszystkie funkcje w skrypcie sa zdefiniowane przed kodem wlasnie...
Nie mowie o funkcjach. Mowie o kodzie html na ktorym te funkcje pracuja - w tym wypadku twoja tabela z userami
SmokAnalog
Ale masz jakiś stan początkowy w tym HTML-u, więc jedno z tych wywołań w momencie załadowania strony jest bez sensu.
shpaque
dobra tam juz jade php - wszystko zrobilem poza tymi duzymi rzeczami - to jak to zrobic zeby tyle kodu nie kopiowac?

  1. <select class="form-control text-center" type="text" id="session" name="session">
  2. <option selected disabled value="">wybierz sesję</option>
  3. <option value="s1">Sesja I: Pre i postnatalne procesy rozwojowe i adaptacyjne w ustroju</option>
  4. <option value="s2">Sesja II: Komórkowe i sygnalizacyjne transformacje w fizjopatologii nowotworów</option>
  5. <option value="s3">Sesja III: Diagnostyka i terapia w gastroenterologii</option>
  6. <option value="s4">Sesja IV: Genetyczne i epigenetyczne czynniki kształtujące układowe funkcjonowanie ustroju</option>
  7. <option value="s5">Sesja V: Stan odżywienia jako wykładnik zdrowia i podatności na choroby</option>
  8. <option value="s6">Sesja VI: Fizjologia i patofizjologia centralnego układu nerwowego</option>
  9. <option value="s7">Sesja VII: Substancje pochodzenia naturalnego jako czynniki prawidłowego funkcjonowania organizmu</option>
  10. <option value="s8">Sesja VIII: Badania funkcjonalne komórek &#8211; metody i techniki</option>
  11. <option value="s9">Sesja IX: Fizjologia zwierząt bezkręgowych lub Fizjologia bezkręgowców</option>
  12. <option value="s10">Sesja X: Fizjologia bakterii</option>
  13. </select>
phpion
Poczytaj o tablicach i pętlach (foreach).
shpaque
wracamy do tasiemca. smile.gif Teraz opcja "update"

mam tak
  1. $usertoupdate = $_POST['email'];
  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 ($user) use ($usertoedit) {return $user['email'] === $usertoupdate;});
  11. $u = reset($us);


jak w ten desen zrobic tak zeby updateowal mi jednego klienta - czyli jedna tablice w ktorej znajdzie ten sam email
SmokAnalog
Rozumiem, że będziesz zapisywał z powrotem do pliku .csv, tak?

Zamień proszę nazwy na bardziej czytelne w tym momencie. Ułatwisz zadanie sobie i nam też. Żadnych $u, $us itd. Kolega wyżej już Cię o to prosił. Na Twoim miejscu to bym w ogóle zrobił coś na taki kształt z tymi nazwami:

  1. $emailOfUserToUpdate = $_POST['email']; // zobacz jaka czytelna nazwa zmiennej
  2.  
  3. // ...
  4.  
  5. $userToUpdate = array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] === $emailOfUserToUpdate;})[0]; // i z dwóch zmiennych robi się jedna


Zauważ, że zamieniłem też reset na zerowy indeks [0]. Osobiście nie lubię funkcji reset, bo przez jej schizofreniczną naturę jej nazwa jest myląca.

Popraw to proszę i wróć z pytaniem.
shpaque
ok mam (w miedzyczasie musialem troche warunkow porobic z formularza)

  1. <?php
  2. ini_set('display_errors', 1);
  3.  
  4. $successPage = './admin/admin.php';
  5.  
  6. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  7. {
  8. $action = $_POST['action'];
  9. if ($action === 'update')
  10. {
  11. $newtype = $_POST['type'];
  12. $newtitle = $_POST['title'];
  13. $newname = $_POST['name'];
  14. $newsurname = $_POST['surname'];
  15.  
  16. if ($_POST['sex'] === 'kobieta')
  17. {
  18. $newsex = 'k';
  19. }
  20. else if ($_POST['sex'] === 'mężczyzna')
  21. {
  22. $newsex = 'm';
  23. }
  24.  
  25. $newstatus = $_POST['status'];
  26. $newemail = $_POST['email'];
  27. $newpassword = $_POST['password'];
  28. $newphone = $_POST['phone'];
  29. $newcollege = $_POST['school'];
  30. $neworgan = $_POST['organ'];
  31. $newcity = $_POST['city'];
  32.  
  33. if ($newtype === 'admin')
  34. {
  35. $newsection = '';
  36. $newsectiontype = '';
  37. $newinvoice = 'nie';
  38. $newcompany = '';
  39. $newaddress = '';
  40. $newcode = '';
  41. $newccity = '';
  42. $newnip = '';
  43. $newcphone = '';
  44. $newpayd = '';
  45. }
  46. else
  47. {
  48. if ($newtype === 'active')
  49. {
  50. $newsection = $_POST['session'];
  51. $newsectiontype = $_POST['sposob'];
  52. }
  53. else if ($newtype === 'passive')
  54. {
  55. $newsection = '';
  56. $newsectiontype = '';
  57. }
  58.  
  59. if (isset($_POST['check-fv']))
  60. {
  61. $newinvoice = 'tak';
  62. $newcompany = $_POST['company'];
  63. $newaddress = $_POST['company-address'];
  64. $newcode = $_POST['company-postcode'];
  65. $newccity = $_POST['company-city'];
  66. $newnip = $_POST['company-nip'];
  67.  
  68. if (isset($_POST['company-phone']))
  69. {
  70. $newcphone = $_POST['company-phone'];
  71. }
  72. else
  73. {
  74. $newcphone = '';
  75. }
  76. }
  77. else
  78. {
  79. $newinvoice = 'nie';
  80. $newcompany = '';
  81. $newaddress = '';
  82. $newcode = '';
  83. $newccity = '';
  84. $newnip = '';
  85. $newcphone = '';
  86. }
  87.  
  88. if (isset($_POST['payd']))
  89. {
  90. $newpayd = $_POST['payd'];
  91. }
  92. else
  93. {
  94. $newpayd = '';
  95. }
  96. }
  97.  
  98. $columns = ['type', 'title', 'name', 'surname', 'sex', 'status', 'email', 'password', 'phone', 'college', 'organ', 'city', 'section', 'sectiontype', 'invoice', 'company', 'address', 'code', 'ccity', 'nip', 'cphone', 'payd'];
  99. $users = array_map(
  100. function ($record) use ($columns){
  101. return array_combine($columns, str_getcsv($record, '|'));
  102. },
  103. file('./../db/users.csv')
  104. );
  105. $emailOfUserToUpdate = $newemail;
  106. $userToUpdate = array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] === $emailOfUserToUpdate;})[0];
  107. print_r($userToUpdate);
  108. }
  109. }
  110. //header('Location: '.$successPage);
  111. //exit;
  112. ?>


dokladnie tak zamierzam zrobic czyli zaraz zapisac wszystko co wyczytal z pliku, ale w miesce tablicy ze znalezionym mailem wpisac wszystkie zmienne $new...

gorzej zem i wywala undefinied

  1. Notice: Undefined offset: 0 in /home/smusic/ftp/_x-kaf/php/update.php on line 107


dałem zamiast [0] to [1] i jest - teraz co zrobic zeby zapisac plik z updateowanymi zmiennymi?

  1. $columns = ['type', 'title', 'name', 'surname', 'sex', 'status', 'email', 'password', 'phone', 'college', 'organ', 'city', 'section', 'sectiontype', 'invoice', 'company', 'address', 'code', 'ccity', 'nip', 'cphone', 'payd'];
  2. $users = array_map(
  3. function ($record) use ($columns){
  4. return array_combine($columns, str_getcsv($record, '|'));
  5. },
  6. file('./../db/users.csv')
  7. );
  8. $emailOfUserToUpdate = $newemail;
  9. $userToUpdate = array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] === $emailOfUserToUpdate;})[1];
  10. $userUpdate = array('type' => $newtype, 'title' => $newtitle, 'name' => $newname, 'surname' => $newsurname, 'sex' => $newsex, 'status' => $newstatus, 'email' => $newemail, 'password' => $newpassword, 'phone' => $newphone, 'college' => $newcollege, 'organ' => $neworgan, 'city' => $newcity, 'section' => $newsection, 'sectiontype' => $newsectiontype, 'invoice' => $newinvoice, 'company' => $newcompany, 'address' => $newaddress, 'code' => $newcode, 'ccity' => $newccity, 'nip' => $newnip, 'cphone' => $newcphone, 'payd' => $newpayd);
  11. $newUsers = array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] !== $emailOfUserToUpdate;});
  12.  
  13. $updatedUsers = array_filter(array_merge($newUsers, $userUpdate)); //to nie dziala jak powinno
  14. $done = array_replace($users, $updatedUsers); // to rowniez
  15.  
  16. print_r($done);
  17.  
  18. i tu standardowo fwrite i tak dalej czy jest taki sposob jak pobranie z pliku?
SmokAnalog
Powoli. Po pierwsze, to że zadziałało z [1] to przypadek. Tam gdzie masz linię:

  1. $userToUpdate = array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] === $emailOfUserToUpdate;})[0];


Najlepiej zamień ją na takie coś:

  1. $userToUpdate = array_values(array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] === $emailOfUserToUpdate;}))[0] questionmark.gif null;


Zmieniłem dwie rzeczy - po pierwsze użyłem array_values, bo array_filter pozostawia klucze takie, jakie były, a Ty chcesz je zresetować, by użyć [0]. W sumie to tutaj by pomógł sam reset, no ale tak jak mówiłem - osobiście nie uznaję.

Po drugie, dodałem questionmark.gif null, bo musisz też jakoś obsłużyć przypadek, gdy nie znaleziono żadnego dopasowanego użytkownika. Jeżeli $userToUpdate to null, powinieneś wyświetlić jakiś błąd.

Mam obawy co do Twojego $emailOfUserToUpdate - dlaczego ustawiasz to na $newemail? To ma być poprzedni e-mail, a nie nowy. Zastanów się. Jeśli zmieniasz e-mail użytkownikowi bolek@lol.pl na lolek@lol.pl, to w zmiennej $newemail masz lolek@lol.pl, a takiego użytkownika nie masz (jeszcze) w pliku.

Uwaga, zamień questionmark.gif na ? ? bez spacji pomiędzy znakami zapytania. To inteligentne forum zamienia w kodzie PHP poprawny operator na emotka.
shpaque
  1. $columns = ['type', 'title', 'name', 'surname', 'sex', 'status', 'email', 'password', 'phone', 'college', 'organ', 'city', 'section', 'sectiontype', 'invoice', 'company', 'address', 'code', 'ccity', 'nip', 'cphone', 'payd'];
  2. $users = array_map(function ($record) use ($columns) {return array_combine($columns, str_getcsv($record, '|'));}, file('./../db/users.csv'));
  3.  
  4. $emailOfUserToUpdate = $newemail;
  5. $userToUpdate = array_values(array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] === $emailOfUserToUpdate;}))[0] questionmark.gif null;
  6.  
  7. $userUpdate = array('type' => $newtype, 'title' => $newtitle, 'name' => $newname, 'surname' => $newsurname, 'sex' => $newsex, 'status' => $newstatus, 'email' => $newemail, 'password' => $newpassword, 'phone' => $newphone, 'college' => $newcollege, 'organ' => $neworgan, 'city' => $newcity, 'section' => $newsection, 'sectiontype' => $newsectiontype, 'invoice' => $newinvoice, 'company' => $newcompany, 'address' => $newaddress, 'code' => $newcode, 'ccity' => $newccity, 'nip' => $newnip, 'cphone' => $newcphone, 'payd' => $newpayd);
  8.  
  9. $newUsers = array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] !== $emailOfUserToUpdate;});
  10. $updatedUsers = array_filter($newUsers, function ($userUpdate) use ($newUsers) {return array_merge($newUsers, $userUpdate);});
  11.  
  12. print_r($updatedUsers);


teraz wycinek wyglada tak (costam probowalem modzic, ale z miernym skutkiem...

dlaczego email nest $newemail?
tu nie ma znaczenia. input maila w formularzu jest "readonly" i pobiera się z pliku, więc de facto nie może zostać zmieniony - to jedyna zmienna, która nie będzie mogła być edytowana. Także $newemail to i tak dokladnie ten sam email co sobie lezy w *.csv

teraz mam http error 500
SmokAnalog
Ten projekt jest dla Ciebie ogólnie zdecydowanie zbyt trudny, bo pojawia się tu dużo problemów, a Ty nie znasz podstaw. Nie za bardzo wiem jak Ci pomagać, musiałbym chyba za Ciebie to napisać, bo nawet jak wyeliminujesz te swoje problemy (które dostrzegasz), to dalej jest parę problemów, z których sobie nie zdajesz sprawy.
shpaque
ok poradzilem sobie do tego momentu:

  1. $database = './../db/users.csv';
  2.  
  3. $columns = ['type', 'title', 'name', 'surname', 'sex', 'status', 'email', 'password', 'phone', 'college', 'organ', 'city', 'section', 'sectiontype', 'invoice', 'company', 'address', 'code', 'ccity', 'nip', 'cphone', 'payd'];
  4. $users = array_map(function ($record) use ($columns) {return array_combine($columns, str_getcsv($record, '|'));}, file($database));
  5.  
  6. $emailOfUserToUpdate = $newemail;
  7.  
  8. $userToUpdate = array('type' => $newtype, 'title' => $newtitle, 'name' => $newname, 'surname' => $newsurname, 'sex' => $newsex, 'status' => $newstatus, 'email' => $newemail, 'password' => $newpassword, 'phone' => $newphone, 'college' => $newcollege, 'organ' => $neworgan, 'city' => $newcity, 'section' => $newsection, 'sectiontype' => $newsectiontype, 'invoice' => $newinvoice, 'company' => $newcompany, 'address' => $newaddress, 'code' => $newcode, 'ccity' => $newccity, 'nip' => $newnip, 'cphone' => $newcphone, 'payd' => $newpayd);
  9.  
  10. $newUsers = array_filter($users, function ($user) use ($emailOfUserToUpdate) {return $user['email'] !== $emailOfUserToUpdate;});
  11. $updatedUsers = array_merge($newUsers, array($userToUpdate));
  12.  
  13. $file = fopen($database, 'w');
  14. flock($file, LOCK_EX);
  15. foreach ($updatedUsers as &$value)
  16. {
  17. $row = implode('|', $value);
  18. fwrite($file, $row);
  19. fwrite($file, "\r\n");
  20. }
  21. fwrite($file, "\r\n");
  22. flock($file, LOCK_UN);
  23. fclose($file);


wszystko smiga jak nalezy, problem pozostaje chyba w zwolnieniu (resecie) - nie wiem, bo po kilku update'ach mam takie notificationy:

  1. Warning: array_combine(): Both parameters should have an equal number of elements in /home/smusic/ftp/_x-kaf/php/update.php on line 102
  2.  
  3. Warning: array_combine(): Both parameters should have an equal number of elements in /home/smusic/ftp/_x-kaf/php/update.php on line 102
  4.  
  5. Warning: array_combine(): Both parameters should have an equal number of elements in /home/smusic/ftp/_x-kaf/php/update.php on line 102
  6.  
  7. Warning: array_combine(): Both parameters should have an equal number of elements in /home/smusic/ftp/_x-kaf/php/update.php on line 102
  8.  
  9. Warning: implode(): Invalid arguments passed in /home/smusic/ftp/_x-kaf/php/update.php on line 115
  10.  
  11. Warning: implode(): Invalid arguments passed in /home/smusic/ftp/_x-kaf/php/update.php on line 115
  12.  
  13. Warning: implode(): Invalid arguments passed in /home/smusic/ftp/_x-kaf/php/update.php on line 115
  14.  
  15. Warning: implode(): Invalid arguments passed in /home/smusic/ftp/_x-kaf/php/update.php on line 115


moj plik csv dostal kilka nowych rowów - skąd?

  1. admin||Kacper|...|||||||
  2. active|dr n med.|Rad...|
  3. admin|dr|Syl...|||||||
  4.  
  5.  
  6.  
  7.  
  8. admin||Boh...|||||||
  9.  
nospor
Cytat
notificationy:

Cytat
rowów
Miejze litosc i albo pisz po angielsku albo po polsku. Moze miedzy kolegami w piaskownicy to jest jakis szpan, ale nie tutaj.
A rowy to se mozesz na podworku wykopac a nie wpliku csv. W pliky csv to mozesz miec conajwyzej wiersze tongue.gif
shpaque
dobra znalazlem pod petla foreach dodatkowy $row smile.gif i wszystko hula jak należy smile.gif dziękuję Wam zbiorczo Panowie smile.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.