Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]php5, jak powinna wyglądać poprawnie funkcja
neuroine
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 3
Dołączył: 6.05.2009

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Axexis
post
Post #2





Grupa: Zarejestrowani
Postów: 98
Pomógł: 14
Dołączył: 13.01.2008
Skąd: Birmingham

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


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 (IMG:style_emoticons/default/smile.gif) )
Go to the top of the page
+Quote Post
neuroine
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 3
Dołączył: 6.05.2009

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


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 ?

Ten post edytował neuroine 6.12.2009, 23:40:13
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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;

(IMG:style_emoticons/default/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

Ten post edytował darko 6.12.2009, 21:37:09
Go to the top of the page
+Quote Post
neuroine
post
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 3
Dołączył: 6.05.2009

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


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.
Go to the top of the page
+Quote Post
darko
post
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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 (IMG:style_emoticons/default/smile.gif)
$a= "<h1>".$row["title"]."</h1>";

Ten post edytował darko 10.12.2009, 23:37:08
Go to the top of the page
+Quote Post

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: 24.08.2025 - 20:33