Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z wyświetleniem danych z mysql
Forum PHP.pl > Forum > Przedszkole
spider007
Witam wszystkich.

Otórz uczę się php i z pomocą pewnej książki zaczynam rozumieć język który mnie kiedyś irytował.

Jednak w trakcie pisania kodu napotkałem na pewien problem. Może zacznę od tego że w PhpMyAdmin utworzyłem baze o nazwie "szkola" a do tej bazy dodałem tabelę o nazwie "osoby". Za pomocą php łączę się z bazą danych, jednak gdy chce wyświetlić dane które wprowadziłem w tabeli wyskakuje mi błąd.

Mój kod pliku dane-osobowe.php

Cytat
<?php
$baza = mysql_connect
('localhost',
'admin',
'admin123');

if ($baza === false) die('nie mozna nawiazac polaczenia z baza exclamation.gif ' );
mysql_query('SET NAMES "utf8"');
$ok = mysql_select_db('szkola');{
$status = 'baza danych działa <b>poprawnie</b>!!!';
}

if ($ok === false) die('nie mozna bylo wybrac bazy danych exclamation.gif');
echo $status;
?>



<?php
$zapytanie = 'SELECT imie, nazwisko, telefon FROM osoby';
?>

<?php
$odpowiedz = mysql_query($zapytanie);
if ($odpowiedz === false) die('Nie mozna odebrac danych');
mysql_free_result($odpowiedz);
?>
<table border="1">

<tr>
<th>Lp.</th>
<th>Imię.</th>
<th>Nazwisko</th>
<th>Nr telefonu</th>
</tr>
<tbody>
<?php

while ($rekord = mysql_fetch_assoc($odpowiedz)){
$lp = 0;
$lp = $lp + 1;
$imie = $rekord['imie'];
$nazwisko = $rekord['nazwisko'];
$nrtelefonu = $rekord['telefon'];
echo ' <tr>'."\r\n";
echo ' <td>'.$lp.'</td>'."\r\n";
echo ' <td>'.$imie.'</td>'."\r\n";
echo ' <td>'.$nazwisko.'</td>'."\r\n";
echo ' <td>'.$nrtelefonu.'</td>'."\r\n";
echo ' </tr>'."\r\n";

}
?>
</tbody>
</table>


<?php
mysql_close($baza);

?>



Po uruchomieniu tego pliku w przeglądarce wyswietla mi sie taki komunikat błędu.

Cytat
baza danych działa poprawnie!!! Lp. Imię. Nazwisko Nr telefonu

( ! ) Warning: mysql_fetch_assoc(): 5 is not a valid MySQL result resource in home\www\baza\dane-osobowe.php on line 25
Call Stack
# Time Memory Function Location
1 0.0008 677600 {main}( ) ..\dane-osobowe.php:0
2 0.0059 685456 mysql_fetch_assoc ( ) ..\dane-osobowe.php:25


Co ciekawe sprawdziłem kod przy pomoc mysql_error(); i niestety wywala mi ten błąd. Zmieniałem nazwe bazdy danych ale to nic nie pomogło.
Wiem że to dla was strasznie prosta sprawa dlatego sie do Was z tym zgłaszam. I mam nadzieje że bedziecie wyrozumiali smile.gif. Dopiero zaczynam.
bartek12421
  1. mysql_free_result($odpowiedz);

Zwolnij pamięć rekordu po przetworzeniu danych w pętli while, nie przed.
basstone
Skonstruuj sobie zapytanie w taki sposób:

  1. $zapytanie = "SELECT `imie`, `telefon`, `osoby` FROM `osoby`";
  2. $idzapytania = mysql_query($zapytanie);


i wyniki przejrzyj za pomocą

  1. $lp = 1;
  2.  
  3. while($wynik = mysql_fetch_row($idzapytania)) {
  4. echo $lp; // LP :)
  5. echo $wynik[0]; // Imię
  6. echo $wynik[1]; // Telefon
  7. echo $wynik[2]; // Osoby
  8. $lp++;
  9. }
Niktoś
Po co takie porównania ===(sprawdzanie typów),nie wystarczyłoby ==,czyli(samo sprawdzanie wartości),które jest szybsze.Kiedyś taki nawyk może wyjść Tobie,na gorsze kiedy będziesz się bawił więcej obiektówką.
==będzie wykonywało się szybciej.
piotrooo89
proszę zastosować się do: Temat: Tematyka i zasady panujace na forum Przedszkole, w przeciwnym razie zamknę.
nospor
Cytat
Kiedyś taki nawyk może wyjść Tobie,na gorsze kiedy będziesz się bawił więcej obiektówką.
Wyjść to mu może na złe Twoja rada, gdy np bedzie robił
0==false
zamiast
0===false

A co ma === do obiektówki?

zamiast nic nie mowiącego:
$status = 'baza danych działa <b>poprawnie</b>!!!';
masz dać:
$status = mysql_error();
spider007
Oki dokonałem drobnych zmian i już wyświetal mi się tabela bez błędów ale nie ma zapełnionych danyc sad.gif.

oto screen :



A oto plik po zmianach.

  1. <?php
  2. ('localhost',
  3. 'admin',
  4. 'admin123');
  5.  
  6. if ($baza === false) die('nie mozna nawiazac polaczenia z baza ' );
  7. mysql_query('SET NAMES "utf8"');
  8. $ok = mysql_select_db('szkola');{
  9.  
  10. }
  11.  
  12. if ($ok === false) die('nie mozna bylo wybrac bazy danych ');
  13.  
  14. ?>
  15.  
  16.  
  17.  
  18. <?php
  19. $zapytanie = 'SELECT imie, nazwisko, telefon FROM osoby';
  20. ?>
  21.  
  22. <?php
  23. $odpowiedz = mysql_query($zapytanie);
  24. if ($odpowiedz === false) die('Nie mozna odebrac danych');
  25.  
  26. ?>
  27. <table border="1">
  28.  
  29. <tr>
  30. <th>Lp.</th>
  31. <th>Imię.</th>
  32. <th>Nazwisko</th>
  33. <th>Nr telefonu</th>
  34. </tr>
  35. <tbody>
  36. <?php
  37.  
  38. while ($rekord = mysql_fetch_assoc($odpowiedz)){
  39. $lp = 0;
  40. $lp = $lp + 1;
  41. $imie = $rekord['imie'];
  42. $nazwisko = $rekord['nazwisko'];
  43. $nrtelefonu = $rekord['telefon'];
  44. echo ' <tr>'."\r\n";
  45. echo ' <td>'.$lp.'</td>'."\r\n";
  46. echo ' <td>'.$imie.'</td>'."\r\n";
  47. echo ' <td>'.$nazwisko.'</td>'."\r\n";
  48. echo ' <td>'.$nrtelefonu.'</td>'."\r\n";
  49. echo ' </tr>'."\r\n";
  50. mysql_free_result($odpowiedz);
  51. }
  52. ?>
  53. </tbody>
  54. </table>
  55.  
  56.  
  57. <?php
  58. mysql_close($baza);
  59.  
  60. ?>
  61.  
  62.  



Czy mogli byście zmodyfikować kod i wrzucić go tutaj?

A co do innych modyfikacje to kodu które poradziłeś mi 'basstone' wyskakuje mi jeden błąd :
Parse error: syntax error, unexpected $end in home\www\baza\dane-osobowe.php on line 38

Przepraszam za moje byki w orto.

Dostałem zapytanie od paru osób smile.gif dlatego odpowiedź umieszczam tutaj.

Korzystam z książki

Tworzenie serwisów WWW. Pierwsza pomoc
Autorzy: Maria Sokół, Radosław Sokół
Stron: 112

Książka w bardzo fajny sposób daje informacje związane z php. Te kod właśnie jest z książki. Nie wiem dlaczego on nie działa.

Głównie robie tak że jak pisze jakiś kod i on działa pisze później w ramach nauki kolejnych kilka zmodyfikowanych żeby zobaczyć czy dobrze rozumiem temat. Jeśli kod napisany przez mnie nie działa analizuje go i poprawiam. Jak narazie moje zmodyfikowane programiki w poprzednich rozdziałach działają ale z tym nie moge dać sobie rady sad.gif.

Pozdrawiam
Bartłomiej Skwara
Zwróć uwagę na to, że:
  1. while ($rekord = mysql_fetch_assoc($odpowiedz)){
  2. $lp = 0;
  3. $lp = $lp + 1;
  4. $imie = $rekord['imie'];
  5. $nazwisko = $rekord['nazwisko'];
  6. $nrtelefonu = $rekord['telefon'];
  7. echo ' <tr>'."\r\n";
  8. echo ' <td>'.$lp.'</td>'."\r\n";
  9. echo ' <td>'.$imie.'</td>'."\r\n";
  10. echo ' <td>'.$nazwisko.'</td>'."\r\n";
  11. echo ' <td>'.$nrtelefonu.'</td>'."\r\n";
  12. echo ' </tr>'."\r\n";
  13. mysql_free_result($odpowiedz);
  14. }

Po pierwszym przejściu pętli zwalniasz odpowiedź, przez co nie zawiera ona kolejnych rekordów.
Jeśli koniecznie chcesz użyć mysql_free_result, to użyj tego poza pętlą while, a nie wewnątrz tej pętli.

Dodatkowo, napraw sobie licznik - bo teraz zawsze wyrzuca Ci jedynkę.
  1. $lp = 1;

możesz umieścić przed pętlą while, a przed jej zakończeniem wrzucić
  1. $lp++;


Wspomniano tutaj także o porównywaniu typów przy sprawdzaniu połączenia z bazą. W związku z tym, że zmiennie mają wartość true lub false - można to zrobić w następujący sposób:
  1. if($baza) { echo "Baza działa"; }
  2. if(!$baza) {echo "Baza leży"; }


Dodatkowo używanie mysql_close() nie jest zwykle konieczne, ponieważ nie stałe linki są automatycznie zamykane na końcu wykonywania skryptu.

Proponuję Ci zerknąć na poniższy kod:
  1. <?php
  2.  
  3. $baza = mysql_connect('localhost', 'login', 'haslo');
  4. if (!$baza) die('nie mozna nawiazac polaczenia z baza');
  5.  
  6. mysql_query('SET NAMES "utf8"');
  7.  
  8. $ok = mysql_select_db('szkola');
  9. if (!$ok) die('nie mozna bylo wybrac bazy danych ');
  10.  
  11. $zapytanie = 'SELECT imie, nazwisko, telefon FROM osoby';
  12.  
  13. $odpowiedz = mysql_query($zapytanie);
  14. if (!$odpowiedz) die('Nie mozna odebrac danych');
  15.  
  16. ?>
  17. <table border="1">
  18. <tr>
  19. <th>Lp.</th>
  20. <th>Imię.</th>
  21. <th>Nazwisko</th>
  22. <th>Nr telefonu</th>
  23. </tr>
  24. <tbody>
  25. <?php
  26. $lp = 1;
  27. while ($rekord = mysql_fetch_assoc($odpowiedz)){
  28. $imie = $rekord['imie'];
  29. $nazwisko = $rekord['nazwisko'];
  30. $nrtelefonu = $rekord['telefon'];
  31. echo ' <tr>'."\r\n";
  32. echo ' <td>'.$lp.'</td>'."\r\n";
  33. echo ' <td>'.$imie.'</td>'."\r\n";
  34. echo ' <td>'.$nazwisko.'</td>'."\r\n";
  35. echo ' <td>'.$nrtelefonu.'</td>'."\r\n";
  36. echo ' </tr>'."\r\n";
  37. $lp++;
  38. }
  39. mysql_free_result($odpowiedz);
  40. ?>
  41. </tbody>
  42. </table>
  43.  
spider007
Temat zamkniety. smile.gif

Dziękuje Bartku za pomoc teraz to śmiga smile.gif. Ja spróbuje dodać pewne zmiany w swoim kodzie i zobacze czy wyświetli inne dane.

Przeanalizuje kod i będę tak jak juz poprzednio pisałem tworzył swoje modyfikacje.

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.