![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 2 Dołączył: 2.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
hej
mam taki kod: Kod <?php CONNECT TO DATABASE... $prefix="gazeta_"; $tab_wyd=mysql_query("SELECT * FROM ".$prefix."wydania WHERE id=(SELECT max(id) FROM ".$prefix."wydania) AND data_zamkniecia<=DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')"); if(mysql_num_rows($tab_wyd) > 0) { echo "<table cellpadding=\"2\" border=1>"; while($r = mysql_fetch_assoc($tab_wyd)) { echo "<tr>"; echo "<td>".$wyd=$r['id']."</td>"; echo "<td>".$r['numer']."</td>"; echo "</tr>"; } echo "</table>"; } //do tego momentu wszystko dziala ok - elegancko sie wyswietla $wynik_blad = mysql_query("SELECT * FROM ".$prefix."ogloszenia WHERE id_wydania='".$tab_wyd[0]["id"]."' AND liczba_pozostalych_emisji>0") or die('Blad zapytania'); $wynik_ok = mysql_query("SELECT * FROM ".$prefix."ogloszenia WHERE id_wydania='".$wyd."' AND liczba_pozostalych_emisji>0") or die('Blad zapytania'); // zamykamy połączenie mysql_close($connection); ?> i teraz tak, w zapytaniu $wynik_blad wykorzystując $tab_wyd[0]["id"] nie otrzymuje zadnych rekordów. w zapytaniu $wynik_ok wykorzystujac $wyd wszystko jest poprawnie. Możecie mi wyłożyć jak krowie na miedzy dlaczego tak jest? Bo nie bardzo czaje. Od razu mowie ze to moje poczatki z php. z góry dzieki |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Stosuj tagi na forum, aby kolorować składnie.
var_dump() i sprawdź co Ci zwraca $tab_wyd; (obstawiam 2 select) Poza tym, zapomnij o mysql_ do łączenia się z bazą i bierz się od razu za PDO skoro się uczysz, bo to przyszłość. http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO I nabierzesz dobrych praktyk. Ten post edytował !*! 20.08.2012, 12:39:22 -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Naukę SQLa możesz łatwo odłożyć stosująć biblitekę Active Records http://codeigniter.com/user_guide/database...ive_record.html
Patrz na mnie, nie znam SQLa a radze sobie świetnie ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
1. Prawdopodobnie zapytanie w linii 5 jest błędne. Jeśli działa prawidłowo, to przypadek. 2. a to w linii 11 to co to jest ![]() 3. w linii 20 nie możesz zrobić tak: $tab_wyd[0]["id"], bo $tab_wyd nie jest tablicą, tylko resource. 4. w ogóle wykonywanie zapytań z * to złoooo... A jeśli dodatkowo tych zmiennych później nie wykorzystujemy, to już zupełna kicha... |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 2 Dołączył: 2.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
1) działa prawidłowo
![]() 2) nie mam bladego pojecia czy ta konstrukcja jest dozwolona przez php ale działa. po prostu chce wyciagnac dane z $tab_wyd[0]["id"] ok - zgadzam sie ze $tab_wyd to nie tablica. to powiedz mi jak mam sie odwołać do $tab_wyd aby wyciagnać warość z zapytania które w polu ID ma jakąś wartość - no i chce tą wartość poznać. dzieki |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 2 Dołączył: 2.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
właśnie o to chodzi że jak dam w zapytaniu $r['id'] to mysql_num_rows($wynik)=0 i nie zwróci mi żadnych danych. A jak wezmę to dziwne przypisanie w pierwszym select - czyli $wyd=$r['id'] - i odwołam sie do $wyd to wszystko działa. I nie bardzo mój mały móżdziek może ogarnąć dlaczego tak jest. Wreszczie $r jest tablicą czy nie? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 2 Dołączył: 2.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
A nie wpadłeś na to, żeby całą tablicę tak podejrzeć...?
Myślenie nie boli. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 2 Dołączył: 2.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
pewnie ze nie boli
![]()
Pierwsze echo ($r['id']); wyrzuca ładnie wartość, Drugie echo ($r['id']); które się znajduje już poza while już nie zwraca nic. Wiem że mam ogromne braki w wiedzy ![]() Ten post edytował chemiqs 23.08.2012, 15:42:41 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 290 Pomógł: 48 Dołączył: 11.05.2008 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Tablica $r będzie zwracać wartości tylko wewnątrz pętli.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
W linii 5. masz napisane:
co w tłumaczeniu na język polski znaczy: DOPÓKI WARTOŚĆ $r POBRANA W WYNIKU DZIAŁANIA FUNKCJI mysql_fetch_assoc Z PARAMETREM $tab_wyd NIE JEST Nullem, TO... Dlatego OSTATNIE wykonanie tej funkcji powoduje, że zmienna $r jest Nullem. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 2 Dołączył: 2.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
![]() Ale dalej nasuwa mi sie pytanie - jak wewnatrz klejnych linii kodu danego skryptu odwołać się do tej wartości która oczywiście jest dostępna tylko wewnątrz WHILE. czyż nie tak jak to zrobiłem proszę o sugestie. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
echo $wyd=$r['id'] w każdym NORMALNYM języku programowania powinno zwrócić WYNIK działania, czyli podstawienia. Jeśli zmienna $wyd nie jest read-only, to powinno wrócić True. Bo udało się podstawić
![]() |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Odnośnie tego, co powinno zwrócić, to najlepiej sięgnąć do dokumentacji: http://www.php.net/manual/pl/language.expressions.php (akapit od "PHP rozwija...".
Natomiast co do Twojego oryginalnego pytania odnośnie $r['id'], to już Ci wytłumaczono, ja spróbuję inaczej: 1. budujesz zapytanie do SQL, mające na celu wyciągnąć jakies dane z bazy. 2. robisz pętlę while ($r=mysql_query(...)) 3. w pętli obrabiasz wiersz ($r) właśnie pobrany. Pytanie podstawowe, które powinieneś sobie zadać, to: jaką wartość ma $r po wyjściu z pętli? Otóż, czytając uważnie manual (w linku powyżej) widzimy, że wyrażenie w punkcie 2 można na ludzki język wyrazić: Dopóki istnieje coś w bazie, zrób to co jest w pętli while. Przyjrzyjmy się temu, co mówi manual n/t instrukcji while: http://www.php.net/manual/pl/control-structures.while.php Cytat The meaning of a while statement is simple. It tells PHP to execute the nested statement(s) repeatedly, as long as the while expression evaluates to TRUE. Mam podejrzenie (graniczące z pewnością), że zmienna $r po wyjściu z pętli ma wartość logicznego FALSE. Bo tylko w takim przypadku następuje wyjście z pętli while (!). Wobec tego poza pętlą Twoje $r['id'] to coś na kształt FALSE['id'] (co jest konstrukcją bezsensowną). I przypisywanie tej wartości do zmiennej $wyd też jest lekko bez sensu ![]() Wypisz sobie poza pętlą: Wtedy wszystko stanie się jasne. EDIT: Aha, a skąd $r nagle zamiast z tablicy robi się zmienną logiczną? Bo taką wartość zwróciła mysql_fetch_assoc. Z manuala (http://www.php.net/mysql_fetch_assoc): "Zwraca tablicę zawierającą pobrany wiersz, lub FALSE jeżeli nie ma więcej wierszy w wynik. " Ten post edytował abort 23.08.2012, 21:02:14 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 2 Dołączył: 2.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
chyba sie nie rozumiemy - najprawodpodobniej ja mieszam
![]() Ale jak poza pętlą WHILE odwoływać sie do wartości zapisanej w tablicy $r['id']. jestem świadomy tego że przebieg pętli będzie tylko raz i SELECT zwróci 1 wartość. Chciałbym mieć tą wartość zapisaną w jakiejś zmiennej i później robić ponownie SELECTY w innych już tabelach. Czy to jest zrozumiałe - bo nie wiem czy dobrze tłumaczę. Zauważcie że ucze się dopiero i sorrki że tak dopytuję. |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Nie ma czegoś takiego, jak zawartość zmiennej $r POZA PĘTLĄ. Pisałem już, że mysql_fetch_assoc zwraca poszczególny wiersz z bazy, a jak wierszy już nie ma, to zwraca FALSE (co zresztą jest sygnałem dla while(), by zakończyć działanie). Dlatego poza while() $r nie istnieje. KROPKA.
Poza tym, $r['id'] to ZAWARTOŚĆ POLA W BAZIE DANYCH dla konkretnego wiersza w talicy. Jeśli Ty robisz sobie teraz "SELECT *" z bazy i dostajesz np. 20 wierszy z bazy, to wewnątrz while() odwołanie się do $r['id'] będzie zwracało zawartość tego pola dla danego wiersza. Ale, poza bazą pozostaje pytanie: do KTÓREGO WIERSZA z tych 20 odczytanych chcesz się odwoływać? Skąd ten biedny komputer ma to wiedzieć? Jeśli chcesz sobie jakieś wartości zachować, dopisz je do tablicy, dodając w pętli np. $tablica[$index] = $r. Jak sobie poukładasz wartości $index, to już Twoja bajka. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 2 Dołączył: 2.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
dzieki za konstruktywną dyskusję.
cuś tam załapałem ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 3.08.2025 - 07:18 |