PDA

Zobacz pełną wersję : Wyświetlanie danych z BD



qtlet
25-08-2011, 01:26
Witam Was,
zrobiłem prosty plik php ,który ma za zadanie wyświetlić zawartość tabeli z bazy danych
Korzystam z joomla 1.7 , bazę obsługuję za pomocą phpMyAdmin ,korzystam również z komponentu jumi ,który umożliwia wstawianie własnego skryptu php.

Poniżej przedstawię prosty skrypt ,który ma za zadanie wyświetlić zawartość tabeli.
Po mimo tego że tabela posiada kilka rekordów, komunikat jest ,że tabela jest pusta.


if( @mysql_num_rows( $test ) == 0 )
echo '<h4>Tabela jest pusta</h4>';
else
{
// wyświetlamy tabelę towarów
echo '<table border="1" cellspacing="0" cellpadding="2">';
echo '<tr>
<td>Id</td>
<td>Imie</td>
<td>Nazwisko</td>
</tr>';
while( @mysql_fetch_row( $test ) )
{
$id = @mysql_result( $test, 'id' );
$imie = @mysql_result( $test, 'imie' );
$nazwisko = @mysql_result( $test, 'nazwisko' );

echo '<tr>
<td>'.$id.'</td>
<td>'.$imie.'</td>
<td>'.$nazwisko.'</td>
</tr>';
}
echo '</table>';

Jeśli ktoś byłby chętny o podpowiedz, to proszę o pomoc.

pozdrawiam

palyga007
25-08-2011, 06:27
A reszta kodu gdzie?


Sent from my GT-S5830 using Tapatalk

neo_fox
25-08-2011, 06:54
Jeżli korzystasz z Joomla! to używaj także Joomla! API do połączeń DB zamiast mysql_num_rows itd



Jeśli ktoś byłby chętny o podpowiedz, to proszę o pomoc.


Odpowiedź na co? Bo pytania chyba zapomniałeś ;)

qtlet
25-08-2011, 11:05
oto cały skrypt:
tak jak wspomniałem skrypt ma za zadanie wyświetlać dane z bazy danych w postaci tabeli. domyślam się ,że można to napisać w inny lepszy sposób ale nie umiem jeszcze :) .
Dopiero raczkuje w tym temacie (wyświetlanie danych z bd) więc proszę o wyrozumiałość.

moje pytanie jest następujące: czy wiecie dlaczego ten skrypt nie wyświetla danych na stronie?
skrypt łączy się z bd i wyświetla komunikat: Tabela jest pusta
w tabeli ,która została użyta w skrypcie znajduje się kilka rekordów :(




<h2>Lista uzytkowników</h2><br/>
<?php

// nawiazujemy polaczenie
$connection = @mysql_connect('serwer', 'nazwa_bd', 'hasło')

// w przypadku niepowodznie wyświetlamy komunikat
or die('Brak polaczenia z serwerem MySQL.<br />Błąd: '.mysql_error());

// połączenie nawiązane ;-)
echo "Udalo się polaczyc z serwerem!<br />";

// nawiązujemy połączenie z bazą danych
$db = @mysql_select_db('azaola_2', $connection)

// w przypadku niepowodzenia wyświetlamy komunikat
or die('Nie moge polaczyc sie z baza danych<br />Błąd: '.mysql_error());

// połączenie nawiązane ;-)
echo "Udalo sie polaczyc z baza danych!";

// zamykamy połączenie
//mysql_close($connection);


// sprawdzamy czy zapytanie zwróciło rekordy
if( @mysql_num_rows( $test ) == 0 )
echo '<h4>Tabela jest pusta</h4>';
else
{
// wyświetlamy tabelę towarów
echo '<table border="1" cellspacing="0" cellpadding="2">';
echo '<tr>
<td>Id</td>
<td>Imie</td>
<td>Nazwisko</td>
</tr>';
while( @mysql_fetch_row( $test ) )
{
$id = @mysql_result( $test, 'id' );
$imie = @mysql_result( $test, 'imie' );
$nazwisko = @mysql_result( $test, 'nazwisko' );

echo '<tr>
<td>'.$id.'</td>
<td>'.$imie.'</td>
<td>'.$nazwisko.'</td>
</tr>';
}
echo '</table>';
}
?>

do
neo_fox: gdzie mogę poczytać o wspomnianym temacie przez ciebie.

to chyba tyle.
pozdrawiam

neo_fox
25-08-2011, 11:14
Kurcze, specjalnie edytowałem Twój porzedni post aby dodać kod wewnątrz tagu PHP! Powinno Ci dać do myślenia.



neo_fox: gdzie mogę poczytać o wspomnianym temacie przez ciebie.


Jak zwykle - w dokumentacji: http://docs.joomla.org/How_to_use_the_database_classes_in_your_script ;)

Poza tym jakoś nie widzę zapytania do bazy danych w Twoim kodzie

qtlet
25-08-2011, 21:16
a czy warunek if jaki jest użyty w moim skrypcie ,to nie jest zapytanie? czy ta funkcja @mysql_num_rows( $test ) nie wskazuje mi na ilość rekordów w tabeli test? i użyłem drugiej funkcji w pętli while która wypisuje mi wszystkie rekordy?
przynajmniej w ten sposób rozumuję.
Czy ktoś może potwierdzić moją wiedzę lub ukierunkować mnie na właściwą drogę do wypisania zawartości tabeli bd na stronie joomla.

dziękuje

neo_fox
25-08-2011, 21:23
a czy warunek if jaki jest użyty w moim skrypcie ,to nie jest zapytanie? czy ta funkcja @mysql_num_rows( $test ) nie wskazuje mi na ilość rekordów w tabeli test?

LOL. No niby tak ale aby mieć jakieś wyniki wypadałoby DBMS powiedzieć co chcesz wybrać i z jakiej tabeli
Ale może MySQL 6 to telepatycznie potrafi ;-)

qtlet
26-08-2011, 10:27
dobrze ,że się zgadzamy :)

napiszę jak ja rozumiem użytą pętle while.


while( @mysql_fetch_row( $test ) ) funkcja ,która zwraca rekord z tablicy "test"


$id = @mysql_result( $test, 'id' );
$imie = @mysql_result( $test, 'imie' );
$nazwisko = @mysql_result( $test, 'nazwisko' );
te linie kodu służą do przypisania do zmiennej $id to co znajduje się w tabeli test w kolumnie id, do zmiennej @imie przypisuje to co znajduje się w tabeli test w kolumnie imie... itd.


echo '<tr>
<td>'.$id.'</td>
<td>'.$imie.'</td>
<td>'.$nazwisko.'</td>
</tr>';
a tu po prostu wypisuje te zmienne w prostej tabeli html.

czy moje rozumowanie jest ok?
czy tak to działa?

neo_fox
26-08-2011, 10:35
while( @mysql_fetch_row( $test ) ) funkcja ,która zwraca rekord z tablicy "test"


Niby dlaczego? Dlatego że zmienna php nazywa się "test"?!!!

Poza tym - przestań używać natywnych funkcji PHP - korzystaj z Joomla! framework Link podałem wcześniej.

qtlet
26-08-2011, 10:42
czytam i czytam i doszedłem do pewnego wniosku. proszę napiszcie czy dobrze myślę. poniżej przedstawię 2 kody php:


kod 1

// nawiazujemy polaczenie
$connection = @mysql_connect('serwer', 'nazwa_bd', 'hasło')

// w przypadku niepowodznie wyświetlamy komunikat
or die('Brak polaczenia z serwerem MySQL.<br />Błąd: '.mysql_error());

// połączenie nawiązane ;-)
echo "Udalo się polaczyc z serwerem!<br />";

// nawiązujemy połączenie z bazą danych
$db = @mysql_select_db('azaola_2', $connection)

// w przypadku niepowodzenia wyświetlamy komunikat
or die('Nie moge polaczyc sie z baza danych<br />Błąd: '.mysql_error());

// połączenie nawiązane ;-)
echo "Udalo sie polaczyc z baza danych!";

// zamykamy połączenie
//mysql_close($connection);


kod2

$db =& JFactory::getDBO();

kod 1 = kod 2 :)) czy równanie jest prawdziwe?

neo_fox
26-08-2011, 10:46
kod 1 = kod 2 :)) czy równanie jest prawdziwe?

Jak najbardziej. Dlatego między innymi polacałem korzystanie z Joomla! Framework ;)

palyga007
26-08-2011, 10:54
@neo_fox
Podziwiam Cierpliwość:)

@qtlet

ZAPYTANIE DO BAZY

mówi Ci to coś?

Pierwszy z brzegu kurs..
http://webmade.org/kursy-online/mysq_fetch_row-sql-kurs-mysql.php
PS:
Mocno wątpię w swoje umiejętności programistyczne, ale patrząc na Twoje wpisy..

Nie szuka ktoś programisty PHP?:P

qtlet
26-08-2011, 13:27
studiuje link ,który mi podałeś. te funkcje które są w tym materiale wszystkie działają. Powiedzmy ,że elementarną wiedzę pojąłem z tego linku ale...
mam problem ze zrozumieniem jednej funkcji.


loadResult () nie rozumiem tego wyjaśnienia. ten kawałek kodu próbowałem skopiować i zobaczyć jak działa. ale kod jest błędny związany z ( ' , " ) nie do końca umiem go naprawić. oprócz tego jest dla mnie niezrozumiały (kod).

poza tym poszukuje metody (funkcji) do zliczania liczby rekordów w tabeli.

wydaje mi się ,że do napisania mojego skryptu tych dwóch informacji potrzebuje.

może jakaś podpowiedź lub sugestia?

neo_fox
26-08-2011, 15:15
rzuć kod

danieladrianka
26-08-2011, 16:25
liczba rekordów w tabeli:


//przygotowanie nazw
$TableName = $db->nameQuote('#_nazwa_tabeli');
//zapytanie COUNT
$sql = "SELECT COUNT(*) FROM $TableName";
// wskazanie do DBO
$db->setQuery($sql);
// wykonanie zapytania
$razem = $db->loadResult();

zmiennej $razem przypisana zostanie wartość liczby rekordów w tabeli - wartość całkowitoliczbową reprezentowaną przez ciąg znaków


oczywiście metoda loadResult(); nie służy tylko do tego, bo mozna za jej pomocą również np. ładować pierwszą komórkę ze zbioru wyników zapytania.

qtlet
29-08-2011, 09:11
kod php o którym pisałem ,że jest niepoprawny to mój błąd. kod jest poprawny.
poniżej przesyłam kod z podanego (prze ciebie neo_fox) linku.

$db =& JFactory::getDBO();
$query = "
SELECT COUNT(*)
FROM ".$db->nameQuote('#__my_table')."
WHERE ".$db->nameQuote('name')." = ".$db->quote($value).";
";
$db->setQuery($query);
$count = $db->loadResult();


jeżeli mam tabele UZYTKOWNIK:
id imie nazwisko
1 jan kowalski
2 adam nowak

to czy posiłkując się wyżej wymieniony kodem php, moje zapytanie by wyglądało tak:


$db =& JFactory::getDBO();
$query = "
SELECT COUNT(*)
FROM ".$db->nameQuote('uzytkownik')."
WHERE ".$db->nameQuote('imie')." = ".$db->quote($value).";
";
$db->setQuery($query);
$count = $db->loadResult();


no właśnie nie rozumiem warunku where? czy w dużym skrócie analogicznie mogę rozumieć to w ten sposób:


SELECT COUNT (*) FROM Uzytkownik WHERE imie = 'jan'


nie wiem co to znaczy?

".$db->quote($value)."

palyga007
29-08-2011, 09:44
qtlet zacznij czytać api sprawdzaj przykłady itp.
http://docs.joomla.org/How_to_use_the_database_classes_in_your_script

http://help.joomla.org/content/view/525/212/

qtlet
30-08-2011, 21:59
oto mój kod ,który powinien zliczać ilość rekordów w tabeli:


<?php

$db =& JFactory::getDBO();

$TableName = $db->nameQuote('test');
$sql = "SELECT COUNT(*) FROM $TableName";

$db->setQuote($sql);
$row = $db -> loadResult();
print ($row);

?>

zaznajomiłem się z podanymi linkami przez Was oraz przeczytałem rozdział który jest pod tym linkiem (http://pdf.helion.pl/jo15od/jo15od-3.pdf) (str. 82)

I zliczanie jest błędne...:(
otóż w tabeli w bd rekordów jest 3. Natomiast wynik wyświetlany po działaniu mojego kodu php jest 1. Czy robię gdzieś (czeski) błąd? Nie wiem jak dalej szukać błędu lub gdzie o tym czytać?

Proszę o pomoc.

palyga007
30-08-2011, 23:25
@qtlet
Zaczynasz być naprawdę irytujący

dostrzegasz różnicę pomiędzy
jest
$db->setQuote($sql);
a powinno być
$db->setQuery$sql);

Robisz podstawowe błędy wynikające z braku umiejętności czytania ze zrozumieniem lub niechlujstwa (osobiście stawiam na to drugie).

Uwierz mi, nie każdy musi programować. Ja chyba nie mam do tego talentu i generalnie tego nie robię, a jakoś sobie w życiu radzę.

qtlet
31-08-2011, 15:39
ok, dziękuje za pomoc.

jest mi głupio ,że was fatygowałem do takiego błahego błędu.
dziękuje za żelazną cierpliwość.
z mojej strony mogę zapewnić ,że zanim coś napiszę bardziej się przygotuję.

jeszcze raz dziękuje i przepraszam:)