Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Problem z wyświetleniem danych z mysql
spider007
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.11.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif) . Dopiero zaczynam.
Powód edycji: [piotrooo89]: wstawiam tagi
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Bartłomiej Skwar...
post
Post #2





Grupa: Zarejestrowani
Postów: 17
Pomógł: 9
Dołączył: 2.01.2012

Ostrzeżenie: (0%)
-----


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.  


Ten post edytował Bartłomiej Skwara 2.01.2012, 15:06:43
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 18:27