Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Powtarzający się dane !
Forum PHP.pl > Forum > Bazy danych > MySQL
dudi88
Witam,

Mam pewien problem odnośnie bazy danych i wyśietlania sie 33 razy danego słowa zamiast raz na stronie.

Otóż mam taki plik PHP:


CODE
<?php

$db =& JFactory::getDBO();
$user =& JFactory::getUser();

$query = "SELECT usertype"
. " FROM #__session"
. " WHERE (usertype = 'Super Administrator') OR (usertype = 'Administrator') OR (usertype = 'Manager')"
. $and
. " ORDER BY usertype"
;
$db->setQuery( $query );
$rows = $db->loadObjectList();

require( dirname( __FILE__ ).DS.'tmpl'.DS.'default.php' );


który pobiera z bazy dany rekord zależny od tego kto się rejsetruje na zaplecze i wyswietla go na stronie, jednakże niesety dubluje go wielerazy.

Czyli ma być tak:
Administrator loguje się na zaplecze i na stronie w zapleczu ma być Super Administrator w ilości jednej a wysakuje w ilośći 33 razy.

Tutaj podaję inny plik odpowiedzialny za wyświetlanie na stronie:

CODE
<?php
/** $Id: default.php 10381 2008-06-01 03:35:53Z pasamio $ */
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
<?php
foreach ($rows as $row) :
$auth = $user->authorize( 'com_users', 'manage' );
?>
<?php echo JText::_( 'Admin Welcome' );

echo "&nbsp", $row->usertype;
echo "<br />";

?>
<?php
endforeach;
?>
<?php echo JHTML::_( 'form.token' ); ?>




Prosze o pomoc jak wyświtlić danego użytkownika który loguje się na zapleczu tylko raz a nie w ilości np. 33 razy.

Pozdrawiam
Niktoś
Strasznie namieszane,powinno być coś miej więcej takiego:
  1. $query = "SELECT usertype"
  2. . " FROM #__session"
  3. . " WHERE usertype IN ('Super Administrator','Administrator','Manager')"
  4. . "AND user=".$user
  5. . " ORDER BY field(usertype,'Super Administrator','Administrator','Manager')";

gdzie $user -jest nazwą użytkownika w kolumnie user w tabeli #__session,nie wiem za bardzo czy ten ORDER BY,wogóle będzie potrzebny,ale zostawiłem go.
dudi88
Dzięki za zainsteresowanie się moim tematem jednakże niesety ta metoda nie działa (po odświeżeniu strony wyskakuje pusta strona ze względu na to że została dodana funkcja
CODE
. "AND user=".$user
).

Wcześniejszy dodany przeze mnie kod działa tak samo prawidłowo jak Pana (oczywiście bez funkcji powyżej) jednakże dalej wyskakują powielone dane na stronie "Super Administrator" w dużej ilości zamiast raz.

Proszę o dalsze wskazówki.

Z góry dziękuję.

Niktoś
Może wpisując to takiego usera w bazie danych nie ma.
dudi88
Po zalogowaniu się do zaplecza user automatycznie pojawia się w bazie danych, więc jako tako istnieje.

Wszystko powinno być OK w kodzie, który podałem na samym początku tematu poza wyjątkiem metody:

CODE
. " WHERE (usertype = 'Super Administrator') OR (usertype = 'Administrator') OR (usertype = 'Manager')"


Wydaje mi się, że trzeba ustawić w tej lini jakąs funkcję, która nie duplikuje na stronie danej frazy (w tym wypadku Super Adminsitrator, Administrator, Manger).

Tylko pytanie jaka to jest funkcja?
Niktoś
Cytat
Po zalogowaniu się do zaplecza user automatycznie pojawia się w bazie danych, więc jako tako istnieje.


Więc chcesz wyciągnąć prawa użytkownika z bazy danych ,jak go jeszcze nie ma ,bo jest dopiero dodawany po zalogowaniu.Przyznam ,że nie rozumiem.
dudi88
Napiszę od początku dla lepszego zrozumienia sprawy.

Po zalogowaniu się konkretnej osoby do zaplecza, której został przydzielony określnoy status podczas rejestracji, pojawia się dla niej taki napis w zależności od użytkownika w określonym okienku:

Super Administrator - jest to główny Adminsitator zaplecza,
Administrator - jest w hierarchi niżej niż Super Administrator,
Manager - użytkownik o najniższym statusie, który ma zdolność do logowania się do zaplecza.

Moduł, który służy wyświetalniu powyższych uztkowników w okienku to plik mod_userdata.php o zawartości:

CODE
<?php

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('arttechnology.html.pagination');

$db =& JFactory::getDBO();
$user =& JFactory::getUser();

$query = "SELECT usertype"
. " FROM #__session"
. " WHERE (usertype = 'Super Administrator') OR (usertype = 'Administrator') OR (usertype = 'Manager')"
. $and
. " ORDER BY usertype"
;
$db->setQuery( $query );
$rows = $db->loadObjectList();

require( dirname( __FILE__ ).DS.'tmpl'.DS.'default.php' );


oraz plik o nazwie default.php o zawartości:

CODE
<?php
/** $Id: default.php 10381 2008-06-01 03:35:53Z pasamio $ */
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
<?php
foreach ($rows as $row) :
$auth = $user->authorize( 'com_users', 'manage' );
?>
<?php echo JText::_( 'Admin Welcome' );

echo "&nbsp", $row->usertype;
echo "<br />";

?>
<?php
endforeach;
?>
<?php echo JHTML::_( 'form.token' ); ?>



Struktura bazy danych ma takie wartości jak:

Nazwa tabeli: session

Nazwy rekordów w tabeli:

username | time | session_id | guest | userid | usertype | gid | client_id | data

I teraz z rekordu usertpye chcę wyciągać dane nazwy użytkownika, który się zalogował na zapleczu. Jego nazwa ma być widoczna w specjalnym okienku w zapleczu.


Obecnie wyświetlają mi się prawidłowe dane uzytkownika które mu zostały przydzielone po zalogowaniu sie na zapleczu, ale niestety duplikują się 32 razy (w sumie wyświetla się 33 razy nazwa tylko jednego uzytkownika, dlaczego?).

Chciałbym jeszcze zaznaczyć, że posiadam w pliku sql, który zostaje wgrywany do bazy danych podczas instalacji CMSa o takich danych:

CODE
INSERT INTO `#__core_acl_aro_groups` VALUES (23,30,'Manager',14,19,'Manager');
INSERT INTO `#__core_acl_aro_groups` VALUES (24,23,'Administrator',15,18,'Administrator');
INSERT INTO `#__core_acl_aro_groups` VALUES (25,24,'Super Administrator',16,17,'Super Administrator');


Prosze spojrzeć co mnie nie pokoi i czy to ma zwiazek z tym duplikowaniem nazw uzytkowników.
Otóż w pomiędzy nazwami uzytkowników są przydzielone liczby, które w sumie dają wartość liczbową 33 !

Czy to ma jakiś zwiazek z tym, że wyśtwietla mi się w zapleczu 33 razy nazwa jednego uzytkownika ?

Prosze o odpowiedz.

Z góry dziękuję.
Niktoś
A sprawdzałeś czy metoda getUser();-poprawnie zwraca Ci nazwę użytkownika?Daj tak:
  1. <?php
  2.  
  3. // no direct access
  4. defined( '_JEXEC' ) or die( 'Restricted access' );
  5.  
  6. jimport('arttechnology.html.pagination');
  7.  
  8. $db =& JFactory::getDBO();
  9. $user =& JFactory::getUser();
  10. echo $user;
  11. $query = "SELECT usertype"
  12. . " FROM #__session"
  13. . " WHERE (usertype = 'Super Administrator') OR (usertype = 'Administrator') OR (usertype = 'Manager')"
  14. . $and
  15. . " ORDER BY usertype"
  16. ;
  17. $db->setQuery( $query );
  18. $rows = $db->loadObjectList();
  19.  
  20. require( dirname( __FILE__ ).DS.'tmpl'.DS.'default.php' );
dudi88
"A sprawdzałeś czy metoda getUser();-poprawnie zwraca Ci nazwę użytkownika?"

Nie mam za bardzo stycznośći z PHP, więc nie wiem jak to mam sprawdzić.

Niestety podany przez Pana kod też nie działa (wyświetla pustą stronę).


Błąd moim zdaniem nie jest skomplikowany, ale bardzo ciężko go odszukać.
Niktoś
echo $user; powinno wyświetlić nazwę użytkownika -najprawdopodobniej funkcja getUser() zwraca empty(nic nie zwraca) i przez to mój przykład nie chciał działać.
dudi88
No tak bo za wyswietlanie jest odpowiedzialna inna metoda:

CODE
echo "&nbsp", $row->usertype;


która się znajduje w pliku default.php
Niktoś
Cytat
No tak bo za wyswietlanie jest odpowiedzialna inna metoda:
echo "&nbsp", $row->usertype;

Tylko że tak to wyświetlasz wynik z bazy danych , a nie, czy funkcja przekazała jakieś parametry.
dudi88
a co Pan myśli o zawartości w pliku sql:


INSERT INTO `#__core_acl_aro_groups` VALUES (23,30,'Manager',14,19,'Manager');
INSERT INTO `#__core_acl_aro_groups` VALUES (24,23,'Administrator',15,18,'Administrator');
INSERT INTO `#__core_acl_aro_groups` VALUES (25,24,'Super Administrator',16,17,'Super Administrator');


Czy suma tych liczb może mieć jakiś zwiazek z tym, że wyśtwietla mi się w zapleczu 33 razy nazwa jednego uzytkownika ?
Niktoś
Cytat
Czy suma tych liczb może mieć jakiś zwiazek z tym, że wyśtwietla mi się w zapleczu 33 razy nazwa jednego uzytkownika ?

Nie, gdyż nie ma to związku z Twoim zapytaniem do bazy danych.
A wina właśnie w tym jest że w żaden sposób nie ograniczasz tego zapytania.Zwracasz wszystkie rekordy,gdzie występuje słowo Manager,'Administrator,Super Administrator.Masz najprawdopodobniej 33 takie rekordy w tabeli session,i je Tobie w pętli prawidłowo wyświetla.Problem najprawdopodoniej leży także w funkcji getUser(),która nie zwraca do zmiennej żadnych wartości i mój przykład dlatego nie działał.Tak to wszystko na moje oko wygląda.

PS.Przestań Panować ,bo czuje się staro wink.gif
dudi88
OK, więc jak zrobić żeby metoda getUser(); zwracała do zmiennej wartości?

Pisze przez Pan, dlatego, że nie mam pojęcia ile ma lat osoba, z która koresponduję wink.gif a pozatym wypada pisać przez Pan osobie posiadającej większą wiedzę niż ja sam posiadam smile.gif

Czy ktoś jeszcze ma jakieś propozycje dotyczące rozwiązania problemu?

OK problem został rozwiązany w inny sposób przeze mnie, a raczej błąd leżał gdzieś indziej !

Dziękuje za pomoc Niktoś smile.gif

Temat można zamknąć
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.