Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] wyświetlanie kilku rekordów
Forum PHP.pl > Forum > Przedszkole
!*!
  1. <?php
  2. $query2 = mysql_fetch_array(mysql_query("SELECT status_gg FROM prywata WHERE login = '$ids'")); 
  3.  
  4. while ($wiersz = mysql_fetch_array($result)) 
  5. {
  6.  
  7. if($query2[0] == 1) echo 'ukryty'; 
  8. else if($query2[0] == 0) echo 'gg:<b>'.$wiersz['gg'].'</b>';
  9. }
  10. ?>



zakładając że tabela status_gg ma wartość 0. i wszytko działa poprawnie tylko jak mam np. dodać jeszcze nr telefonu np. "status_tel" ? Powtarzać else if? Czy jest inny sposób bardziej optymalny?
Hazel
Po pierwsze to tabela nie może mieć wartości. Wartość może mieć kolumna w danym rekordzie.
Poza tym to nie za bardzo wiem, o co pytasz... Jeśli chcesz dodać jeszcze kolumnę status_tel to dodaj, zmodyfikuj zapytanie i daj jeszcze 2 warunki if/else if... Nie ma "bardziej optymalnego" sposobu i być nie może. Możesz jedynie zastosować switch, ale w przypadku 2 możliwych przypadków (+ ewentualnego defaulta) niekoniecznie to się opłaca.
Generalnie optymalizacja takiego kawałka kodu nie jest możliwa. W każdym przypadku będzie Ci 4 razy sprawdzało co zawiera zmienna pobrana z bazy (chyba że przyjmiesz, iż ta zmienna może mieć tylko 2 wartości - 0 lub 1, bo powyższy kod sugeruje, że możesz spodziewać sie jeszcze jakichś innych wartości i stąd else if zamiast samego else - no ale nie wiem co to miałaby być za wartość, tak logicznie myśląc).
Jarod
jeżeli status_gg może mieć wartośc 0 albo jeden to imo lepiej tak:
  1. <?php
  2. $result = mysql_query('SELECT status_gg, status_tel2, status_tel3 FROM prywata WHERE login = ' .$ids); 
  3.  
  4. while ($wiersz = mysql_fetch_array($result, MYSQL_NUM)) 
  5. {
  6.  
  7. if($wiersz[0] == 1)
  8. {
  9.  echo 'ukryty';
  10. }
  11. else
  12. {
  13. echo 'gg:<b>'.$wiersz['status_gg'].'</b>';
  14. echo 'tel_2:<b>'.$wiersz['status_tel2'].'</b><br /> ';
  15. echo 'tel3:<b>'.$wiersz['status_tel3'].'</b><br /> ';
  16. }
  17.  
  18.  
  19. }
  20. ?>
!*!
  1. <?php
  2. $query2 = mysql_fetch_array(mysql_query("SELECT status_gg, status_tel2, status_tel3 FROM prywata WHERE login = '$ids'")); 
  3.  
  4. while ($wiersz = mysql_fetch_array($result)) 
  5. {
  6.  
  7. if($query2[0] == 1) echo ''; 
  8. else if($query2[0] == 0)echo 'gg:<b>'.$wiersz['gg'].'</b><br /> ';
  9.  
  10. if($query2[0] == 1) echo ''; 
  11. else if($query2[0] == 0)echo 'tel_2:<b>'.$wiersz['tel2'].'</b><br /> ';
  12.  
  13. if($query2[0] == 1) echo ''; 
  14. else if($query2[0] == 0)echo 'tel3:<b>'.$wiersz['tel3'].'</b><br /> ';
  15.  
  16.  
  17. }
  18. ?>


w bazie wszystko jest ok. tylko właśnie przy odczycie nie, tel2 i tel3 są odczytywane tak jak gg, czyli jeśli gg jest ukryte to tel2 i tel3 też.
Jarod
Zobacz na kod który edytowałem.
pzdr
!*!
Patrze, tylko że w on ogóle nie zwraca żadnej wartośći.
Jarod
Zjadłem dolara w pętli.
!*!
heh, i nadal nic. poza tym dla każdego wyniku musi być osobne else, inaczej wynik będzie zależny od pierwszego? tak jak to mam w 2 przykłazdzie...
Jarod
Cytat(!*! @ 22.02.2008, 00:35:04 ) *
heh, i nadal nic. poza tym dla każdego wyniku musi być osobne else, inaczej wynik będzie zależny od pierwszego? tak jak to mam w 2 przykłazdzie...

Kod działa - sprawdzałem. Może zapominasz połączyć się z bazą i wybrać bazę danych.. :/ Masz jakieś błędy?

Dlaczego osobny else? Zdecyduj się co chcesz osiągnąć.
Jeśli status_gg będzie zero to nic nie zostanie wyświetlone. Jesli = 1 to widzisz wszystkie dane.
proste jak budowa cepa
potreb
Jak dla mnie dużo tu poplątałeś
  1. <?php
  2. $query2 = mysql_fetch_array(mysql_query("SELECT status_gg, status_tel2, status_tel3 FROM prywata WHERE login = '$ids'")); 
  3. while ($wiersz = mysql_fetch_array($result))
  4. ?>

$result - do czego się odnosi?

Można tak?
  1. <?php
  2. $query2 = mysql_query("SELECT status_gg, status_tel2, status_tel3 FROM prywata WHERE login = '$ids'"); 
  3. while ($wiersz = mysql_fetch_array($result)) {
  4. ($wiersz['gg'] == 0 ? echo $wiersz['gg'] : echo "brak");
  5. }
  6. ?>


Taki przykład, dane o statusie możesz pobierać przez mysql_fetch_row.
!*!
$result - prowadzi do zapytania odczytując dane użytkownika

emm jeszcze raz.

Kod
0 - pokazuje
1- ukrywa

gg - 0
tel2 - 1
tel3 - 0


przy wyświetleniu:

Kod
gg
tel3
Jarod
Cytat(!*! @ 22.02.2008, 00:49:31 ) *
$result - prowadzi do zapytania odczytując dane użytkownika

emm jeszcze raz.

Kod
0 - pokazuje
1- ukrywa

gg - 0
tel2 - 1
tel3 - 0


przy wyświetleniu:

Kod
gg
tel3


Człowieku co z Tobą jest? Zajrzyj najpierw do manuala http://php.net.pl/manual/pl/function.mysql-fetch-array.php

Co do Twoich warunków to nie wiem już o co Ci chodzi. Dostałeś kod, który działa - sprawdzałem. Dalej sobie już możesz sam dostosować.
!*!
właśnie chce to dostosować ale mi nie wychodzi

  1. <?php
  2. // polaczenie z baza conn.php
  3.  
  4.  
  5. $query = "SELECT * FROM userdata WHERE login = '$ids'";
  6.  
  7. $result = mysql_query($query) or die(mysql_error());
  8.  
  9.  
  10. $query = mysql_fetch_array(mysql_query("SELECT status_gg, status_tel2, status_tel3 FROM prywata WHERE login = '$ids'")); 
  11.  
  12. while ($wiersz = mysql_fetch_array($result, MYSQL_NUM)) 
  13. {
  14.  
  15. if($wiersz[0] == 1)
  16. {
  17.  echo 'ukryty';
  18. }
  19. else
  20. {
  21. echo 'gg:<b>'.$wiersz['status_gg'].'</b>';
  22. echo 'tel_2:<b>'.$wiersz['status_tel2'].'</b><br /> ';
  23. echo 'tel3:<b>'.$wiersz['status_tel3'].'</b><br /> ';
  24. }
  25.  
  26.  
  27. }
  28. ?>


blad jest taki iz $query wczytywane mam dwa razy, za pierwszym jest to odczyt danych uzytkowniak a za drugim status 0 czy 1, i od tego zalezy co zostanie wyswietlone a co nie
Jarod
Popatrz na kod który dostałeś i popatrz jeszcze raz i jeszcze raz i nawet 1000razy bo wprowadzasz swoje błędne poprawki!

  1. <?php
  2. // polaczenie z baza conn.php
  3.  
  4.  
  5. $query1 = mysql_query('SELECT * FROM userdata WHERE login =' . $ids);
  6. $query2 = mysql_query('SELECT status_gg, status_tel2, status_tel3 FROM prywata WHERE login = ' . $ids); 
  7.  
  8.  
  9. while ($wiersz = mysql_fetch_array($result2, MYSQL_NUM)) 
  10. {
  11.  
  12. if($wiersz[0] == 1)
  13. {
  14.  echo 'ukryty';
  15. }
  16. else
  17. {
  18. echo 'gg:<b>'.$wiersz['status_gg'].'</b>';
  19. echo 'tel_2:<b>'.$wiersz['status_tel2'].'</b><br /> ';
  20. echo 'tel3:<b>'.$wiersz['status_tel3'].'</b><br /> ';
  21. }
  22.  
  23.  
  24. }
  25. ?>
!*!
tak jak napisałeś to:

$query1 - pobiera dane użytkownika jego gg i telefony
$query2 - pobiera status jaki ma jego gg i telefony

tylko

  1. <?php
  2. while ($wiersz = mysql_fetch_array($result2, MYSQL_NUM))
  3. ?>
jak na moje oko $result2 tu nie pasuje winksmiley.jpg i albo wypiłem za dużo kawy albo przyda mi się urlop... według tego co podałeś while skad ma pobrać dane o statusie i jednoczenie jakie dane wprowadził uzytkownik? Osobno ma byc wyświetlane gg,tel itp. a nie wszytko razem. to co podałeś nie pobiera żadnych danych a obojetnie czy 0 czy 1 i tak wyswietla echo bez warotśći. tak jak podałem wcześniej

  1. <?php
  2. while ($wiersz = mysql_fetch_array($result)) 
  3. {
  4.  
  5. if($query2[0] == 1) echo ''; 
  6. else if($query2[0] == 0)echo 'gg:<b>'.$wiersz['gg'].'</b><br /> ';
  7.  
  8. if($query2[0] == 1) echo ''; 
  9. else if($query2[0] == 0)echo 'tel_2:<b>'.$wiersz['tel2'].'</b><br /> ';
  10.  
  11. if($query2[0] == 1) echo ''; 
  12. else if($query2[0] == 0)echo 'tel3:<b>'.$wiersz['tel3'].'</b><br /> ';
  13.  
  14.  
  15. }
  16. ?>


tylko myk jest taki że jeśli ukryje sie GG to ukryje wszytko, a chciałbym aby moznabylo pokazać GG, ukryć tel2, pokazać tel 3, albo ukryć tel3, a pokazać reszte...
potreb
A ja ci podałem prosty przykład. Z twojego przykładu od początku wynika, że jak ukryjesz nr gg to ukryjesz resztę, a dopiero pod koniec to stwierdzasz.
Jarod
Cytat(!*! @ 22.02.2008, 01:25:56 ) *
jak na moje oko $result2 tu nie pasuje ;) i albo wypiłem za dużo kawy albo przyda mi się urlop... według tego co podałeś while skad ma pobrać dane o statusie i jednoczenie jakie dane wprowadził uzytkownik? Osobno ma byc wyświetlane gg,tel itp. a nie wszytko razem. to co podałeś nie pobiera żadnych danych a obojetnie czy 0 czy 1 i tak wyswietla echo bez warotśći. tak jak podałem wcześniej

Sorry ale to Twoje zapytania. Trzeba było sprecyzować to dokładnie. Skąd ja wiem co zwraca Ci zapytanie Select * questionmark.gif?





Cytat(!*! @ 22.02.2008, 01:25:56 ) *
tylko myk jest taki że jeśli ukryje sie GG to ukryje wszytko, a chciałbym aby moznabylo pokazać GG, ukryć tel2, pokazać tel 3, albo ukryć tel3, a pokazać reszte...



Kilk postów wyżej napisałeś:
Cytat
czyli jeśli gg jest ukryte to tel2 i tel3 też.

więc zdecyduj się.
!*!
  1. <?php
  2. $query = "SELECT * FROM userdata WHERE login = '$ids'";
  3. $result = mysql_query($query) or die(mysql_error());
  4.  
  5. $query2 = mysql_fetch_array(mysql_query("SELECT status_gg, status_tel2, status_tel3 FROM prywata WHERE login = '$ids'")); 
  6. while ($wiersz = mysql_fetch_array($result)) 
  7. {
  8.  
  9. if($query2[0] == 1) echo ''; 
  10. else if($query2[0] == 0)echo 'gg:<b>'.$wiersz['gg'].'</b><br /> ';
  11. if($query2[0] == 1) echo ''; 
  12. else if($query2[0] == 0)echo 'tel2:<b>'.$wiersz['tel2'].'</b><br /> ';
  13. if($query2[0] == 1) echo ''; 
  14. else if($query2[0] == 0)echo 'tel3:<b>'.$wiersz['tel3'].'</b><br /> ';
  15.  
  16. }
  17. ?>


jest tak

$query pobiera dane o użytkowniku, $result łaczy się z $query, $query2 pobiera status danych użytkownika, while łączy się z $result aby pobrać dane o użytkowniku, if'y łączą się z $query2 aby pobrać i zweryfikować statusty tych danych czy mają być wyświetlane czy nie... prawda że mało skomplikowane? biggrin.gif

zakładamy że użytkownik ma takie dane

Kod
gg: 888865 o statusie 0
tel2: 333 o statusie 0
tel3: 555 o statusie 1


czyli wyświetlić ma się tylko tel3

a to:

  1. <?php
  2. if($wiersz[0] == 1)
  3. {
  4.  echo 'ukryty';
  5. }
  6. else
  7. {
  8. echo 'gg:<b>'.$wiersz['status_gg'].'</b>';
  9. echo 'tel_2:<b>'.$wiersz['status_tel2'].'</b><br /> ';
  10. echo 'tel3:<b>'.$wiersz['status_tel3'].'</b><br /> ';
  11. }
  12. ?>


zwraca w else wszytko na raz [przynajmneij w założeniu, bo normalnie bazujac na tym co podałem wyzej jest tylko "echo gg:" bez wartości.]

a to już inna bajka:

  1. <?php
  2. $query2 = mysql_query("SELECT status_gg, status_tel2, status_tel3 FROM prywata WHERE login = '$ids'"); 
  3. while ($wiersz = mysql_fetch_array($result)) {
  4. ($wiersz['gg'] == 0 ? echo $wiersz['gg'] : echo "brak");
  5. }
  6. ?>


Kod
Parse error: syntax error, unexpected T_ECHO
tdp
1.
  1. <?php
  2. mysql_fetch_array(mysql_query("twoje zapytanie do bazy"));
  3. ?>


!*! - składnia jw jest wysoce niefortunna
miedzy złożeniem zapytania do bazy, a pobraniem wiersza wyniku nie dajesz sobie szansy na sprawdzenie czegokolwiek, - błędu, albo np. mysql_num_rows

2. masz problemy z określaniem wartości zmiennych w danym momencie
jaką wartość wg ciebie ma zmienna $result w przykładzie:

  1. <?php
  2. $query2 = mysql_fetch_array(mysql_query("SELECT status_gg FROM prywata WHERE login = '$ids'"));
  3. while ($wiersz = mysql_fetch_array($result)) {
  4.  if($query2[0] == 1) echo 'ukryty'; else if($query2[0] == 0) echo 'gg:<b>'.$wiersz['gg'].'</b>';
  5.  }
  6. ?>


spróbój debuggować swój kod, śledzić wartości zmiennych w trakcie wykonania.


Cytat(!*! @ 22.02.2008, 01:48:14 ) *
$query pobiera dane o użytkowniku, $result łaczy się z $query, $query2 pobiera status danych użytkownika, while łączy się z $result aby pobrać dane o użytkowniku, if'y łączą się z $query2 aby pobrać i zweryfikować statusty tych danych czy mają być wyświetlane czy nie...


3.
w Twoich przykładach:
- $query nie pobiera żadnych danych, ma wartość typu string, (sam ją przypisujesz), która tutaj może być użyta jako zapytanie do bazy
- $result z niczym się nie łączy, przyjmuje wartość typu "zasób", może być wykorzystana do pobrania wyniku zapytania do bazy do zmiennej tablicowej php, jako, że tak nieprofesjonalnie nazwę "adres" do tego wyniku (przez np, mysql_fetch_row, mysql_fetch_array ..)
- $query2 nie pobiera żadnego statusu (co to jest status?), $query2 u Ciebie jest wartością typu "zasób", tak jak $result. Przy okazji, czy nie lepiej trzymać się jakiejś konwencji naywania zmiennych? Raz $query jest tekstem zapytania, raz czym innym.


Cytat(!*! @ 22.02.2008, 01:48:14 ) *
  1. <?php
  2. if($query2[0] == 1) echo '';
  3. else if($query2[0] == 0) echo 'gg:<b>'.$wiersz['gg'].'</b><br /> ';
  4. if($query2[0] == 1) echo '';
  5. else if($query2[0] == 0) echo 'tel2:<b>'.$wiersz['tel2'].'</b><br /> ';
  6. if($query2[0] == 1) echo '';
  7. else if($query2[0] == 0) echo 'tel3:<b>'.$wiersz['tel3'].'</b><br /> ';
  8. ?>



4.1. jeśli chcesz sprwdzić kolejno wartości pól "status_gg", "status_tel2", "status_tel3", z tabeli "prywata",
to musisz je sprawdzić.
a co sprawdzasz? za każdym razem $query2[0], który bodajże za każdym razem odnosi się do pola "status_gg" (tu nie jestem pewien, użyłeś mysql_fetch_array, a nie mysql_fetch_row)

4.2. ile wierszy zwraca wynik zapytania do tabeli "userdata", a ile do "prywata".
jeśli po jednym, to po co pętla while, jeśli do "userdata" więcej niż 1, to i tak w swoim kodzie, w pętli while będziesz miał odniesienie tylko do pierszego wiersza tabeli "prywata", bo tylko raz pobierasz przed pętlą ten wiersz.

5. czy aby na pewno są Ci potrzebne do tego zagadnienia dwie osobne tabele?
!*!
  1. <?php
  2. $query = "SELECT * FROM userdata WHERE login = '$ids'";
  3. $result = mysql_query($query) or die(mysql_error());
  4.  
  5. $query2 = "SELECT status_gg, status_tlen, status_jabber FROM prywata WHERE login = '$ids'";
  6. $result2 = mysql_query($query2) or die(mysql_error());
  7.  
  8.  
  9. while ($wiersz = mysql_fetch_array($result)) 
  10. {
  11.  
  12. if($query2[0] == 1) echo ''; 
  13. else if($query2[0] == 0)echo 'gg:<b>'.$wiersz['gg'].'</b><br /> ';
  14. if($query2[0] == 1) echo ''; 
  15. else if($query2[0] == 0)echo 'tlen:<b>'.$wiersz['tlen'].'</b><br /> ';
  16. if($query2[0] == 1) echo ''; 
  17. else if($query2[0] == 0)echo 'jabber:<b>'.$wiersz['jabber'].'</b><br /> ';
  18.  
  19. }
  20. ?>


zmienilem z tel2, tle3 na tlen i jabber dla lepszej czytelnosci

emm status jest to wartosc rekortu 0 lub 1

a jak inaczej zrobisz czy ktoś zaznaczył ukryty/publiczny nie odwołujac się do innej tabeli? while ma wyświetlić [tak jak to robi teraz] dane, a query2 weryfikuje które dane można wyświetlić a które nie.
tdp
Cytat(!*! @ 22.02.2008, 11:47:26 ) *
a jak inaczej zrobisz czy ktoś zaznaczył ukryty/publiczny nie odwołujac się do innej tabeli?


odwołując się do tej samej tabeli
przykład definicji:
"CREATE TABLE uzytkownicy (login INT NOT NULL AUTO_INCREMENT PRIMARY KEY, tel1 INT, status_tel1 BOOL, tel2 INT, status_tel2 BOOL, ... i tak dalej)"

dalej nic nie jest zrobione do moich podpowiedzi w pk. 4


poza tym ponawiam apel o debugowanie
w ostanim przykładzie: jaką wartość ma $query2, jakiego jest typu, tuż przed spradzeniem warunku z $query2[0] w if po razpierwszy?
co sie dzieje w momencie sprawdzenia tego warunku ze zmieną $query2 ?
!*!
poprawiłem conieco i teraz jest dobrze:

  1. <?php
  2. $query = "SELECT * FROM userdata WHERE login = '$ids'"; 
  3. $result = mysql_query($query) or die(mysql_error());
  4.  
  5. $zapytanie = "SELECT status_gg, status_tlen, status_jabber FROM prywata WHERE login = '$ids'";
  6. $idzdo = mysql_query($zapytanie) or die(mysql_error());
  7.  
  8. while ($wiersz = mysql_fetch_array($result)) 
  9. {
  10. while ($zapytanie = mysql_fetch_array($idzdo)) 
  11. {
  12.  
  13. if( (int)$zapytanie['status_gg'] !== 1){ echo("gg:<b>".$wiersz['gg']."</b><br /> "); } 
  14. if( (int)$zapytanie['status_tlen'] !== 1){ echo("tlen:<b>".$wiersz['tlen']."</b><br /> "); } 
  15. if( (int)$zapytanie['status_jabber'] !== 1){ echo("jabber:<b>".$wiersz['jabber']."</b><br /> "); }
  16.  
  17. }
  18. }
  19. ?>


tylko czy jest to poprawnie napisane?
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.