Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Rozna dlugosc stringa
Forum PHP.pl > Forum > Przedszkole
Lolek13
Witam,

Mam tworzenie departamentow + dodawanie do nich odpowiednich userow. Dodawanie polega na zaznaczeniu checkboxa obok danego usera i wyslanie tyablicy userow do bazy z odpowiednimi ID. Chce aby na liscie mozliwych do dodania userow nie duplikowaly sie nicki, ktore w danym departamencie juz sa.

W ten sposob pobieram userow z departamentu:

  1. public function getUsersInDepartment() {
  2. if ($this->db->connect()) {
  3. if ($get = $this->db->select("SELECT u.Name FROM users_in_departments AS ud, users AS u WHERE ud.DID = " . $_GET['deid'] . " AND ud.UID=u.UID")) {
  4. while ($result = mysql_fetch_assoc($get)) {
  5. echo $this->inDep[] = $result['Name'] . '<br/>';
  6. }
  7. return $this->inDep;
  8. } else {
  9. echo "Cant get data: " . $this->db->error;
  10. }
  11. } else {
  12. echo "Cant connect to database: " . $this->db->error;
  13. return false;
  14. }
  15. }


I w ten sposob chce wyswietlic liste dostepnym do dodania:

  1. public function addNewUsersList() {
  2. if ($this->db->connect()) {
  3. if ($get = $this->db->select("SELECT * FROM users ")) {
  4. echo '<form action="addUsersToDepartment.php" method="post">';
  5. echo '<input type="hidden" value="' . $_GET['deid'] . '" name="deid"/>';
  6. echo '<input type="hidden" value="' . $_GET['dep'] . '" name="dep"/>';
  7. while ($result = mysql_fetch_assoc($get)) {
  8. if (empty($this->inDep)) {
  9. echo '<input type="checkbox" name="users[]" value="' . $result['UID'] . '" />' . $result['Name'] . '<br/>';
  10. } else {
  11. for ($i = 0; $i < count($this->inDep); $i++) {
  12. if ($result['Name'] == $this->inDep[$i]) {
  13. echo 'ok';
  14. } else {
  15. echo '<input type="checkbox" name="users[]" value="' . $result['UID'] . '" />' . $result['Name'] . '<br/>';
  16. }
  17. var_dump($this->inDep[$i]);
  18. echo '<br/>';
  19. var_dump($result['Name']);
  20. }
  21. }
  22. }
  23. echo '<button type="submit">Confirm</button></form>';
  24. } else {
  25. echo "Cant get data: " . $this->db->error;
  26. }
  27. } else {
  28. echo "Cant connect to database: " . $this->db->error;
  29. return false;
  30. }
  31. }


var_dump wyswietla na ekranie:

Cytat
string(10) "Admin
"
string(5) "Admin" string(10) "Admin
"
string(5) "User1"


skad bierze sie roznica w dlugosci stringa?
b4rt3kk
Jak widzisz, jest tam znak przejścia do nowej linii:

Cytat
string(10) "Admin
"


trim($string) załatwi sprawę. Może wciskasz enter, wysyłając formularz?
bostaf
Cytat(Lolek13 @ 6.10.2012, 11:23:10 ) *
skad bierze sie roznica w dlugosci stringa?

Z linii 5 w pierwszym listingu:
  1. echo $this->inDep[] = $result['Name'] . '<br/>';

W jednej instrukcji masz wyprowadzenie danych (echo) i przypisanie wartości do zmiennej (=). Co się dzieje? Najpierw następuje przypisanie wartości do zmiennej ($this->inDep[] = $result['Name'] . '<br/>'), następnie zmienna ta zostaje wyprowadzona, w tym konkretnym przypadku w formie "Admin<br/>". Czyli już w tej linii wartość zmiennej $this->inDep[] wynosi "Admin<br/>" a jej długość 10.
var_dump elegancko pokazuje długość zmiennej, ale że jest w kontekście HTMLa, to znaki <br/> są zinterpretowane jako HTML i widzisz tylko przejście do nowego wiersza.
Po prostu nie manipuluj danymi w trakcie ich wyprowadzania. Najpierw przypisz wartość do $this->inDep[] a potem ją wyprowadź:
  1. $this->inDep[] = $result['Name'];
  2. echo $this->inDep[] . '<br/>';


A w ogóle, to masz straszny młyn w kodzie. Mieszanie logiki obiektowej z archaicznymi funkcjami PHP (mysql_), manipulowanie danymi, logiką i widokiem w jednej funkcji, duplikowanie kodu (dwie funkcje i w każdej osobno obsługa błędów bazy danych)... popracuj nad tym też.
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.