Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z wyświetlaniem wyników
Forum PHP.pl > Forum > Przedszkole
Marek89
Witam

Napisałem wczoraj mały skrypt, który ma pobierać i wyświetlać wiersze z mojej bazy.W bazie mam 4 kolumny : id, nik, data i komentarz. wierszy ok 15. Chcę wyświetlić po kolei każdy wiersz w osobnej lini. Niestety nie wychodzi mi to sad.gif Szukałem odpowiedzi, ale niestety nie udało mi się nić poprawić. Poniżej daję kod z którym mam problem. Z góry dzięki za pomoc !

Marek

  1. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->
  2. <?php
  3. @ $baza = new mysqli('localhost','root','haslo','proba');
  4. if (mysqli_connect_errno())
  5. {
  6. echo 'Połączenie z bazą nie powiodło się, spróbuj później';
  7. }
  8. $zapytanie="select * from kom";
  9. $wynik=$baza->query($zapytanie);
  10. $ile=$wynik->num_rows;
  11. for($i=0; $i<$ile; $i++)
  12. {
  13. $wiersz=$wynik->fetch_assoc();
  14. echo $wiersz['nik'];
  15. echo $wiersz['data'];
  16. echo $wiersz['komentarz'];
  17. echo '<br />';
  18. }
  19.  
  20. $wynik->free();
  21. $baza->close(); ?><!--c2--></div><!--ec2-->
Kshyhoo
Pisane z palca:
  1. $zapytanie = "SELECT * FROM tabela";
  2. $wynik = mysql_query($zapytanie);
  3.  
  4. while ($dane = mysql_fetch_array($wynik)) {
  5. ".$dane['id']." | ".$dane['nik']." | ".$dane['data']." | ".$dane['komentarz']."
  6. }

Możesz też wrzucić dane w tabele i pokolorować wiersze (zakładam, że znasz nieco css i dorobisz sobie klasy):
  1. echo "<table class='t_table'>
  2. <tr>
  3. <td class='t_th' width='20px'> ID </td>
  4. <td class='t_th' width='300px'> Nick </td>
  5. <td class='t_th' width='300px'> Data </td>
  6. <td class='t_th' width='500px'> Komentarz </td>
  7. </tr>";
  8. while ($wiersz = mysql_fetch_array($wynik)) {
  9. $bgl = ($kl++%2 == 0)?"t_tdjl":"t_tdcl";
  10. $bgc = ($kc++%2 == 0)?"t_tdjc":"t_tdcc";
  11. echo "<tr>
  12. <td class='$bgl'> ".$wiersz["id"]."</td>
  13. <td class='$bgl'> ".$wiersz["nik"]." </td>
  14. <td class='$bgl'> ".$wiersz["data"]." </td>
  15. <td class='$bgl'> ".$wiersz["komentarz"]." </td>
  16. </tr>";
  17. }
  18. echo "</table>";
Brick
  1. $zapytanie="select * from kom";
  2. $wynik=$baza->query($zapytanie);
  3.  
  4. while ($wiersz = mysql_fetch_array($wynik)
  5. {
  6. echo "$wiersz[nik] | $wiersz[data] | $wiersz[komentarz]<br />";
  7. }

Oczywiście można to wszystko wstawić do tabelki. Ale powyższy przykład to najprostsze wyświetlenie danych w jednym wierszu.
Marek89
Niestety nie idzie sad.gif

  1. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1--><?php
  2. @ $baza = new mysqli('localhost','root','haslo','proba');
  3. if (mysqli_connect_errno())
  4. {
  5. echo 'Połączenie z bazą nie powiodło się, spróbuj później';
  6. }
  7. $zapytanie="select * from kom";
  8. $wynik = mysql_query($zapytanie);
  9. while ($dane = mysql_fetch_array($wynik))
  10. {
  11. echo ".$dane['id']." | ".$dane['nik']." | ".$dane['data']." | ".$dane['komentarz'].";
  12. echo "<br />";
  13. }
  14. $wynik->free();
  15. $baza->close();
  16. ?><!--c2--></div><!--ec2-->


dostaję komunikat : Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\serwer\strony\testowa.php on line 62

LInia 62

Kod
echo ".$dane['id']." | ".$dane['nik']." | ".$dane['data']." | ".$dane['komentarz'].";




mhw
Może
  1. echo $dane['id']." | ".$dane['nik']." | ".$dane['data']." | ".$dane['komentarz'];
?
Marek89
  1. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1--><?php
  2. @ $baza = new mysqli('localhost','root','robin','proba');
  3. if (mysqli_connect_errno())
  4. {
  5. echo 'Połączenie z bazą nie powiodło się, spróbuj później';
  6. }
  7. $zapytanie="select * from kom";
  8. $wynik = mysql_query($zapytanie);
  9. while ($dane = mysql_fetch_array($wynik))
  10. {
  11. echo $dane['id']." | ".$dane['nik']." | ".$dane['data']." | ".$dane['komentarz'];
  12. echo "<br />";
  13. }
  14. $wynik->free();
  15. $baza->close();
  16. ?><!--c2--></div><!--ec2-->


skrypt się nie uruchamia sad.gif
Jak otwieram przez Mozille to otwierają mi się puste okienka i tak bez końca (Ctrl+alt+del) jedynym rozwiązaniem sad.gif

Nie maM pojęcia co mam źle sad.gif
bastard13
Spróbuj zamiast tego:
  1. $wynik = mysql_query($zapytanie);
  2. while ($dane = mysql_fetch_array($wynik))


Napisać:
  1. $wynik=$baza->query($zapytanie);
  2. while($dane=wynik->fetch_assoc())
  3. { ...

Na początku tworzysz obiekt klasy mysqli, więc to na tym obiekcie (u ciebie $baza) musisz działać.
Kshyhoo
Podaj strukturę tej tabeli w bazie...
thek
A ja radzę spojrzeć jakich metod używacie,a jak się łączycie winksmiley.jpg Mysql i Mysqli to coś ciut innego i każda z nich ma swoje funkcje więc się dostosujcie do tego i używajcie właściwych, a wszystko będzie cacy biggrin.gif
Kshyhoo
Święta racja... czas chyba odespać Sylwestra ;p
celbarowicz
  1. <?php
  2. $global_dbh=mysql_connect('localhost','root','');
  3. mysql_select_db('selduze3',$global_dbh);
  4.  
  5. function display_db_table($tablename, $connection)
  6. {
  7. $query_string="select * from $tablename";
  8. $result_id = mysql_query( $query_string, $connection);
  9. $column_count=mysql_num_fields($result_id);
  10.  
  11. print("<table border=1 >\n");
  12. while ($row=mysql_fetch_row($result_id))
  13. {
  14. print("<tr align=left valign=top>");
  15. for ($column_num=0;
  16. $column_num<$column_count;
  17. $column_num++)
  18. print("<td>$row[$column_num]</td>\n");
  19. print("</tr>\n");
  20. }
  21.  
  22. print("</table>\n");
  23.  
  24. }
  25.  
  26. ?>
  27.  
  28. <html><head><title> celbarowicz</title></head>
  29. <body>
  30.  
  31. <?php display_db_table("tabela_3",$global_dbh); ?>
  32.  
  33.  
  34. </body></html>
  35.  
  36.  
  37.  


w odpowiednch miejscach wpisz hasło itp.... podłącz swoją bazę i tabelę. na podstawie php4




Marek89
Cytat
  1. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->
  2. <?php
  3. @ $baza = new mysqli('localhost','root','haslo','proba');
  4. if (mysqli_connect_errno())
  5. {
  6. echo 'Połączenie z bazą nie powiodło się, spróbuj później';
  7. }
  8. $zapytanie="select * from kom";
  9. $wynik=$baza->query($zapytanie);
  10. $ile=$wynik->num_rows;
  11. // do tego momentu chyba wszystko jest ok. Łączy się, zwraca mi poprawnie ilość wierszy.
  12. for($i=0; $i<$ile; $i++)
  13. {
  14. $wiersz=$wynik->fetch_assoc();
  15. echo $wiersz['nik'];
  16. echo $wiersz['data'];
  17. echo $wiersz['komentarz'];
  18. echo '<br />';
  19. }
  20.  
  21. $wynik->free();
  22. $baza->close(); ?><!--c2--></div><!--ec2-->


Wydaje mi się że problem powstaje od momentu użycia pętli for... Do tego momentu wszystko raczej działa poprawnie.
Jeżeli w zapytaniu dam
  1. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1--><?
  2. $zapytanie="select data from kom";
  3. ?><!--c2--></div><!--ec2-->

a w pętli for :
  1. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1--><?
  2. echo $wiersz['data'];
  3. ?><!--c2--></div><!--ec2-->

Wyświetla mi daty poprawnie...
Jak w zapytaniu dam * a w wyświetlaniu wszystkie kolumny wiersza to przeglądarka się wysypuje (otwietają się cały czas nowe okna)
Zależy mi, żeby ktoś powiedział mi co robię źle a nie dawał mi gotowy skrypt na to wyświetlanie.
Chcę to zrozumieć, by móc iść dalej smile.gif
Jakby ktoś miał jakieś pomysły to z góry dzięki exclamation.gif
athei
Kod masz poprawny, fakt że "brzydki". Zamiast fora możesz dać while.
Albo masz inną strukturę tabeli, albo inne pola, albo błąd masz w innej części skryptu, tak więc wytnij kawałek ten co wkleiłeś, daj do pustego pliku i sprawdź.

Zobacz też to:
  1. $mysqli = new mysqli('localhost','root','haslo','proba');
  2. if (mysqli_connect_errno())
  3. {
  4. exit ('Polaczenie z bazą nie powiodło się, spróbuj później'.mysqli_connect_error());
  5. }
  6.  
  7. $sql = "SELECT `nik`,`data`,`komentarz` FROM `kom`";
  8. if ($result = $mysqli->query($sql)) {
  9. if ($result->num_rows > 0) {
  10. echo 'Wierszy:',$result->num_rows,'<br />';
  11. while ($row = $result->fetch_assoc()) {
  12. echo $row['wydawnictwo'];
  13. echo $row['nazwa'];
  14. echo $row['kategoria_id'];
  15. echo '<br />';
  16. }
  17. } else {
  18. echo 'Brak wynikow.';
  19. }
  20. $result->close();
  21. } else {
  22. echo "ERROR: Blad zapytania: $sql. " . $mysqli->error;
  23. }
  24.  
  25. $mysqli->close();
Marek89
chyba rzeczywiście mam coś w tej bazie.

baza : proba

Tablice założyłem tak:

Kod
   create table kom
->(id int unsigned not null auto_increment primary key,
->nik char(50),
->data date not null,
->komentarz text);


Tak wygląda u mnie tabela kom
celbarowicz
marku89 czemu sam robisz sobie problemy, podesłałem Tobie skrypt ,który z bazy-tabeli mysql, odczytuje dane. jest sprawdzony i działa Ok. mam pytanie, czy sprawdziłeś go? jeśli działa , to baza jest OK.
Marek89
Jeżeli w zapytaniu dam
select `id` from `kom` bez problemu pobiera i wyświetla mi to id
Jak napiszę
select `id`,`data` from `kom`
to niestety już sobie nie radzi.
Zastanawia mnie tylko jedna rzecz. Podczas uruchomienia skryptu wyskakuje mi "Wystąpił problem z aplikacją Apache HTTP Server."

W sygnaturze błędu dostaję informację:
szAppName:httpd.exe
szAppVer:2.2.14.0
szModName:php_mysqli.dll
szModVer:5.2.11.11
offset : 00002b5b

Może ktoś się orientuje co może być powodem takiego błędu ?


Kshyhoo
Może napisz, co chcesz osiągnąć, jakie dane chcesz wyświetlić? Mnie się wydaje, że powinno być:
  1. SELECT id, DATA FROM kom

czyli bez ciapków winksmiley.jpg
Marek89
Ok daję jeszcze raz cały kod. Ma on wyświetlić dane (nik, komentarz i date) w określonym miejscu.

  1. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1--><?php
  2. $db = new mysqli('localhost','root','robin','proba');
  3. if(mysqli_connect_errno())
  4. {
  5. exit('Połączenie z bazą nie powiodło się' .mysqli_connnect_errno());
  6. }
  7. $zapytanie="select nik, komentarz, data FROM kom";
  8. if($wynik=$db->query($zapytanie))
  9. {
  10. if($wynik->num_rows>0)
  11. {
  12. while($wiersz=$wynik->fetch_assoc())
  13. {
  14. echo $wiersz['nik'];
  15. echo $wiersz['komentarz'];
  16. echo $wiersz['data'];
  17. echo '<br />';
  18. }
  19. }
  20. else
  21. {
  22. echo 'Brak komentarzy';
  23. }
  24. $wynik->close();
  25. }
  26. else
  27. {  
  28. echo 'Błąd zapytania :' .$db->error;
  29. $db->close();
  30. }
  31. ?><!--c2--></div><!--ec2-->


Moja baza danych "proba" zawiera 2 tabele 1 to ocena druga to kom

Tabelę kom założyłem w ten sposób:

Kod

  create table kom
->(id int unsigned not null auto_increment primary key,
->nik char(50),
->data date not null,
->komentarz text);


Może sypie się mój server ?

Ps. tak jak wspomniałem wcześniej potrafię wyświetlić jedną kolumnę (obojętnie jaką) z mojej bazy. Problem powstaje jak chcę ich wyświetlić więcej.
Kshyhoo
Zobacz to w nowym skrypcie:
  1. $db = new mysqli('localhost','root','robin','proba');
  2. echo '<pre>';
  3. print_r($db->query_select("SELECT * FROM kom"));

Marek89
Zobacz to w nowym skrypcie:

Cytat
  1.  
  2.  
  3. 1.
  4. $db = new mysqli('localhost','root','robin','proba');
  5. 2.
  6. echo '<pre>';
  7. 3.
  8. print_r($db->query_select("SELECT * FROM kom"));
  9.  



Call to undefined method mysqli::query_select()
Kshyhoo
  1. $db= new mysqli('localhost','root','robin','proba');
  2. if (mysqli_connect_errno() != 0){
  3. echo '<p>Wystąpił błąd połączenia: ' . mysqli_connect_error() . '</p>';
  4. }
  5. else {
  6. $wynik = $db-> query("SELECT nik, data, komentarz FROM kom");
  7. if ($wynik === false){
  8. echo '<p>Zapytanie nie zostało wykonane poprawnie!</p>';
  9. $db-> close();
  10. }
  11. else {
  12. echo '<p>Dane z bazy:</p>';
  13. while (($dane = $wynik -> fetch_assoc()) !== null){
  14. echo '<p>Nick: ' . $dane['nik'] . '</p>';
  15. echo '<p>Data: ' . $dane['data'] . '</p>';
  16. echo '<p>Komentarz: ' . $dane['komentarz'] . '</p>';
  17. echo '<hr />';
  18. }
  19. $wynik -> close(); // zwolnienie pamięci
  20. $db-> close();
  21. }
  22. }

Teraz?
Marek89
Cytat(Kshyhoo @ 9.01.2010, 18:22:11 ) *
  1. $db= new mysqli('localhost','root','robin','proba');
  2. if (mysqli_connect_errno() != 0){
  3. echo '<p>Wystąpił błąd połączenia: ' . mysqli_connect_error() . '</p>';
  4. }
  5. else {
  6. $wynik = $db-> query("SELECT nik, data, komentarz FROM kom");
  7. if ($wynik === false){
  8. echo '<p>Zapytanie nie zostało wykonane poprawnie!</p>';
  9. $db-> close();
  10. }
  11. else {
  12. echo '<p>Dane z bazy:</p>';
  13. while (($dane = $wynik -> fetch_assoc()) !== null){
  14. echo '<p>Nick: ' . $dane['nik'] . '</p>';
  15. echo '<p>Data: ' . $dane['data'] . '</p>';
  16. echo '<p>Komentarz: ' . $dane['komentarz'] . '</p>';
  17. echo '<hr />';
  18. }
  19. $wynik -> close(); // zwolnienie pamięci
  20. $db-> close();
  21. }
  22. }

Teraz?



Dokładnie tak samo się zachowuje jak przy tym, którego pisałem kilka postów wyżej... Może faktycznie coś "sprzętowo" się sypie?

Już nie mam pomysłu... No nic będę dumał dalej. przynajmniej czegoś się nauczę nowego smile.gif

Dziękuję za pomoc exclamation.gif
Ps. jakby jeszcze komuś przyszło coś do głowy to byłbym wdzięczny za info exclamation.gif
Kshyhoo
A Ty masz wogóle zainstalowane to rozszerzenie mysqli questionmark.gif
Marek89
Mam zainstalowane. Jak pisałem wcześniej bez problemu wyświetlam pojedyncze kolumny. Wszystkie linie dotyczące mysqli mam odhaczone w php.ini więc chyba będzie to inna przyczyna. Chyba podejmę się ponownej instalacji apacha. Zobaczymy może coś pomoże winksmiley.jpg Pozdrawiam
Kshyhoo
Spróbuj pobrać tylko dwie kolumny, czyli:
  1. $wynik = $db-> query("SELECT nik, komentarz FROM kom");
Marek89
Niestety tego też już próbowałem. Wyświetla mi tylko jedną kolumne
Kshyhoo
A tak:
  1. $wynik = $db-> query("SELECT nik, data, komentarz FROM kom WHERE id=1");

questionmark.gif
bastard13
Spróbuj wpisać:
  1. SELECT * FROM kom;

w konsoli MySQL i powiedz czy ci coś wyświetla.
Jeżeli tam będzie wszystko w porządku to na pewno będzie coś z kodem strony.
Gdyby tam też ci nie chciało zadziałać na twojej tabeli to spróbuj czy zadziała na jakiejś innej.
Marek89
Cytat(bastard13 @ 9.01.2010, 20:29:21 ) *
Spróbuj wpisać:
  1. SELECT * FROM kom;

w konsoli MySQL i powiedz czy ci coś wyświetla.
Jeżeli tam będzie wszystko w porządku to na pewno będzie coś z kodem strony.
Gdyby tam też ci nie chciało zadziałać na twojej tabeli to spróbuj czy zadziała na jakiejś innej.



Działa bez problemu. przed chwilą sprawdziłem.
Kshyhoo
Sprawdź, jak zachowuje się zapytanie w mysql...
bastard13
To stwórz sobie plik test.php o tresci:
  1. <?php
  2. $db= new mysqli('localhost','root','robin','proba');
  3. if(!db) echo 'blad';
  4. else
  5. {
  6. $zapytanie='SELECT * FROM kom;';
  7. $wynik = $db->query($zapytanie);
  8. while ($dane = $wynik->fetch_assoc())
  9. { foreach($dane as $klucz => $wartosc)
  10. echo $klucz.' -> '.$wartosc.'<br />';
  11. }
  12. }
  13. ?>


i napisz czy działa.
Powinno wyświetlić wszystkie wartości dla każdej z kolumn.
Marek89
Sprawdziły się moje przypuszczenia. Problem leżał po stronie servera. Zainstalowałem wszystko od nowa i teraz już jest wszystko ok smile.gif
Dziękuję za pomoc!!
Pozdrawiam
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.