Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]php5
Forum PHP.pl > Forum > Przedszkole
neuroine
Witam

Mam taką funkcję i chciałbym zapisać ją bardziej profesjonalnie. Do tego chciałem zmienić połącznie z bazą na mysqli, ale pojawia się problem z mysql_fetch_array.
Jak zastąpić echo jakimś sensownym responsem ?

  1. function display($section) {
  2. global $section;
  3.  
  4. $query = "SELECT * FROM `$section` ORDER BY date DESC";
  5. $result = mysql_query($query);
  6.  
  7. while ($row = mysql_fetch_array($result)) {
  8.  
  9. $title = $row['title'];
  10. $date = $row['date'];
  11. $content = $row['content'];
  12. $autor = $row['autor'];
  13.  
  14. echo('<h1>'.$title.'</h1><p class="right">'.$date.'</p>');
  15. echo('<p class="justify">'.$content.'</p>');
  16. echo('<p>Add by: <b>'.$autor.'</b></p>');
  17. echo('<hr />');
  18. };


Będę wdzięczny za rady i uwagi.
Axexis
A. Co to znaczy bardziej 'profesjonalnie'?
B. Wyniki można zapisać np. w tablicy lub dopisać do zmiennej ($zmienna .= $date)
C. Jeżeli chcesz przejść na mysqli to mam nadzieje pamietasz o tym, że nie korzystasz z mysql_fetch_array tylko mysqli_fetch_array?

ps. korzystaj z mysql_fetch_assoc (przyjemniejsze smile.gif)
neuroine
onkel nie masz na myśli or die (mysql_error()); na końcu SELECTa ?

a. Zależy mi na tym, żeby funkcja była obiektowa.
b. Rozumiem, że można wrzucić do zmiennej, ale nie bardzo wiem w jaki sposób dołączyć do wyniku tagi HTML.
c. O tym, że powinno być mysqli_fetch_array to wiem, ale to nie wszystko

znalazłem coś takiego
  1. $query = "SELECT title, date, content, autor FROM music ORDER by date DESC";
  2. $result = $mysqli->query($query);
  3. while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
  4. printf ("%s (%s)\n", $row["title"], $row["date"], $row["content"], $row["autor"]); };


Niestety zwraca mi tylko title i date.

Jakieś inne korzyści mogą wynikać z używania mysql_fetch_assoc ?
darko
Cytat
a. Zależy mi na tym, żeby funkcja była obiektowa.


1. Zrób najpierw klasę, a później przepisz w/w f-cję jako metodę stworzonej klasy

2. Jaki sens ma to:

function display($section) {
global $section;

questionmark.gif

Albo przekazujesz parametr do funkcji, albo czynisz zmienną $section globalną w ciele funkcji, ale nie jedno i drugie, bo to nie ma sensu. W tym momencie w funkcji nadpisujesz przekazany parametr wartością zmiennej $section z zewnątrz funkcji (sic!), a pewnie nie o to chodziło.

// edit

Jednak lepiej będzie zwracać z funkcji określone wartości niż bezpośrednio wypluwać za pomocą echo czy print
neuroine
darko Masz racje global $section; nie powinno się tam pojawić .


zmieniłem funkcję i teraz wygląda tak.
  1.  
  2. function display($section) {
  3. $mysqli = new mysqli("localhost", "root", "root", "baza");
  4.  
  5. $query = "SELECT title, date, content, autor FROM music ORDER by date DESC";
  6. $result = $mysqli->query($query);
  7.  
  8. while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
  9.  
  10. $a= $row["title"];
  11. $b= $row["date"];
  12. $c= $row["content"];
  13. $d= $row["autor"];
  14.  
  15. echo ($a);
  16. echo ($b);
  17. echo ($c);
  18. echo ($d); };
  19.  
  20. }



1. Jak mogę dodać komunikat błędu w przypadku gdy w bazie nie ma żadnego rekordu?

2. Jak dodać do przykładowo $a <h1>, aby funkcja miała nadal charakter obiektowy. Czytałem, że nie poleca się umieszczanie tagów HTML wewnątrz funkcji.
darko
1. np.
$q = "SELECT count(autor) FROM music";
$count = $mysqli->query($q);
// fetch row dla mysqli oraz ustaw fetch type na fetch_num żeby wyciągać po indeksie (?) żeby poniższe zadziałało (nie wiem jak to dokładnie jest w mysqli, sprawdź, korzystam z PDO)
if($count[0] == 0) {
die "w bazie nie ma rekordów";
}

2. ee tam smile.gif
$a= "<h1>".$row["title"]."</h1>";
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.