Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Puste pola tabeli
Forum PHP.pl > Forum > Przedszkole
kosy
Mam pytanie odnośnie usuwania pustych pól tablicy.
Dane do tablicy pobieram z tabeli w której kilka pozycji może być pustych.
Chciałbym żeby wyświetlane były tylko te pozycje w których wpisane są wartości.
Dane pobieram:
  1. <?php
  2. $g=mysql_query("SELECT DISTINCT wybrane FROM wyniki");
  3. while($r=mysql_fetch_assoc($g)){
  4. ?>

Robiłem próby typu:
  1. <?php
  2. $wybrane = !empty($r['wybrane']);
  3.  
  4. lub
  5.  
  6. $wybrane = array_values($r['wybrane']);
  7. ?>

ale nie udało mi się osiągnąć celu.
Proszę o małą pomoc.
kszychu
  1. <?php
  2. $wybrane2 = array();
  3. foreach($wybrane as $wartosc)
  4.  if($wartosc != '') $wybrane2[] = $wartosc;
  5. print_r($wybrane2);
  6. ?>
phpion
  1. SELECT DISTINCT wybrane FROM wyniki WHERE LENGTH(wybrane)>0;

?
kosy
Gdziś robię jeszcze błąd bo wykonując kod
  1. <?php
  2. $g=mysql_query("SELECT DISTINCT wybrane FROM wyniki");
  3. while($r=mysql_fetch_assoc($g)){
  4. $wybrane = $r['wybrane'];
  5. $wybrane2 = array();
  6. foreach($wybrane as $wartosc)
  7. if($wartosc != '') $wybrane2[] = $wartosc;
  8. print_r($wybrane2);
  9. ?>

otrzymuje komunikat: Invalid argument supplied for foreach()
phpion
Jak juz chcesz wybierac wszystko i potem sprawdzac dodatkowo w php (a nie jak ja przedstawilem od razu w 1 zapytaniu SQL) to tak:
  1. <?php
  2. $wybrane = $wybrane2 = Array();
  3.  
  4. $g=mysql_query("SELECT DISTINCT wybrane FROM wyniki");
  5. if (mysql_num_rows($g) > 0)
  6. while($r=mysql_fetch_assoc($g))
  7. $wybrane[] = $r['wybrane'];
  8.  
  9. foreach($wybrane as $wartosc)
  10. if($wartosc != '') $wybrane2[] = $wartosc;
  11.  
  12. print_r($wybrane2);
  13. ?>
kszychu
Cytat(kosy @ 17.08.2006, 10:25 ) *
Gdziś robię jeszcze błąd bo wykonując kod
  1. <?php
  2. $g=mysql_query("SELECT DISTINCT wybrane FROM wyniki");
  3. while($r=mysql_fetch_assoc($g)){
  4. $wybrane = $r['wybrane'];
  5. $wybrane2 = array();
  6. foreach($wybrane as $wartosc)
  7. if($wartosc != '') $wybrane2[] = $wartosc;
  8. print_r($wybrane2);
  9. ?>

otrzymuje komunikat: Invalid argument supplied for foreach()


Masz otwartą klamrę po while ale nigdzie jej nie zamykasz. Dziwne, że nie masz parse errora.
phpion
Chodzi tu o foreach. Do zmiennej $wybrane przypisuje wartosc wyciagnieta z bazy i nie jest to tablica! Stad ten blad: nieprawidlowy argument w petli.
Poza tym przedstawilem 2 rozne sposoby na rozwiazanie tego problemu. Do zapytania SQL mozna dac inny warunek, bo nie wiem czy puste pola masz na mysli puste jao pusty ciag czy jako NULL. Jesli to 1 to moj przyklad powinien dzialac, jesli to 2 to zmien warunek na
  1. ... WHERE wybrane IS NOT NULL
Ludvik
Cytat(kosy @ 17.08.2006, 10:25 ) *
Gdziś robię jeszcze błąd bo wykonując kod
  1. <?php
  2. $g=mysql_query("SELECT DISTINCT wybrane FROM wyniki");
  3. while($r=mysql_fetch_assoc($g)){
  4. $wybrane = $r['wybrane'];
  5. $wybrane2 = array();
  6. foreach($wybrane as $wartosc)
  7. if($wartosc != '') $wybrane2[] = $wartosc;
  8. print_r($wybrane2);
  9. ?>

otrzymuje komunikat: Invalid argument supplied for foreach()


Usuń linię #4. Popraw też klamry, tak jak mówi kszychu.

Cytat(phpion.com @ 17.08.2006, 10:48 ) *
Jak juz chcesz wybierac wszystko i potem sprawdzac dodatkowo w php (a nie jak ja przedstawilem od razu w 1 zapytaniu SQL) to tak:
  1. <?php
  2. $wybrane = $wybrane2 = Array();
  3.  
  4. $g=mysql_query("SELECT DISTINCT wybrane FROM wyniki");
  5. if (mysql_num_rows($g) > 0)
  6. while($r=mysql_fetch_assoc($g))
  7. $wybrane[] = $r['wybrane'];
  8.  
  9. foreach($wybrane as $wartosc)
  10. if($wartosc != '') $wybrane2[] = $wartosc;
  11.  
  12. print_r($wybrane2);
  13. ?>

Nie rozumiem dlaczego sprawdzasz tylko jedno pole z wyniku. Klamry też by się przydały, bo nie da się tego czytać...
phpion
Po co klamry do tego przykladu? I jak to 1 pole?
Ludvik
Po to, żeby dało się to czytać... smile.gif Nie lubię kodu bez klamerek, bo trzeba się bardziej zaangażować w zasięgi. Dodając klamry masz to wszystko widoczne na pierwszy rzut oka, nawet nie czytając instrukcji... Poza tym, jestem wzrokowcem... smile.gif

Twój kod pobiera z wszystkich rekordów pole 'wybrane' do tablicy o tej samej nazwie. Potem porównuje do pustego ciągu znaków kolejne elementy tej tablicy. Wypiszesz tylko niepuste elementy z kolumny 'wybrane'.

Skrypt kszycha sprawdza natomiast wszystkie pola z kolejnych rekordów, o co chyba chodziło autorowi wątku...
phpion
Nie no nie czaje cie. Wg mnie nasze skrypty robia to samo, a juz na pewno moj robi to co powinien (nie mowiac juz o samym zapytaniu SQL napisanym wczesniej)
Ludvik
Pozwoliłem sobie na poprawki i podstawienie sztucznych danych zamiast SQL...

  1. <?php
  2.  
  3. $wybrane = $wybrane2 = Array();
  4.  
  5. $g = array(array('jeden' => '', 'dwa' => 'dwa1', 'wybrane' => ''),
  6.  array('jeden' => 'jeden2', 'dwa' => '', 'wybrane' => 'wybrane2'),
  7.  array('jeden' => 'jeden3', 'dwa' => 'dwa3', 'wybrane' => 'wybrane3'),
  8.  array('jeden' => '', 'dwa' => '', 'wybrane' => 'wybrane4'));
  9.  
  10. echo 'Skrypt 1:<br />';
  11.  
  12. foreach ($g as $r) {
  13. $wybrane[] = $r['wybrane'];
  14. }
  15.  
  16. foreach ($wybrane as $wartosc) {
  17. if($wartosc != '') $wybrane2[] = $wartosc;
  18. }
  19.  
  20. var_dump($wybrane2);
  21.  
  22. echo '<br /><br /><br /><br />';
  23. echo 'Skrypt 2:<br />';
  24.  
  25. foreach ($g as $r) {
  26. $wybrane2 = array();
  27. foreach($r as $wartosc) {
  28. if($wartosc != '') $wybrane2[] = $wartosc;
  29. }
  30. var_dump($wybrane2);
  31. echo '<br /><br />';
  32. }
  33.  
  34. ?>

Teraz widać różnicę? Domyślam się, że kszychu tak widział całość...
phpion
Ej no ale zauwaz, ze kolega w swoim zapytaniu SQL wyciaga tylko 1 pole z bazy! Wiec, o ile dobrze zrozumiem jego zamierzenia, sposoby przedstawione przeze mnie beda ok.
Ludvik
Fakt, masz rację. Przeoczyłem zapytanie i zasugerowałem się liczbami mnogimi w treści posta. Zwracam honor smile.gif
phpion
No smile.gif
A tak na dobra sprawe mozna tez tak:
  1. SELECT DISTINCT wybrane FROM wyniki WHERE wybrane != '';

hehehe
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.